From c6d5c01c617137f18536426a11d2e14594942488 Mon Sep 17 00:00:00 2001 From: Heidesommer Date: Sat, 23 May 2026 20:45:31 -0400 Subject: [PATCH] More rel bugs --- .../00_adventurer_names.txt | 6 +- .../00_divinity_custom_loc.txt | 1123 +- .../00_ruler_transition_loc.txt | 45 +- .../00_major_decisions_east_europe.txt | 2495 +- common/decisions/80_major_decisions_roman.txt | 2 +- .../dlc_decisions/tgp/tgp_japan_decisions.txt | 1880 ++ .../religion/religion_types/00_buddhism.txt | 132 +- .../religion_types/00_confucianism.txt | 196 + .../religion/religion_types/00_hinduism.txt | 307 + common/religion/religion_types/00_islam.txt | 674 +- common/religion/religion_types/00_jainism.txt | 247 + .../religion/religion_types/00_shintoism.txt | 241 + common/religion/religion_types/00_taoism.txt | 257 + common/religion/religion_types/00_yazidi.txt | 257 + .../roman_restoration_events.txt | 8 +- events/dlc/ach/ach_maintenance_events.txt | 720 + events/dlc/bp1/bp1_filippa_yearly_events.txt | 4763 ++++ events/dlc/bp1/bp1_yearly_oltner.txt | 2305 ++ .../bp2_adult_education_activity_events.txt | 3594 +++ .../bp2/bp2_character_interaction_events.txt | 514 + .../dlc/bp2/bp2_child_of_destiny_events.txt | 1891 ++ events/dlc/bp2/bp2_decision_events.txt | 831 + events/dlc/bp2/bp2_hostage_system.txt | 2266 ++ events/dlc/bp2/bp2_yearly_1_events.txt | 6953 +++++ events/dlc/bp2/bp2_yearly_2.txt | 4472 +++ events/dlc/bp2/bp2_yearly_3.txt | 538 + events/dlc/bp2/bp2_yearly_4.txt | 2069 ++ events/dlc/bp2/bp2_yearly_5.txt | 4143 +++ events/dlc/bp2/bp2_yearly_7.txt | 6050 ++++ events/dlc/bp2/bp2_yearly_events_6.txt | 15018 ++++++++++ events/dlc/bp2/bp2_yearly_extra.txt | 206 + .../story_cycle_pet_rock_events.txt | 1066 + events/dlc/bp3/bp3_mapmaking.txt | 2793 ++ events/dlc/bp3/bp3_roaming_events.txt | 2828 ++ events/dlc/bp3/bp3_survey_events.txt | 4487 +++ events/dlc/ce1/epidemic_events_2.txt | 951 + events/dlc/ce1/legend_events.txt | 880 + .../dlc/ce1/legend_spread_events_veronica.txt | 3067 ++ events/dlc/ce1/legitimacy_events.txt | 32 + events/dlc/ce1/physician_epidemic_events.txt | 1481 + .../ep1/ep1_character_interaction_events.txt | 719 + events/dlc/ep1/ep1_court_position_events.txt | 552 + events/dlc/ep1/ep1_flavor_events.txt | 6005 ++++ events/dlc/ep2/ep2_accolade_events.txt | 1197 + .../ep2_bloody_wedding_events.txt | 1857 ++ .../ep2/wedding_events/ep2_wedding_events.txt | 23480 +++++++++++++++ events/dlc/ep3/ep3_contract_events.txt | 10220 +++++++ events/dlc/ep3/ep3_emperor_yearly_8.txt | 2212 ++ events/dlc/ep3/ep3_laamp_decision_events.txt | 22488 +++++++++++++++ events/dlc/ep3/ep3_laamp_events.txt | 9084 ++++++ events/dlc/ep3/ep3_laamp_events_8.txt | 3986 +++ events/dlc/ep3/ep3_laamp_flavor_oltner.txt | 329 + .../dlc/ep3/ep3_laamp_flavour_ewan_events.txt | 23555 ++++++++++++++++ .../dlc/ep3/ep3_roman_restoration_events.txt | 533 + ...ory_cycle_harrying_of_the_north_events.txt | 4666 +++ events/dlc/ep3/ep3_wedding_events.txt | 2616 ++ events/dlc/fp1/fp1_jomsvikings_events.txt | 2222 ++ events/dlc/fp1/fp1_major_decision_events.txt | 1479 + .../fp1_scandinavian_adventurer_events.txt | 1113 + events/dlc/fp1/fp1_shieldmaiden_events.txt | 1426 + events/dlc/fp1/fp1_trade_events.txt | 2505 ++ events/dlc/fp1/fp1_yearly_events_oltner.txt | 2687 ++ events/dlc/fp2/fp2_el_cid_events.txt | 552 + events/dlc/fp2/fp2_lyonese_monk_events.txt | 4806 ++++ events/dlc/fp2/fp2_other_decision_events.txt | 2569 ++ events/dlc/fp3/fp3_misc_decision_events.txt | 2906 ++ .../dlc/fp3/fp3_religious_decision_events.txt | 1362 + events/dlc/fp3/fp3_scholarship_events.txt | 1918 ++ ...p3_story_cycle_seljuks_invasion_events.txt | 153 + .../fp3_story_cycle_zanj_rebellion_events.txt | 726 + events/dlc/fp3/fp3_struggle_events.txt | 1339 + .../dlc/fp3/fp3_tax_collector_events_ola.txt | 1416 + .../fp3/fp3_tax_collector_flavor_events.txt | 1063 + events/dlc/fp3/fp3_yearly_events_eren.txt | 3134 ++ events/dlc/fp3/fp3_yearly_events_hugo.txt | 286 + .../dlc/fp3/fp3_yearly_events_ola_batch_1.txt | 4034 +++ events/dlc/fp3/fp3_yearly_frontier_chains.txt | 824 + events/dlc/mpo/court_astrologer_events.txt | 307 + events/dlc/mpo/mpo_decisions_events.txt | 9326 ++++++ events/dlc/mpo/mpo_events_ariana.txt | 4825 ++++ events/dlc/mpo/mpo_events_tova.txt | 1870 ++ events/dlc/mpo/mpo_flavor_events_settled.txt | 456 + events/dlc/mpo/mpo_jamukha_flavor_events.txt | 450 + events/dlc/mpo/mpo_migration_events.txt | 4571 +++ events/dlc/mpo/mpo_nomad_events_1.txt | 8959 ++++++ events/dlc/mpo/mpo_nomads_flavour_events.txt | 5740 ++++ .../mpo_story_cycle_temujin_flavor_events.txt | 835 + .../dlc/tgp/tgp_ceremonial_liege_events.txt | 1305 + .../dlc/tgp/tgp_child_personality_events.txt | 8001 ++++++ events/dlc/tgp/tgp_china_career_events.txt | 495 + events/dlc/tgp/tgp_china_decision_events.txt | 698 + events/dlc/tgp/tgp_china_ministry_events.txt | 1346 + events/dlc/tgp/tgp_china_yearly_events.txt | 1162 + events/dlc/tgp/tgp_commission_book.txt | 1824 ++ .../tgp_dynastic_cycle_decision_events.txt | 121 + events/dlc/tgp/tgp_dynastic_cycle_events.txt | 2471 ++ .../tgp/tgp_dynastic_cycle_flavor_events.txt | 953 + .../dlc/tgp/tgp_east_asia_decision_events.txt | 966 + .../tgp/tgp_east_asia_interaction_events.txt | 1106 + events/dlc/tgp/tgp_faction_events.txt | 528 + .../dlc/tgp/tgp_genpei_character_events.txt | 1408 + .../dlc/tgp/tgp_governor_contract_events.txt | 3495 +++ .../tgp/tgp_governor_contract_events_2000.txt | 502 + events/dlc/tgp/tgp_house_blocs.txt | 176 + events/dlc/tgp/tgp_interaction_events.txt | 1185 + events/dlc/tgp/tgp_japan_career_events.txt | 125 + events/dlc/tgp/tgp_japan_decision_events.txt | 3317 +++ events/dlc/tgp/tgp_japan_general_events.txt | 1626 ++ events/dlc/tgp/tgp_japan_yearly_events.txt | 4388 +++ .../tgp/tgp_japan_yearly_events_ariana.txt | 5722 ++++ events/dlc/tgp/tgp_korea_decision_events.txt | 180 + events/dlc/tgp/tgp_maintenance_events.txt | 1 + events/dlc/tgp/tgp_mandala_capital_events.txt | 278 + .../dlc/tgp/tgp_mandala_devaraja_events.txt | 1716 ++ events/dlc/tgp/tgp_mandala_events.txt | 2724 ++ .../tgp/tgp_mandala_task_contract_events.txt | 8919 ++++++ .../dlc/tgp/tgp_mentoring_scheme_events.txt | 372 + events/dlc/tgp/tgp_movement_events.txt | 3699 +++ .../tgp_natural_disaster_contract_events.txt | 603 + .../tgp_natural_disaster_flavor_events.txt | 905 + events/dlc/tgp/tgp_silk_road_events.txt | 289 + events/dlc/tgp/tgp_tai_migration_events.txt | 1149 + events/dlc/tgp/tgp_travel_danger_events.txt | 320 + events/dlc/tgp/tgp_tribute_mission_events.txt | 4739 ++++ .../gui/succession_event_window_l_english.yml | 320 + 125 files changed, 337211 insertions(+), 3069 deletions(-) create mode 100644 common/decisions/dlc_decisions/tgp/tgp_japan_decisions.txt create mode 100644 common/religion/religion_types/00_confucianism.txt create mode 100644 common/religion/religion_types/00_hinduism.txt create mode 100644 common/religion/religion_types/00_jainism.txt create mode 100644 common/religion/religion_types/00_shintoism.txt create mode 100644 common/religion/religion_types/00_taoism.txt create mode 100644 common/religion/religion_types/00_yazidi.txt create mode 100644 events/dlc/ach/ach_maintenance_events.txt create mode 100644 events/dlc/bp1/bp1_filippa_yearly_events.txt create mode 100644 events/dlc/bp1/bp1_yearly_oltner.txt create mode 100644 events/dlc/bp2/bp2_adult_education_activity_events.txt create mode 100644 events/dlc/bp2/bp2_character_interaction_events.txt create mode 100644 events/dlc/bp2/bp2_child_of_destiny_events.txt create mode 100644 events/dlc/bp2/bp2_decision_events.txt create mode 100644 events/dlc/bp2/bp2_hostage_system.txt create mode 100644 events/dlc/bp2/bp2_yearly_1_events.txt create mode 100644 events/dlc/bp2/bp2_yearly_2.txt create mode 100644 events/dlc/bp2/bp2_yearly_3.txt create mode 100644 events/dlc/bp2/bp2_yearly_4.txt create mode 100644 events/dlc/bp2/bp2_yearly_5.txt create mode 100644 events/dlc/bp2/bp2_yearly_7.txt create mode 100644 events/dlc/bp2/bp2_yearly_events_6.txt create mode 100644 events/dlc/bp2/bp2_yearly_extra.txt create mode 100644 events/dlc/bp2/story_cycles/story_cycle_pet_rock_events.txt create mode 100644 events/dlc/bp3/bp3_mapmaking.txt create mode 100644 events/dlc/bp3/bp3_roaming_events.txt create mode 100644 events/dlc/bp3/bp3_survey_events.txt create mode 100644 events/dlc/ce1/epidemic_events_2.txt create mode 100644 events/dlc/ce1/legend_events.txt create mode 100644 events/dlc/ce1/legend_spread_events_veronica.txt create mode 100644 events/dlc/ce1/legitimacy_events.txt create mode 100644 events/dlc/ce1/physician_epidemic_events.txt create mode 100644 events/dlc/ep1/ep1_character_interaction_events.txt create mode 100644 events/dlc/ep1/ep1_court_position_events.txt create mode 100644 events/dlc/ep1/ep1_flavor_events.txt create mode 100644 events/dlc/ep2/ep2_accolade_events.txt create mode 100644 events/dlc/ep2/wedding_events/ep2_bloody_wedding_events.txt create mode 100644 events/dlc/ep2/wedding_events/ep2_wedding_events.txt create mode 100644 events/dlc/ep3/ep3_contract_events.txt create mode 100644 events/dlc/ep3/ep3_emperor_yearly_8.txt create mode 100644 events/dlc/ep3/ep3_laamp_decision_events.txt create mode 100644 events/dlc/ep3/ep3_laamp_events.txt create mode 100644 events/dlc/ep3/ep3_laamp_events_8.txt create mode 100644 events/dlc/ep3/ep3_laamp_flavor_oltner.txt create mode 100644 events/dlc/ep3/ep3_laamp_flavour_ewan_events.txt create mode 100644 events/dlc/ep3/ep3_roman_restoration_events.txt create mode 100644 events/dlc/ep3/ep3_story_cycle_harrying_of_the_north_events.txt create mode 100644 events/dlc/ep3/ep3_wedding_events.txt create mode 100644 events/dlc/fp1/fp1_jomsvikings_events.txt create mode 100644 events/dlc/fp1/fp1_major_decision_events.txt create mode 100644 events/dlc/fp1/fp1_scandinavian_adventurer_events.txt create mode 100644 events/dlc/fp1/fp1_shieldmaiden_events.txt create mode 100644 events/dlc/fp1/fp1_trade_events.txt create mode 100644 events/dlc/fp1/fp1_yearly_events_oltner.txt create mode 100644 events/dlc/fp2/fp2_el_cid_events.txt create mode 100644 events/dlc/fp2/fp2_lyonese_monk_events.txt create mode 100644 events/dlc/fp2/fp2_other_decision_events.txt create mode 100644 events/dlc/fp3/fp3_misc_decision_events.txt create mode 100644 events/dlc/fp3/fp3_religious_decision_events.txt create mode 100644 events/dlc/fp3/fp3_scholarship_events.txt create mode 100644 events/dlc/fp3/fp3_story_cycle_seljuks_invasion_events.txt create mode 100644 events/dlc/fp3/fp3_story_cycle_zanj_rebellion_events.txt create mode 100644 events/dlc/fp3/fp3_struggle_events.txt create mode 100644 events/dlc/fp3/fp3_tax_collector_events_ola.txt create mode 100644 events/dlc/fp3/fp3_tax_collector_flavor_events.txt create mode 100644 events/dlc/fp3/fp3_yearly_events_eren.txt create mode 100644 events/dlc/fp3/fp3_yearly_events_hugo.txt create mode 100644 events/dlc/fp3/fp3_yearly_events_ola_batch_1.txt create mode 100644 events/dlc/fp3/fp3_yearly_frontier_chains.txt create mode 100644 events/dlc/mpo/court_astrologer_events.txt create mode 100644 events/dlc/mpo/mpo_decisions_events.txt create mode 100644 events/dlc/mpo/mpo_events_ariana.txt create mode 100644 events/dlc/mpo/mpo_events_tova.txt create mode 100644 events/dlc/mpo/mpo_flavor_events_settled.txt create mode 100644 events/dlc/mpo/mpo_jamukha_flavor_events.txt create mode 100644 events/dlc/mpo/mpo_migration_events.txt create mode 100644 events/dlc/mpo/mpo_nomad_events_1.txt create mode 100644 events/dlc/mpo/mpo_nomads_flavour_events.txt create mode 100644 events/dlc/mpo/mpo_story_cycle_temujin_flavor_events.txt create mode 100644 events/dlc/tgp/tgp_ceremonial_liege_events.txt create mode 100644 events/dlc/tgp/tgp_child_personality_events.txt create mode 100644 events/dlc/tgp/tgp_china_career_events.txt create mode 100644 events/dlc/tgp/tgp_china_decision_events.txt create mode 100644 events/dlc/tgp/tgp_china_ministry_events.txt create mode 100644 events/dlc/tgp/tgp_china_yearly_events.txt create mode 100644 events/dlc/tgp/tgp_commission_book.txt create mode 100644 events/dlc/tgp/tgp_dynastic_cycle_decision_events.txt create mode 100644 events/dlc/tgp/tgp_dynastic_cycle_events.txt create mode 100644 events/dlc/tgp/tgp_dynastic_cycle_flavor_events.txt create mode 100644 events/dlc/tgp/tgp_east_asia_decision_events.txt create mode 100644 events/dlc/tgp/tgp_east_asia_interaction_events.txt create mode 100644 events/dlc/tgp/tgp_faction_events.txt create mode 100644 events/dlc/tgp/tgp_genpei_character_events.txt create mode 100644 events/dlc/tgp/tgp_governor_contract_events.txt create mode 100644 events/dlc/tgp/tgp_governor_contract_events_2000.txt create mode 100644 events/dlc/tgp/tgp_house_blocs.txt create mode 100644 events/dlc/tgp/tgp_interaction_events.txt create mode 100644 events/dlc/tgp/tgp_japan_career_events.txt create mode 100644 events/dlc/tgp/tgp_japan_decision_events.txt create mode 100644 events/dlc/tgp/tgp_japan_general_events.txt create mode 100644 events/dlc/tgp/tgp_japan_yearly_events.txt create mode 100644 events/dlc/tgp/tgp_japan_yearly_events_ariana.txt create mode 100644 events/dlc/tgp/tgp_korea_decision_events.txt create mode 100644 events/dlc/tgp/tgp_maintenance_events.txt create mode 100644 events/dlc/tgp/tgp_mandala_capital_events.txt create mode 100644 events/dlc/tgp/tgp_mandala_devaraja_events.txt create mode 100644 events/dlc/tgp/tgp_mandala_events.txt create mode 100644 events/dlc/tgp/tgp_mandala_task_contract_events.txt create mode 100644 events/dlc/tgp/tgp_mentoring_scheme_events.txt create mode 100644 events/dlc/tgp/tgp_movement_events.txt create mode 100644 events/dlc/tgp/tgp_natural_disaster_contract_events.txt create mode 100644 events/dlc/tgp/tgp_natural_disaster_flavor_events.txt create mode 100644 events/dlc/tgp/tgp_silk_road_events.txt create mode 100644 events/dlc/tgp/tgp_tai_migration_events.txt create mode 100644 events/dlc/tgp/tgp_travel_danger_events.txt create mode 100644 events/dlc/tgp/tgp_tribute_mission_events.txt create mode 100644 localization/english/replace/gui/succession_event_window_l_english.yml diff --git a/common/customizable_localization/00_adventurer_names.txt b/common/customizable_localization/00_adventurer_names.txt index ea33f6ad..d71e2894 100644 --- a/common/customizable_localization/00_adventurer_names.txt +++ b/common/customizable_localization/00_adventurer_names.txt @@ -144,7 +144,7 @@ OR = { NOT = { exists = scope:new_landless_adventurer } scope:new_landless_adventurer ?= { - NOT = { religion = faith:ashari.religion } + NOT = { religion = faith:aqlani.religion } } } } @@ -607,7 +607,7 @@ location = { geographical_region = world_africa } - NOT = { religion = faith:ashari.religion } + NOT = { religion = faith:aqlani.religion } } } } @@ -1067,7 +1067,7 @@ OR = { NOT = { exists = scope:new_landless_adventurer } scope:new_landless_adventurer ?= { - NOT = { religion = faith:ashari.religion } + NOT = { religion = faith:aqlani.religion } ai_honor > 0 } } diff --git a/common/customizable_localization/00_divinity_custom_loc.txt b/common/customizable_localization/00_divinity_custom_loc.txt index a17b9880..10e6f712 100644 --- a/common/customizable_localization/00_divinity_custom_loc.txt +++ b/common/customizable_localization/00_divinity_custom_loc.txt @@ -406,23 +406,8 @@ GetUnbelieverName = { #Returns Heathens for Pagans and Infidels for other Faiths. GetUnbelieverNamePlural = { type = character - - text = { - trigger = { - faith = { - has_doctrine = pagan_hostility_doctrine - } - } - localization_key = unbeliever_heathen_plural - } - text = { - trigger = { - faith = { - NOT = { has_doctrine = pagan_hostility_doctrine } - } - } - localization_key = unbeliever_infidel_plural - } + parent = GetUnbelieverName + suffix = _plural } GetUnbelieverTerm = { @@ -460,29 +445,8 @@ GetUnbelieverTermPlural = { GetUnbelieverTermAdjective = { type = character - - text = { - trigger = { - is_infidel_trigger = { WHO = scope:second TARGET = root} - } - localization_key = unbeliever_infidel_adj - } - text = { - trigger = { - is_heathen_trigger = { WHO = scope:second TARGET = root} - } - localization_key = unbeliever_heathen_adj - } - text = { - trigger = { - is_heretic_trigger = { WHO = scope:second TARGET = root} - } - localization_key = unbeliever_heretic_adj - } - text = { - trigger = { always = yes } - localization_key = unbeliever_unbeliever_adj - } + parent = GetUnbelieverTerm + suffix = _adj } GetUnbelieverAndForeignerTerm = { @@ -668,49 +632,13 @@ GetActualBishopTitle = { localization_key = religious_head_name } -# text = { # No longer relevant now that we scope directly to the court owner -# trigger = { -# is_playable_character = yes -# } -# localization_key = ruler_title_name -# } - # Religion-By-Religion Titles for Bishops based on Liege's Tier. - # Zunism - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:zun_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zunism_religion_kingdom - } - text = { - trigger = { - highest_held_title_tier < tier_kingdom - faith.religion = faith:zun_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zunism_religion_duchy - } - #Thelema text = { trigger = { highest_held_title_tier >= tier_empire OR = { faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion } } localization_key = councillor_court_chaplain_thelema_religion_empire @@ -720,9 +648,6 @@ GetActualBishopTitle = { highest_held_title_tier >= tier_kingdom OR = { faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion } } localization_key = councillor_court_chaplain_thelema_religion_kingdom @@ -732,9 +657,6 @@ GetActualBishopTitle = { highest_held_title_tier >= tier_duchy OR = { faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion } } localization_key = councillor_court_chaplain_thelema_religion_duchy @@ -743,10 +665,7 @@ GetActualBishopTitle = { trigger = { highest_held_title_tier < tier_duchy OR = { - faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion + faith.religion = faith:victorian.religion } } localization_key = councillor_court_chaplain_thelema_religion_county @@ -808,59 +727,59 @@ GetActualBishopTitle = { # } # localization_key = councillor_court_chaplain_zoroastrianism_religion_county # } - # African Roog - text = { - trigger = { - faith.religion = faith:west_african_roog_pagan.religion - } - localization_key = councillor_court_chaplain_west_african_roog_religion_duchy - } - # African Bori - text = { - trigger = { - faith.religion = faith:west_african_bori_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_west_african_bori_religion_duchy - } - text = { - trigger = { - faith.religion = faith:west_african_bori_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_west_african_bori_religion_duchy_female - } - # African - text = { - trigger = { - faith.religion = faith:west_african_pagan.religion - } - localization_key = councillor_court_chaplain_west_african_religion_duchy - } - - # Tengrism - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:tengri_pagan.religion - } - localization_key = councillor_court_chaplain_tengrism_religion_kingdom - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:tengri_pagan.religion - } - localization_key = councillor_court_chaplain_tengrism_religion_duchy - } +# # African Roog +# text = { +# trigger = { +# faith.religion = faith:west_african_roog_pagan.religion +# } +# localization_key = councillor_court_chaplain_west_african_roog_religion_duchy +# } +# # African Bori +# text = { +# trigger = { +# faith.religion = faith:west_african_bori_pagan.religion +# NOT = { # Required formatting to include male/female check as well as vacancy +# cp:councillor_court_chaplain ?= { +# is_female = yes +# } +# } +# } +# localization_key = councillor_court_chaplain_west_african_bori_religion_duchy +# } +# text = { +# trigger = { +# faith.religion = faith:west_african_bori_pagan.religion +# NOT = { # Required formatting to include male/female check as well as vacancy +# cp:councillor_court_chaplain ?= { +# is_female = yes +# } +# } +# } +# localization_key = councillor_court_chaplain_west_african_bori_religion_duchy_female +# } +# # African +# text = { +# trigger = { +# faith.religion = faith:west_african_pagan.religion +# } +# localization_key = councillor_court_chaplain_west_african_religion_duchy +# } +# +# # Tengrism +# text = { +# trigger = { +# highest_held_title_tier >= tier_duchy +# faith.religion = faith:tengri_pagan.religion +# } +# localization_key = councillor_court_chaplain_tengrism_religion_kingdom +# } +# text = { +# trigger = { +# highest_held_title_tier < tier_duchy +# faith.religion = faith:tengri_pagan.religion +# } +# localization_key = councillor_court_chaplain_tengrism_religion_duchy +# } #Taoism text = { @@ -997,7 +916,6 @@ GetActualBishopTitle = { faith.religion = faith:baltic_pagan.religion faith.religion = faith:chernobozhye.religion faith.religion = faith:finnish_pagan.religion - faith.religion = faith:zun_pagan.religion } } localization_key = councillor_court_chaplain_baltic_religion_county @@ -1014,7 +932,6 @@ GetActualBishopTitle = { faith.religion = faith:baltic_pagan.religion faith.religion = faith:chernobozhye.religion faith.religion = faith:finnish_pagan.religion - faith.religion = faith:zun_pagan.religion } } localization_key = councillor_court_chaplain_baltic_religion_county_female @@ -1155,23 +1072,23 @@ GetActualBishopTitle = { localization_key = councillor_court_chaplain_germanic_religion_county_female } - #Dualism - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:manichean.religion - } - localization_key = councillor_court_chaplain_dualism_religion_county - } - - #Bon - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:bon.religion - } - localization_key = councillor_court_chaplain_bon_religion_kingdom - } +# #Dualism +# text = { +# trigger = { +# highest_held_title_tier < tier_duchy +# faith.religion = faith:manichean.religion +# } +# localization_key = councillor_court_chaplain_dualism_religion_county +# } +# +# #Bon +# text = { +# trigger = { +# highest_held_title_tier >= tier_kingdom +# faith.religion = faith:bon.religion +# } +# localization_key = councillor_court_chaplain_bon_religion_kingdom +# } # Japanese Buddhism text = { @@ -1279,7 +1196,7 @@ GetActualBishopTitle = { trigger = { highest_held_title_tier >= tier_empire OR = { - faith.religion = faith:theravada.religion + faith.religion = faith:osvicenist.religion faith.religion = faith:vaishnavism.religion faith.religion = faith:digambara.religion } @@ -1290,7 +1207,7 @@ GetActualBishopTitle = { trigger = { highest_held_title_tier >= tier_kingdom OR = { - faith.religion = faith:theravada.religion + faith.religion = faith:osvicenist.religion faith.religion = faith:vaishnavism.religion faith.religion = faith:digambara.religion } @@ -1301,10 +1218,9 @@ GetActualBishopTitle = { trigger = { highest_held_title_tier >= tier_duchy OR = { - faith.religion = faith:theravada.religion + faith.religion = faith:osvicenist.religion faith.religion = faith:vaishnavism.religion faith.religion = faith:digambara.religion - faith.religion = faith:bon.religion } } localization_key = councillor_court_chaplain_buddhism_religion_duchy @@ -1313,10 +1229,9 @@ GetActualBishopTitle = { trigger = { highest_held_title_tier < tier_duchy OR = { - faith.religion = faith:theravada.religion + faith.religion = faith:osvicenist.religion faith.religion = faith:vaishnavism.religion faith.religion = faith:digambara.religion - faith.religion = faith:bon.religion } } localization_key = councillor_court_chaplain_buddhism_religion_county @@ -1338,19 +1253,19 @@ GetActualBishopTitle = { #Islam text = { - trigger = { highest_held_title_tier >= tier_empire faith.religion = faith:ashari.religion } + trigger = { highest_held_title_tier >= tier_empire faith.religion = faith:aqlani.religion } localization_key = councillor_court_chaplain_islam_empire } text = { - trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:ashari.religion } + trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:aqlani.religion } localization_key = councillor_court_chaplain_islam_kingdom } text = { - trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:ashari.religion } + trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:aqlani.religion } localization_key = councillor_court_chaplain_islam_duchy } text = { - trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:ashari.religion } + trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:aqlani.religion } localization_key = councillor_court_chaplain_islam_county } @@ -1381,10 +1296,7 @@ GetActualBishopTitle = { is_female = yes } } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_empire } @@ -1396,10 +1308,7 @@ GetActualBishopTitle = { is_female = no } } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_empire_female } @@ -1411,10 +1320,7 @@ GetActualBishopTitle = { is_female = yes } } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_kingdom } @@ -1426,30 +1332,21 @@ GetActualBishopTitle = { is_female = no } } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_kingdom_female } text = { trigger = { highest_held_title_tier >= tier_duchy - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_duchy } text = { trigger = { highest_held_title_tier < tier_duchy - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } + faith.religion = faith:orthodox.religion } localization_key = councillor_court_chaplain_orthodox_county } @@ -1463,7 +1360,10 @@ GetActualBishopTitle = { is_female = yes } } - faith.religion = faith:catholic.religion + OR = { + faith.religion = faith:lutheran.religion + faith.religion = faith:roman_catholic.religion + } } localization_key = councillor_court_chaplain_christian_empire } @@ -1475,29 +1375,39 @@ GetActualBishopTitle = { is_female = no } } - faith.religion = faith:catholic.religion + OR = { + faith.religion = faith:lutheran.religion + faith.religion = faith:roman_catholic.religion + } } localization_key = councillor_court_chaplain_christian_empire_female } text = { - trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:catholic.religion } + trigger = { highest_held_title_tier >= tier_kingdom + OR = { + faith.religion = faith:lutheran.religion + faith.religion = faith:roman_catholic.religion + } + } localization_key = councillor_court_chaplain_christian_kingdom } text = { - trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:catholic.religion } + trigger = { highest_held_title_tier >= tier_duchy + OR = { + faith.religion = faith:lutheran.religion + faith.religion = faith:roman_catholic.religion + } + } localization_key = councillor_court_chaplain_christian_duchy } text = { - trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:catholic.religion } - localization_key = councillor_court_chaplain_christian_county - } - - #Basque Paganism - text = { - trigger = { - religion = religion:basque_religion + trigger = { highest_held_title_tier < tier_duchy + OR = { + faith.religion = faith:lutheran.religion + faith.religion = faith:roman_catholic.religion + } } - localization_key = council_basque_priest + localization_key = councillor_court_chaplain_christian_county } # Shinto @@ -1587,807 +1497,8 @@ GetActualBishopTitle = { # GetActualBishopTitle should be updated synchronously with this GetActualBishopTitlePossessive = { type = character - - # Religion-By-Religion Titles for Bishops based on Liege's Tier. - # Zunism - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:zun_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zunism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_kingdom - faith.religion = faith:zun_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zunism_religion_duchy_possessive - } - - # Zoroastrianism - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:mazdayasna.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zoroastrianism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:mazdayasna.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_zoroastrianism_religion_kingdom_female_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:mazdayasna.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_zoroastrianism_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:mazdayasna.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_zoroastrianism_religion_duchy_female_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:mazdayasna.religion - } - localization_key = councillor_court_chaplain_zoroastrianism_religion_county_possessive - } - # African Roog - text = { - trigger = { - faith.religion = faith:west_african_roog_pagan.religion - } - localization_key = councillor_court_chaplain_west_african_roog_religion_duchy_possessive - } - # African Bori - text = { - trigger = { - faith.religion = faith:west_african_bori_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_west_african_bori_religion_duchy_possessive - } - text = { - trigger = { - faith.religion = faith:west_african_bori_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_west_african_bori_religion_duchy_female_possessive - } - # African - text = { - trigger = { - faith.religion = faith:west_african_pagan.religion - } - localization_key = councillor_court_chaplain_west_african_religion_duchy_possessive - } - - # Tengrism - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:tengri_pagan.religion - } - localization_key = councillor_court_chaplain_tengrism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:tengri_pagan.religion - } - localization_key = councillor_court_chaplain_tengrism_religion_duchy_possessive - } - - #Taoism - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = religion:taoism_religion - } - localization_key = councillor_court_chaplain_taoism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = religion:taoism_religion - } - localization_key = councillor_court_chaplain_taoism_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = religion:taoism_religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_taoism_religion_county_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = religion:taoism_religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_taoism_religion_county_female_possessive - } - - #Finno-Ugric - text = { - trigger = { - faith.religion = faith:finnish_pagan.religion - } - localization_key = councillor_court_chaplain_finnic_religion_duchy_possessive - } - - #Slavic - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:chernobozhye.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_slavic_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:chernobozhye.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_slavic_religion_kingdom_female_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:chernobozhye.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_slavic_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:chernobozhye.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_slavic_religion_duchy_female_possessive - } - - #Baltic - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:baltic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_baltic_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:baltic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_baltic_religion_duchy_female_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - OR = { - faith.religion = faith:baltic_pagan.religion - faith.religion = faith:chernobozhye.religion - faith.religion = faith:finnish_pagan.religion - faith.religion = faith:zun_pagan.religion - } - } - localization_key = councillor_court_chaplain_baltic_religion_county_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - OR = { - faith.religion = faith:baltic_pagan.religion - faith.religion = faith:chernobozhye.religion - faith.religion = faith:finnish_pagan.religion - faith.religion = faith:zun_pagan.religion - } - } - localization_key = councillor_court_chaplain_baltic_religion_county_female_possessive - } - - #Magyarism - text = { - trigger = { - faith.religion = faith:magyar_pagan.religion - } - localization_key = councillor_court_chaplain_magyarism_religion_county_possessive - } - - #Judaism - text = { - trigger = { - highest_held_title_tier >= tier_empire - faith.religion = faith:congregationist.religion - } - localization_key = councillor_court_chaplain_judaism_religion_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:congregationist.religion - } - localization_key = councillor_court_chaplain_judaism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:congregationist.religion - } - localization_key = councillor_court_chaplain_judaism_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:congregationist.religion - } - localization_key = councillor_court_chaplain_judaism_religion_county_possessive - } - - #Hellenic - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:hellenic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_hellenism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:hellenic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_hellenism_religion_kingdom_female_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:hellenic_pagan.religion - } - localization_key = councillor_court_chaplain_hellenism_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:hellenic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_hellenism_religion_county_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:hellenic_pagan.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_hellenism_religion_county_female_possessive - } - - #Norse - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:folketro.religion - } - localization_key = councillor_court_chaplain_germanic_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - faith.religion = faith:folketro.religion - } - localization_key = councillor_court_chaplain_germanic_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:folketro.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_germanic_religion_county_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:folketro.religion - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_germanic_religion_county_female_possessive - } - - #Dualism - text = { - trigger = { - highest_held_title_tier < tier_duchy - faith.religion = faith:manichean.religion - } - localization_key = councillor_court_chaplain_dualism_religion_county_possessive - } - - #Bon - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - faith.religion = faith:bon.religion - } - localization_key = councillor_court_chaplain_bon_religion_kingdom_possessive - } - - #Thelema - text = { - trigger = { - highest_held_title_tier >= tier_empire - OR = { - faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion - } - } - localization_key = councillor_court_chaplain_thelema_religion_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - OR = { - faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion - } - } - localization_key = councillor_court_chaplain_thelema_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - OR = { - faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion - - } - } - localization_key = councillor_court_chaplain_thelema_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - OR = { - faith.religion = faith:victorian.religion - faith.religion = faith:royal_thelema.religion - faith.religion = faith:old_thelema.religion - faith.religion = faith:carcosan.religion - - } - } - localization_key = councillor_court_chaplain_thelema_religion_county_possessive - } - - #Buddhism/Hinduism/Jainism - text = { - trigger = { - highest_held_title_tier >= tier_empire - OR = { - faith.religion = faith:theravada.religion - faith.religion = faith:vaishnavism.religion - faith.religion = faith:digambara.religion - } - } - localization_key = councillor_court_chaplain_buddhism_religion_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - OR = { - faith.religion = faith:theravada.religion - faith.religion = faith:vaishnavism.religion - faith.religion = faith:digambara.religion - } - } - localization_key = councillor_court_chaplain_buddhism_religion_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - OR = { - faith.religion = faith:theravada.religion - faith.religion = faith:vaishnavism.religion - faith.religion = faith:digambara.religion - faith.religion = faith:bon.religion - } - } - localization_key = councillor_court_chaplain_buddhism_religion_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - OR = { - faith.religion = faith:theravada.religion - faith.religion = faith:vaishnavism.religion - faith.religion = faith:digambara.religion - faith.religion = faith:bon.religion - } - } - localization_key = councillor_court_chaplain_buddhism_religion_county_possessive - } - - #Shia - text = { - trigger = { highest_held_title_tier >= tier_empire faith = faith:ismaili } - localization_key = councillor_court_chaplain_ismaili_empire_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_kingdom faith = faith:ismaili } - localization_key = councillor_court_chaplain_ismaili_kingdom_possessive - } - text = { - trigger = { highest_held_title_tier < tier_duchy faith = faith:ismaili } - localization_key = councillor_court_chaplain_ismaili_county_possessive - } - - #Islam - text = { - trigger = { highest_held_title_tier >= tier_empire faith.religion = faith:ashari.religion } - localization_key = councillor_court_chaplain_islam_empire_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:ashari.religion } - localization_key = councillor_court_chaplain_islam_kingdom_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:ashari.religion } - localization_key = councillor_court_chaplain_islam_duchy_possessive - } - text = { - trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:ashari.religion } - localization_key = councillor_court_chaplain_islam_county_possessive - } - - #Yazidi - text = { - trigger = { highest_held_title_tier >= tier_empire faith.religion = faith:yazidi.religion } - localization_key = councillor_court_chaplain_yazidi_empire_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:yazidi.religion } - localization_key = councillor_court_chaplain_yazidi_kingdom_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:yazidi.religion } - localization_key = councillor_court_chaplain_yazidi_duchy_possessive - } - text = { - trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:yazidi.religion } - localization_key = councillor_court_chaplain_yazidi_county_possessive - } - - #Orthodox - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_empire_female_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_kingdom_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_kingdom - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_kingdom_female_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_duchy - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_duchy_possessive - } - text = { - trigger = { - highest_held_title_tier < tier_duchy - OR = { - faith = faith:orthodox - faith.religion = faith:manichean.religion - } - } - localization_key = councillor_court_chaplain_orthodox_county_possessive - } - - #Christian - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - faith.religion = faith:catholic.religion - } - localization_key = councillor_court_chaplain_christian_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - faith.religion = faith:catholic.religion - } - localization_key = councillor_court_chaplain_christian_empire_female_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_kingdom faith.religion = faith:catholic.religion } - localization_key = councillor_court_chaplain_christian_kingdom_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_duchy faith.religion = faith:catholic.religion } - localization_key = councillor_court_chaplain_christian_duchy_possessive - } - text = { - trigger = { highest_held_title_tier < tier_duchy faith.religion = faith:catholic.religion } - localization_key = councillor_court_chaplain_christian_county_possessive - } - # Shinto - text = { - trigger = { - religion = religion:shintoism_religion - } - localization_key = councillor_court_chaplain_shintoism_religion_possessive - } - - #Paganism - text = { - trigger = { - faith = { has_doctrine = pagan_hostility_doctrine } - highest_held_title_tier >= tier_kingdom - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_paganism_religion_kingdom_possessive - } - text = { - trigger = { - faith = { has_doctrine = pagan_hostility_doctrine } - highest_held_title_tier >= tier_kingdom - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_paganism_religion_kingdom_female_possessive - } - text = { - trigger = { - faith = { has_doctrine = pagan_hostility_doctrine } - highest_held_title_tier >= tier_duchy - } - localization_key = councillor_court_chaplain_paganism_religion_duchy_possessive - } - text = { - trigger = { - faith = { has_doctrine = pagan_hostility_doctrine } - highest_held_title_tier < tier_duchy - } - localization_key = councillor_court_chaplain_paganism_religion_county_possessive - } - - #Fallback - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = yes - } - } - } - localization_key = councillor_court_chaplain_theocrat_empire_possessive - } - text = { - trigger = { - highest_held_title_tier >= tier_empire - NOT = { # Required formatting to include male/female check as well as vacancy - cp:councillor_court_chaplain ?= { - is_female = no - } - } - } - localization_key = councillor_court_chaplain_theocrat_empire_female_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_kingdom } - localization_key = councillor_court_chaplain_theocrat_kingdom_possessive - } - text = { - trigger = { highest_held_title_tier >= tier_duchy } - localization_key = councillor_court_chaplain_theocrat_duchy_possessive - } - text = { - trigger = { highest_held_title_tier < tier_duchy } - localization_key = councillor_court_chaplain_theocrat_county_possessive - } + parent = GetActualBishopTitle + suffix = _possessive } GetBirthOmen = { diff --git a/common/customizable_localization/00_ruler_transition_loc.txt b/common/customizable_localization/00_ruler_transition_loc.txt index b05dbdb2..de22c9a5 100644 --- a/common/customizable_localization/00_ruler_transition_loc.txt +++ b/common/customizable_localization/00_ruler_transition_loc.txt @@ -139,34 +139,61 @@ DeathMessageIntro = { } } } + text = { + localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ELYSIAN_1 + trigger = { + faith = faith:elysian + } + } + text = { + localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ELYSIAN_2 + trigger = { + faith = faith:elysian + } + } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_CHRISTIANITY_1 trigger = { - faith.religion = faith:catholic.religion + OR = { + faith.religion = faith:roman_catholic.religion + faith.religion = faith:lutheran.religion + faith.religion = faith:orthodox.religion + } + NOT = { faith = faith:elysian } } } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_CHRISTIANITY_2 trigger = { - faith.religion = faith:catholic.religion + OR = { + faith.religion = faith:roman_catholic.religion + faith.religion = faith:lutheran.religion + faith.religion = faith:orthodox.religion + } + NOT = { faith = faith:elysian } } } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_1 trigger = { - faith.religion = faith:ashari.religion + OR = { + faith.religion = faith:roman_catholic.religion + faith.religion = faith:lutheran.religion + faith.religion = faith:orthodox.religion + } + NOT = { faith = faith:elysian } } } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_2 trigger = { - faith.religion = faith:ashari.religion + faith.religion = faith:aqlani.religion } } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_3 trigger = { - faith.religion = faith:ashari.religion + faith.religion = faith:aqlani.religion } } text = { @@ -191,6 +218,14 @@ DeathMessageIntro = { } } } + text = { + localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_EURO_1 + trigger = { + OR = { + faith.religion = faith:mysteriosophy.religion + } + } + } text = { localization_key = SUCCESSION_EVENT_WINDOW_DEAD_INTRO_TRIBAL_1 trigger = { diff --git a/common/decisions/00_major_decisions_east_europe.txt b/common/decisions/00_major_decisions_east_europe.txt index eea6fd56..816d1480 100644 --- a/common/decisions/00_major_decisions_east_europe.txt +++ b/common/decisions/00_major_decisions_east_europe.txt @@ -1,1247 +1,1248 @@ -###DECISIONS LIST### - -#unite_the_western_slavs_decision -#unite_the_southern_slavs_decision -#unite_the_slavs_decision -#promote_hungarian_settlement_decision -#revive_magyar_paganism_decision - -### Unite the West Slavs ### -unite_the_western_slavs_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_realm.dds" - } - decision_group_type = major - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 120 - empire = 120 - hegemony = 120 - } - desc = unite_the_western_slavs_decision_desc - - is_shown = { - culture = { has_cultural_pillar = heritage_west_slavic } - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_western_slavs_decision - } - } - } - - is_valid = { - culture = { has_cultural_pillar = heritage_west_slavic } - completely_controls_region = custom_west_slavia #Has de jure Lands - OR = { - custom_description = { - text = unite_the_western_slavs_decision_tt_1 - OR = { - has_primary_title = title:k_poland - has_primary_title = title:k_pomerania - has_primary_title = title:k_bohemia - has_primary_title = title:k_moravia - has_primary_title = title:k_sorbia - } - } - custom_description = { - text = unite_the_western_slavs_decision_tt_2 - AND = { - highest_held_title_tier = tier_empire - OR = { - has_title = title:k_poland - has_title = title:k_pomerania - has_title = title:k_bohemia - has_title = title:k_moravia - has_title = title:k_sorbia - } - } - } - } - } - - is_valid_showing_failures_only = { - is_landed = yes - } - - effect = { - gain_heroic_legend_seed_tooltip_effect = yes - save_scope_as = western_slav_uniter - - show_as_tooltip = { unite_the_western_slavs_decision_effects = yes } #Actually applied in east_europe.0001 - prestige, laws, title, innovation effects - - #Events - trigger_event = east_europe.0001 - every_player = { - limit = { - this != scope:western_slav_uniter - is_within_diplo_range = { CHARACTER = scope:western_slav_uniter } - } - trigger_event = east_europe.0002 - } - - #Can only be done once - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_western_slavs_decision - } - set_global_variable = { - name = unite_the_western_slavs_decision - value = scope:western_slav_uniter - } - set_global_variable = { - name = unite_the_western_slavs_decision_title - value = scope:western_slav_uniter.primary_title - } - close_view = { - view = decisions - player = root - } - } - - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} - - -### Unite the South Slavs ### -unite_the_southern_slavs_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_realm.dds" - } - decision_group_type = major - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 120 - empire = 120 - hegemony = 120 - } - desc = unite_the_southern_slavs_decision_desc - - is_shown = { - culture = { has_cultural_pillar = heritage_south_slavic } - NOR = { - has_culture = culture:vlach # Not technically Slavic despite being in the South Slavic group. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_southern_slavs_decision - } - } - } - - is_valid = { - culture = { has_cultural_pillar = heritage_south_slavic } - completely_controls_region = custom_south_slavia #Has de jure Lands - OR = { - has_primary_title = title:k_croatia - has_primary_title = title:k_serbia - has_primary_title = title:k_bulgaria - has_primary_title = title:k_dacia - has_primary_title = title:k_moldavia - has_primary_title = title:k_bosnia - } - } - - is_valid_showing_failures_only = { - is_landed = yes - } - - effect = { - gain_heroic_legend_seed_tooltip_effect = yes - save_scope_as = southern_slav_uniter - - show_as_tooltip = { unite_the_southern_slavs_decision_effects = yes } #Actually applied in east_europe.0006 - prestige, laws, title, innovation effects - - #Events - trigger_event = east_europe.0005 - every_player = { - limit = { - this != scope:southern_slav_uniter - is_within_diplo_range = { CHARACTER = scope:southern_slav_uniter } - } - trigger_event = east_europe.0006 - } - - #Can only be done once - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_southern_slavs_decision - } - set_global_variable = { - name = unite_the_southern_slavs_decision - value = scope:southern_slav_uniter - } - set_global_variable = { - name = unite_the_southern_slavs_decision_title - value = scope:southern_slav_uniter.primary_title - } - } - - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} - - -### Unite the Slavs ### -unite_the_slavs_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_realm.dds" - } - decision_group_type = major - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 120 - empire = 120 - hegemony = 120 - } - desc = unite_the_slavs_decision_desc - - is_shown = { - OR = { - culture = { has_cultural_pillar = heritage_west_slavic } - culture = { has_cultural_pillar = heritage_east_slavic } - culture = { has_cultural_pillar = heritage_south_slavic } - } - NOR = { - has_culture = culture:vlach # Not technically Slavic despite being in the South Slavic group. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_slavs_decision - } - } - } - - is_valid = { - OR = { - culture = { has_cultural_pillar = heritage_west_slavic } - culture = { has_cultural_pillar = heritage_east_slavic } - culture = { has_cultural_pillar = heritage_south_slavic } - } - completely_controls_region = custom_slavia - } - - is_valid_showing_failures_only = { - is_landed = yes - } - - effect = { - save_scope_as = slav_uniter - - show_as_tooltip = { unite_the_slavs_decision_effects = yes } #Actually applied in east_europe.0010 - prestige, laws, title, innovation effects - - #Events - trigger_event = east_europe.0010 - every_player = { - limit = { - this != scope:slav_uniter - is_within_diplo_range = { CHARACTER = scope:slav_uniter } - } - trigger_event = east_europe.0011 - } - - #Can only happen once - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:unite_the_slavs_decision - } - set_global_variable = { - name = unite_the_slavs_decision - value = scope:slav_uniter - } - } - - - cost = { - gold = { - value = 0 - if = { - limit = { - has_treasury = no - } - add = 600 - } - } - treasury = { - value = 0 - if = { - limit = { - has_treasury = yes - } - add = 600 - } - } - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} - - -### Defenders of [ROOT.Char.GetFaith.HighGodName] ### -defenders_of_highgod_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" - } - decision_group_type = major - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 120 - empire = 120 - hegemony = 120 - } - desc = defenders_of_highgod_decision_desc - - is_shown = { - OR = { - faith = faith:baltic_pagan - faith = faith:chernobozhye - faith = faith:finnish_pagan - } - #Only once per faith - NOR = { - AND = { - faith = faith:baltic_pagan - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_baltic_decision - } - } - AND = { - faith = faith:chernobozhye - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_slavic_decision - } - } - AND = { - faith = faith:finnish_pagan - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_finnish_decision - } - } - } - } - - is_valid = { - #Holds a holy site - faith = { - any_holy_site = { - county = { - holder = root - title_province = { has_special_building = no } - } - } - } - piety_level >= 3 - #Have loyal powerful vassals - trigger_if = { - limit = { - OR = { - highest_held_title_tier = tier_county - highest_held_title_tier = tier_duchy - } - } - any_vassal = { - count >= 3 #Counts/dukes need 3 - is_powerful_vassal = yes - opinion = { - target = root - value >= high_positive_opinion - } - } - } - trigger_if = { - limit = { highest_held_title_tier = tier_kingdom } - any_vassal = { - count >= 4 #Kings need 4 - is_powerful_vassal = yes - opinion = { - target = root - value >= high_positive_opinion - } - } - } - trigger_if = { - limit = { highest_held_title_tier = tier_empire } - any_vassal = { - count >= 5 #Emperor need 5 - is_powerful_vassal = yes - opinion = { - target = root - value >= high_positive_opinion - } - } - } - } - - is_valid_showing_failures_only = { - top_liege = this - is_landed = yes - } - - - effect = { - save_scope_as = defender_of_highgod - - show_as_tooltip = { defenders_of_highgod_decision_effects = yes } #Actually applied in east_europe.0010 - prestige, laws, title, innovation effects - - #Events - if = { - limit = { - faith = { - any_holy_site = { - count > 1 - county.holder = root - title_province = { has_special_building = no } - } - } - } - trigger_event = east_europe.0015 - } - else = { - faith = { - random_holy_site = { - limit = { - county.holder = root - title_province = { has_special_building = no } - } - save_scope_as = holy_site - } - } - trigger_event = east_europe.0016 - } - #Event to every player (east_europe.0017) is actually send through east_europe.0016 to make sure the right holy site scope is set - - #Can only happen once per faith - if = { - limit = { faith = faith:baltic_pagan } - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_baltic_decision - } - } - else_if = { - limit = { faith = faith:chernobozhye } - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_slavic_decision - } - } - else_if = { - limit = { faith = faith:finnish_pagan } - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:defenders_of_highgod_finnish_decision - } - } - } - - cost = { - gold = { - value = 0 - if = { - limit = { - has_treasury = no - } - add = 100 - } - } - treasury = { - value = 0 - if = { - limit = { - has_treasury = yes - } - add = 100 - } - } - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} - -#Hungary: historical re-settlement program. -### Promote Christian Settlements ### -promote_hungarian_settlement_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_realm.dds" - } - desc = promote_hungarian_settlement_decision_desc - selection_tooltip = promote_hungarian_settlement_decision_tooltip - decision_group_type = major - ai_goal = yes - - is_shown = { - is_ruler = yes - is_playable_character = yes - game_start_date < 1066.1.1 - culture = { has_cultural_pillar = heritage_magyar } - NOT = { #Can only do it once. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_promoted_hungarian_settlement - } - } - NOT = { #Can only do either or. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_revived_magyar_paganism - } - } - OR = { - has_title = title:k_hungary - has_title = title:e_carpathia - } - any_neighboring_top_liege_realm_owner = { #There are same reli neighboring Realms/Empires to take people from. - OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } - count >= 2 - } - } - - is_valid = { - # Must be an Ecumenical Christian - custom_description = { - text = promote_hungarian_settlement_decision_ecumenical_christian - faith = { #Denomination of Faith must not be a heresy and must have some degree of control over its core regions. - OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } - has_doctrine = special_doctrine_ecumenical_christian - } - } - - #Must completely control the Carpathian Basin (Hungary De Jure) - completely_controls = title:k_hungary - - # Capital is Hungarian culture group - capital_province = { culture = { has_cultural_pillar = heritage_magyar } } - } - - is_valid_showing_failures_only = { - is_landed = yes - is_capable_adult = yes - is_imprisoned = no - top_liege = this - is_at_war = no - } - - cost = { - prestige = 2000 - piety = 500 - } - - effect = { - show_as_tooltip = { - promote_hungarian_settlement_decision_scripted_effect = yes - } - trigger_event = { - id = east_europe.0030 - } - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_promoted_hungarian_settlement - } - } - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 50 - ai_value_modifier = { - ai_zeal = 1.0 - ai_greed = 1.0 - } - } -} - -######################################### -# Return to Magyar Paganism # -# by Flavio Verna & Ewan Cowhig Croft # -######################################### -### Revive Táltosism ### -revive_magyar_paganism_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds" - } - desc = revive_magyar_paganism_decision_desc - selection_tooltip = revive_magyar_paganism_decision_tooltip - decision_group_type = major - ai_check_interval = 0 - - is_shown = { - is_landed = yes - #Must be some flavour of Magyar. - culture = { has_cultural_pillar = heritage_magyar } - #Should be done early. - custom_tooltip = { - text = revive_taltoism_decision_before_last_date - current_date <= 1100.1.1 - } - NOR = { - #Can only do it once. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_revived_magyar_paganism - } - } - #Must be the ruler of the Carpathian Basin. - any_sub_realm_county = { - title_province = { geographical_region = custom_hungary } - } - #Must be feudalised. - OR = { - government_has_flag = government_is_feudal - government_allows = administrative - } - #Must be something other than pagan. - NOT = { - faith.religion = { is_in_family = rf_pagan } - } - #Magyar Paganism must not have been reformed. - religion:hungaric_religion = { - any_faith = { - count = all - has_doctrine_parameter = unreformed - } - } - } - - is_valid = { - #Must be suitably prestigious. - prestige_level >= high_prestige_level - #Either you hold k_hungary directly, or your vassal does. - OR = { - has_title = title:k_hungary - AND = { - has_title = title:e_carpathia - any_vassal = { has_title = title:k_hungary } - } - } - #Must control at least 80% of de jure Hungary (usually we'd use a region, but if Hungary has shrunk/grown for some reason, the people and title are more important than the actual area). - any_realm_county = { - count >= 30 - culture = { has_cultural_pillar = heritage_magyar } - } - #Must be a noted scholar of theology (and thus filled out the entire Theologian tree). - OR = { - piety_level >= high_piety_level - has_trait = theologian - } - #Should be done early: reiterate this here so the player isn't surprised by losing the decision when shifting up an era. - custom_tooltip = { - text = revive_taltoism_decision_before_last_date - current_date <= 1100.1.1 - } - } - - is_valid_showing_failures_only = { - is_capable_adult = yes - is_imprisoned = no - is_at_war = no - top_liege = this - } - - cost = { - piety = 2000 - } - - effect = { - gain_holy_legend_seed_tooltip_effect = yes - custom_tooltip = revive_magyar_paganism_decision.adjust_the_faith.tt - show_as_tooltip = { revive_magyar_paganism_decision_scripted_effect = yes } - trigger_event = { id = east_europe.0032 } - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_revived_magyar_paganism - } - } - } - - ai_potential = { - always = no - } -} - -################################# -# Found the Kingdom of Bosnia # -# by Ewan Cowhig Croft # -################################# -### Found Kingdom of Bosnia ### -found_kingdom_of_bosnia_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_found_kingdom.dds" - } - decision_group_type = major - - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 0 - empire = 0 - hegemony = 0 - } - - desc = found_kingdom_of_bosnia_decision_desc - selection_tooltip = found_kingdom_of_bosnia_decision_tooltip - - is_shown = { - is_ruler = yes - is_playable_character = yes - exists = dynasty - OR = { - #Must be a Serb or Croat within the Bosnian highlands. - AND = { - OR = { - culture = culture:serbian - culture = culture:croatian - } - capital_county = { - OR = { - this = title:c_vodica - this = title:c_pset - this = title:c_vrbas - this = title:c_donjikraji - this = title:c_usora - this = title:c_rama - this = title:c_soli - this = title:c_sarajevo - this = title:c_zavrsje - this = title:c_zachlumia - this = title:c_pagania - } - } - } - #Or just be Bosnian. - culture = culture:bosnian - } - NOT = { #You can only do it once. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_founded_kingdom_of_bosnia - } - } - NOR = { - government_has_flag = government_is_mercenary - government_has_flag = government_is_holy_order - } - highest_held_title_tier <= tier_duchy - } - - is_valid = { - #You must have sufficient clout. - top_liege = this - - #You must control the kingdom's heartlands. - has_title = title:d_bosna - has_title = title:d_lower_bosna - has_title = title:d_usora - completely_controls = title:d_bosna - completely_controls = title:d_lower_bosna - completely_controls = title:d_usora - - #You must be sufficiently advanced to conceive of having a separate kingdom, rather than being Croatian or Serbian. - culture = { has_cultural_era_or_later = culture_era_early_medieval } - } - - is_valid_showing_failures_only = { - is_landed = yes - is_available_adult = yes - } - - effect = { - save_scope_as = founder - show_as_tooltip = { found_kingdom_of_bosnia_decision_scripted_effect = yes } - gain_heroic_legend_seed_tooltip_effect = yes - trigger_event = { id = east_europe.0101 } - #Notify other players. - every_player = { - limit = { - this != scope:founder - top_liege = { - OR = { - this = scope:founder - any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:founder } - } - } - } - trigger_event = east_europe.0102 - } - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_founded_kingdom_of_bosnia - } - set_global_variable = { - name = flag_founded_kingdom_of_bosnia - value = scope:founder - } - } - } - - cost = { - gold = { - value = 0 - if = { - limit = { - has_treasury = no - } - add = 300 - } - } - treasury = { - value = 0 - if = { - limit = { - has_treasury = yes - } - add = 300 - } - } - prestige = 200 - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} - -################################# -# Accuse the Krstjani of Heresy # -# by Ewan Cowhig Croft # -################################# -### Accuse the Krstjani of Heresy ### -accuse_krstjani_of_heresy_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds" - } - decision_group_type = major - - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 120 - empire = 120 - hegemony = 120 - } - - desc = accuse_krstjani_of_heresy_decision_desc - selection_tooltip = accuse_krstjani_of_heresy_decision_tooltip - - is_shown = { - top_liege = this - is_landed_or_landless_administrative = yes - exists = dynasty - #Gotta be an ecumenical Christian... - faith = { - OR = { religion_tag = eastern_orthodox_religion religion_tag = catholic_religion religion_tag = protestant_religion } - has_doctrine = special_doctrine_ecumenical_christian - } - #... with an existing Head of Faith. - exists = faith.religious_head - #Shouldn't be possible, but, just in case: you also can't be a Krstjani yourself. - NOT = { faith = faith:bosnian_church } - #The world mustn't already consider the Krstjani to be heretics. - faith:bosnian_church = { has_doctrine = special_doctrine_ecumenical_christian } - #Aaaaand you need an independent Krstjani neighbour of at least a notable level (i.e., at least the size of a fully-independent d_bosnia). - any_neighboring_top_liege_realm_owner = { accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = yes } - NOT = { #It mustn't have been done recently (this is removed in a hidden cooldown event after the chain is finished, if it fails). - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_krstjani_accused_of_heresy - } - } - #Should always be a playable government, ideally. - OR = { - government_has_flag = government_is_feudal - government_has_flag = government_is_clan - government_allows = administrative - } - } - - is_valid = { - #You must have sufficient clout. - piety_level >= high_piety_level - highest_held_title_tier >= tier_duchy - } - - is_valid_showing_failures_only = { - is_available_adult = yes - NOT = { has_trait = excommunicated } - } - - effect = { - save_scope_as = accuser - faith.religious_head = { save_scope_as = hof } - random_neighboring_top_liege_realm_owner = { - limit = { accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = yes } - save_scope_as = heretic - } - custom_tooltip = accuse_krstjani_of_heresy_flavour_effect.tt - #Begin the chain. - trigger_event = { id = east_europe.0111 } - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_krstjani_accused_of_heresy - } - } - } - - cost = { - piety = major_piety_value - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 50 - #Weight up for zealous characters. - modifier = { - add = 25 - has_trait = zealous - } - #Ironically, weight up for cynical characters: they stand to gain the most. - modifier = { - add = 15 - has_trait = cynical - } - #Mildly weight up crusaders, who would be more likely to see/look for heresy. - modifier = { - add = 10 - has_trait = faith_warrior - } - #Mildly weight up order members, who would be more likely to see/look for heresy. - modifier = { - add = 10 - has_trait = order_member - } - #Mildly weight up theologians, who would understand the theological problems of their neighbours best. - modifier = { - add = 10 - has_trait = theologian - } - #Exempt if any friend is Krstjani. - modifier = { - add = -100 - any_relation = { - type = friend - faith = faith:bosnian_church - } - } - #Exempt if any lover is Krstjani. - modifier = { - add = -100 - any_relation = { - type = lover - faith = faith:bosnian_church - } - } - #Exempt if any formal partner (spouse or concubine) is Krstjani. - modifier = { - add = -100 - any_consort = { faith = faith:bosnian_church } - } - #Exempt if any ally is Krstjani. - modifier = { - add = -100 - any_ally = { faith = faith:bosnian_church } - } - #Exempt the HRE: they're not fussed about some remote Balkan peasants. - modifier = { - add = -100 - any_held_title = { this = title:e_hre } - } - #Exempt the ERE: they almost certainly have bigger fish to fry. - modifier = { - add = -100 - any_held_title = { this = title:e_byzantium } - } - #Exempt characters who are at war: they're too busy. - modifier = { - add = -100 - is_at_war = yes - } - } -} - -##################################### -# Last Gasp of the Great Migrations # -# by Ewan Cowhig Croft # -##################################### -### Prepare to Cross the Carpathians ### -launch_hungarian_migration_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_destiny_goal.dds" - } - decision_group_type = major - - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 60 - kingdom = 60 - empire = 0 - hegemony = 0 - } - - desc = launch_hungarian_migration_decision_desc - selection_tooltip = launch_hungarian_migration_decision_tooltip - - is_shown = { - is_ruler = yes - is_landed = yes - exists = dynasty - #Either be independent, or else not beneath another Mogyer. - OR = { - top_liege = this - NOT = { liege = { culture = culture:mogyer } } - } - #Must be a steppe Hungarian. - culture = culture:mogyer - #Must not already control a large chunk of Pannonia. - NOT = { - any_county_in_region = { - region = custom_hungary - count >= 12 - OR = { - holder = root - holder = { - any_liege_or_above = { this = root } - } - } - } - } - #You can only do it once. - NOT = { - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_launched_hungarian_migration - } - } - #And the moment for the migration must not have passed. - current_date <= 911.1.1 - } - - is_valid = { - #An emperor does not voluntarily lose a tier. - highest_held_title_tier <= tier_kingdom - #Reshow this here so that players realise they're on a timer. - custom_description = { - text = launch_hungarian_migration_decision_before_last_date - current_date <= 911.1.1 - } - } - - is_valid_showing_failures_only = { - is_available_adult = yes - #Can't be fighting elsewhere. - is_at_war = no - } - - effect = { - save_scope_as = invader - custom_tooltip = launch_hungarian_migration_decision_flavour_effect - add_character_flag = undertaking_hungarian_migration - trigger_event = east_europe.0141 - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_launched_hungarian_migration - } - } - } - - cost = { - #Charge a reasonable lump of prestige. - prestige = 1000 - } - - ai_potential = { - #AI decision making is governed via event. - always = no - } - - ai_will_do = { - #AI decision making is governed via event. - base = 0 - } -} - -################################# -# Found the Kingdom of Livonia # -# by James Beaumont # -################################# -### Proclaim Terra Mariana ### -found_kingdom_of_livonia_decision = { - picture = { - reference = "gfx/interface/illustrations/decisions/decision_found_kingdom.dds" - } - decision_group_type = major - - ai_check_interval_by_tier = { - barony = 0 - county = 0 - duchy = 120 - kingdom = 0 - empire = 0 - hegemony = 0 - } - - desc = found_kingdom_of_livonia_decision_desc - selection_tooltip = found_kingdom_of_livonia_decision_tooltip - - is_shown = { - is_ruler = yes - is_playable_character = yes - exists = dynasty - OR = { - #Must be a Latvian or Christian in Livonia - AND = { - NOT = { - culture = culture:estonian #Estonians already have their Kingdom. - } - OR = { - #Considers themselves to be a "Balt" - root.culture = { has_cultural_pillar = heritage_baltic } - root.faith = { - religion_tag = baltic_religion - } - #Is a Crusader founding the Kingdom - root.faith = { - NOT = { religion_tag = baltic_religion } - NOT = { has_doctrine_parameter = unreformed } - } - } - capital_province = { - geographical_region = ghw_region_baltic - } - } - #Or just be Latvian. - culture = culture:latvian - } - NOT = { #You can only do it once. - is_target_in_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_founded_kingdom_of_livonia - } - } - highest_held_title_tier <= tier_duchy - } - - is_valid = { - OR = { #Independent or vassal of an Emperor - top_liege = this - top_liege.primary_title.tier >= tier_empire - } - prestige_level >= medium_prestige_level - - #You must control the kingdom's heartlands. - has_title = title:d_latgalia - has_title = title:d_courland - has_title = title:d_livonia - completely_controls_region = custom_latvia - } - - is_valid_showing_failures_only = { - is_landed = yes - is_available_adult = yes - } - - effect = { - save_scope_as = founder - show_as_tooltip = { found_kingdom_of_livonia_decision_scripted_effect = yes } - gain_heroic_legend_seed_tooltip_effect = yes - trigger_event = { id = east_europe.0200 } - #Notify other players. - every_player = { - limit = { - this != scope:founder - top_liege = { - OR = { - this = scope:founder - any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:founder } - } - } - } - trigger_event = east_europe.0201 - } - hidden_effect = { - add_to_global_variable_list = { - name = unavailable_unique_decisions - target = flag:flag_founded_kingdom_of_livonia - } - } - } - - cost = { - gold = { - value = 0 - if = { - limit = { - has_treasury = no - } - add = major_gold_value - } - } - treasury = { - value = 0 - if = { - limit = { - has_treasury = yes - } - add = major_gold_value - } - } - } - - ai_potential = { - always = yes - } - - ai_will_do = { - base = 100 - } -} +####DECISIONS LIST### +# +##unite_the_western_slavs_decision +##unite_the_southern_slavs_decision +##unite_the_slavs_decision +##promote_hungarian_settlement_decision +##revive_magyar_paganism_decision +# +#### Unite the West Slavs ### +#unite_the_western_slavs_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_realm.dds" +# } +# decision_group_type = major +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 120 +# empire = 120 +# hegemony = 120 +# } +# desc = unite_the_western_slavs_decision_desc +# +# is_shown = { +# culture = { has_cultural_pillar = heritage_west_slavic } +# NOT = { +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_western_slavs_decision +# } +# } +# } +# +# is_valid = { +# culture = { has_cultural_pillar = heritage_west_slavic } +# completely_controls_region = custom_west_slavia #Has de jure Lands +# OR = { +# custom_description = { +# text = unite_the_western_slavs_decision_tt_1 +# OR = { +# has_primary_title = title:k_poland +# has_primary_title = title:k_pomerania +# has_primary_title = title:k_bohemia +# has_primary_title = title:k_moravia +# has_primary_title = title:k_sorbia +# } +# } +# custom_description = { +# text = unite_the_western_slavs_decision_tt_2 +# AND = { +# highest_held_title_tier = tier_empire +# OR = { +# has_title = title:k_poland +# has_title = title:k_pomerania +# has_title = title:k_bohemia +# has_title = title:k_moravia +# has_title = title:k_sorbia +# } +# } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# } +# +# effect = { +# gain_heroic_legend_seed_tooltip_effect = yes +# save_scope_as = western_slav_uniter +# +# show_as_tooltip = { unite_the_western_slavs_decision_effects = yes } #Actually applied in east_europe.0001 - prestige, laws, title, innovation effects +# +# #Events +# trigger_event = east_europe.0001 +# every_player = { +# limit = { +# this != scope:western_slav_uniter +# is_within_diplo_range = { CHARACTER = scope:western_slav_uniter } +# } +# trigger_event = east_europe.0002 +# } +# +# #Can only be done once +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_western_slavs_decision +# } +# set_global_variable = { +# name = unite_the_western_slavs_decision +# value = scope:western_slav_uniter +# } +# set_global_variable = { +# name = unite_the_western_slavs_decision_title +# value = scope:western_slav_uniter.primary_title +# } +# close_view = { +# view = decisions +# player = root +# } +# } +# +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +# +#### Unite the South Slavs ### +#unite_the_southern_slavs_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_realm.dds" +# } +# decision_group_type = major +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 120 +# empire = 120 +# hegemony = 120 +# } +# desc = unite_the_southern_slavs_decision_desc +# +# is_shown = { +# culture = { has_cultural_pillar = heritage_south_slavic } +# NOR = { +# has_culture = culture:vlach # Not technically Slavic despite being in the South Slavic group. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_southern_slavs_decision +# } +# } +# } +# +# is_valid = { +# culture = { has_cultural_pillar = heritage_south_slavic } +# completely_controls_region = custom_south_slavia #Has de jure Lands +# OR = { +# has_primary_title = title:k_croatia +# has_primary_title = title:k_serbia +# has_primary_title = title:k_bulgaria +# has_primary_title = title:k_dacia +# has_primary_title = title:k_moldavia +# has_primary_title = title:k_bosnia +# } +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# } +# +# effect = { +# gain_heroic_legend_seed_tooltip_effect = yes +# save_scope_as = southern_slav_uniter +# +# show_as_tooltip = { unite_the_southern_slavs_decision_effects = yes } #Actually applied in east_europe.0006 - prestige, laws, title, innovation effects +# +# #Events +# trigger_event = east_europe.0005 +# every_player = { +# limit = { +# this != scope:southern_slav_uniter +# is_within_diplo_range = { CHARACTER = scope:southern_slav_uniter } +# } +# trigger_event = east_europe.0006 +# } +# +# #Can only be done once +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_southern_slavs_decision +# } +# set_global_variable = { +# name = unite_the_southern_slavs_decision +# value = scope:southern_slav_uniter +# } +# set_global_variable = { +# name = unite_the_southern_slavs_decision_title +# value = scope:southern_slav_uniter.primary_title +# } +# } +# +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +# +#### Unite the Slavs ### +#unite_the_slavs_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_realm.dds" +# } +# decision_group_type = major +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 120 +# empire = 120 +# hegemony = 120 +# } +# desc = unite_the_slavs_decision_desc +# +# is_shown = { +# OR = { +# culture = { has_cultural_pillar = heritage_west_slavic } +# culture = { has_cultural_pillar = heritage_east_slavic } +# culture = { has_cultural_pillar = heritage_south_slavic } +# } +# NOR = { +# has_culture = culture:vlach # Not technically Slavic despite being in the South Slavic group. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_slavs_decision +# } +# } +# } +# +# is_valid = { +# OR = { +# culture = { has_cultural_pillar = heritage_west_slavic } +# culture = { has_cultural_pillar = heritage_east_slavic } +# culture = { has_cultural_pillar = heritage_south_slavic } +# } +# completely_controls_region = custom_slavia +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# } +# +# effect = { +# save_scope_as = slav_uniter +# +# show_as_tooltip = { unite_the_slavs_decision_effects = yes } #Actually applied in east_europe.0010 - prestige, laws, title, innovation effects +# +# #Events +# trigger_event = east_europe.0010 +# every_player = { +# limit = { +# this != scope:slav_uniter +# is_within_diplo_range = { CHARACTER = scope:slav_uniter } +# } +# trigger_event = east_europe.0011 +# } +# +# #Can only happen once +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:unite_the_slavs_decision +# } +# set_global_variable = { +# name = unite_the_slavs_decision +# value = scope:slav_uniter +# } +# } +# +# +# cost = { +# gold = { +# value = 0 +# if = { +# limit = { +# has_treasury = no +# } +# add = 600 +# } +# } +# treasury = { +# value = 0 +# if = { +# limit = { +# has_treasury = yes +# } +# add = 600 +# } +# } +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +# +#### Defenders of [ROOT.Char.GetFaith.HighGodName] ### +#defenders_of_highgod_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_personal_religious.dds" +# } +# decision_group_type = major +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 120 +# empire = 120 +# hegemony = 120 +# } +# desc = defenders_of_highgod_decision_desc +# +# is_shown = { +# OR = { +# faith = faith:baltic_pagan +# faith = faith:chernobozhye +# faith = faith:finnish_pagan +# } +# #Only once per faith +# NOR = { +# AND = { +# faith = faith:baltic_pagan +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_baltic_decision +# } +# } +# AND = { +# faith = faith:chernobozhye +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_slavic_decision +# } +# } +# AND = { +# faith = faith:finnish_pagan +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_finnish_decision +# } +# } +# } +# } +# +# is_valid = { +# #Holds a holy site +# faith = { +# any_holy_site = { +# county = { +# holder = root +# title_province = { has_special_building = no } +# } +# } +# } +# piety_level >= 3 +# #Have loyal powerful vassals +# trigger_if = { +# limit = { +# OR = { +# highest_held_title_tier = tier_county +# highest_held_title_tier = tier_duchy +# } +# } +# any_vassal = { +# count >= 3 #Counts/dukes need 3 +# is_powerful_vassal = yes +# opinion = { +# target = root +# value >= high_positive_opinion +# } +# } +# } +# trigger_if = { +# limit = { highest_held_title_tier = tier_kingdom } +# any_vassal = { +# count >= 4 #Kings need 4 +# is_powerful_vassal = yes +# opinion = { +# target = root +# value >= high_positive_opinion +# } +# } +# } +# trigger_if = { +# limit = { highest_held_title_tier = tier_empire } +# any_vassal = { +# count >= 5 #Emperor need 5 +# is_powerful_vassal = yes +# opinion = { +# target = root +# value >= high_positive_opinion +# } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# top_liege = this +# is_landed = yes +# } +# +# +# effect = { +# save_scope_as = defender_of_highgod +# +# show_as_tooltip = { defenders_of_highgod_decision_effects = yes } #Actually applied in east_europe.0010 - prestige, laws, title, innovation effects +# +# #Events +# if = { +# limit = { +# faith = { +# any_holy_site = { +# count > 1 +# county.holder = root +# title_province = { has_special_building = no } +# } +# } +# } +# trigger_event = east_europe.0015 +# } +# else = { +# faith = { +# random_holy_site = { +# limit = { +# county.holder = root +# title_province = { has_special_building = no } +# } +# save_scope_as = holy_site +# } +# } +# trigger_event = east_europe.0016 +# } +# #Event to every player (east_europe.0017) is actually send through east_europe.0016 to make sure the right holy site scope is set +# +# #Can only happen once per faith +# if = { +# limit = { faith = faith:baltic_pagan } +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_baltic_decision +# } +# } +# else_if = { +# limit = { faith = faith:chernobozhye } +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_slavic_decision +# } +# } +# else_if = { +# limit = { faith = faith:finnish_pagan } +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:defenders_of_highgod_finnish_decision +# } +# } +# } +# +# cost = { +# gold = { +# value = 0 +# if = { +# limit = { +# has_treasury = no +# } +# add = 100 +# } +# } +# treasury = { +# value = 0 +# if = { +# limit = { +# has_treasury = yes +# } +# add = 100 +# } +# } +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +##Hungary: historical re-settlement program. +#### Promote Christian Settlements ### +#promote_hungarian_settlement_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_realm.dds" +# } +# desc = promote_hungarian_settlement_decision_desc +# selection_tooltip = promote_hungarian_settlement_decision_tooltip +# decision_group_type = major +# ai_goal = yes +# +# is_shown = { +# is_ruler = yes +# is_playable_character = yes +# game_start_date < 1066.1.1 +# culture = { has_cultural_pillar = heritage_magyar } +# NOT = { #Can only do it once. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_promoted_hungarian_settlement +# } +# } +# NOT = { #Can only do either or. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_revived_magyar_paganism +# } +# } +# OR = { +# has_title = title:k_hungary +# has_title = title:e_carpathia +# } +# any_neighboring_top_liege_realm_owner = { #There are same reli neighboring Realms/Empires to take people from. +# OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } +# count >= 2 +# } +# } +# +# is_valid = { +# # Must be an Ecumenical Christian +# custom_description = { +# text = promote_hungarian_settlement_decision_ecumenical_christian +# faith = { #Denomination of Faith must not be a heresy and must have some degree of control over its core regions. +# OR = { religion = religion:eastern_orthodox_religion religion = religion:catholic_religion religion = religion:protestant_religion } +# has_doctrine = special_doctrine_ecumenical_christian +# } +# } +# +# #Must completely control the Carpathian Basin (Hungary De Jure) +# completely_controls = title:k_hungary +# +# # Capital is Hungarian culture group +# capital_province = { culture = { has_cultural_pillar = heritage_magyar } } +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# is_capable_adult = yes +# is_imprisoned = no +# top_liege = this +# is_at_war = no +# } +# +# cost = { +# prestige = 2000 +# piety = 500 +# } +# +# effect = { +# show_as_tooltip = { +# promote_hungarian_settlement_decision_scripted_effect = yes +# } +# trigger_event = { +# id = east_europe.0030 +# } +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_promoted_hungarian_settlement +# } +# } +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 50 +# ai_value_modifier = { +# ai_zeal = 1.0 +# ai_greed = 1.0 +# } +# } +#} +# +########################################## +## Return to Magyar Paganism # +## by Flavio Verna & Ewan Cowhig Croft # +########################################## +#### Revive Táltosism ### +#revive_magyar_paganism_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds" +# } +# desc = revive_magyar_paganism_decision_desc +# selection_tooltip = revive_magyar_paganism_decision_tooltip +# decision_group_type = major +# ai_check_interval = 0 +# +# is_shown = { +# is_landed = yes +# #Must be some flavour of Magyar. +# culture = { has_cultural_pillar = heritage_magyar } +# #Should be done early. +# custom_tooltip = { +# text = revive_taltoism_decision_before_last_date +# current_date <= 1100.1.1 +# } +# NOR = { +# #Can only do it once. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_revived_magyar_paganism +# } +# } +# #Must be the ruler of the Carpathian Basin. +# any_sub_realm_county = { +# title_province = { geographical_region = custom_hungary } +# } +# #Must be feudalised. +# OR = { +# government_has_flag = government_is_feudal +# government_allows = administrative +# } +# #Must be something other than pagan. +# NOT = { +# faith.religion = { is_in_family = rf_pagan } +# } +# #Magyar Paganism must not have been reformed. +# religion:hungaric_religion = { +# any_faith = { +# count = all +# has_doctrine_parameter = unreformed +# } +# } +# } +# +# is_valid = { +# #Must be suitably prestigious. +# prestige_level >= high_prestige_level +# #Either you hold k_hungary directly, or your vassal does. +# OR = { +# has_title = title:k_hungary +# AND = { +# has_title = title:e_carpathia +# any_vassal = { has_title = title:k_hungary } +# } +# } +# #Must control at least 80% of de jure Hungary (usually we'd use a region, but if Hungary has shrunk/grown for some reason, the people and title are more important than the actual area). +# any_realm_county = { +# count >= 30 +# culture = { has_cultural_pillar = heritage_magyar } +# } +# #Must be a noted scholar of theology (and thus filled out the entire Theologian tree). +# OR = { +# piety_level >= high_piety_level +# has_trait = theologian +# } +# #Should be done early: reiterate this here so the player isn't surprised by losing the decision when shifting up an era. +# custom_tooltip = { +# text = revive_taltoism_decision_before_last_date +# current_date <= 1100.1.1 +# } +# } +# +# is_valid_showing_failures_only = { +# is_capable_adult = yes +# is_imprisoned = no +# is_at_war = no +# top_liege = this +# } +# +# cost = { +# piety = 2000 +# } +# +# effect = { +# gain_holy_legend_seed_tooltip_effect = yes +# custom_tooltip = revive_magyar_paganism_decision.adjust_the_faith.tt +# show_as_tooltip = { revive_magyar_paganism_decision_scripted_effect = yes } +# trigger_event = { id = east_europe.0032 } +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_revived_magyar_paganism +# } +# } +# } +# +# ai_potential = { +# always = no +# } +#} +# +################################## +## Found the Kingdom of Bosnia # +## by Ewan Cowhig Croft # +################################## +#### Found Kingdom of Bosnia ### +#found_kingdom_of_bosnia_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_found_kingdom.dds" +# } +# decision_group_type = major +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# +# desc = found_kingdom_of_bosnia_decision_desc +# selection_tooltip = found_kingdom_of_bosnia_decision_tooltip +# +# is_shown = { +# is_ruler = yes +# is_playable_character = yes +# exists = dynasty +# OR = { +# #Must be a Serb or Croat within the Bosnian highlands. +# AND = { +# OR = { +# culture = culture:serbian +# culture = culture:croatian +# } +# capital_county = { +# OR = { +# this = title:c_vodica +# this = title:c_pset +# this = title:c_vrbas +# this = title:c_donjikraji +# this = title:c_usora +# this = title:c_rama +# this = title:c_soli +# this = title:c_sarajevo +# this = title:c_zavrsje +# this = title:c_zachlumia +# this = title:c_pagania +# } +# } +# } +# #Or just be Bosnian. +# culture = culture:bosnian +# } +# NOT = { #You can only do it once. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_founded_kingdom_of_bosnia +# } +# } +# NOR = { +# government_has_flag = government_is_mercenary +# government_has_flag = government_is_holy_order +# } +# highest_held_title_tier <= tier_duchy +# } +# +# is_valid = { +# #You must have sufficient clout. +# top_liege = this +# +# #You must control the kingdom's heartlands. +# has_title = title:d_bosna +# has_title = title:d_lower_bosna +# has_title = title:d_usora +# completely_controls = title:d_bosna +# completely_controls = title:d_lower_bosna +# completely_controls = title:d_usora +# +# #You must be sufficiently advanced to conceive of having a separate kingdom, rather than being Croatian or Serbian. +# culture = { has_cultural_era_or_later = culture_era_early_medieval } +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# is_available_adult = yes +# } +# +# effect = { +# save_scope_as = founder +# show_as_tooltip = { found_kingdom_of_bosnia_decision_scripted_effect = yes } +# gain_heroic_legend_seed_tooltip_effect = yes +# trigger_event = { id = east_europe.0101 } +# #Notify other players. +# every_player = { +# limit = { +# this != scope:founder +# top_liege = { +# OR = { +# this = scope:founder +# any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:founder } +# } +# } +# } +# trigger_event = east_europe.0102 +# } +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_founded_kingdom_of_bosnia +# } +# set_global_variable = { +# name = flag_founded_kingdom_of_bosnia +# value = scope:founder +# } +# } +# } +# +# cost = { +# gold = { +# value = 0 +# if = { +# limit = { +# has_treasury = no +# } +# add = 300 +# } +# } +# treasury = { +# value = 0 +# if = { +# limit = { +# has_treasury = yes +# } +# add = 300 +# } +# } +# prestige = 200 +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +################################## +## Accuse the Krstjani of Heresy # +## by Ewan Cowhig Croft # +################################## +#### Accuse the Krstjani of Heresy ### +#accuse_krstjani_of_heresy_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_major_religion.dds" +# } +# decision_group_type = major +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 120 +# empire = 120 +# hegemony = 120 +# } +# +# desc = accuse_krstjani_of_heresy_decision_desc +# selection_tooltip = accuse_krstjani_of_heresy_decision_tooltip +# +# is_shown = { +# top_liege = this +# is_landed_or_landless_administrative = yes +# exists = dynasty +# #Gotta be an ecumenical Christian... +# faith = { +# OR = { religion_tag = eastern_orthodox_religion religion_tag = catholic_religion religion_tag = protestant_religion } +# has_doctrine = special_doctrine_ecumenical_christian +# } +# #... with an existing Head of Faith. +# exists = faith.religious_head +# #Shouldn't be possible, but, just in case: you also can't be a Krstjani yourself. +# NOT = { faith = faith:bosnian_church } +# #The world mustn't already consider the Krstjani to be heretics. +# faith:bosnian_church = { has_doctrine = special_doctrine_ecumenical_christian } +# #Aaaaand you need an independent Krstjani neighbour of at least a notable level (i.e., at least the size of a fully-independent d_bosnia). +# any_neighboring_top_liege_realm_owner = { accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = yes } +# NOT = { #It mustn't have been done recently (this is removed in a hidden cooldown event after the chain is finished, if it fails). +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_krstjani_accused_of_heresy +# } +# } +# #Should always be a playable government, ideally. +# OR = { +# government_has_flag = government_is_feudal +# government_has_flag = government_is_clan +# government_allows = administrative +# } +# } +# +# is_valid = { +# #You must have sufficient clout. +# piety_level >= high_piety_level +# highest_held_title_tier >= tier_duchy +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# NOT = { has_trait = excommunicated } +# } +# +# effect = { +# save_scope_as = accuser +# faith.religious_head = { save_scope_as = hof } +# random_neighboring_top_liege_realm_owner = { +# limit = { accuse_krstjani_of_heresy_decision_suitable_krstjani_realm_owner_trigger = yes } +# save_scope_as = heretic +# } +# custom_tooltip = accuse_krstjani_of_heresy_flavour_effect.tt +# #Begin the chain. +# trigger_event = { id = east_europe.0111 } +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_krstjani_accused_of_heresy +# } +# } +# } +# +# cost = { +# piety = major_piety_value +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 50 +# #Weight up for zealous characters. +# modifier = { +# add = 25 +# has_trait = zealous +# } +# #Ironically, weight up for cynical characters: they stand to gain the most. +# modifier = { +# add = 15 +# has_trait = cynical +# } +# #Mildly weight up crusaders, who would be more likely to see/look for heresy. +# modifier = { +# add = 10 +# has_trait = faith_warrior +# } +# #Mildly weight up order members, who would be more likely to see/look for heresy. +# modifier = { +# add = 10 +# has_trait = order_member +# } +# #Mildly weight up theologians, who would understand the theological problems of their neighbours best. +# modifier = { +# add = 10 +# has_trait = theologian +# } +# #Exempt if any friend is Krstjani. +# modifier = { +# add = -100 +# any_relation = { +# type = friend +# faith = faith:bosnian_church +# } +# } +# #Exempt if any lover is Krstjani. +# modifier = { +# add = -100 +# any_relation = { +# type = lover +# faith = faith:bosnian_church +# } +# } +# #Exempt if any formal partner (spouse or concubine) is Krstjani. +# modifier = { +# add = -100 +# any_consort = { faith = faith:bosnian_church } +# } +# #Exempt if any ally is Krstjani. +# modifier = { +# add = -100 +# any_ally = { faith = faith:bosnian_church } +# } +# #Exempt the HRE: they're not fussed about some remote Balkan peasants. +# modifier = { +# add = -100 +# any_held_title = { this = title:e_hre } +# } +# #Exempt the ERE: they almost certainly have bigger fish to fry. +# modifier = { +# add = -100 +# any_held_title = { this = title:e_byzantium } +# } +# #Exempt characters who are at war: they're too busy. +# modifier = { +# add = -100 +# is_at_war = yes +# } +# } +#} +# +###################################### +## Last Gasp of the Great Migrations # +## by Ewan Cowhig Croft # +###################################### +#### Prepare to Cross the Carpathians ### +#launch_hungarian_migration_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_destiny_goal.dds" +# } +# decision_group_type = major +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 60 +# kingdom = 60 +# empire = 0 +# hegemony = 0 +# } +# +# desc = launch_hungarian_migration_decision_desc +# selection_tooltip = launch_hungarian_migration_decision_tooltip +# +# is_shown = { +# is_ruler = yes +# is_landed = yes +# exists = dynasty +# #Either be independent, or else not beneath another Mogyer. +# OR = { +# top_liege = this +# NOT = { liege = { culture = culture:mogyer } } +# } +# #Must be a steppe Hungarian. +# culture = culture:mogyer +# #Must not already control a large chunk of Pannonia. +# NOT = { +# any_county_in_region = { +# region = custom_hungary +# count >= 12 +# OR = { +# holder = root +# holder = { +# any_liege_or_above = { this = root } +# } +# } +# } +# } +# #You can only do it once. +# NOT = { +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_launched_hungarian_migration +# } +# } +# #And the moment for the migration must not have passed. +# current_date <= 911.1.1 +# } +# +# is_valid = { +# #An emperor does not voluntarily lose a tier. +# highest_held_title_tier <= tier_kingdom +# #Reshow this here so that players realise they're on a timer. +# custom_description = { +# text = launch_hungarian_migration_decision_before_last_date +# current_date <= 911.1.1 +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# #Can't be fighting elsewhere. +# is_at_war = no +# } +# +# effect = { +# save_scope_as = invader +# custom_tooltip = launch_hungarian_migration_decision_flavour_effect +# add_character_flag = undertaking_hungarian_migration +# trigger_event = east_europe.0141 +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_launched_hungarian_migration +# } +# } +# } +# +# cost = { +# #Charge a reasonable lump of prestige. +# prestige = 1000 +# } +# +# ai_potential = { +# #AI decision making is governed via event. +# always = no +# } +# +# ai_will_do = { +# #AI decision making is governed via event. +# base = 0 +# } +#} +# +################################## +## Found the Kingdom of Livonia # +## by James Beaumont # +################################## +#### Proclaim Terra Mariana ### +#found_kingdom_of_livonia_decision = { +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_found_kingdom.dds" +# } +# decision_group_type = major +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 120 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# +# desc = found_kingdom_of_livonia_decision_desc +# selection_tooltip = found_kingdom_of_livonia_decision_tooltip +# +# is_shown = { +# is_ruler = yes +# is_playable_character = yes +# exists = dynasty +# OR = { +# #Must be a Latvian or Christian in Livonia +# AND = { +# NOT = { +# culture = culture:estonian #Estonians already have their Kingdom. +# } +# OR = { +# #Considers themselves to be a "Balt" +# root.culture = { has_cultural_pillar = heritage_baltic } +# root.faith = { +# religion_tag = baltic_religion +# } +# #Is a Crusader founding the Kingdom +# root.faith = { +# NOT = { religion_tag = baltic_religion } +# NOT = { has_doctrine_parameter = unreformed } +# } +# } +# capital_province = { +# geographical_region = ghw_region_baltic +# } +# } +# #Or just be Latvian. +# culture = culture:latvian +# } +# NOT = { #You can only do it once. +# is_target_in_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_founded_kingdom_of_livonia +# } +# } +# highest_held_title_tier <= tier_duchy +# } +# +# is_valid = { +# OR = { #Independent or vassal of an Emperor +# top_liege = this +# top_liege.primary_title.tier >= tier_empire +# } +# prestige_level >= medium_prestige_level +# +# #You must control the kingdom's heartlands. +# has_title = title:d_latgalia +# has_title = title:d_courland +# has_title = title:d_livonia +# completely_controls_region = custom_latvia +# } +# +# is_valid_showing_failures_only = { +# is_landed = yes +# is_available_adult = yes +# } +# +# effect = { +# save_scope_as = founder +# show_as_tooltip = { found_kingdom_of_livonia_decision_scripted_effect = yes } +# gain_heroic_legend_seed_tooltip_effect = yes +# trigger_event = { id = east_europe.0200 } +# #Notify other players. +# every_player = { +# limit = { +# this != scope:founder +# top_liege = { +# OR = { +# this = scope:founder +# any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:founder } +# } +# } +# } +# trigger_event = east_europe.0201 +# } +# hidden_effect = { +# add_to_global_variable_list = { +# name = unavailable_unique_decisions +# target = flag:flag_founded_kingdom_of_livonia +# } +# } +# } +# +# cost = { +# gold = { +# value = 0 +# if = { +# limit = { +# has_treasury = no +# } +# add = major_gold_value +# } +# } +# treasury = { +# value = 0 +# if = { +# limit = { +# has_treasury = yes +# } +# add = major_gold_value +# } +# } +# } +# +# ai_potential = { +# always = yes +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# \ No newline at end of file diff --git a/common/decisions/80_major_decisions_roman.txt b/common/decisions/80_major_decisions_roman.txt index 40602f25..6470d3eb 100644 --- a/common/decisions/80_major_decisions_roman.txt +++ b/common/decisions/80_major_decisions_roman.txt @@ -336,7 +336,7 @@ form_rum_sultanate_decision = { NOT = { OR = { faith.religion = religion:eastern_orthodox_religion faith.religion = religion:catholic_religion faith.religion = religion:protestant_religion } } OR = { top_liege = this - top_liege = { faith.religion = faith:ashari.religion } + top_liege = { faith.religion = faith:aqlani.religion } } capital_province = { OR = { diff --git a/common/decisions/dlc_decisions/tgp/tgp_japan_decisions.txt b/common/decisions/dlc_decisions/tgp/tgp_japan_decisions.txt new file mode 100644 index 00000000..a5be8fb7 --- /dev/null +++ b/common/decisions/dlc_decisions/tgp/tgp_japan_decisions.txt @@ -0,0 +1,1880 @@ +## Admin to Feudal +#### Establish Sōryō Fief ### +#tgp_japan_establish_house_fief_decision = { +# decision_group_type = major +# title = tgp_japan_establish_house_fief_decision +# desc = tgp_japan_establish_house_fief_decision_desc +# selection_tooltip = tgp_japan_establish_house_fief_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/decisions/tgp_house_fief.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = 500 +# add = { +# value = 250 +# multiply = domain_size +# } +# } +# gold = { +# value = 0 +# add = { +# value = 50 +# multiply = domain_size +# } +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# has_government = japan_administrative_government +# is_landed = yes +# tgp_has_ceremonial_liege_title_trigger = no +# is_independent_ruler = no +# } +# +# is_valid = { +# # Is a Ritsuryo Governor +# tgp_is_japanese_governor_trigger = yes +# trigger_if = { +# limit = { is_ai = no } # AI are an exception as they can continue to play despite not being House Heads +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_aspiration_trigger +# house = { +# NOR = { +# has_house_aspiration_parameter = ceremony_cheaper_feasts +# has_house_aspiration_parameter = unlocks_japanese_manor_archive +# } +# } +# } +# # Domicile in current Governorship +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_domicile_in_governorship_trigger +# domicile.domicile_location.county.holder ?= this +# } +# # Domicile level +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_domicile_building_trigger +# domicile ?= { has_domicile_parameter = unlocks_establish_fief_decision } +# } +# } +# trigger_else = { # AI heirs of players will never do this +# trigger_if = { +# limit = { +# house.house_head ?= { +# government_has_flag = government_is_japan_feudal +# } +# } +# always = yes +# } +# trigger_else = { +# NOT = { +# house.house_head ?= { +# is_ai = no +# any_held_title = { is_noble_family_title = yes } +# is_close_family_of = root +# player_heir = root +# } +# } +# } +# } +# # No direct descendant is currently Regent or Governor +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_direct_descendent_position_trigger +# any_descendants_are_governors = no +# } +# # No direct descendant is liege or above +# custom_tooltip = { +# text = create_cadet_branch_decision_liege_is_descendant +# any_liege_or_above_is_descendant = no +# } +# # Crown Authority +# trigger_if = { +# limit = { +# top_liege = { +# government_allows = administrative +# NOT = { government_has_flag = government_is_japan_feudal } +# } +# } +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_centralization_trigger +# NOT = { has_realm_law = japanese_bureaucracy_3 } +# } +# } +# # Prevent ai flipflopping back after demand admin gov interaction +# trigger_if = { +# limit = { is_ai = yes } +# NOR = { +# var:demand_admin_accepted_ai_block ?= liege +# var:demand_admin_accepted_ai_block ?= top_liege +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# # Not Yamato +# tgp_is_in_ceremonial_house_trigger = no +# # Must be a Count or Higher +# highest_held_title_tier >= tier_county +# # Domicile not in capital +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_capital_domicile_trigger +# NOT = { domicile.domicile_location.county ?= top_liege.capital_county } +# } +# # Is not Regent +# is_independent_ruler = no +# } +# +# # Used by Ruler Objective advice +# advice = { +# region = world_asia_japan +# } +# +# effect = { +# add_achievement_global_variable_effect = { +# VARIABLE = achieved_ep4_18_yes_i_need_my_samurai_achievement +# VALUE = yes +# } +# show_as_tooltip = { +# # Change Dynasty +# if = { +# limit = { tgp_japan_cadet_creates_dynasty_trigger = yes } +# custom_tooltip = tgp_japan_establish_house_fief_found_house_effect +# } +# else_if ={ +# limit = { is_house_head = no } +# custom_tooltip = create_noble_family_tt +# } +# # Change from Ritsuryo (Admin) to Soryo (Feudal) +# custom_tooltip = tgp_japan_establish_house_fief_change_government_type_effect +# # Crime to Kampaku +# if = { +# limit = { +# is_independent_ruler = no +# top_liege = { government_allows = administrative } +# NOR = { +# var:petition_liege_house_fief_allowed_flag ?= scope:new_head.top_liege +# top_liege = { +# government_has_flag = government_is_japan_feudal +# } +# } +# } +# custom_tooltip = tgp_japan_establish_house_fief_kampaku_crime_effect +# } +# } +# hidden_effect = { +# if = { +# limit = { is_ai = yes } +# if = { # Move AI domicile automatically +# limit = { +# exists = domicile +# is_landed = yes +# domicile.domicile_location.county != capital_county +# } +# domicile = { move_domicile = root.capital_province } +# } +# house = { # Help for AI to move to a Soryo aspiration +# if = { +# limit = { +# OR = { +# has_house_aspiration_parameter = ceremony_cheaper_feasts +# has_house_aspiration_parameter = unlocks_japanese_manor_archive +# } +# } +# random_list = { +# 1 = { set_house_aspiration = { type = determination } } +# 1 = { set_house_aspiration = { type = prosperity } } +# 1 = { set_house_aspiration = { type = strength } } +# } +# } +# } +# } +# } +# # Fire relevant event +# if = { +# limit = { +# NOR = { +# dynasty.dynast ?= this +# house.house_head ?= this +# } +# } +# add_character_flag = establish_house_fief +# trigger_event = tgp_japan_decision.9001 +# } +# else = { trigger_event = tgp_japan_decision.9002 } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 6 +# duchy = 6 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# ai_potential = { +# is_landed = yes +# has_government = japan_administrative_government +# NOT = { # Reluctance to forgo potential to become Kampaku +# top_liege = { +# has_realm_law = japanese_regency_succession_law +# primary_title = { "place_in_line_of_succession(root)" <= 3 } +# } +# } +# } +# ai_will_do = { +# base = -25 +# ai_value_modifier = { # Personality +# ai_boldness = 0.25 +# ai_energy = 0.25 +# ai_honor = -0.25 +# } +# modifier = { +# has_trait = ambitious +# add = 10 +# } +# modifier = { +# has_trait = content +# add = -10 +# } +# modifier = { +# has_trait = brave +# add = 10 +# } +# modifier = { +# has_trait = craven +# add = -10 +# } +# modifier = { +# has_trait = vengeful +# add = 10 +# } +# modifier = { +# has_trait = forgiving +# add = -10 +# } +# modifier = { +# has_trait = impatient +# add = 10 +# } +# modifier = { +# has_trait = patient +# add = -10 +# } +# modifier = { +# has_trait = greedy +# add = 10 +# } +# modifier = { +# has_trait = generous +# add = -10 +# } +# modifier = { +# has_trait = arrogant +# add = 10 +# } +# modifier = { +# has_trait = humble +# add = -10 +# } +# modifier = { # Prosperity +# house ?= { has_house_aspiration_parameter = unlocks_japanese_manor_brewery } +# add = 25 +# } +# modifier = { # Determination +# house ?= { has_house_aspiration_parameter = determination_spymaster_task_find_secrets_efficiency } +# add = 50 +# } +# modifier = { # Strength +# house ?= { has_house_aspiration_parameter = unlocks_japanese_manor_armory } +# add = 100 +# } +# modifier = { # Reluctance to turn against successful bloc +# house.house_confederation ?= { +# leading_house.house_head ?= { has_same_government = root } +# cohesion >= 50 +# } +# add = -100 +# } +# modifier = { # Reluctance to turn against house head +# is_house_head = no +# house.house_confederation.leading_house.house_head ?= { +# house = root.house +# has_same_government = root +# } +# add = -15 +# } +# modifier = { # Encouraged by nearby +# any_neighboring_realm_same_rank_owner = { government_has_flag = government_is_japan_feudal } +# add = 25 +# } +# modifier = { +# NOT = { exists = house.house_confederation } +# add = 25 +# } +# modifier = { +# add = { +# value = "root.capital_province.squared_distance(root.top_liege.capital_province)" +# divide = 100000 +# } +# } +# modifier = { +# add = { +# value = maa_regiments_count +# multiply = 5 +# } +# } +# modifier = { +# add = { +# value = gold +# divide = 100 +# } +# } +# modifier = { +# add = { +# value = military_power +# divide = 1000 +# } +# } +# modifier = { +# add = { +# value = 0 +# every_ally = { +# limit = { +# is_landed = yes +# top_liege = root.top_liege +# NOT = { government_allows = administrative } +# } +# add = 30 +# } +# } +# } +# modifier = { +# current_date <= 900.1.1 +# add = -75 +# } +# modifier = { +# current_date <= 1000.1.1 +# add = -75 +# } +# modifier = { +# current_date >= 1100.1.1 +# add = 75 +# } +# modifier = { +# current_date >= 1200.1.1 +# add = 75 +# } +# modifier = { +# vassal_contract_has_flag = japan_administrative_province_military +# add = 75 +# } +# modifier = { +# has_trait = education_martial +# add = 20 +# } +# modifier = { +# has_realm_law = japanese_bureaucracy_1 +# add = 10 +# } +# modifier = { +# has_realm_law = japanese_bureaucracy_2 +# add = 20 +# } +# modifier = { +# has_realm_law = japanese_bureaucracy_3 +# add = 30 +# } +# opinion_modifier = { # Opinion of liege +# who = root +# opinion_target = top_liege +# multiplier = -0.5 +# } +# opinion_modifier = { # Opinion of house head +# trigger = { is_house_head = no } +# who = root +# opinion_target = house.house_head +# multiplier = -0.5 +# } +# opinion_modifier = { # Opinion of bloc leader +# trigger = { +# exists = house.house_confederation.leading_house.house_head +# house.house_confederation.leading_house.house_head != root +# } +# who = root +# opinion_target = house.house_confederation.leading_house.house_head +# multiplier = -0.5 +# } +# } +#} +# +#### Abandon the Bureaucracy ### +#tgp_japan_establish_soryo_manor_decision = { +# decision_group_type = major +# title = tgp_japan_establish_soryo_manor_decision +# desc = tgp_japan_establish_soryo_manor_decision_desc +# selection_tooltip = tgp_japan_establish_house_fief_decision_tooltip +# picture = { +# reference = "gfx/interface/illustrations/decisions/tgp_house_fief.dds" +# } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = 500 +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# has_government = japan_administrative_government +# tgp_has_ceremonial_liege_title_trigger = no +# is_landed = no +# exists = domicile +# } +# +# is_valid = { +# # Is a Ritsuryo Governor +# has_government = japan_administrative_government +# trigger_if = { +# limit = { is_ai = no } # AI are an exception as they can continue to play despite not being House Heads +# # Holds Noble Family title +# custom_tooltip = { +# text = is_house_head_of_noble_family_tt +# house.house_head ?= this +# any_held_title = { is_noble_family_title = yes } +# } +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_capital_domicile_trigger +# NOT = { domicile.domicile_location.county ?= top_liege.capital_county } +# } +# } +# # No direct descendant is currently Regent or Governor +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_direct_descendent_position_trigger +# any_descendants_are_governors = no +# } +# # No direct descendant is liege or above +# custom_tooltip = { +# text = create_cadet_branch_decision_liege_is_descendant +# any_liege_or_above_is_descendant = no +# } +# # Domicile level +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_domicile_building_trigger +# domicile ?= { has_domicile_parameter = unlocks_establish_fief_decision } +# } +# # Crown Authority +# trigger_if = { +# limit = { +# top_liege = { government_allows = administrative } +# } +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_centralization_trigger +# NOT = { has_realm_law = japanese_bureaucracy_3 } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# # Not Yamato +# tgp_is_in_ceremonial_house_trigger = no +# # Must be a Count or Higher +# highest_held_title_tier >= tier_county +# # Is not Regent +# is_independent_ruler = no +# } +# +# effect = { +# add_achievement_global_variable_effect = { +# VARIABLE = achieved_ep4_18_yes_i_need_my_samurai_achievement +# VALUE = yes +# } +# show_as_tooltip = { +# change_government = japan_feudal_government +# # Change Dynasty +# if = { +# limit = { +# NOT = { dynasty.dynast ?= this } +# } +# custom_tooltip = tgp_japan_establish_house_fief_found_house_effect +# } +# } +# # Fire relevant event +# if = { +# limit = { +# NOR = { +# dynasty.dynast ?= this +# house.house_head ?= this +# } +# } +# add_character_flag = establish_house_fief +# trigger_event = tgp_japan_decision.9001 +# } +# else = { trigger_event = tgp_japan_decision.9002 } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 36 +# duchy = 36 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# ai_potential = { +# is_landed = yes +# } +# ai_will_do = { +# base = 100 +# ai_value_modifier = { +# ai_boldness = 0.5 +# ai_honor = -0.5 +# } +# modifier = { +# house ?= { has_house_aspiration_parameter = ceremony_cheaper_feasts } +# add = -50 +# } +# modifier = { +# house ?= { has_house_aspiration_parameter = service_house_improved_educator_outcome_chance } +# add = -100 +# } +# modifier = { +# house ?= { has_house_aspiration_parameter = determination_spymaster_task_find_secrets_efficiency } +# add = 50 +# } +# modifier = { +# house ?= { has_house_aspiration_parameter = unlocks_japanese_manor_armory } +# add = 100 +# } +# } +#} +# +## Become Soryo as independent Ritsuryō +#### Establish Sōryō Administration ### +#tgp_japan_establish_soryo_administration_decision = { +# decision_group_type = major +# title = tgp_japan_establish_soryo_administration_decision +# desc = tgp_japan_establish_soryo_administration_decision_desc +# selection_tooltip = tgp_japan_establish_soryo_administration_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/event_story/tgp_japanese_shogunate.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = massive_prestige_gain +# } +# influence = { +# value = { +# value = monumental_influence_gain +# multiply = 2 +# } +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# is_independent_ruler = yes +# government_is_japanese_trigger = yes +# NOR = { +# government_has_flag = government_is_japan_feudal +# has_global_variable = shogunate_established +# } +# } +# +# is_valid = { +# # Is Regent +# trigger_if = { +# limit = { +# has_title = title:e_japan +# } +# has_realm_law = japanese_regency_succession_law +# } +# is_independent_ruler = yes +# has_government = japan_administrative_government +# has_realm_law = japanese_bureaucracy_3 +# custom_tooltip = { +# text = house_head_create_faction_cohesion_hard_tt +# house.house_confederation ?= { +# leading_house ?= root.house +# has_cohesion_level_parameter = house_head_adopt_soryo_regency +# } +# } +# custom_tooltip = { +# text = house_head_adopt_soryo_regency_tt +# house.house_confederation ?= { +# leading_house ?= root.house +# has_cohesion_level_parameter = house_head_adopt_soryo_regency +# } +# } +# is_at_war = no +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# add_achievement_global_variable_effect = { +# VARIABLE = achieved_ep4_18_yes_i_need_my_samurai_achievement +# VALUE = yes +# } +# custom_tooltip = japanese_establish_soryo_administration_war_start_tt +# custom_description_no_bullet = { text = if_you_win_effect } +# show_as_tooltip = { japanese_establish_soryo_administration_reward_effect = yes } +# trigger_event = { +# id = tgp_japan_decision.9601 +# delayed = yes +# } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# ai_potential = { always = yes } +# ai_will_do = { base = 100 } +#} +# +## Become Shogun +#### Formalize [ROOT.Char.GetHouse.GetNameNoTooltip] Shōgunate ### +#tgp_japan_become_shogun_decision = { +# decision_group_type = major +# title = tgp_japan_become_shogun_decision +# desc = tgp_japan_become_shogun_decision_desc +# selection_tooltip = tgp_japan_become_shogun_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/event_story/tgp_japanese_shogunate.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = monumental_prestige_gain +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# tgp_is_in_ceremonial_house_trigger = no +# government_has_flag = government_is_japan_feudal +# top_liege = { has_title = title:e_japan } +# NOR = { +# has_global_variable = shogunate_established +# has_global_variable = tenno_restored +# } +# } +# +# is_valid = { +# # Is Regent +# custom_tooltip = { +# text = tgp_japan_become_shogun_decision_top_liege_trigger +# has_title = title:e_japan +# } +# prestige_level >= 4 +# legitimacy_level >= 4 +# is_independent_ruler = yes +# has_government = japan_feudal_government +# custom_tooltip = { +# text = tgp_japan_become_shogun_decision_centralization_trigger +# OR = { +# has_realm_law = japanese_bureaucracy_2 +# has_realm_law = japanese_bureaucracy_3 +# } +# } +# is_at_war = no +# custom_tooltip = { +# text = tgp_japan_become_shogun_decision_land_trigger +# top_liege = { +# completely_controls = title:d_kinai +# completely_controls = title:d_nankaido +# completely_controls = title:d_hokurikudo +# completely_controls = title:d_west_bando +# completely_controls = title:d_north_saikaido +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# trigger_event = tgp_japan_decision.9101 +# show_as_tooltip = { japanese_become_shogun_reward_effect = yes } +# if = { +# limit = { +# is_ai = no +# this = character:japanese_minamoto_seiwa_10 +# } +# add_achievement_global_variable_effect = { +# VARIABLE = finished_ep4_08_shogun_achievement +# VALUE = yes +# } +# } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# ai_potential = { always = yes } +# ai_will_do = { base = 100 } +#} +# +## Emperor Restoration +#### Restore Direct Imperial Rule ### +#tgp_japan_emperor_restoration_decision = { +# decision_group_type = major +# title = tgp_japan_emperor_restoration_decision +# desc = tgp_japan_emperor_restoration_decision_desc +# selection_tooltip = tgp_japan_emperor_restoration_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/decisions/tgp_kowtow.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = monumental_prestige_gain +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# top_liege = { has_title = title:e_japan } +# tgp_realm_has_ceremonial_liege_trigger = yes +# custom_tooltip = { +# text = tgp_is_ceremonial_liege_tt +# tgp_has_ceremonial_liege_title_trigger = yes +# } +# NOT = { has_global_variable = tenno_restored } +# } +# +# is_valid = { +# is_independent_ruler = yes +# has_title = title:e_japan +# tgp_has_ceremonial_liege_title_trigger = yes +# custom_tooltip = { +# text = tgp_japan_become_shogun_decision_centralization_trigger +# OR = { +# has_realm_law = japanese_bureaucracy_2 +# has_realm_law = japanese_bureaucracy_3 +# } +# } +# is_at_war = no +# completely_controls = title:d_kinai +# completely_controls = title:d_nankaido +# completely_controls = title:d_hokurikudo +# completely_controls = title:d_west_bando +# completely_controls = title:d_north_saikaido +# custom_tooltip = { +# text = tgp_japan_no_other_powerful_forces_trigger +# NOT = { +# title:e_japan.holder = { +# any_vassal = { +# NOR = { +# this = root +# is_allied_to = root +# house = root.house +# } +# current_strength_with_allies_value > root.current_strength_with_allies_fifty_percent_value +# } +# } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# if = { +# limit = { +# is_ai = no +# has_title = title:k_chrysanthemum_throne +# } +# add_achievement_global_variable_effect = { +# VARIABLE = finished_ep4_03_sword_of_japan_achievement +# VALUE = yes +# } +# } +# trigger_event = tgp_japan_decision.9301 +# show_as_tooltip = { +# restore_ceremonial_liege_faction_reward_effect = yes +# } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# ai_potential = { always = yes } +# ai_will_do = { base = 100 } +#} +# +## Yamato into Minamoto/Taira +#### Request Royal Honsei ### +#tgp_japan_imperial_branch_decision = { +# decision_group_type = major +# title = tgp_japan_imperial_branch_decision +# desc = tgp_japan_imperial_branch_decision_desc +# selection_tooltip = tgp_japan_imperial_branch_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/decisions/tgp_kowtow.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = minor_prestige_gain +# } +# influence = { +# value = minor_influence_gain +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# # Still Ritsuryo +# government_is_japanese_trigger = yes +# top_liege.primary_title.var:administrative_ui_special_title.holder ?= { government_is_japanese_trigger = yes } +# # Must be Yamato +# tgp_is_in_ceremonial_house_trigger = yes +# # Monks need not apply +# NOT = { has_trait = devoted } +# # Must be within Japan +# top_liege = { has_title = title:e_japan } +# } +# +# is_valid = { +# custom_tooltip = { +# text = is_faith_dominant_gender_tt +# is_faith_dominant_gender = yes +# } +# # Descended from an Emperor +# custom_tooltip = { +# text = tgp_japan_imperial_branch_decision_emperor_ancestor_trigger +# top_liege.primary_title.var:administrative_ui_special_title ?= { +# any_past_holder = { +# OR = { +# is_parent_of = root +# is_grandparent_of = root +# is_great_grandparent_of = root +# } +# } +# } +# } +# # Emperor and heirs cannot take this +# custom_tooltip = { +# text = tgp_japan_imperial_branch_decision_imperial_heir_trigger +# top_liege.primary_title.var:administrative_ui_special_title ?= { +# NOR = { +# holder ?= root +# any_title_heir = { this = root } +# } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# top_liege.primary_title.var:administrative_ui_special_title.holder ?= { is_available = yes } +# # No direct descendant is currently Governor +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_direct_descendent_position_trigger +# any_descendants_are_governors = no +# } +# # No direct descendant is liege or above +# custom_tooltip = { +# text = create_cadet_branch_decision_liege_is_descendant +# any_liege_or_above_is_descendant = no +# } +# # Not Dynast +# is_house_head = no +# } +# +# effect = { +# # Find nearest Emperor +# top_liege.primary_title.var:administrative_ui_special_title ?= { +# random_past_holder = { +# limit = { is_parent_of = root } +# alternative_limit = { is_grandparent_of = root } +# alternative_limit = { is_great_grandparent_of = root } +# save_scope_as = nearest_emperor +# random_close_or_extended_family_member = { +# even_if_dead = yes +# limit = { +# OR = { +# is_child_of = scope:nearest_emperor +# is_grandchild_of = scope:nearest_emperor +# is_great_grandchild_of = scope:nearest_emperor +# } +# dynasty ?= { +# NOT = { this = dynasty:japanese_yamato } +# exists = var:minamoto_flag +# } +# # Filter out dynasties of Emperors further away from you +# target_shares_nearest_related_title_holder_trigger = { +# COMPARE = scope:nearest_emperor +# TITLE = root.top_liege.primary_title.var:administrative_ui_special_title +# } +# house.house_head.top_liege ?= root.top_liege +# } +# house ?= { +# save_scope_as = minamoto_house +# house_head = { save_scope_as = minamoto_head } +# } +# } +# random_close_or_extended_family_member = { +# even_if_dead = yes +# limit = { +# OR = { +# is_child_of = scope:nearest_emperor +# is_grandchild_of = scope:nearest_emperor +# is_great_grandchild_of = scope:nearest_emperor +# } +# dynasty ?= { +# NOT = { this = dynasty:japanese_yamato } +# exists = var:taira_flag +# } +# # Filter out dynasties of Emperors further away from you +# target_shares_nearest_related_title_holder_trigger = { +# COMPARE = scope:nearest_emperor +# TITLE = root.top_liege.primary_title.var:administrative_ui_special_title +# } +# house.house_head.top_liege ?= root.top_liege +# } +# house ?= { +# save_scope_as = taira_house +# house_head = { save_scope_as = taira_head } +# } +# } +# } +# } +# if = { +# limit = { +# exists = scope:minamoto_house +# exists = scope:taira_house +# } +# custom_tooltip = tgp_japan_imperial_branch_decision_existing_dynasty_effect +# } +# else_if = { +# limit = { exists = scope:minamoto_house } +# custom_tooltip = tgp_japan_imperial_branch_decision_existing_or_taira_effect +# } +# else_if = { +# limit = { exists = scope:taira_house } +# custom_tooltip = tgp_japan_imperial_branch_decision_existing_or_minamoto_effect +# } +# else = { custom_tooltip = tgp_japan_imperial_branch_decision_new_dynasty_effect } +# custom_tooltip = tgp_japan_establish_house_fief_direct_descendents_effect +# if = { +# limit = { government_allows = noble_families } +# if = { +# limit = { +# OR = { +# exists = scope:minamoto_house +# exists = scope:taira_house +# } +# } +# custom_tooltip = may_found_noble_family_tt +# } +# else = { custom_tooltip = will_found_noble_family_tt } +# } +# trigger_event = tgp_japan_decision.9201 +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 36 +# duchy = 36 +# kingdom = 36 +# empire = 36 +# hegemony = 36 +# } +# ai_potential = { +# is_adult = yes +# is_landed = yes +# any_child = { count >= 1 } +# } +# ai_will_do = { +# base = 150 #-25 +# modifier = { +# has_trait = arrogant +# add = -25 +# } +# modifier = { +# has_trait = humble +# add = 25 +# } +# modifier = { +# has_trait = content +# add = -25 +# } +# modifier = { +# has_trait = ambitious +# add = 25 +# } +# modifier = { +# is_ruler = yes +# add = 25 +# } +# modifier = { +# OR = { +# has_trait = bastard +# has_trait = wild_oat +# } +# add = 25 +# } +# modifier = { +# has_trait = disinherited +# add = 25 +# } +# modifier = { +# top_liege.primary_title.var:administrative_ui_special_title = { +# any_past_holder = { is_parent_of = root } +# } +# add = -50 +# } +# modifier = { +# top_liege.primary_title.var:administrative_ui_special_title = { +# any_past_holder = { is_grandparent_of = root } +# } +# add = -25 +# } +# modifier = { +# house ?= { +# any_house_member = { count < 25 } +# } +# add = -25 +# } +# modifier = { +# house ?= { +# any_house_member = { count < 15 } +# } +# factor = 0 +# } +# } +#} +# +##Become a Poet - Ceremony - House Aspiration +#### Study Poetry ### +#tgp_japan_become_a_poet_decision = { +# title = tgp_japan_become_a_poet_decision +# desc = tgp_japan_become_a_poet_decision_desc +# selection_tooltip = tgp_japan_become_a_poet_decision_tooltip +# picture = { +# trigger = { +# OR = { +# government_is_japanese_trigger = yes +# government_has_flag = government_is_celestial +# government_has_flag = government_is_meritocratic +# } +# } +# reference = "gfx/interface/illustrations/decisions/tgp_poet.dds" +# } +# picture = { +# reference = "gfx/interface/illustrations/decisions/decision_tale.dds" +# } +# cooldown = { years = 15 } +# sort_order = 110 +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# OR = { +# AND = { +# government_is_japanese_trigger = yes +# house = { has_house_aspiration_parameter = ceremony_become_a_poet_decision } +# } +# top_participant_group:dynastic_cycle ?= { +# participant_group_type = advancement_movement +# } +# } +# } +# +# is_valid = { +# NOT = { has_trait = lifestyle_poet } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# custom_tooltip = tgp_japan_become_a_poet_decision_effects_tooltip_trait +# custom_tooltip = tgp_japan_become_a_poet_decision_effects_tooltip_stress +# +# hidden_effect = { +# trigger_event = { +# id = tgp_japan_decision.9401 +# days = { 40 60 } +# } +# } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 36 +# duchy = 36 +# kingdom = 36 +# empire = 36 +# hegemony = 36 +# } +# +# ai_potential = { +# is_adult = yes +# is_at_war = no +# } +# +# ai_will_do = { +# base = 100 +# } +#} +# +##Inspire the Troops - Strength - House Aspiration +#### Inspire the Troops ### +#tgp_japan_train_with_troops_decision = { +# title = tgp_japan_train_with_troops_decision +# desc = tgp_japan_train_with_troops_decision_desc +# selection_tooltip = tgp_japan_train_with_troops_decision_tooltip +# picture = { +# reference = "gfx/interface/illustrations/decisions/fp2_decision_struggle_hostility.dds" +# } +# cooldown = { years = 20 } +# sort_order = 0 +# +# cost = { +# prestige = { +# value = major_prestige_value +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# government_is_japanese_trigger = yes +# house = { has_house_aspiration_parameter = strength_train_with_troops_decision } +# } +# +# is_valid_showing_failures_only = { +# is_imprisoned = no +# is_incapable = no +# has_contagious_deadly_disease_trigger = no +# is_at_war = yes +# } +# +# effect = { +# #Apply the Character Modifier +# send_interface_toast = { +# title = tgp_japan_train_with_troops_decision_effects_tooltip_modifier +# type = event_toast_effect_good +# left_icon = root +# add_character_modifier = { +# modifier = tgp_japan_train_with_troops_modifier +# years = 10 +# } +# } +# #Chance to apply a Commander Trait +# if = { +# limit = { +# number_of_commander_traits < 3 +# } +# custom_tooltip = { +# text = tgp_japan_train_with_troops_decision_effects_tooltip_trait +# #The higher Martial, the better the odds of gaining a Commander Trait +# random = { +# chance = { +# value = 20 +# if = { +# limit = { +# root.martial >= monumentally_high_skill_rating +# } +# add = 20 +# } +# else_if = { +# limit = { +# root.martial >= extremely_high_skill_rating +# } +# add = 15 +# } +# else_if = { +# limit = { +# root.martial >= very_high_skill_rating +# } +# add = 10 +# } +# else_if = { +# limit = { +# root.martial >= high_skill_rating +# } +# add = 5 +# } +# } +# give_random_commander_trait_effect = yes +# } +# } +# } +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 12 +# duchy = 12 +# kingdom = 12 +# empire = 12 +# hegemony = 12 +# } +# +# ai_potential = { +# is_adult = yes +# is_at_war = yes +# } +# +# ai_will_do = { +# base = 10 +# } +#} +# +## Becoming a Buddhist monk near the end of your life (or when you become seriously ill) +#### In Search of the Pure Land ### +#tgp_japan_become_a_monk_decision = { +# title = tgp_japan_become_a_monk_decision +# desc = tgp_japan_become_a_monk_decision_desc +# selection_tooltip = tgp_japan_become_a_monk_decision_tooltip +# picture = { +# reference = "gfx/interface/illustrations/event_scenes/tgp_temple_asia.dds" +# } +# sort_order = 80 +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 60 +# duchy = 60 +# kingdom = 60 +# empire = 60 +# hegemony = 60 +# } +# +# is_shown = { +# religion = religion:buddhism_religion +# is_adult = yes +# NOT = { government_has_flag = government_is_mandala } +# } +# +# is_valid = { +# religion = religion:buddhism_religion +# trigger_if = { +# limit = { is_ai = no } +# custom_tooltip = { +# text = renounce_noble_family_title_decision_tt.title +# any_held_title = { is_noble_family_title = yes } +# } +# custom_tooltip = { +# text = renounce_noble_family_title_decision_tt.heir +# any_held_title = { +# is_noble_family_title = yes +# current_heir ?= { is_available_ai_adult = yes } +# } +# } +# } +# OR = { +# age >= 60 +# custom_tooltip = { +# text = tgp_japan_become_a_monk_decision_health_tt +# health <= poor_health +# } +# has_contagious_deadly_disease_trigger = yes +# has_trait = infirm +# has_trait = withering_mind +# has_trait = faltering_heart +# has_trait = fragile_bones +# has_trait = depressed_1 +# } +# } +# +# is_valid_showing_failures_only = { +# # Is available sans health checks +# is_available_quick = { +# adult = yes +# alive = yes +# travel = no +# in_army = no +# imprisoned = no +# incapable = no +# } +# custom_description = { +# text = ALREADY_IN_ACTIVITY +# NOR = { +# exists = involved_activity +# has_variable = { +# name = homage_liege_scope +# name = meditation_character_flag +# name = local_shrine_rite +# name = petition_liege_character_flag +# name = 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 } +# is_at_war_with_liege = no +# trigger_if = { +# limit = { +# has_realm_law_flag = celestial_retirement_law +# } +# tgp_is_above_retirement_age_trigger = { REALM_OWNER = root } +# } +# } +# +# effect = { +# show_as_tooltip = { +# add_trait = devoted +# tgp_renounce_estate_effect = yes +# } +# trigger_event = { +# id = tgp_japan_decision.9500 +# } +# } +# +# ai_potential = { +# is_adult = yes +# is_at_war = no +# # Don't step down freely if you don't have any other house members holding a noble_family_title or inherit any held noble_family_title +# OR = { +# house ?= { +# any_house_member = { +# is_governor = yes +# top_liege = root.top_liege +# } +# } +# any_held_title = { +# tier = root.highest_held_title_tier +# is_noble_family_title = no +# current_heir.house = root.house +# } +# } +# tgp_is_above_retirement_age_trigger = { REALM_OWNER = root } +# } +# +# ai_will_do = { +# base = -10 +# modifier = { +# add = 10 +# health <= poor_health +# } +# modifier = { +# add = 150 +# health <= dying_health +# } +# modifier = { +# add = 10 +# has_trait = lazy +# } +# modifier = { +# add = 10 +# has_trait = humble +# } +# modifier = { +# add = 10 +# has_trait = content +# } +# modifier = { +# add = -100 +# OR = { +# has_trait = ambitious +# has_trait = greedy +# has_trait = arrogant +# } +# } +# } +#} +# +## Restore Chrysanthemum Throne +#### Restore a Yamato Ten'nō ### +#tgp_japan_restore_japanese_monarchy_decision = { +# decision_group_type = major +# title = tgp_japan_restore_japanese_monarchy_decision +# desc = tgp_japan_restore_japanese_monarchy_decision_desc +# selection_tooltip = tgp_japan_restore_japanese_monarchy_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/event_story/tgp_dynastic_cycle_stability.dds" } +# sort_order = 80 +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# government_is_japanese_trigger = yes +# # Chrysanthemum no longer part of Japan or destroyed +# trigger_if = { +# limit = { exists = title:k_chrysanthemum_throne.holder } +# NOT = { title:e_japan.holder ?= title:k_chrysanthemum_throne.holder.top_liege } +# } +# # Japanese culture +# culture = { +# OR = { +# this = culture:japanese +# any_parent_culture_or_above = { this = culture:japanese } +# } +# } +# } +# +# is_valid = { +# is_independent_ruler = yes +# has_title = title:e_japan +# completely_controls = title:c_yamashiro # Kyoto +# custom_tooltip = { # Chrysanthemum destroyed or no longer part of Japan +# text = tgp_japan_restore_japanese_monarchy_decision_title_tt +# trigger_if = { +# limit = { exists = title:k_chrysanthemum_throne.holder.top_liege } +# NOT = { title:e_japan.holder ?= title:k_chrysanthemum_throne.holder.top_liege } +# } +# trigger_else = { always = yes } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# tgp_restore_japanese_monarchy_decision_effect = yes +# trigger_event = tgp_japan_decision.9901 +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# ai_potential = { always = yes } +# ai_will_do = { base = 100 } +#} +# +## Restore Ritsuryo +#### Restore Ritsuryō Bureaucracy ### +#tgp_japan_restore_japanese_government_decision = { +# decision_group_type = major +# title = tgp_japan_restore_japanese_government_decision +# desc = tgp_japan_restore_japanese_government_decision_desc +# selection_tooltip = tgp_japan_restore_japanese_government_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/event_story/tgp_dynastic_cycle_stability.dds" } +# sort_order = 85 +# +# cost = { +# prestige = { +# value = massive_prestige_gain +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# government_is_japanese_trigger = yes +# NOT = { government_has_flag = government_is_japan_administrative } +# # Japan not governed Japanesely or destroyed +# trigger_if = { +# limit = { exists = title:e_japan.holder } +# title:e_japan.holder = { government_is_japanese_trigger = no } +# } +# # Japanese culture +# culture = { +# OR = { +# this = culture:japanese +# any_parent_culture_or_above = { this = culture:japanese } +# } +# } +# } +# +# is_valid = { +# is_independent_ruler = yes +# has_title = title:e_japan +# is_at_war = no +# has_realm_law = japanese_bureaucracy_3 +# prestige_level >= 4 +# completely_controls = title:d_kinai +# completely_controls = title:d_nankaido +# completely_controls = title:d_hokurikudo +# completely_controls = title:d_west_bando +# completely_controls = title:d_north_saikaido +# OR = { +# government_allows = administrative +# government_allows = create_cadet_branches +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# show_as_tooltip = { tgp_restore_japanese_government_decision_effect = yes } +# trigger_event = tgp_japan_decision.9911 +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# ai_potential = { always = yes } +# ai_will_do = { base = 100 } +#} +# +## Assert Regional Dominion (Become Soryo Duke i.e. SuperSoryoTM) +#### Assert Regional Dominion ### +#tgp_japan_assert_regional_dominion_government_decision = { +# decision_group_type = major +# title = tgp_japan_assert_regional_dominion_government_decision +# +# desc = { +# first_valid = { +# triggered_desc = { +# trigger = { +# has_global_variable = shogunate_established +# } +# desc = tgp_japan_assert_regional_dominion_government_decision_shogun_desc +# } +# desc = tgp_japan_assert_regional_dominion_government_decision_desc +# } +# } +# selection_tooltip = tgp_japan_assert_regional_dominion_government_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/decisions/tgp_dominance.dds" } +# +# sort_order = 85 +# cost = { +# prestige = { +# value = 1000 +# } +# } +# is_shown = { +# has_tgp_dlc_trigger = yes +# is_landed = yes +# highest_held_title_tier = tier_county +# government_has_flag = government_is_japan_feudal +# } +# +# is_valid = { +# is_at_war = no +# has_government = japan_feudal_government +# #must have sufficient prestige and legitimacy to even consider such a bold move. +# prestige_level >= 3 +# legitimacy_level >= 3 +# OR = { +# custom_tooltip = { +# text = tgp_japan_assert_regional_dominion_government_decision_trigger_01 +# domicile ?= { +# has_domicile_building_or_higher = japanese_manor_main_03 +# } +# } +# custom_tooltip = { +# text = tgp_japan_assert_regional_dominion_government_decision_trigger_aspiration +# house = { +# AND = { +# OR = { +# has_house_aspiration_parameter = unlocks_japanese_manor_armory +# has_house_aspiration_parameter = unlocks_japanese_manor_watch_house +# } +# has_house_aspiration_parameter = aspiration_level_3 +# } +# } +# } +# custom_tooltip = { +# text = tgp_japan_assert_regional_dominion_government_decision_trigger_bloc +# confederation ?= { +# has_leading_house = yes +# has_cohesion = yes +# leading_house ?= root.house +# cohesion >= 3 +# } +# house = { +# OR = { +# has_house_aspiration_parameter = unlocks_japanese_manor_armory +# has_house_aspiration_parameter = unlocks_japanese_manor_watch_house +# } +# } +# } +# } +# trigger_if = { +# limit = { +# is_ai = no # AI are an exception as they can continue to play despite not being House Heads +# } +# trigger_if = { +# limit = { +# house ?= { +# OR = { +# has_house_aspiration_parameter = ceremony_cheaper_feasts +# has_house_aspiration_parameter = unlocks_japanese_manor_archive +# } +# } +# } +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_aspiration_trigger +# house = { +# NOR = { +# has_house_aspiration_parameter = ceremony_cheaper_feasts +# has_house_aspiration_parameter = unlocks_japanese_manor_archive +# } +# } +# } +# } +# trigger_if = { +# limit = { +# NOT = { domicile.domicile_location.county.holder ?= this } +# } +# # Domicile in current Governorship +# custom_tooltip = { +# text = tgp_japan_establish_house_fief_domicile_in_governorship_trigger +# domicile.domicile_location.county.holder ?= this +# } +# } +# } +# # Kampaku or Shogun is weak. +# top_liege = { +# trigger_if = { +# limit = { +# OR = { +# AND = { +# has_realm_law = japanese_bureaucracy_3 +# culture = { has_cultural_tradition = tradition_tgp_bushido } +# } +# has_realm_law = japanese_bureaucracy_2 +# } +# } +# trigger_if = { +# limit = { +# culture = { has_cultural_tradition = tradition_tgp_bushido } +# } +# NOT = { has_realm_law = japanese_bureaucracy_3 } +# } +# trigger_else = { +# NOR = { +# has_realm_law = japanese_bureaucracy_0 +# has_realm_law = japanese_bureaucracy_1 +# } +# } +# } +# } +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# is_at_war = no +# } +# +# effect = { +# show_as_tooltip = { tgp_japan_assert_regional_dominion_government_decision_effect = yes } +# trigger_event = tgp_japan_decision.9960 +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 24 +# duchy = 0 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# ai_potential = { +# is_adult = yes +# } +# ai_will_do = { base = 25 } +#} +# +## Establish New Shogunate Court Decision +#### Move Shogunate Court Decision ### +#move_shogunate_court_decision = { +# decision_group_type = major +# title = tgp_japan_move_shogunate_court_decision +# desc = tgp_japan_move_shogunate_court_decision_desc +# selection_tooltip = tgp_japan_move_shogunate_court_decision_tooltip +# picture = { reference = "gfx/interface/illustrations/event_story/tgp_japanese_shogunate.dds" } +# +# cost = { +# gold = { +# value = massive_gold_value +# } +# prestige = { +# value = massive_prestige_gain +# } +# } +# +# is_shown = { +# has_tgp_dlc_trigger = yes +# is_landed = yes +# has_global_variable = shogunate_established +# NOT = { has_variable = moved_shogunate_court } +# domain_size > 1 +# capital_county = title:c_yamashiro +# } +# +# is_valid = { +# has_title = title:e_japan +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# set_realm_capital = scope:barony.county +# title:e_japan = { set_capital_county = scope:barony.county } +# scope:barony.county = { +# change_development_level = medium_development_level_gain +# add_county_modifier = { +# modifier = tgp_moved_shogun_court_modifier +# years = 25 +# } +# } +# set_variable = moved_shogunate_court +# } +# +# widget = { +# controller = create_holy_order +# barony_valid = { +# trigger_if = { +# limit = { exists = this } +# is_capital_barony = yes +# holder = scope:ruler +# county != title:c_yamashiro +# is_leased_out = no +# } +# } +# } +# +# ai_potential = { +# is_playable_character = yes +# has_global_variable = shogunate_established +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 36 +# hegemony = 0 +# } +# +# ai_will_do = { +# base = 200 +# } +#} +# +## Emperor Starting a Ceremonial Monarch War +#### Begin the Restoration War ### +#tgp_japan_emperor_war_decision = { +# decision_group_type = major +# confirm_text = commit_suicide_decision_confirm +# picture = { reference = "gfx/interface/illustrations/decisions/tgp_kowtow.dds" } +# sort_order = 80 +# +# cost = { +# prestige = { +# value = massive_prestige_gain +# } +# } +# +# is_shown = { +# is_ai = no +# has_tgp_dlc_trigger = yes +# tgp_is_ceremonial_liege_trigger = yes +# tgp_is_ceremonial_regent_trigger = no +# joined_faction ?= { +# OR = { +# faction_leader ?= { +# is_ai = yes +# is_leading_faction_type = restore_ceremonial_liege_faction +# } +# any_faction_member = { +# this != root +# is_ai = yes +# is_landed = yes +# } +# } +# } +# NOT = { is_at_war_with = root.top_liege } +# } +# +# is_valid = { +# is_at_war = no +# } +# +# is_valid_showing_failures_only = { +# is_available_adult = yes +# } +# +# effect = { +# joined_faction ?= { +# save_scope_as = ongoing_faction +# if = { +# limit = { +# exists = faction_leader +# } +# faction_leader = { +# save_scope_as = faction_leader_scope +# } +# } +# else = { +# ordered_faction_member = { +# order_by = current_military_strength +# limit = { +# this != root +# is_ai = yes +# is_landed = yes +# } +# save_scope_as = faction_leader_scope +# } +# } +# } +# +# show_as_tooltip = { +# scope:faction_leader_scope = { +# start_war = { +# cb = restore_ceremonial_liege_faction_war +# target = root.top_liege +# } +# } +# } +# +# hidden_effect = { +# scope:ongoing_faction = { +# faction_start_war = {} +# } +# } +# } +# +# ai_potential = { +# is_playable_character = yes +# } +# +# ai_check_interval_by_tier = { +# barony = 0 +# county = 0 +# duchy = 0 +# kingdom = 0 +# empire = 0 +# hegemony = 0 +# } +# +# ai_will_do = { +# base = 200 +# } +#} +# \ No newline at end of file diff --git a/common/religion/religion_types/00_buddhism.txt b/common/religion/religion_types/00_buddhism.txt index 8a9dfbbf..77d47f3a 100644 --- a/common/religion/religion_types/00_buddhism.txt +++ b/common/religion/religion_types/00_buddhism.txt @@ -265,7 +265,7 @@ holy_order_names = { #placeholder } - } + } khurul = { # Kalmyk Buddhism color = { 191 76 19 } icon = kalmyk_buddhist @@ -394,133 +394,5 @@ } } } - - rime = { # Nangchos aka Tibetan Buddhism - syncretic of Mahayana, Vajrayana and native Tibetan elements - color = { 230 200 180 } - icon = lamaism_buddhism - - holy_site = kusinagara - holy_site = bodh_gaya - holy_site = lhasa - holy_site = sagya - holy_site = purang - - doctrine = doctrine_gender_equal - doctrine = doctrine_polygamy - doctrine = doctrine_adultery_men_accepted - doctrine = doctrine_adultery_women_accepted - doctrine = doctrine_deviancy_accepted - doctrine = doctrine_witchcraft_accepted - - # Carried over from pre-Buddhist Tibet. Similar theological motivations as cremation, demonstrating the impermanence of life - doctrine = doctrine_funeral_sky_burial - - doctrine = tenet_dharmic_pacifism - doctrine = tenet_monasticism - doctrine = tenet_esotericism - - localization = { - ReligiousText = lamaism_religious_text - ReligiousText2 = lamaism_religious_text_2 - ReligiousText3 = lamaism_religious_text_3 - HouseOfWorship = lamaism_house_of_worship - HouseOfWorship2 = lamaism_house_of_worship_2 - HouseOfWorship3 = lamaism_house_of_worship_3 - HouseOfWorshipPlural = lamaism_house_of_worship_plural - ReligiousHeadName = lamaism_religious_head_title - DevoteeMale = lamaism_devotee_male - DevoteeMalePlural = lamaism_devotee_male_plural - DevoteeFemale = lamaism_devotee_female - DevoteeFemalePlural = lamaism_devotee_female_plural - DevoteeNeuter = lamaism_devotee_neuter - DevoteeNeuterPlural = lamaism_devotee_neuter_plural - PriestMale = lamaism_priest - PriestMalePlural = lamaism_priest_plural - PriestFemale = lamaism_priest - PriestFemalePlural = lamaism_priest_plural - PriestNeuter = lamaism_priest - PriestNeuterPlural = lamaism_priest_plural - AltPriestTermPlural = lamaism_priest_term_plural - BishopMale = lamaism_bishop - BishopMalePlural = lamaism_bishop_plural - BishopFemale = lamaism_bishop - BishopFemalePlural = lamaism_bishop_plural - BishopNeuter = lamaism_bishop - BishopNeuterPlural = lamaism_bishop_plural - WitchGodName = bon_evil_god_shinje - WitchGodNamePossessive = bon_evil_god_shinje_possessive - WitchGodHerHis = CHARACTER_HERHIS_HIS - WitchGodSheHe = CHARACTER_SHEHE_HE - WitchGodHerHim = CHARACTER_HERHIM_HIM - WitchGodMistressMaster = master - WitchGodMotherFather = father - - #Creator - CreatorName = lamaism_creator_god_name - CreatorNamePossessive = lamaism_creator_god_name_possessive - CreatorSheHe = CHARACTER_HERHIM_IT - CreatorHerHis = CHARACTER_HERHIS_ITS - CreatorHerHim = CHARACTER_HERHIM_IT - - #HealthGod - HealthGodName = lamaism_health_god_name - HealthGodNamePossessive = lamaism_health_god_name_possessive - HealthGodSheHe = CHARACTER_SHEHE_HE - HealthGodHerHis = CHARACTER_HERHIS_HIS - HealthGodHerHim = CHARACTER_HERHIM_HIM - - #FertilityGod - FertilityGodName = lamaism_fertility_god_name - FertilityGodNamePossessive = lamaism_fertility_god_name_possessive - FertilityGodSheHe = CHARACTER_SHEHE_HE - FertilityGodHerHis = CHARACTER_HERHIS_HIS - FertilityGodHerHim = CHARACTER_HERHIM_HIM - - #WealthGod - WealthGodName = lamaism_wealth_god_name - WealthGodNamePossessive = lamaism_wealth_god_name_possessive - WealthGodSheHe = CHARACTER_SHEHE_HE - WealthGodHerHis = CHARACTER_HERHIS_HIS - WealthGodHerHim = CHARACTER_HERHIM_HIM - - #HouseholdGod - HouseholdGodName = lamaism_household_god_name - HouseholdGodNamePossessive = lamaism_household_god_name_possessive - HouseholdGodSheHe = CHARACTER_SHEHE_SHE - HouseholdGodHerHis = CHARACTER_HERHIS_HER - HouseholdGodHerHim = CHARACTER_HERHIM_HER - - #KnowledgeGod - KnowledgeGodName = lamaism_knowledge_god_name - KnowledgeGodNamePossessive = lamaism_knowledge_god_name_possessive - KnowledgeGodSheHe = CHARACTER_SHEHE_HE - KnowledgeGodHerHis = CHARACTER_HERHIS_HIS - KnowledgeGodHerHim = CHARACTER_HERHIM_HIM - - #WarGod - WarGodName = lamaism_war_god_name - WarGodNamePossessive = lamaism_war_god_name_possessive - WarGodSheHe = CHARACTER_SHEHE_HE - WarGodHerHis = CHARACTER_HERHIS_HIS - WarGodHerHim = CHARACTER_HERHIM_HIM - - #NightGod - NightGodName = lamaism_night_god_name - NightGodNamePossessive = lamaism_night_god_name_possessive - NightGodSheHe = CHARACTER_SHEHE_HE - NightGodHerHis = CHARACTER_HERHIS_HIS - NightGodHerHim = CHARACTER_HERHIM_HIM - - #WaterGod - WaterGodName = lamaism_water_god_name - WaterGodNamePossessive = lamaism_water_god_name_possessive - WaterGodSheHe = CHARACTER_SHEHE_SHE - WaterGodHerHis = CHARACTER_HERHIS_HER - WaterGodHerHim = CHARACTER_HERHIM_HER - - GoodGodNames = { - bon_good_god_gyalpo_pehar - } - } - } + } } diff --git a/common/religion/religion_types/00_confucianism.txt b/common/religion/religion_types/00_confucianism.txt new file mode 100644 index 00000000..eb38f757 --- /dev/null +++ b/common/religion/religion_types/00_confucianism.txt @@ -0,0 +1,196 @@ +confucianism_religion = { + family = rf_sinitic + graphical_faith = sinitic_gfx + doctrine = eastern_hostility_doctrine + + #Main Group + doctrine = doctrine_polytheist + doctrine = doctrine_no_head + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_pluralistic + doctrine = doctrine_theocracy_lay_clergy + + #Marriage + doctrine = doctrine_concubines + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_legitimization + doctrine = doctrine_consanguinity_dynastic + + #Crimes + doctrine = doctrine_homosexuality_shunned + doctrine = doctrine_adultery_men_crime + doctrine = doctrine_adultery_women_crime + doctrine = doctrine_kinslaying_any_dynasty_member_crime + doctrine = doctrine_deviancy_crime + doctrine = doctrine_witchcraft_crime + + #Clerical Functions + doctrine = doctrine_clerical_function_taxation + doctrine = doctrine_clerical_gender_male_only + doctrine = doctrine_clerical_marriage_allowed + doctrine = doctrine_clerical_succession_temporal_appointment + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_local_rites + + doctrine = special_doctrine_immaterial_harmony + doctrine = special_doctrine_is_sinitic_faith + + #Funeral tradition + doctrine = doctrine_family_rites + + #Coronation tradition + doctrine = doctrine_no_anointment + + traits = { + virtues = { compassionate just honest scholar } + sins = { lazy greedy deceitful } + } + + piety_icon_group = "confucianism" + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + holy_order_names = { + { name = "holy_order_guardians_of_divinerealm" } + { name = "holy_order_faithful_of_highgod" } + { name = "holy_order_warriors_of_the_symbol" } + } + + localization = { + HighGodName = confucianism_high_god_name + HighGodName2 = confucianism_high_god_name_2 + HighGodNamePossessive = confucianism_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_HE + HighGodHerselfHimself = CHARACTER_HIMSELF + HighGodHerHis = CHARACTER_HERHIS_HIS + HighGodNameAlternate = confucianism_high_god_name_alternate + HighGodNameAlternatePossessive = confucianism_high_god_name_alternate_possessive + + CreatorName = confucianism_creator_god_name + CreatorNamePossessive = confucianism_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_HE + CreatorHerHis = CHARACTER_HERHIS_HIS + CreatorHerHim = CHARACTER_HERHIM_HIM + HealthGodName = confucianism_health_god_name + HealthGodNamePossessive = confucianism_health_god_name_possessive + HealthGodSheHe = CHARACTER_SHEHE_HE + HealthGodHerHis = CHARACTER_HERHIS_HIS + HealthGodHerHim = CHARACTER_HERHIM_HIM + FertilityGodName = confucianism_fertility_god_name + FertilityGodNamePossessive = confucianism_fertility_god_name_possessive + FertilityGodSheHe = CHARACTER_SHEHE_HE + FertilityGodHerHis = CHARACTER_HERHIS_HIS + FertilityGodHerHim = CHARACTER_HERHIM_HIM + WealthGodName = confucianism_wealth_god_name + WealthGodNamePossessive = confucianism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + HouseholdGodName = confucianism_household_god_name + HouseholdGodNamePossessive = confucianism_household_god_name_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_HE + HouseholdGodHerHis = CHARACTER_HERHIS_HIS + HouseholdGodHerHim = CHARACTER_HERHIM_HIM + FateGodName = confucianism_fate_god_name + FateGodNamePossessive = confucianism_fate_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_IT + FateGodHerHis = CHARACTER_HERHIS_ITS + FateGodHerHim = CHARACTER_HERHIM_IT + KnowledgeGodName = confucianism_knowledge_god_name + KnowledgeGodNamePossessive = confucianism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + WarGodName = confucianism_war_god_name + WarGodNamePossessive = confucianism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + TricksterGodName = confucianism_trickster_god_name + TricksterGodNamePossessive = confucianism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_SHE + TricksterGodHerHis = CHARACTER_HERHIS_HER + TricksterGodHerHim = CHARACTER_HERHIM_HER + NightGodName = confucianism_night_god_name + NightGodNamePossessive = confucianism_night_god_name_possessive + NightGodSheHe = CHARACTER_SHEHE_HE + NightGodHerHis = CHARACTER_HERHIS_HIS + NightGodHerHim = CHARACTER_HERHIM_HIM + WaterGodName = confucianism_water_god_name + WaterGodNamePossessive = confucianism_water_god_name_possessive + WaterGodSheHe = CHARACTER_SHEHE_HE + WaterGodHerHis = CHARACTER_HERHIS_HIS + WaterGodHerHim = CHARACTER_HERHIM_HIM + PantheonTerm = confucianism_pantheon_term + PantheonTerm2 = confucianism_pantheon_term_2 + PantheonTerm3 = confucianism_pantheon_term_3 + PantheonTermHasHave = pantheon_term_have + GoodGodNames = { confucianism_high_god_name confucianism_wealth_god_name confucianism_war_god_name } + DevilName = confucianism_devil_name + DevilNamePossessive = confucianism_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_SHE + DevilHerHis = CHARACTER_HERHIS_HER + DevilHerselfHimself = CHARACTER_HERSELF + EvilGodNames = { confucian_evil_god } + HouseOfWorship = confucianism_house_of_worship + HouseOfWorship2 = confucianism_house_of_worship_2 + HouseOfWorship3 = confucianism_house_of_worship_3 + HouseOfWorshipPlural = confucianism_house_of_worship_plural + ReligiousSymbol = confucianism_religious_symbol + ReligiousSymbol2 = confucianism_religious_symbol_2 + ReligiousSymbol3 = confucianism_religious_symbol_3 + ReligiousText = confucianism_religious_text + ReligiousText2 = confucianism_religious_text_2 + ReligiousText3 = confucianism_religious_text_3 + ReligiousHeadName = confucianism_religious_head_title + ReligiousHeadTitleName = confucianism_religious_head_title_name + DevoteeMale = confucianism_devotee + DevoteeMalePlural = confucianism_devotee_plural + DevoteeFemale = confucianism_devotee + DevoteeFemalePlural = confucianism_devotee_plural + DevoteeNeuter = confucianism_devotee + DevoteeNeuterPlural = confucianism_devotee_plural + PriestMale = confucianism_priest + PriestMalePlural = confucianism_priest_plural + PriestFemale = confucianism_priest + PriestFemalePlural = confucianism_priest_plural + PriestNeuter = confucianism_priest + PriestNeuterPlural = confucianism_priest_plural + AltPriestTermPlural = confucianism_priest_plural + BishopMale = confucianism_priest + BishopMalePlural = confucianism_priest_plural + BishopFemale = confucianism_priest + BishopFemalePlural = confucianism_priest_plural + BishopNeuter = confucianism_priest + BishopNeuterPlural = confucianism_priest_plural + DivineRealm = confucianism_divine_realm + DivineRealm2 = confucianism_divine_realm_2 + DivineRealm3 = confucianism_divine_realm_3 + PositiveAfterLife = confucianism_positive_afterlife + PositiveAfterLife2 = confucianism_positive_afterlife_2 + PositiveAfterLife3 = confucianism_positive_afterlife_3 + NegativeAfterLife = confucianism_negative_afterlife + NegativeAfterLife2 = confucianism_negative_afterlife_2 + NegativeAfterLife3 = confucianism_negative_afterlife_3 + DeathDeityName = confucianism_death_deity_name + DeathDeityNamePossessive = confucianism_death_deity_name_possessive + DeathDeitySheHe = CHARACTER_SHEHE_HE + DeathDeityHerHis = CHARACTER_HERHIS_HIS + DeathDeityHerHim = CHARACTER_HERHIM_HIM + WitchGodName = confucian_evil_god + WitchGodNamePossessive = confucian_evil_god_possessive + WitchGodSheHe = CHARACTER_SHEHE_HE + WitchGodHerHim = CHARACTER_HERHIM_HER + WitchGodMistressMaster = mistress + WitchGodMotherFather = mother + WitchGodHerHis = CHARACTER_HERHIS_HER + GHWName = ghw_great_holy_war + GHWNamePlural = ghw_great_holy_wars + } + + faiths = { + } +} diff --git a/common/religion/religion_types/00_hinduism.txt b/common/religion/religion_types/00_hinduism.txt new file mode 100644 index 00000000..c75c688a --- /dev/null +++ b/common/religion/religion_types/00_hinduism.txt @@ -0,0 +1,307 @@ +hinduism_religion = { + family = rf_eastern #Dharmic + graphical_faith = dharmic_gfx + doctrine = eastern_hostility_doctrine + + #Main Group + doctrine = doctrine_polytheist + doctrine = doctrine_no_head + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_pluralistic + doctrine = doctrine_theocracy_temporal + + #Marriage + doctrine = doctrine_polygamy + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_none + doctrine = doctrine_consanguinity_restricted + + #Crimes + doctrine = doctrine_homosexuality_accepted + doctrine = doctrine_adultery_men_shunned + doctrine = doctrine_adultery_women_shunned + doctrine = doctrine_kinslaying_close_kin_crime + doctrine = doctrine_deviancy_shunned + doctrine = doctrine_witchcraft_accepted + + #Clerical Functions + doctrine = doctrine_clerical_function_taxation + doctrine = doctrine_clerical_gender_male_only + doctrine = doctrine_clerical_marriage_allowed + doctrine = doctrine_clerical_succession_temporal_appointment + + #Special Doctrine for Eastern Syncretism + doctrine = special_doctrine_is_eastern_faith + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_encouraged + + #Funeral tradition + doctrine = doctrine_funeral_cremation + + #Coronation tradition + doctrine = doctrine_no_anointment + + traits = { + virtues = { + temperate + content + honest + } + sins = { + greedy + wrathful + ambitious + } + } + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + holy_order_names = { + { name = "holy_order_followers_of_arjuna" } + { name = "holy_order_faith_maharatas" } + { name = "holy_order_vyuha_of_highgod" } + { name = "holy_order_vyuha_of_the_temple_of_place" } + { name = "holy_order_maharatas_of_highgod" } + } + + holy_order_maa = { war_elephant } + + localization = { + #HighGod + HighGodName = hinduism_high_god_name + HighGodName2 = hinduism_high_god_name_2 + HighGodNamePossessive = hinduism_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_IT + HighGodHerselfHimself = CHARACTER_ITSELF + HighGodHerHis = CHARACTER_HERHIS_ITS + HighGodNameAlternate = hinduism_high_god_name_alternate + HighGodNameAlternatePossessive = hinduism_high_god_name_alternate_possessive + + #Creator + CreatorName = hinduism_creator_god_name + CreatorNamePossessive = hinduism_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_HE + CreatorHerHis = CHARACTER_HERHIS_HIS + CreatorHerHim = CHARACTER_HERHIM_HIM + + #HealthGod + HealthGodName = hinduism_health_god_name + HealthGodNamePossessive = hinduism_health_god_name_possessive + HealthGodSheHe = CHARACTER_SHEHE_SHE + HealthGodHerHis = CHARACTER_HERHIS_HER + HealthGodHerHim = CHARACTER_HERHIM_HER + + #FertilityGod + FertilityGodName = hinduism_fertility_god_name + FertilityGodNamePossessive = hinduism_fertility_god_name_possessive + FertilityGodSheHe = CHARACTER_SHEHE_SHE + FertilityGodHerHis = CHARACTER_HERHIS_HER + FertilityGodHerHim = CHARACTER_HERHIM_HER + + #WealthGod + WealthGodName = hinduism_wealth_god_name + WealthGodNamePossessive = hinduism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + + #HouseholdGod + HouseholdGodName = hinduism_household_god_name + HouseholdGodNamePossessive = hinduism_household_god_name_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_SHE + HouseholdGodHerHis = CHARACTER_HERHIS_HER + HouseholdGodHerHim = CHARACTER_HERHIM_HER + + #FateGod + FateGodName = hinduism_fate_god_name + FateGodNamePossessive = hinduism_fate_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_IT + FateGodHerHis = CHARACTER_HERHIS_ITS + FateGodHerHim = CHARACTER_HERHIM_IT + + #KnowledgeGod + KnowledgeGodName = hinduism_knowledge_god_name + KnowledgeGodNamePossessive = hinduism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_SHE + KnowledgeGodHerHis = CHARACTER_HERHIS_HER + KnowledgeGodHerHim = CHARACTER_HERHIM_HER + + #WarGod + WarGodName = hinduism_war_god_name + WarGodNamePossessive = hinduism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_SHE + WarGodHerHis = CHARACTER_HERHIS_HER + WarGodHerHim = CHARACTER_HERHIM_HER + + #TricksterGod + TricksterGodName = hinduism_trickster_god_name + TricksterGodNamePossessive = hinduism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_HE + TricksterGodHerHis = CHARACTER_HERHIS_HIS + TricksterGodHerHim = CHARACTER_HERHIM_HIM + + #NightGod + NightGodName = hinduism_night_god_name + NightGodNamePossessive = hinduism_night_god_name_possessive + NightGodSheHe = CHARACTER_SHEHE_SHE + NightGodHerHis = CHARACTER_HERHIS_HER + NightGodHerHim = CHARACTER_HERHIM_HER + + #WaterGod + WaterGodName = hinduism_water_god_name + WaterGodNamePossessive = hinduism_water_god_name_possessive + WaterGodSheHe = CHARACTER_SHEHE_SHE + WaterGodHerHis = CHARACTER_HERHIS_HER + WaterGodHerHim = CHARACTER_HERHIM_HER + + + PantheonTerm = religion_the_gods + PantheonTerm2 = religion_the_gods_2 + PantheonTerm3 = religion_the_gods_3 + PantheonTermHasHave = pantheon_term_have + GoodGodNames = { + hinduism_high_god_name + hinduism_high_god_name_alternate + hinduism_good_god_brahma + hinduism_good_god_vishnu + hinduism_good_god_shiva + hinduism_good_god_ganesh + hinduism_good_god_surya + shaktism_good_god_devi + } + DevilName = hinduism_devil_name + DevilNamePossessive = hinduism_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_THEY + DevilHerHis = CHARACTER_HERHIS_THEIR + DevilHerselfHimself = hinduism_devil_herselfhimself + EvilGodNames = { + hinduism_devil_name + hinduism_evil_god_pishachas + hinduism_evil_god_krodha + } + HouseOfWorship = hinduism_house_of_worship + HouseOfWorship2 = hinduism_house_of_worship_2 + HouseOfWorship3 = hinduism_house_of_worship_3 + HouseOfWorshipPlural = hinduism_house_of_worship_plural + ReligiousSymbol = hinduism_religious_symbol + ReligiousSymbol2 = hinduism_religious_symbol_2 + ReligiousSymbol3 = hinduism_religious_symbol_3 + ReligiousText = hinduism_religious_text + ReligiousText2 = hinduism_religious_text_2 + ReligiousText3 = hinduism_religious_text_3 + ReligiousHeadName = hinduism_religious_head_title + ReligiousHeadTitleName = hinduism_religious_head_title_name + DevoteeMale = hinduism_devotee_male + DevoteeMalePlural = hinduism_devotee_male_plural + DevoteeFemale = hinduism_devotee_female + DevoteeFemalePlural = hinduism_devotee_female_plural + DevoteeNeuter = hinduism_devotee_neuter + DevoteeNeuterPlural = hinduism_devotee_neuter_plural + PriestMale = hinduism_priest + PriestMalePlural = hinduism_priest_plural + PriestFemale = hinduism_priest + PriestFemalePlural = hinduism_priest_plural + PriestNeuter = hinduism_priest + PriestNeuterPlural = hinduism_priest_plural + AltPriestTermPlural = hinduism_priest_term_plural + BishopMale = hinduism_bishop + BishopMalePlural = hinduism_bishop_plural + BishopFemale = hinduism_bishop + BishopFemalePlural = hinduism_bishop_plural + BishopNeuter = hinduism_bishop + BishopNeuterPlural = hinduism_bishop_plural + DivineRealm = hinduism_divine_realm + DivineRealm2 = hinduism_divine_realm_2 + DivineRealm3 = hinduism_divine_realm_3 + PositiveAfterLife = hinduism_positive_afterlife + PositiveAfterLife2 = hinduism_positive_afterlife_2 + PositiveAfterLife3 = hinduism_positive_afterlife_3 + NegativeAfterLife = hinduism_negative_afterlife + NegativeAfterLife2 = hinduism_negative_afterlife_2 + NegativeAfterLife3 = hinduism_negative_afterlife_3 + DeathDeityName = hinduism_death_name + DeathDeityNamePossessive = hinduism_death_name_possessive + DeathDeitySheHe = CHARACTER_SHEHE_HE + DeathDeityHerHis = CHARACTER_HERHIS_HIS + DeathDeityHerHim = CHARACTER_HERHIM_HIM + WitchGodName = shaktism_good_god_kali + WitchGodNamePossessive = shaktism_good_god_kali_possessive + WitchGodHerHis = CHARACTER_HERHIS_HER + WitchGodSheHe = CHARACTER_SHEHE_SHE + WitchGodHerHim = CHARACTER_HERHIM_HER + WitchGodMistressMaster = mistress + WitchGodMotherFather = mother + + GHWName = ghw_purification + GHWNamePlural = ghw_purifications + } + + faiths = { + vaishnavism = { + color = { 1.0 0.0 0.0 } + icon = hinduism + + holy_site = varanasi + holy_site = ayodhya + holy_site = mathura + holy_site = bantey_srei + holy_site = kanchipuram + holy_site = ujjayini + holy_site = khao_khlang_nai + + doctrine = tenet_reincarnation + doctrine = tenet_bhakti + doctrine = tenet_preservation + + localization = { + HighGodName = vaishnavism_high_god_name + HighGodName2 = vaishnavism_high_god_name_2 + HighGodNamePossessive = vaishnavism_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_HE + HighGodHerselfHimself = CHARACTER_HIMSELF + HighGodHerHis = CHARACTER_HERHIS_HIS + + #WealthGod + WealthGodName = vaishnavism_wealth_god_name + WealthGodNamePossessive = vaishnavism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_SHE + WealthGodHerHis = CHARACTER_HERHIS_HER + WealthGodHerHim = CHARACTER_HERHIM_HER + + #KnowledgeGod + KnowledgeGodName = vaishnavism_knowledge_god_name + KnowledgeGodNamePossessive = vaishnavism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + + #WarGod + WarGodName = vaishnavism_war_god_name + WarGodNamePossessive = vaishnavism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + + #TricksterGod + TricksterGodName = vaishnavism_trickster_god_name + TricksterGodNamePossessive = vaishnavism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_HE + TricksterGodHerHis = CHARACTER_HERHIS_HIS + TricksterGodHerHim = CHARACTER_HERHIM_HIM + + GoodGodNames = { + vaishnavism_high_god_name + hinduism_high_god_name_alternate + hinduism_good_god_brahma + hinduism_good_god_shiva + hinduism_good_god_krishna + hinduism_good_god_shakti + hinduism_good_god_narayana + } + } + } + } +} diff --git a/common/religion/religion_types/00_islam.txt b/common/religion/religion_types/00_islam.txt index aec80db9..722e83f3 100644 --- a/common/religion/religion_types/00_islam.txt +++ b/common/religion/religion_types/00_islam.txt @@ -376,33 +376,7 @@ doctrine = special_doctrine_jizya #Leadership doctrine = doctrine_temporal_head - } - - ashari = { #Arabian Sunni Islam - color = { 0 0.6 0 } - icon = sunni - religious_head = d_sunni - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = baghdad - holy_site = sinai - - #Tenet: - doctrine = tenet_struggle_submission - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_legalism - - #DOCTRINES: - #Sunni - doctrine = muhammad_succession_sunni_doctrine - # Jizya - doctrine = special_doctrine_jizya - #Leadership - doctrine = doctrine_temporal_head - } - + } jadidi = { #placeholder - modernists from central asia color = { 8 89 89 } icon = jadidi @@ -458,651 +432,5 @@ doctrine = doctrine_pluralism_pluralistic } - - muwalladi = { # Iberian Sunni Islam - color = { 0 0.4 0 } - icon = muwalladi - religious_head = d_sunni - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = cordoba - holy_site = fes - - #Tenet: - doctrine = tenet_struggle_submission - doctrine = tenet_communal_identity - doctrine = tenet_adaptive - - #DOCTRINES: - #Sunni - doctrine = muhammad_succession_sunni_doctrine - # Jizya - doctrine = special_doctrine_jizya - #Homosexuality is a sin, but a much more tolerated one. - doctrine = doctrine_homosexuality_accepted - #Pluralistic - doctrine = doctrine_pluralism_pluralistic - } - - maturidi = { # Persian Sunni Islam - color = { 0.1 0.5 0.3 } - icon = maturidi - religious_head = d_sunni - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = baghdad - holy_site = samarkand - - #Tenet - doctrine = tenet_adaptive - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_legalism - - #DOCTRINES - #Sunni - doctrine = muhammad_succession_sunni_doctrine - # Jizya - doctrine = special_doctrine_jizya - #Pluralistic - doctrine = doctrine_pluralism_pluralistic - } - - masmudi = { # Reformist Sunni Islam (Almohads) - color = { 0 0.6 0.2 } - icon = masmudi - religious_head = d_masmudi - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = tinmallal - holy_site = fes - - #Tenet: - doctrine = tenet_struggle_submission - doctrine = tenet_warmonger - doctrine = tenet_literalism - - #DOCTRINES: - #Sunni - doctrine = muhammad_succession_sunni_doctrine - #Pluralistic - doctrine = doctrine_pluralism_fundamentalist - - localization = { - ReligiousHeadName = masmudi_religious_head_title - ReligiousHeadTitleName = masmudi_religious_head_title_name - } - } - - mutazila = { # Rationalist school of Sunni Islam. Dominant between 8th and 10th centuries in the Abbasid Caliphate (Persia). - color = { 0 0.7 0.5 } - icon = mutazila - religious_head = d_sunni - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = baghdad - holy_site = sinai - - #Tenet: - doctrine = tenet_struggle_submission - doctrine = tenet_alexandrian_catechism #FP3 change - doctrine = tenet_legalism - - #DOCTRINES: - #Sunni - doctrine = muhammad_succession_sunni_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_divorce_allowed - doctrine = doctrine_witchcraft_shunned - } - - quranist = { - color = { 0.2 0.7 0.1 } - icon = quranist - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = kufa - holy_site = sinai - - #Tenet - doctrine = tenet_literalism - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_false_conversion_sanction - - #DOCTRINES - #Sunni - #No Head - #Homosexuality is a crime - #Adultery is a crime - #Deviancy is a crime - #Fundamentalist - # Jizya - doctrine = special_doctrine_jizya - doctrine = muhammad_succession_zandaqa_doctrine #Technically Shia - doctrine = doctrine_no_head - doctrine = doctrine_homosexuality_crime - doctrine = doctrine_adultery_men_crime - doctrine = doctrine_adultery_women_crime - doctrine = doctrine_deviancy_crime - doctrine = doctrine_pluralism_fundamentalist - } - - ismaili = { #Seveners (default Shia) - color = { 0.2 0.8 0 } - icon = shia - religious_head = d_shiite - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_struggle_submission - doctrine = tenet_esotericism - doctrine = tenet_false_conversion_sanction - - #DOCTRINES - # Jizya - doctrine = special_doctrine_jizya - #Leadership - doctrine = doctrine_temporal_head - - #Shia - #Witchcraft is frowned upon - doctrine = muhammad_succession_shia_doctrine - doctrine = doctrine_witchcraft_shunned - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - qarmatian = { #A branch of the Isma'ili with syncretic Zoroastrian elements - #Founded a utopian republic in al-Hasa - color = { 0.1 0.8 0.1 } - icon = qarmatian - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_unrelenting_faith - doctrine = tenet_aniconism - doctrine = tenet_gnosticism - - #Shia - #Homosexuality is a sin, but a much more tolerated one. - #Witchcraft is frowned upon - doctrine = muhammad_succession_zandaqa_doctrine #Technically Shia - doctrine = doctrine_no_head # Believes in the Imams, but disagree with mainline Shias as to who they are. Does not believe the true Imam has been reincarnated yet. - doctrine = doctrine_pluralism_fundamentalist - doctrine = doctrine_homosexuality_accepted - doctrine = doctrine_witchcraft_shunned - doctrine = doctrine_monogamy - doctrine = doctrine_gender_equal # While the differences between men and women were a bit more complex, Equal is a suitable abstraction for lack of male-pref - doctrine = doctrine_pilgrimage_forbidden - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - nizari = { - color = { 0.2 0.7 0.1 } - icon = nizari - religious_head = d_nizari - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = qom # Very important religious center in Iran - - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_false_conversion_sanction - - # Fedayeen, else Struggle & Submission - doctrine_selection_pair = { - requires_dlc_flag = legacy_of_persia - doctrine = tenet_fp3_fedayeen - fallback_doctrine = tenet_struggle_submission - } - - #Shia - doctrine = muhammad_succession_shia_doctrine - # Jizya - doctrine = special_doctrine_jizya - #Hereditary clerical succession - doctrine = doctrine_clerical_succession_spiritual_fixed_appointment - # Assassins - doctrine = doctrine_clerical_function_recruitment - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - zayidi = { - color = { 0.3 0.8 0.2 } - icon = zayidi - religious_head = d_zayidi - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_struggle_submission - doctrine = tenet_unrelenting_faith - doctrine = tenet_legalism - - #Shia - #Witchcraft is a sin - doctrine = muhammad_succession_shia_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_witchcraft_shunned - doctrine = doctrine_pluralism_pluralistic - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - imami = { #Twelver - color = { 0.1 0.5 0.1 } - icon = imami - religious_head = d_imami - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = baghdad - - doctrine = tenet_legalism - doctrine = tenet_false_conversion_sanction - doctrine = tenet_religious_legal_pronouncements - - #Shia - #No religious head - #Homosexuality is a sin - #Witchcraft is a sin - doctrine = muhammad_succession_shia_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_witchcraft_shunned - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - BishopMale = islam_ayatollah - BishopMalePlural = islam_ayatollah_plural - BishopFemale = islam_ayatollah - BishopFemalePlural = islam_ayatollah_plural - BishopNeuter = islam_ayatollah - BishopNeuterPlural = islam_ayatollah_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - ghulat = { - color = { 0.4 0.8 0.3 } - icon = ghulat - religious_head = d_ghulat - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_struggle_submission - doctrine = tenet_false_conversion_sanction - doctrine = tenet_communion - - #Shia - #No religious head - #Witchcraft is a sin - doctrine = muhammad_succession_zandaqa_doctrine #Technically Shia - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_witchcraft_shunned - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - alawite = { - color = { 0.2 0.4 0.1 } - icon = alawite - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_esotericism - doctrine = tenet_reincarnation - doctrine = tenet_communion - - #Shia - #No head of faith: or, technically should be no head, but one is required for their communion tenet to work, so we give them a chief imam. - #Monogamy - #Free divorce - #Adultery is a crime - #Clergy - equal - doctrine = muhammad_succession_zandaqa_doctrine #Technically Shia - doctrine = doctrine_monogamy - doctrine = doctrine_divorce_allowed - doctrine = doctrine_adultery_men_crime - doctrine = doctrine_spiritual_head - doctrine = doctrine_adultery_women_crime - doctrine = doctrine_clerical_gender_either - doctrine = doctrine_pilgrimage_forbidden - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - druze = { - color = { 0.3 0.7 0.1 } - icon = islam_druze - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = beirut - holy_site = zozan - - doctrine = tenet_gnosticism - doctrine = tenet_reincarnation - doctrine = tenet_false_conversion_sanction - - #Shia - #Divorce forbidden - #Homosexuality is a sin - #Witchcraft is a sin - - doctrine = doctrine_monogamy - doctrine = muhammad_succession_zandaqa_doctrine #Technically Shia - doctrine = doctrine_divorce_allowed - doctrine = doctrine_adultery_women_crime - doctrine = doctrine_adultery_men_crime - doctrine = doctrine_witchcraft_shunned - doctrine = doctrine_clerical_gender_either - doctrine = doctrine_pilgrimage_forbidden - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousText = druze_religious_text - ReligiousText2 = druze_religious_text_2 - ReligiousText3 = druze_religious_text_3 - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - ibadi = { - color = { 0.3 0.6 0.3 } - icon = ibadi - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = basra - holy_site = nizwa - - #Tenet - doctrine = tenet_literalism - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_false_conversion_sanction - - #DOCTRINES - #Muhakkima - #No religious head - #Witchcraft is a sin - doctrine = muhammad_succession_muhakkima_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_no_head - doctrine = doctrine_witchcraft_shunned - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - - holy_order_names = { - { name = "holy_order_haruriyya" } - } - } - - azariqa = { - color = { 0.3 0.7 0.7 } - icon = azariqa - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = siffa - holy_site = kufa - - #Tenet - doctrine = tenet_legalism - doctrine = tenet_warmonger - - # Fedayeen, else Struggle & Submission - doctrine_selection_pair = { - requires_dlc_flag = legacy_of_persia - doctrine = tenet_fp3_fedayeen - fallback_doctrine = tenet_struggle_submission - } - - doctrine = muhammad_succession_muhakkima_doctrine - doctrine = doctrine_temporal_head - doctrine = doctrine_witchcraft_shunned - doctrine = doctrine_adultery_men_crime - doctrine = doctrine_adultery_women_crime - doctrine = doctrine_gender_equal - doctrine = doctrine_pluralism_fundamentalist - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - najdat = { - color = { 0.6 0.7 0.7 } - icon = nadjat - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = bahrein - holy_site = yamama - - #Tenet - doctrine = tenet_struggle_submission - doctrine = tenet_religious_legal_pronouncements - doctrine = tenet_esotericism - - #Doctrines - doctrine = muhammad_succession_muhakkima_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_temporal_head - doctrine = doctrine_witchcraft_shunned - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - sufri = { - color = { 0.3 0.5 0.5 } - icon = muhakkima_3 - - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = sijilmasa - holy_site = siffa - - #Tenet - doctrine = tenet_struggle_submission - doctrine = tenet_literalism - doctrine = tenet_false_conversion_sanction - - #Doctrines - doctrine = muhammad_succession_muhakkima_doctrine - # Jizya - doctrine = special_doctrine_jizya - doctrine = doctrine_no_head - doctrine = doctrine_divorce_allowed - doctrine = doctrine_witchcraft_shunned - doctrine = doctrine_gender_equal - doctrine = doctrine_clerical_gender_either - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } - - hafizi = { #Sub-set of Ismaili Shiites that fervently supported the primacy of their caliph. - color = { 0.5 0.8 0.4 } - icon = ibadi_custom - religious_head = d_shiite - - holy_site = mecca - holy_site = medina - holy_site = jerusalem - holy_site = nadjaf - holy_site = damascus - - doctrine = tenet_struggle_submission - doctrine = tenet_unrelenting_faith - doctrine = tenet_false_conversion_sanction - - # Leadership - doctrine = doctrine_temporal_head - - # Shia - doctrine = muhammad_succession_shia_doctrine - # Main Doctrines - doctrine = doctrine_pluralism_fundamentalist - # Criminal Doctrines - doctrine = doctrine_witchcraft_shunned - # Clergy Doctrines - doctrine = doctrine_clerical_function_recruitment - - localization = { - PriestMale = islam_shia_priest - PriestMalePlural = islam_shia_priest_plural - PriestFemale = islam_shia_priest - PriestFemalePlural = islam_shia_priest_plural - PriestNeuter = islam_shia_priest - PriestNeuterPlural = islam_shia_priest_plural - ReligiousHeadName = islam_shia_religious_head_title - ReligiousHeadTitleName = islam_shia_religious_head_title_name - } - } } } diff --git a/common/religion/religion_types/00_jainism.txt b/common/religion/religion_types/00_jainism.txt new file mode 100644 index 00000000..e0250031 --- /dev/null +++ b/common/religion/religion_types/00_jainism.txt @@ -0,0 +1,247 @@ +jainism_religion = { + family = rf_eastern #Dharmic + graphical_faith = dharmic_gfx + doctrine = eastern_hostility_doctrine + + #Main Group + doctrine = doctrine_polytheist + doctrine = doctrine_no_head + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_righteous + doctrine = doctrine_theocracy_temporal + + #Marriage + doctrine = doctrine_polygamy + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_none + doctrine = doctrine_consanguinity_cousins + + #Crimes + doctrine = doctrine_homosexuality_accepted + doctrine = doctrine_adultery_men_shunned + doctrine = doctrine_adultery_women_shunned + doctrine = doctrine_kinslaying_close_kin_crime + doctrine = doctrine_deviancy_shunned + doctrine = doctrine_witchcraft_accepted + + #Clerical Functions + doctrine = doctrine_clerical_function_alms_and_pacification + doctrine = doctrine_clerical_gender_male_only + doctrine = doctrine_clerical_marriage_disallowed + doctrine = doctrine_clerical_succession_spiritual_fixed_appointment + + #Special Doctrine for Eastern Syncretism + doctrine = special_doctrine_is_eastern_faith + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_encouraged + + #Funeral tradition + doctrine = doctrine_funeral_cremation + + #Coronation tradition + doctrine = doctrine_no_anointment + + traits = { + virtues = { calm compassionate honest } + sins = { wrathful sadistic deceitful } + } + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + holy_order_names = { + { name = "holy_order_bulls_of_rishabha" } + { name = "holy_order_jivas_of_madhya_loka" } + { name = "holy_order_guardians_of_the_lotus_ocean" } + { name = "holy_order_sacrifices_of_devloka" } + } + + holy_order_maa = { khandayat } + + localization = { + #HighGodName + HighGodName = jainism_high_god_name + HighGodName2 = jainism_high_god_name_2 + HighGodNamePossessive = jainism_high_god_name_possessive + HighGodNameSheHe = jainism_high_god_shehe + HighGodHerselfHimself = jainism_high_god_herselfhimself + HighGodHerHis = jainism_high_god_herhis + HighGodNameAlternate = jainism_high_god_alternate + HighGodNameAlternatePossessive = jainism_high_god_alternate_possessive + + #Creator + CreatorName = jainism_creator_god_name + CreatorNamePossessive = jainism_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_IT + CreatorHerHis = CHARACTER_HERHIS_ITS + CreatorHerHim = CHARACTER_HERHIM_IT + + #HealthGod + HealthGodName = jainism_health_god_name + HealthGodNamePossessive = jainism_health_god_name_possessive + HealthGodSheHe = CHARACTER_SHEHE_HE + HealthGodHerHis = CHARACTER_HERHIS_HIS + HealthGodHerHim = CHARACTER_HERHIM_HIM + + #FertilityGod + FertilityGodName = jainism_fertility_god_name + FertilityGodNamePossessive = jainism_fertility_god_name_possessive + FertilityGodSheHe = CHARACTER_SHEHE_HE + FertilityGodHerHis = CHARACTER_HERHIS_HIS + FertilityGodHerHim = CHARACTER_HERHIM_HIM + + #WealthGod + WealthGodName = jainism_wealth_god_name + WealthGodNamePossessive = jainism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + + #HouseholdGod + HouseholdGodName = jainism_household_god_name + HouseholdGodNamePossessive = jainism_household_god_name_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_HE + HouseholdGodHerHis = CHARACTER_HERHIS_HIS + HouseholdGodHerHim = CHARACTER_HERHIM_HIM + + #FateGod + FateGodName = jainism_fate_god_name + FateGodNamePossessive = jainism_fate_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_IT + FateGodHerHis = CHARACTER_HERHIS_ITS + FateGodHerHim = CHARACTER_HERHIM_IT + + #KnowledgeGod + KnowledgeGodName = jainism_knowledge_god_name + KnowledgeGodNamePossessive = jainism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + + #WarGod + WarGodName = jainism_war_god_name + WarGodNamePossessive = jainism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + + #TricksterGod + TricksterGodName = jainism_trickster_god_name + TricksterGodNamePossessive = jainism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_IT + TricksterGodHerHis = CHARACTER_HERHIS_ITS + TricksterGodHerHim = CHARACTER_HERHIM_IT + + #NightGod + NightGodName = jainism_night_god_name + NightGodNamePossessive = jainism_night_god_name_possessive + NightGodSheHe = CHARACTER_SHEHE_HE + NightGodHerHis = CHARACTER_HERHIS_HIS + NightGodHerHim = CHARACTER_HERHIM_HIM + + #WaterGod + WaterGodName = jainism_water_god_name + WaterGodNamePossessive = jainism_water_god_name_possessive + WaterGodSheHe = CHARACTER_SHEHE_HE + WaterGodHerHis = CHARACTER_HERHIS_HIS + WaterGodHerHim = CHARACTER_HERHIM_HIM + + PantheonTerm = religion_the_gods + PantheonTerm2 = religion_the_gods_2 + PantheonTerm3 = religion_the_gods_3 + PantheonTermHasHave = pantheon_term_have + GoodGodNames = { + jainism_high_god_name + jainism_high_god_alternate + jainism_good_god_rishabhanatha + jainism_good_god_mahavira + } + DevilName = jainism_devil_name + DevilNamePossessive = jainism_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_THEY + DevilHerHis = CHARACTER_HERHIS_THEIR + DevilHerselfHimself = jainism_devil_herselfhimself + EvilGodNames = { + jainism_devil_name + jainism_evil_god_hellish_beings + jainism_evil_god_ignorance + } + HouseOfWorship = jainism_house_of_worship + HouseOfWorship2 = jainism_house_of_worship_2 + HouseOfWorship3 = jainism_house_of_worship_3 + HouseOfWorshipPlural = jainism_house_of_worship_plural + ReligiousSymbol = jainism_religious_symbol + ReligiousSymbol2 = jainism_religious_symbol_2 + ReligiousSymbol3 = jainism_religious_symbol_3 + ReligiousText = jainism_religious_text + ReligiousText2 = jainism_religious_text_2 + ReligiousText3 = jainism_religious_text_3 + ReligiousHeadName = jainism_religious_head_title + ReligiousHeadTitleName = jainism_religious_head_title_name + DevoteeMale = jainism_devotee_male + DevoteeMalePlural = jainism_devotee_male_plural + DevoteeFemale = jainism_devotee_female + DevoteeFemalePlural = jainism_devotee_female_plural + DevoteeNeuter = jainism_devotee_neuter + DevoteeNeuterPlural = jainism_devotee_neuter_plural + PriestMale = jainism_devotee_male + PriestMalePlural = jainism_devotee_male_plural + PriestFemale = jainism_devotee_female + PriestFemalePlural = jainism_devotee_female_plural + PriestNeuter = jainism_devotee_neuter + PriestNeuterPlural = jainism_devotee_neuter_plural + AltPriestTermPlural = jainism_alternate_priest_term_plural + BishopMale = jainism_bishop + BishopMalePlural = jainism_bishop_plural + BishopFemale = jainism_bishop + BishopFemalePlural = jainism_bishop_plural + BishopNeuter = jainism_bishop + BishopNeuterPlural = jainism_bishop_plural + DivineRealm = jainism_divine_realm + DivineRealm2 = jainism_divine_realm_2 + DivineRealm3 = jainism_divine_realm_3 + PositiveAfterLife = jainism_positive_afterlife + PositiveAfterLife2 = jainism_positive_afterlife_2 + PositiveAfterLife3 = jainism_positive_afterlife_3 + NegativeAfterLife = jainism_negative_afterlife + NegativeAfterLife2 = jainism_negative_afterlife_2 + NegativeAfterLife3 = jainism_negative_afterlife_3 + DeathDeityName = jainism_death_deity + DeathDeityNamePossessive = jainism_death_deity_possessive + DeathDeitySheHe = jainism_death_deity_shehe + DeathDeityHerHis = jainism_death_deity_herhis + DeathDeityHerHim = CHARACTER_HERHIM_IT + WitchGodName = witchgod_jainism_the_devas + WitchGodNamePossessive = witchgod_jainism_the_devas_possessive + WitchGodSheHe = witchgod_shehe_they + WitchGodHerHis = witchgod_herhis_their + WitchGodHerHim = witchgod_herhim_them + WitchGodMistressMaster = witch_spirit + WitchGodMotherFather = witch_source + + GHWName = ghw_purification + GHWNamePlural = ghw_purifications + } + + faiths = { + digambara = { + color = { 1.0 1.0 0.4 } + icon = jainism + + holy_site = palitana + holy_site = shikharj + holy_site = ranakpur + holy_site = ellora + holy_site = sittannavasal + + doctrine = tenet_dharmic_pacifism + doctrine = tenet_asceticism + doctrine = tenet_ritual_hospitality + + doctrine = doctrine_clerical_gender_male_only + doctrine = special_doctrine_naked_priests # Digambara, or "sky-clad", these Jain monks do not wear clothes as part of their religious practices. + } + } +} diff --git a/common/religion/religion_types/00_shintoism.txt b/common/religion/religion_types/00_shintoism.txt new file mode 100644 index 00000000..c5fdbf93 --- /dev/null +++ b/common/religion/religion_types/00_shintoism.txt @@ -0,0 +1,241 @@ +shintoism_religion = { + family = rf_pagan + doctrine = pagan_hostility_doctrine + graphical_faith = shinto_gfx + + #Main Group + doctrine = doctrine_polytheist + doctrine = doctrine_no_head + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_pluralistic + doctrine = doctrine_theocracy_temporal + + #Marriage + doctrine = doctrine_polygamy + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_none + doctrine = doctrine_consanguinity_cousins + + #Crimes + doctrine = doctrine_homosexuality_accepted + doctrine = doctrine_adultery_men_accepted + doctrine = doctrine_adultery_women_accepted + doctrine = doctrine_kinslaying_any_dynasty_member_crime + doctrine = doctrine_deviancy_shunned + doctrine = doctrine_witchcraft_shunned + + #Clerical Functions + doctrine = doctrine_clerical_function_alms_and_pacification + doctrine = doctrine_clerical_gender_either + doctrine = doctrine_clerical_marriage_allowed + doctrine = doctrine_clerical_succession_spiritual_fixed_appointment + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_local_rites + + #Funeral tradition + doctrine = doctrine_funeral_stoic + + #Coronation tradition + doctrine = doctrine_no_anointment + + #Special Doctrine for Shinto mechanics + doctrine = special_doctrine_immaterial_harmony + + traits = { + virtues = { + compassionate + content + humble + } + sins = { + sadistic + ambitious + arrogant + } + } + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + localization = { + HighGodName = shintoism_high_god_name + HighGodName2 = shintoism_high_god_name_2 + HighGodNamePossessive = shintoism_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_SHE + HighGodHerselfHimself = CHARACTER_HERSELF + HighGodHerHis = CHARACTER_HERHIS_HER + HighGodNameAlternate = shintoism_high_god_name_alternate + HighGodNameAlternatePossessive = shintoism_high_god_name_alternate_possessive + + #Creator + CreatorName = shintoism_creator_god_name + CreatorNamePossessive = shintoism_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_SHE + CreatorHerHis = CHARACTER_HERHIS_HER + CreatorHerHim = CHARACTER_HERHIM_HER + + #HealthGod + HealthGodName = shintoism_health_god_name + HealthGodNamePossessive = shintoism_health_god_name_possessive + HealthGodSheHe = CHARACTER_SHEHE_HE + HealthGodHerHis = CHARACTER_HERHIS_HIS + HealthGodHerHim = CHARACTER_HERHIM_HIM + + #FertilityGod + FertilityGodName = shintoism_fertility_god_name + FertilityGodNamePossessive = shintoism_fertility_god_name_possessive + FertilityGodSheHe = CHARACTER_SHEHE_THEY + FertilityGodHerHis = CHARACTER_HERHIS_THEIR + FertilityGodHerHim = CHARACTER_HERHIM_THEM + + #WealthGod + WealthGodName = shintoism_wealth_god_name + WealthGodNamePossessive = shintoism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + + #HouseholdGod + HouseholdGodName = shintoism_household_god_name + HouseholdGodNamePossessive = shintoism_household_god_name_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_HE + HouseholdGodHerHis = CHARACTER_HERHIS_HIS + HouseholdGodHerHim = CHARACTER_HERHIM_HIM + + #FateGod + FateGodName = shintoism_fate_god_name + FateGodNamePossessive = shintoism_fate_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_HE + FateGodHerHis = CHARACTER_HERHIS_HIS + FateGodHerHim = CHARACTER_HERHIM_HIM + + #KnowledgeGod + KnowledgeGodName = shintoism_knowledge_god_name + KnowledgeGodNamePossessive = shintoism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + + #WarGod + WarGodName = shintoism_war_god_name + WarGodNamePossessive = shintoism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + + #TricksterGod + TricksterGodName = shintoism_trickster_god_name + TricksterGodNamePossessive = shintoism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_HE + TricksterGodHerHis = CHARACTER_HERHIS_HIS + TricksterGodHerHim = CHARACTER_HERHIM_HIM + + #NightGod + NightGodName = shintoism_night_god_name + NightGodNamePossessive = shintoism_night_god_name_possessive + NightGodSheHe = CHARACTER_SHEHE_THEY + NightGodHerHis = CHARACTER_HERHIS_THEIR + NightGodHerHim = CHARACTER_HERHIM_THEM + + #WaterGod + WaterGodName = shintoism_water_god_name + WaterGodNamePossessive = shintoism_water_god_name_possessive + WaterGodSheHe = CHARACTER_SHEHE_HE + WaterGodHerHis = CHARACTER_HERHIS_HIS + WaterGodHerHim = CHARACTER_HERHIM_HIM + + #Devil + DevilName = shintoism_devil_name + DevilNamePossessive = shintoism_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_HE + DevilHerHis = CHARACTER_HERHIS_HIS + DevilHerselfHimself = CHARACTER_HIMSELF + + #Death + DeathDeityName = shintoism_death_deity_name + DeathDeityNamePossessive = shintoism_death_deity_name_possessive + DeathDeitySheHe = CHARACTER_SHEHE_SHE + DeathDeityHerHis = CHARACTER_HERHIS_HER + DeathDeityHerHim = CHARACTER_HERHIM_HER + + #Witch + WitchGodName = shintoism_witch_god_name + WitchGodNamePossessive = shintoism_witch_god_name_possessive + WitchGodSheHe = CHARACTER_SHEHE_HE + WitchGodHerHim = CHARACTER_HERHIM_HIM + WitchGodMistressMaster = master + WitchGodMotherFather = father + WitchGodHerHis = CHARACTER_HERHIS_HIS + + GoodGodNames = { shintoism_high_god_name } + EvilGodNames = { shintoism_evil_god_amatsu_mikaboshi } + + PantheonTerm = religion_the_gods + PantheonTerm2 = religion_the_gods_2 + PantheonTerm3 = religion_the_gods_3 + PantheonTermHasHave = pantheon_term_have + + HouseOfWorship = shintoism_house_of_worship + HouseOfWorship2 = shintoism_house_of_worship_2 + HouseOfWorship3 = shintoism_house_of_worship_3 + HouseOfWorshipPlural = shintoism_house_of_worship_plural + ReligiousSymbol = shintoism_religious_symbol + ReligiousSymbol2 = shintoism_religious_symbol_2 + ReligiousSymbol3 = shintoism_religious_symbol_3 + ReligiousText = shintoism_religious_text + ReligiousText2 = shintoism_religious_text_2 + ReligiousText3 = shintoism_religious_text_3 + ReligiousHeadName = shintoism_religious_head_title + ReligiousHeadTitleName = shintoism_religious_head_title_name + DevoteeMale = shintoism_devotee + DevoteeMalePlural = shintoism_devoteeplural + DevoteeFemale = shintoism_devotee + DevoteeFemalePlural = shintoism_devoteeplural + DevoteeNeuter = shintoism_devotee + DevoteeNeuterPlural = shintoism_devoteeplural + PriestMale = shinto_priest_male + PriestMalePlural = shinto_priest_male_plural + PriestFemale = shinto_priest_female + PriestFemalePlural = shinto_priest_female_plural + PriestNeuter = shinto_priest_neuter + PriestNeuterPlural = shinto_priest_neuter_plural + AltPriestTermPlural = shintoism_priest_alternate_plural + BishopMale = shinto_priest_male + BishopMalePlural = shinto_priest_male_plural + BishopFemale = shinto_priest_female + BishopFemalePlural = shinto_priest_female_plural + BishopNeuter = shinto_priest_male + BishopNeuterPlural = shinto_priest_male_plural + DivineRealm = shintoism_divine_realm + DivineRealm2 = shintoism_divine_realm_2 + DivineRealm3 = shintoism_divine_realm_3 + PositiveAfterLife = shintoism_afterlife + PositiveAfterLife2 = shintoism_afterlife_2 + PositiveAfterLife3 = shintoism_afterlife_3 + NegativeAfterLife = shintoism_afterlife + NegativeAfterLife2 = shintoism_afterlife_2 + NegativeAfterLife3 = shintoism_afterlife_3 + + GHWName = ghw_great_holy_war + GHWNamePlural = ghw_great_holy_wars + } + + faiths = { + shinto = { + color = { 188 0 45 } + icon = shinto + + holy_site = ise_jingu + holy_site = itsukushima + holy_site = hachimangu + holy_site = kizuki + holy_site = kashima + + doctrine = tenet_communal_identity + doctrine = tenet_ancestor_worship + doctrine = tenet_ritual_celebrations + } + } +} diff --git a/common/religion/religion_types/00_taoism.txt b/common/religion/religion_types/00_taoism.txt new file mode 100644 index 00000000..2d02fcff --- /dev/null +++ b/common/religion/religion_types/00_taoism.txt @@ -0,0 +1,257 @@ +taoism_religion = { + family = rf_sinitic + doctrine = eastern_hostility_doctrine + graphical_faith = sinitic_gfx + + #Main Group + doctrine = doctrine_polytheist + doctrine = doctrine_no_head + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_pluralistic + doctrine = doctrine_theocracy_temporal + + #Marriage + doctrine = doctrine_concubines + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_none + doctrine = doctrine_consanguinity_dynastic + + #Crimes + doctrine = doctrine_homosexuality_accepted + doctrine = doctrine_adultery_men_shunned + doctrine = doctrine_adultery_women_shunned + doctrine = doctrine_kinslaying_any_dynasty_member_crime + doctrine = doctrine_deviancy_shunned + doctrine = doctrine_witchcraft_accepted + + #Clerical Functions + doctrine = doctrine_clerical_function_alms_and_pacification + doctrine = doctrine_clerical_gender_male_only + doctrine = doctrine_clerical_marriage_disallowed + doctrine = doctrine_clerical_succession_temporal_appointment + + #Special Doctrine for Eastern Syncretism + doctrine = special_doctrine_is_sinitic_faith + doctrine = special_doctrine_immaterial_harmony + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_local_rites + + #Funeral tradition + doctrine = doctrine_funeral_stoic + + #Coronation tradition + doctrine = doctrine_no_anointment + + traits = { + virtues = { + compassionate + content + humble + } + sins = { + sadistic + ambitious + arrogant + } + } + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + localization = { + HighGodName = taoism_high_god_name + HighGodName2 = taoism_high_god_name_2 + HighGodNamePossessive = taoism_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_IT + HighGodHerselfHimself = CHARACTER_ITSELF + HighGodHerHis = CHARACTER_HERHIS_ITS + HighGodNameAlternate = taoism_high_god_name_alternate + HighGodNameAlternatePossessive = taoism_high_god_name_alternate_possessive + + #Creator + CreatorName = taoism_creator_god_name + CreatorNamePossessive = taoism_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_HE + CreatorHerHis = CHARACTER_HERHIS_HIS + CreatorHerHim = CHARACTER_HERHIM_HIM + + #HealthGod + HealthGodName = taoism_health_god_name + HealthGodNamePossessive = taoism_health_god_name_possessive + HealthGodSheHe = CHARACTER_SHEHE_HE + HealthGodHerHis = CHARACTER_HERHIS_HIS + HealthGodHerHim = CHARACTER_HERHIM_HIM + + #FertilityGod + FertilityGodName = taoism_fertility_god_name + FertilityGodNamePossessive = taoism_fertility_god_name_possessive + FertilityGodSheHe = CHARACTER_SHEHE_HE + FertilityGodHerHis = CHARACTER_HERHIS_HIS + FertilityGodHerHim = CHARACTER_HERHIM_HIM + + #WealthGod + WealthGodName = taoism_wealth_god_name + WealthGodNamePossessive = taoism_wealth_god_name_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + + #HouseholdGod + HouseholdGodName = taoism_household_god_name + HouseholdGodNamePossessive = taoism_household_god_name_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_HE + HouseholdGodHerHis = CHARACTER_HERHIS_HIS + HouseholdGodHerHim = CHARACTER_HERHIM_HIM + + #FateGod + FateGodName = taoism_fate_god_name + FateGodNamePossessive = taoism_fate_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_IT + FateGodHerHis = CHARACTER_HERHIS_ITS + FateGodHerHim = CHARACTER_HERHIM_IT + + #KnowledgeGod + KnowledgeGodName = taoism_knowledge_god_name + KnowledgeGodNamePossessive = taoism_knowledge_god_name_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + + #WarGod + WarGodName = taoism_war_god_name + WarGodNamePossessive = taoism_war_god_name_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + + #TricksterGod + TricksterGodName = taoism_trickster_god_name + TricksterGodNamePossessive = taoism_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_SHE + TricksterGodHerHis = CHARACTER_HERHIS_HER + TricksterGodHerHim = CHARACTER_HERHIM_HER + + #NightGod + NightGodName = taoism_night_god_name + NightGodNamePossessive = taoism_night_god_name_possessive + NightGodSheHe = CHARACTER_SHEHE_SHE + NightGodHerHis = CHARACTER_HERHIS_HER + NightGodHerHim = CHARACTER_HERHIM_HER + + #WaterGod + WaterGodName = taoism_water_god_name + WaterGodNamePossessive = taoism_water_god_name_possessive + WaterGodSheHe = CHARACTER_SHEHE_HE + WaterGodHerHis = CHARACTER_HERHIS_HIS + WaterGodHerHim = CHARACTER_HERHIM_HIM + + PantheonTerm = religion_the_gods + PantheonTerm2 = religion_the_gods_2 + PantheonTerm3 = religion_the_gods_3 + PantheonTermHasHave = pantheon_term_have + GoodGodNames = { + taoism_good_god_name_three_pure_ones + taoism_wealth_god_name + taoism_health_god_name + taoism_knowledge_god_name + taoism_war_god_name + taoism_night_god_name + taoism_water_god_name + } + DevilName = taoism_devil_name + DevilNamePossessive = taoism_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_IT + DevilHerHis = CHARACTER_HERHIS_ITS + DevilHerselfHimself = CHARACTER_ITSELF + EvilGodNames = { taoism_devil_name } + HouseOfWorship = taoism_house_of_worship + HouseOfWorship2 = taoism_house_of_worship_2 + HouseOfWorship3 = taoism_house_of_worship_3 + HouseOfWorshipPlural = taoism_house_of_worship_plural + ReligiousSymbol = taoism_religious_symbol + ReligiousSymbol2 = taoism_religious_symbol_2 + ReligiousSymbol3 = taoism_religious_symbol_3 + ReligiousText = taoism_religious_text + ReligiousText2 = taoism_religious_text_2 + ReligiousText3 = taoism_religious_text_3 + ReligiousHeadName = taoism_religious_head_title + ReligiousHeadTitleName = taoism_religious_head_title_name + DevoteeMale = taoism_devotee_male + DevoteeMalePlural = taoism_devotee_male_plural + DevoteeFemale = taoism_devotee_female + DevoteeFemalePlural = taoism_devotee_female_plural + DevoteeNeuter = taoism_devotee_neuter + DevoteeNeuterPlural = taoism_devotee_neuter_plural + PriestMale = taoism_priest_male + PriestMalePlural = taoism_priest_male_plural + PriestFemale = taoism_priest_female + PriestFemalePlural = taoism_priest_female_plural + PriestNeuter = taoism_priest_neuter + PriestNeuterPlural = taoism_priest_neuter_plural + AltPriestTermPlural = taoism_alternate_priest_term_plural + BishopMale = taoism_priest_male + BishopMalePlural = taoism_priest_male_plural + BishopFemale = taoism_priest_female + BishopFemalePlural = taoism_priest_female_plural + BishopNeuter = taoism_priest_neuter + BishopNeuterPlural = taoism_priest_neuter_plural + + DivineRealm = taoism_divine_realm + DivineRealm2 = taoism_divine_realm_2 + DivineRealm3 = taoism_divine_realm_3 + PositiveAfterLife = taoism_positive_afterlife + PositiveAfterLife2 = taoism_positive_afterlife_2 + PositiveAfterLife3 = taoism_positive_afterlife_3 + NegativeAfterLife = taoism_negative_afterlife + NegativeAfterLife2 = taoism_negative_afterlife_2 + NegativeAfterLife3 = taoism_negative_afterlife_3 + DeathDeityName = paganism_death_deity_name + DeathDeityNamePossessive = paganism_death_deity_name_possessive + DeathDeitySheHe = CHARACTER_SHEHE_IT + DeathDeityHerHis = CHARACTER_HERSHIS_ITS + DeathDeityHerHim = CHARACTER_HERHIM_IT + WitchGodName = witchgodname_taoism_daode_tianzun + WitchGodNamePossessive = witchgodname_taoism_daode_tianzun_possessive + WitchGodHerHis = CHARACTER_HERHIS_HER + WitchGodSheHe = CHARACTER_SHEHE_SHE + WitchGodHerHim = CHARACTER_HERHIM_HER + WitchGodMistressMaster = mistress + WitchGodMotherFather = mother + + GHWName = ghw_purification + GHWNamePlural = ghw_purifications + } + + faiths = { + zhengyi = { + color = { 8 140 131 } + icon = taoism + + holy_site = mount_longhu # Where Zhang Daoling had obtained the Tao + holy_site = mount_wudang + holy_site = mount_qingcheng + holy_site = mount_tai + holy_site = luyi + + #Main Group + doctrine = doctrine_spiritual_head + doctrine = doctrine_pluralism_righteous + + #Crimes + doctrine = doctrine_adultery_men_crime + doctrine = doctrine_adultery_women_crime + doctrine = doctrine_deviancy_crime + + #Clerical Functions + doctrine = doctrine_clerical_function_taxation + doctrine = doctrine_clerical_marriage_disallowed + doctrine = doctrine_clerical_succession_spiritual_fixed_appointment + + doctrine = tenet_communion + doctrine = tenet_esotericism + doctrine = tenet_mendicant_preachers + } + } +} diff --git a/common/religion/religion_types/00_yazidi.txt b/common/religion/religion_types/00_yazidi.txt new file mode 100644 index 00000000..2e6d3c16 --- /dev/null +++ b/common/religion/religion_types/00_yazidi.txt @@ -0,0 +1,257 @@ +yazidi_religion = { + family = rf_abrahamic + graphical_faith = "islamic_gfx" + + #STANDARD DOCTRINES: + + #Abrahamic hostiliy group + doctrine = abrahamic_hostility_doctrine + + # Main group + doctrine = doctrine_monotheist + doctrine = doctrine_gender_male_dominated + doctrine = doctrine_pluralism_righteous + doctrine = doctrine_temporal_head + doctrine = doctrine_clerical_succession_temporal_fixed_appointment + + # Marriage + doctrine = doctrine_polygamy + doctrine = doctrine_divorce_allowed + doctrine = doctrine_bastardry_none + doctrine = doctrine_consanguinity_cousins + + # Crimes + doctrine = doctrine_homosexuality_shunned + doctrine = doctrine_adultery_men_shunned + doctrine = doctrine_adultery_women_shunned + doctrine = doctrine_kinslaying_any_dynasty_member_crime + doctrine = doctrine_deviancy_shunned + doctrine = doctrine_witchcraft_crime + + # Clerical + doctrine = doctrine_theocracy_lay_clergy + doctrine = doctrine_clerical_function_taxation + doctrine = doctrine_clerical_gender_male_only + doctrine = doctrine_clerical_marriage_allowed + + #Allow pilgrimages + doctrine = doctrine_pilgrimage_encouraged + + #Funeral tradition + doctrine = doctrine_funeral_stoic + + #Coronation tradition + doctrine = doctrine_no_anointment + + traits = { + virtues = { temperate generous just } + sins = { gluttonous greedy arbitrary } + } + + custom_faith_icons = { + custom_faith_1 custom_faith_2 custom_faith_3 custom_faith_4 custom_faith_5 custom_faith_6 custom_faith_7 custom_faith_8 custom_faith_9 custom_faith_10 dualism_custom_1 zoroastrian_custom_1 zoroastrian_custom_2 buddhism_custom_1 buddhism_custom_2 buddhism_custom_3 buddhism_custom_4 taoism_custom_1 yazidi_custom_1 sunni_custom_2 sunni_custom_3 sunni_custom_4 muhakkima_1 muhakkima_2 muhakkima_4 muhakkima_5 muhakkima_6 judaism_custom_1 custom_faith_fp1_fenrir custom_faith_fp1_irminsul custom_faith_fp1_jormungandr custom_faith_fp1_odins_ravens custom_faith_fp1_runestone_moon custom_faith_fp1_thors_hammer custom_faith_fp1_valknut custom_faith_fp1_yggdrasil custom_faith_boromian_circles custom_faith_lotus custom_faith_aum_tibetan custom_faith_pentagram custom_faith_pentagram_inverted custom_faith_burning_bush custom_faith_allah custom_faith_gankyil custom_faith_eye_of_providence custom_faith_dove custom_faith_ichthys custom_faith_lamb custom_faith_black_sheep custom_faith_ankh custom_faith_chi_rho custom_faith_hamsa custom_faith_cool_s custom_faith_magatama custom_faith_soto custom_faith_benzhuism + } + + holy_order_names = { + { name = "holy_order_servants_of_melek_taus" } + } + + localization = { + #HighGod + HighGodName = yazidi_high_god_name + HighGodName2 = yazidi_high_god_name_2 + HighGodNamePossessive = yazidi_high_god_name_possessive + HighGodNameSheHe = CHARACTER_SHEHE_HE + HighGodHerselfHimself = CHARACTER_HIMSELF + HighGodHerHis = CHARACTER_HERHIS_HIS + HighGodNameAlternate = yazidi_high_god_name_alternate + HighGodNameAlternatePossessive = yazidi_high_god_name_alternate_possessive + + #Creator + CreatorName = yazidi_creator_god_name + CreatorNamePossessive = yazidi_creator_god_name_possessive + CreatorSheHe = CHARACTER_SHEHE_HE + CreatorHerHis = CHARACTER_HERHIS_HIS + CreatorHerHim = CHARACTER_HERHIM_HIM + + #HealthGod + HealthGodName = yazidi_good_god_dadrail + HealthGodNamePossessive = yazidi_good_god_dadrail_possessive + HealthGodSheHe = CHARACTER_SHEHE_HE + HealthGodHerHis = CHARACTER_HERHIS_HIS + HealthGodHerHim = CHARACTER_HERHIM_HIM + + #FertilityGod + FertilityGodName = yazidi_good_god_dadrail + FertilityGodNamePossessive = yazidi_good_god_dadrail_possessive + FertilityGodSheHe = CHARACTER_SHEHE_HE + FertilityGodHerHis = CHARACTER_HERHIS_HIS + FertilityGodHerHim = CHARACTER_HERHIM_HIM + + #WealthGod + WealthGodName = yazidi_good_god_shemnail + WealthGodNamePossessive = yazidi_good_god_shemnail_possessive + WealthGodSheHe = CHARACTER_SHEHE_HE + WealthGodHerHis = CHARACTER_HERHIS_HIS + WealthGodHerHim = CHARACTER_HERHIM_HIM + + #HouseholdGod + HouseholdGodName = yazidi_good_god_dadrail + HouseholdGodNamePossessive = yazidi_good_god_dadrail_possessive + HouseholdGodSheHe = CHARACTER_SHEHE_HE + HouseholdGodHerHis = CHARACTER_HERHIS_HIS + HouseholdGodHerHim = CHARACTER_HERHIM_HIM + + #FateGod + FateGodName = yazidi_high_god_name + FateGodNamePossessive = yazidi_high_god_name_possessive + FateGodSheHe = CHARACTER_SHEHE_HE + FateGodHerHis = CHARACTER_HERHIS_HIS + FateGodHerHim = CHARACTER_HERHIM_HIM + + #KnowledgeGod + KnowledgeGodName = yazidi_good_god_azazil + KnowledgeGodNamePossessive = yazidi_good_god_azazil_possessive + KnowledgeGodSheHe = CHARACTER_SHEHE_HE + KnowledgeGodHerHis = CHARACTER_HERHIS_HIS + KnowledgeGodHerHim = CHARACTER_HERHIM_HIM + + #WarGod + WarGodName = yazidi_good_god_mikhail + WarGodNamePossessive = yazidi_good_god_mikhail_possessive + WarGodSheHe = CHARACTER_SHEHE_HE + WarGodHerHis = CHARACTER_HERHIS_HIS + WarGodHerHim = CHARACTER_HERHIM_HIM + + #TricksterGod + TricksterGodName = islam_trickster_god_name + TricksterGodNamePossessive = islam_trickster_god_name_possessive + TricksterGodSheHe = CHARACTER_SHEHE_HE + TricksterGodHerHis = CHARACTER_HERHIS_HIS + TricksterGodHerHim = CHARACTER_HERHIM_HIM + + #NightGod + NightGodName = yazidi_good_god_azazil + NightGodNamePossessive = yazidi_good_god_azazil_possessive + NightGodSheHe = CHARACTER_SHEHE_HE + NightGodHerHis = CHARACTER_HERHIS_HIS + NightGodHerHim = CHARACTER_HERHIM_HIM + + #WaterGod + WaterGodName = yazidi_good_god_azrafil + WaterGodNamePossessive = yazidi_good_god_azrafil_possessive + WaterGodSheHe = CHARACTER_SHEHE_HE + WaterGodHerHis = CHARACTER_HERHIS_HIS + WaterGodHerHim = CHARACTER_HERHIM_HIM + + + + PantheonTerm = christianity_high_god_name + PantheonTerm2 = christianity_high_god_name_2 + PantheonTerm3 = christianity_high_god_name_3 + PantheonTermHasHave = pantheon_term_has + GoodGodNames = { + yazidi_good_god_peacock_angel + yazidi_good_god_tawuse_melek + yazidi_good_god_seven_mysteries + islam_good_god_the_one + yazidi_good_god_azazil + yazidi_good_god_jabrail + yazidi_good_god_mikhail + yazidi_good_god_rafail + yazidi_good_god_dadrail + yazidi_good_god_azrafil + yazidi_good_god_shemnail + } + + PriestMale = yazidi_priest + PriestMalePlural = yazidi_priest_plural + PriestFemale = yazidi_priest + PriestFemalePlural = yazidi_priest_plural + PriestNeuter = yazidi_priest + PriestNeuterPlural = yazidi_priest_plural + ReligiousHeadName = yazidi_religious_head_title + DevilName = islam_devil_name + DevilNamePossessive = islam_devil_name_possessive + DevilSheHe = CHARACTER_SHEHE_HE + DevilHerHis = CHARACTER_HERHIS_HIS + DevilHerselfHimself = CHARACTER_HIMSELF + EvilGodNames = { + islam_evil_god_iblis + } + HouseOfWorship = yazidi_house_of_worship + HouseOfWorship2 = yazidi_house_of_worship_2 + HouseOfWorship3 = yazidi_house_of_worship_3 + HouseOfWorshipPlural = yazidi_house_of_worship_plural + ReligiousSymbol = yazidi_religious_symbol + ReligiousSymbol2 = yazidi_religious_symbol_2 + ReligiousSymbol3 = yazidi_religious_symbol_3 + ReligiousText = yazidi_religious_text + ReligiousText2 = yazidi_religious_text_2 + ReligiousText3 = yazidi_religious_text_3 + ReligiousHeadName = yazidi_religious_head_title + ReligiousHeadTitleName = yazidi_religious_head_title_name + DevoteeMale = yazidi_devotee + DevoteeMalePlural = yazidi_devotee_plural + DevoteeFemale = yazidi_devotee + DevoteeFemalePlural = yazidi_devotee_plural + DevoteeNeuter = yazidi_devotee + DevoteeNeuterPlural = yazidi_devotee_plural + PriestMale = yazidi_priest + PriestMalePlural = yazidi_priest_plural + PriestFemale = yazidi_priest + PriestFemalePlural = yazidi_priest_plural + PriestNeuter = yazidi_priest + PriestNeuterPlural = yazidi_priest_plural + AltPriestTermPlural = yazidi_priest_alternate_plural + BishopMale = yazidi_bishop + BishopMalePlural = yazidi_bishop_plural + BishopFemale = yazidi_bishop + BishopFemalePlural = yazidi_bishop_plural + BishopNeuter = yazidi_bishop + BishopNeuterPlural = yazidi_bishop_plural + DivineRealm = yazidi_positive_afterlife + DivineRealm2 = yazidi_positive_afterlife_2 + DivineRealm3 = yazidi_positive_afterlife_3 + PositiveAfterLife = yazidi_positive_afterlife + PositiveAfterLife2 = yazidi_positive_afterlife_2 + PositiveAfterLife3 = yazidi_positive_afterlife_3 + NegativeAfterLife = yazidi_negative_afterlife + NegativeAfterLife2 = yazidi_negative_afterlife_2 + NegativeAfterLife3 = yazidi_negative_afterlife_3 + DeathDeityName = yazidi_good_god_azazil + DeathDeityNamePossessive = yazidi_good_god_azazil_possessive + DeathDeitySheHe = CHARACTER_SHEHE_HE + DeathDeityHerHis = CHARACTER_HERHIS_HIS + DeathDeityHerHim = CHARACTER_HERHIM_HIM + WitchGodName = christianity_witchgodname_iblis + WitchGodNamePossessive = christianity_witchgodname_iblis_possessive + WitchGodHerHis = CHARACTER_HERHIS_HIS + WitchGodSheHe = CHARACTER_SHEHE_HE + WitchGodHerHim = CHARACTER_HERHIM_HIM + WitchGodMistressMaster = master + WitchGodMotherFather = father + + + GHWName = ghw_great_holy_war + GHWNamePlural = ghw_great_holy_wars + } + + faiths = { + yazidi = { + color = { 0.2 0.2 0.7 } + icon = yazidism + + holy_site = sinjar + holy_site = baalbek + holy_site = lalish + holy_site = nishapur + holy_site = dashtestan + + #Tenet + doctrine = tenet_communal_identity + doctrine = tenet_reincarnation + doctrine = tenet_islamic_syncretism + } + } +} diff --git a/events/decisions_events/roman_restoration_events.txt b/events/decisions_events/roman_restoration_events.txt index fa572332..aa14407c 100644 --- a/events/decisions_events/roman_restoration_events.txt +++ b/events/decisions_events/roman_restoration_events.txt @@ -2148,7 +2148,7 @@ roman_restoration.0130 = { # Muslim Reaction triggered_desc = { trigger = { - root.faith.religion = faith:ashari.religion + root.faith.religion = faith:aqlani.religion } desc = roman_restoration.0130.desc.muslim } @@ -2163,7 +2163,7 @@ roman_restoration.0130 = { triggered_desc = { trigger = { NOR = { - root.faith.religion = faith:ashari.religion + root.faith.religion = faith:aqlani.religion root.faith.religion = faith:hellenic_pagan.religion } } @@ -2235,7 +2235,7 @@ roman_restoration.0130 = { option = { name = { trigger = { - faith.religion = faith:ashari.religion + faith.religion = faith:aqlani.religion } text = roman_restoration.0130.a.a } @@ -2248,7 +2248,7 @@ roman_restoration.0130 = { name = { trigger = { NOR = { - faith.religion = faith:ashari.religion + faith.religion = faith:aqlani.religion faith.religion = faith:hellenic_pagan.religion } } diff --git a/events/dlc/ach/ach_maintenance_events.txt b/events/dlc/ach/ach_maintenance_events.txt new file mode 100644 index 00000000..3864adc4 --- /dev/null +++ b/events/dlc/ach/ach_maintenance_events.txt @@ -0,0 +1,720 @@ +namespace = ach_maintenance_events + +ach_maintenance_events.0001 = { # Clean up of Coronation realm law, will happen 1 tick after you gain the title (due to on_actions) + type = character_event + hidden = yes + + trigger = { + coronation_trigger = yes + } + + immediate = { + if = { + limit = { + NOT = { + has_game_rule = coronation_laws_off + } + } + if = { + limit = { + has_variable = crowned_king_var + NOT = { has_realm_law = crowned_king } + } + add_realm_law_skip_effects = crowned_king + } + else_if = { + limit = { + has_variable = crowned_emperor_var + NOT = { has_realm_law = crowned_emperor } + } + add_realm_law_skip_effects = crowned_emperor + } + else_if = { + limit = { + NOR = { + has_variable = crowned_king_var + has_variable = crowned_emperor_var + } + NOT = { has_realm_law = uncrowned } + } + add_realm_law_skip_effects = uncrowned + } + } + } +} + +ach_maintenance_events.0002 = { # ACH Oath synergy culture rewards + type = character_event + hidden = yes + + trigger = { + has_variable = mend_the_fracture_oath_target_culture + culture ?= { + has_cultural_tradition = oath_mend_the_fracture_tradition + } + top_liege = root + var:mend_the_fracture_oath_target_culture = { + has_cultural_tradition = oath_mend_the_fracture_tradition + NOT = { this = root.culture } + any_culture_county = { + count >= 3 + top_liege = root.top_liege + } + } + } + + immediate = { + # calculate the chances of a positive thing happening + set_variable = { + name = synergy_cultures_chance + value = 0.1 + } + set_variable = { + name = synergy_cultures_amount + value = 0 + } + var:mend_the_fracture_oath_target_culture = { + if = { + limit = { + cultural_acceptance = { + target = root.culture + value >= 99 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.4 + } + } + } + else_if = { + limit = { + cultural_acceptance = { + target = root.culture + value >= 80 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.3 + } + } + } + else_if = { + limit = { + cultural_acceptance = { + target = root.culture + value >= 60 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.2 + } + } + } + else_if = { + limit = { + cultural_acceptance = { + target = root.culture + value >= 40 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.1 + } + } + } + if = { + limit = { + culture_head ?= { + opinion = { + target = root + value >= 80 + } + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.3 + } + } + } + else_if = { + limit = { + culture_head ?= { + opinion = { + target = root + value >= 40 + } + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.2 + } + } + } + else_if = { + limit = { + culture_head ?= { + opinion = { + target = root + value >= 20 + } + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.1 + } + } + } + } + if = { + limit = { + exists = var:mend_the_fracture_oath_target_culture.culture_head + } + if = { + limit = { + opinion = { + target = var:mend_the_fracture_oath_target_culture.culture_head + value >= 80 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.3 + } + } + } + else_if = { + limit = { + opinion = { + target = var:mend_the_fracture_oath_target_culture.culture_head + value >= 40 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.2 + } + } + } + else_if = { + limit = { + opinion = { + target = var:mend_the_fracture_oath_target_culture.culture_head + value >= 20 + } + } + root = { + change_variable = { + name = synergy_cultures_chance + add = 0.1 + } + } + } + } + + if = { + limit = { + prestige_level = 5 + } + change_variable = { + name = synergy_cultures_chance + add = 0.2 + } + } + else_if = { + limit = { + prestige_level = 4 + } + change_variable = { + name = synergy_cultures_chance + add = 0.15 + } + } + else_if = { + limit = { + prestige_level = 3 + } + change_variable = { + name = synergy_cultures_chance + add = 0.1 + } + } + else_if = { + limit = { + prestige_level = 2 + } + change_variable = { + name = synergy_cultures_chance + add = 0.05 + } + } + else_if = { + limit = { + prestige_level = 1 + } + change_variable = { + name = synergy_cultures_chance + add = 0.02 + } + } + + + if = { + limit = { + var:synergy_cultures_chance >= 1 + } + change_variable = { + name = synergy_cultures_amount + add = var:synergy_cultures_chance + multiply = 2 + } + set_variable = { + name = synergy_cultures_chance + value = 1 + } + } + + # calculate the amount of a positive things happening + var:mend_the_fracture_oath_target_culture = { + every_culture_county = { + limit = { + top_liege = root.top_liege + } + change_variable = { + name = synergy_cultures_amount + add = 1 + } + } + } + change_variable = { + name = synergy_cultures_amount + multiply = 0.2 + multiply = var:synergy_cultures_chance + min = 1 + } + + while = { + limit = { + var:synergy_cultures_amount > 0 + } + random_list = { + 1 = { + culture ?= { + random_culture_county = { + limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + holder = root + } + alternative_limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + top_liege = root.top_liege + } + alternative_limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + } + add_county_modifier = { + modifier = oath_mend_the_fracture_county + years = 2 + } + add_to_list = synergy_culture_counties + } + } + var:mend_the_fracture_oath_target_culture = { + random_culture_county = { + limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + holder = root + } + alternative_limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + top_liege = root.top_liege + } + alternative_limit = { + NOT = { + has_county_modifier = oath_mend_the_fracture_county + } + } + add_county_modifier = { + modifier = oath_mend_the_fracture_county + years = 3 + } + add_to_list = synergy_culture_counties + } + } + save_scope_as = county_reward + } + 1 = { + modifier = { + NOT = { + root.culture.culture_head ?= root + } + factor = 0 + } + spawn_army = { + name = ach_culture_synergy_troops + men_at_arms = { + type = accolade_maa_archers + stacks = 1 + } + men_at_arms = { + type = accolade_maa_skirmishers + stacks = 1 + } + location = root.capital_province + uses_supply = no + inheritable = yes + } + var:mend_the_fracture_oath_target_culture = { + if = { + limit = { + NOT = { + culture_head ?= root + } + } + } + culture_head ?= { + spawn_army = { + name = ach_culture_synergy_troops + men_at_arms = { + type = accolade_maa_skirmishers + stacks = 1 + } + location = root.capital_province + uses_supply = no + inheritable = yes + } + } + } + save_scope_as = army_reward + } + 1 = { + modifier = { + NOT = { + root.culture.culture_head ?= root + var:mend_the_fracture_oath_target_culture.culture_head != root + } + factor = 0 + } + modifier = { + opinion = { + target = var:mend_the_fracture_oath_target_culture.culture_head + value = 100 + } + factor = 0 + } + add_opinion = { + target = var:mend_the_fracture_oath_target_culture.culture_head + opinion = 20 + modifier = ach_synergy_culture_opinion + } + save_scope_as = opinion_reward + } + } + + change_variable = { + name = synergy_cultures_amount + subtract = 1 + } + } + + # inform the player about what happened + send_interface_message = { + title = ach_maintenance_events.0002.title + if = { + limit = { + exists = scope:army_reward + } + custom_tooltip = ach_maintenance_events.0002.army_reward + } + if = { + limit = { + exists = scope:opinion_reward + } + custom_tooltip = ach_maintenance_events.0002.opinion_reward + } + if = { + limit = { + exists = scope:county_reward + } + every_in_list = { + list = synergy_culture_counties + show_as_tooltip = { + add_county_modifier = { + modifier = oath_mend_the_fracture_county + years = 2 + } + } + } + } + } + + if = { + limit = { + var:mend_the_fracture_oath_target_culture = { + any_culture_county = { + holder = { + culture = var:mend_the_fracture_oath_target_culture + is_ai = no + } + } + } + } + send_interface_message = { + title = ach_maintenance_events.0002.title + if = { + limit = { + exists = scope:army_reward + } + custom_tooltip = ach_maintenance_events.0002.army_reward + } + if = { + limit = { + exists = scope:opinion_reward + } + custom_tooltip = ach_maintenance_events.0002.opinion_reward + } + if = { + limit = { + exists = scope:county_reward + } + every_in_list = { + list = synergy_culture_counties + show_as_tooltip = { + add_county_modifier = { + modifier = oath_mend_the_fracture_county + years = 2 + } + } + } + } + } + } + remove_variable = synergy_cultures_chance + remove_variable = synergy_cultures_amount + } +} + +ach_maintenance_events.0100 = { #Coronation host is ded, notify guests + type = character_event + title = ach_maintenance_events.0100.t + desc = ach_maintenance_events.0100.desc + theme = realm + + left_portrait = { + character = root + animation = shock + } + + right_portrait = { + character = scope:host + animation = dead + } + + immediate = { + + } + + option = { + name = ach_maintenance_events.0100.a + } + +} + +ach_maintenance_events.0101 = { #Coronation host has been imprisoned, notify guests + type = character_event + title = ach_maintenance_events.0101.t + desc = ach_maintenance_events.0101.desc + theme = realm + + left_portrait = { + character = root + animation = shock + } + + right_portrait = { + character = scope:host + animation = prisonhouse + } + + lower_left_portrait = { + character = scope:gaoler + } + + immediate = { + scope:host.imprisoner = { + save_scope_as = gaoler + } + } + + trigger = { + NOT = { #you know what you did + this = scope:host.imprisoner + } + } + + option = { + name = ach_maintenance_events.0101.a + } + +} + +ach_maintenance_events.0102 = { #Coronation host has been imprisoned, notify host and cancellation + type = character_event + title = ach_maintenance_events.0102.t + desc = ach_maintenance_events.0102.desc + theme = realm + + left_portrait = { + character = root + animation = prisonhouse + } + + right_portrait = { + character = scope:gaoler + animation = manic + } + + immediate = { + scope:host.imprisoner = { + save_scope_as = gaoler + } + } + + option = { + name = ach_maintenance_events.0102.a + } +} + +ach_maintenance_events.0103 = { #No one shows up, notify host + type = character_event + title = ach_maintenance_events.0103.t + desc = ach_maintenance_events.0103.desc + theme = realm + + left_portrait = { + character = root + animation = worry + } + + + immediate = { + + } + + option = { + name = ach_maintenance_events.0103.a + } + +} + +ach_maintenance_events.0104 = { #Officiator ded, host cancelled the coronation, notify guests + type = character_event + title = ach_maintenance_events.0104.t + desc = ach_maintenance_events.0104.desc + theme = realm + + left_portrait = { + character = root + animation = stunned + } + + right_portrait = { + character = scope:host + animation = wailing + } + + lower_right_portrait = { + character = scope:dead_officiator + } + + immediate = { + scope:activity.var:officiator ?= { save_scope_as = dead_officiator } + } + + option = { + name = ach_maintenance_events.0104.a + } + +} + +ach_maintenance_events.0105 = { #Host excommunicated, notify guests + type = character_event + title = ach_maintenance_events.0105.t + desc = ach_maintenance_events.0105.desc + theme = realm + + left_portrait = { + character = root + animation = worry + } + + center_portrait = { + character = scope:host + animation = shame + } + + right_portrait = { + character = scope:hof + animation = go_to_your_room + } + + immediate = { + scope:host.faith.religious_head = { save_scope_as = hof } + } + + option = { + name = ach_maintenance_events.0105.a + } + +} + +ach_maintenance_events.0106 = { #Host excommunicated, notify host + type = character_event + title = ach_maintenance_events.0106.t + desc = ach_maintenance_events.0106.desc + theme = realm + + left_portrait = { + character = root + animation = shame + } + + right_portrait = { + character = scope:hof + animation = go_to_your_room + } + + immediate = { + scope:hof.faith.religious_head = { save_scope_as = hof } + } + + option = { + name = ach_maintenance_events.0106.a + } + +} diff --git a/events/dlc/bp1/bp1_filippa_yearly_events.txt b/events/dlc/bp1/bp1_filippa_yearly_events.txt new file mode 100644 index 00000000..01b80f39 --- /dev/null +++ b/events/dlc/bp1/bp1_filippa_yearly_events.txt @@ -0,0 +1,4763 @@ +namespace = bp1_yearly +#### +# bp1_yearly.2020 - A consort attempts to influence you into changing your heir +# bp1_yearly.2030 - Mopey consort wants some guidance +# bp1_yearly.2040 - Two consorts are disagreeing +# bp1_yearly.2050 - Friendly consorts want to start a study circle +# bp1_yearly.2060 - Friendly consorts want to tutor other consort's child +# bp1_yearly.2070 - Childless older soulmate spouse ponders your relationship +# +#### + +################################################## +# #A spouse/consort attempts to influence you into changing your heir +# by Filippa Gannholm Kirsten +# #bp1_yearly.2020-2023 +################################################## +scripted_trigger bp1_yearly_2020_relevant_consort_trigger = { + is_available_ai_adult = yes + NOT = { has_relation_rival = root } + any_child = { + NOT = { + this = { is_primary_heir_of = root } + } + } + any_child = { + count > 0 + bp1_yearly_2020_relevant_child_trigger = yes + } +} + +scripted_trigger bp1_yearly_2020_relevant_child_trigger = { + age >= 13 + is_available_child = yes + NOT = { has_relation_rival = root } + trigger_if = { + limit = { + root = { + has_realm_law = male_only_law + } + } + is_male = yes + } + trigger_else_if = { + limit = { + root = { + has_realm_law = female_only_law + } + } + is_female = yes + } + trigger_else = { + always = yes + } +} + +scripted_effect bp1_yearly_2020_duel_effect = { + duel = { + skill = $SKILL$ + target = scope:bp1_yearly_2020_target + #They brute force kill the rival/nemesis + 25 = { + modifier = { + $SKILL$ = martial + factor = 0.5 + } + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { intrigue > martial } + } + scope:bp1_yearly_2020_target = { + death = { + death_reason = death_murder + killer = scope:bp1_yearly_2020_influencing_partner + } + } + } + else = { + scope:bp1_yearly_2020_target = { + death = { + death_reason = death_defenestration + killer = scope:bp1_yearly_2020_influencing_partner + } + } + } + #Set designated heir-event + root = { + add_character_flag = bp1_yearly_2020_target_killed + trigger_event = { + id = bp1_yearly.2023 + days = { 2 5 } + } + } + } + #They are imprisoned by the rival/nemesis + 25 = { + #Needs to have a prison to imprison + trigger = { + scope:bp1_yearly_2020_target = { + is_landed = yes + } + } + #To block narration-breaking notification events + scope:bp1_yearly_2020_influencing_partner = { + add_character_flag = { + flag = bp1_yearly_2020_block_imprisonment_event + days = 1 + } + } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2020_influencing_partner IMPRISONER = scope:bp1_yearly_2020_target } + #Imprisonment letter + root = { + trigger_event = { + id = bp1_yearly.2022 + days = 3 + } + } + } + #They are killed by the rival/nemesis + 25 = { + scope:bp1_yearly_2020_influencing_partner = { + death = { + death_reason = death_defenestration + killer = scope:bp1_yearly_2020_target + } + } + #Death letter + root = { + trigger_event = { + id = bp1_yearly.2022 + days = 3 + } + } + } + } +} + +scripted_effect bp1_yearly_2020_chance_of_murderous_partner_effect = { + $MURDEROUS_PARTNER$ = { + random_list = { + #Attempt to murder heir + 25 = { + trigger = { + OR = { + has_trait = vengeful + has_trait = deceitful + has_trait = sadistic + has_trait = ambitious + has_trait = wrathful + } + can_start_scheme = { + type = murder + target_character = root.player_heir + } + } + #If they killed our rival/nemesis we probably deserve some payback + modifier = { + has_character_flag = bp1_yearly_2020_target_killed + factor = 2 + } + #If we took the person option but didn't pick anyone, they can sort of understand + modifier = { + NOT = { exists = scope:bp1_yearly_2021_new_courtier } + factor = 1.25 + } + #MURDER VENGEANCE reeee + start_scheme = { + type = murder + target_character = root.player_heir + } + } + 50 = { + modifier = { + NOR = { + has_character_flag = bp1_yearly_2020_target_killed + exists = scope:bp1_yearly_2021_new_courtier + } + factor = 1.5 + } + #Do nothing + } + } + } +} + +scripted_trigger bp1_yearly_2020_landed_partners_parent_trigger = { + is_available_ai_adult = yes + is_at_war = no + is_landed = yes + opinion = { + target = scope:bp1_yearly_2020_influencing_partner + value >= 0 + } +} + +scripted_effect bp1_yearly_2020_rival_nemesis_progress_effect = { + $PERSON$ = { + save_temporary_scope_as = new_heir_parent + } + if = { + limit = { + OR = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:new_heir_parent } + can_set_relation_rival_trigger = { CHARACTER = scope:new_heir_parent } + } + } + progress_towards_rival_effect = { CHARACTER = scope:new_heir_parent OPINION = default_rival_opinion REASON = rival_succession_scheme } + } + else_if = { + limit = { + NOR = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:new_heir_parent } + can_set_relation_rival_trigger = { CHARACTER = scope:new_heir_parent } + } + can_set_relation_nemesis_trigger = { CHARACTER = scope:new_heir_parent } + } + set_relation_nemesis = { + reason = nemesis_heir_ousted + copy_reason = rival + target = scope:new_heir_parent + } + } +} + +scripted_effect bp1_yearly_2020_heir_change_opinions_effect = { + reverse_add_opinion = { + target = root.player_heir + modifier = primary_heir_replaced_opinion + opinion = -50 + } + #Apply opinion & rivalry to the appropriate opposite-sex biological parent + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_female = yes } + } + if = { + limit = { + exists = root.player_heir.mother + root.player_heir.mother = { is_alive = yes } + } + root.player_heir.mother = { + add_opinion = { + target = root + modifier = parent_primary_heir_replaced_opinion + opinion = -50 + } + save_scope_as = bp1_yearly_2020_scorned_parent + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = yes } + } + bp1_yearly_2020_rival_nemesis_progress_effect = { PERSON = scope:bp1_yearly_2020_influencing_partner } + } + } + } + } + else_if = { + limit = { + exists = root.player_heir.father + root.player_heir.father = { is_alive = yes } + } + root.player_heir.father = { + add_opinion = { + target = root + modifier = parent_primary_heir_replaced_opinion + opinion = -50 + } + save_scope_as = bp1_yearly_2020_scorned_parent + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = yes } + } + bp1_yearly_2020_rival_nemesis_progress_effect = { PERSON = scope:bp1_yearly_2020_influencing_partner } + } + } + } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_child_to_become_heir + modifier = pleased_opinion + opinion = 50 + } + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = yes } + } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = pleased_opinion + opinion = 50 + } + } +} + +bp1_yearly.2020 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2020.t + desc = bp1_yearly.2020.desc + theme = family + override_background = { reference = council_chamber } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_trait = paranoid + } + animation = paranoia + } + animation = worry + } + right_portrait = { + character = scope:bp1_yearly_2020_influencing_partner + animation = personality_greedy + } + lower_center_portrait = { + character = scope:bp1_yearly_2020_child_to_become_heir + } + lower_right_portrait = { + trigger = { exists = scope:bp1_yearly_2020_influencing_partners_parent } + character = scope:bp1_yearly_2020_influencing_partners_parent + } + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_ai = no + is_landed = yes + exists = root.primary_heir + #Do we have any marital-like relationships with partners whose child is not your primary heir + any_consort = { bp1_yearly_2020_relevant_consort_trigger = yes } + any_relation = { + type = rival # Includes nemeses + is_available_at_peace_adult = yes + highest_held_title_tier <= tier_county + } + } + weight_multiplier = { + base = 1 + modifier = { + any_consort = { + bp1_yearly_2020_relevant_consort_trigger = yes + has_trait = family_first + } + add = 2 + } + modifier = { + any_consort = { + bp1_yearly_2020_relevant_consort_trigger = yes + has_trait_rank = { + trait = education_intrigue + rank >= 3 + } + } + add = 2 + } + modifier = { + any_consort = { + bp1_yearly_2020_relevant_consort_trigger = yes + has_trait = schemer + } + add = 2 + } + modifier = { + any_consort = { + bp1_yearly_2020_relevant_consort_trigger = yes + has_trait = ambitious + } + add = 2 + } + modifier = { + any_consort = { + bp1_yearly_2020_relevant_consort_trigger = yes + short_term_gold >= root.massive_gold_value + } + add = 2 + } + } + immediate = { + #play_music_cue = "mx_cue_secret" + #Pick a relevant, weighted partner + random_consort = { + limit = { bp1_yearly_2020_relevant_consort_trigger = yes } + weight = { + base = 1 + modifier = { + has_trait = ambitious + add = 2 + } + modifier = { + has_trait = arrogant + add = 2 + } + modifier = { + has_trait = diligent + add = 2 + } + modifier = { + has_trait = deceitful + add = 5 + } + modifier = { + has_trait = schemer + add = 5 + } + modifier = { + has_trait = family_first + add = 10 + } + modifier = { + has_trait_rank = { + trait = education_intrigue + rank >= 3 + } + add = 10 + } + modifier = { + short_term_gold >= massive_gold_value + add = 100 + } + modifier = { + has_trait = forgiving + add = -2 + } + modifier = { + has_trait = compassionate + add = -2 + } + modifier = { + has_trait = generous + add = -2 + } + modifier = { + has_trait = dull + add = -3 + } + modifier = { + has_trait = lazy + add = -5 + } + modifier = { + has_trait_rank = { + trait = intellect_bad + rank > 0 + } + add = -5 + } + } + save_scope_as = bp1_yearly_2020_influencing_partner + } + #Pick a child + scope:bp1_yearly_2020_influencing_partner = { + random_child = { + limit = { + bp1_yearly_2020_relevant_child_trigger = yes + #_Tradeoff_ they said + OR = { + has_trait = clubfooted + has_trait = hunchbacked + has_trait = lisping + has_trait = stuttering + has_trait = dwarf + has_trait = giant + has_trait = inbred + has_trait = weak + has_trait = dull + has_trait = spindly + has_trait = scaly + has_trait = albino + has_trait = wheezing + has_trait = bleeder + has_trait_rank = { + trait = beauty_bad + rank >= 1 + } + has_trait_rank = { + trait = intellect_bad + rank >= 1 + } + has_trait_rank = { + trait = physique_bad + rank >= 1 + } + has_trait = maimed + has_trait = one_eyed + has_trait = one_legged + has_trait = disfigured + has_trait = scarred + has_trait = blind + has_trait = depressed_genetic + has_trait = lunatic_genetic + has_trait = possessed_genetic + has_trait = ill + has_trait = leper + } + } + alternative_limit = { + bp1_yearly_2020_relevant_child_trigger = yes + } + save_scope_as = bp1_yearly_2020_child_to_become_heir + } + } + #Set up a rival/nemesis, if any + random_relation = { + type = rival + limit = { + has_relation_nemesis = root + is_available_at_peace_adult = yes + highest_held_title_tier <= tier_county + } + alternative_limit = { + is_available_at_peace_adult = yes + highest_held_title_tier <= tier_county + } + save_scope_as = bp1_yearly_2020_target + } + #Saving scope for halfsies comparisons + save_scope_value_as = { + name = half_gold_check_2020 + value = { + value = root.massive_gold_value + multiply = 0.5 + } + } + #Look for a hookable landed parent of your partner + scope:bp1_yearly_2020_influencing_partner = { + #If our partner has enough gold, we only need a hookable landed parent + if = { + limit = { short_term_gold >= root.massive_gold_value } + random_parent = { + limit = { bp1_yearly_2020_landed_partners_parent_trigger = yes } + save_scope_as = bp1_yearly_2020_influencing_partners_parent_only_hook + #For the portrait + save_scope_as = bp1_yearly_2020_influencing_partners_parent + } + } + #Else check if they can go halfsies on the gold + else_if = { + limit = { + short_term_gold < root.massive_gold_value + short_term_gold >= scope:half_gold_check_2020 + } + random_parent = { + limit = { + short_term_gold < root.massive_gold_value + bp1_yearly_2020_landed_partners_parent_trigger = yes + } + #For the portrait + save_scope_as = bp1_yearly_2020_influencing_partners_parent + #Do they have enough gold together to warrant the root.massive_gold_value + save_scope_value_as = { + name = halfsies_check_2020 + value = { + value = scope:bp1_yearly_2020_influencing_partner.gold + add = scope:bp1_yearly_2020_influencing_partners_parent.gold + } + } + if = { + limit = { + scope:halfsies_check_2020 >= root.massive_gold_value + } + scope:bp1_yearly_2020_influencing_partners_parent = { + save_scope_as = bp1_yearly_2020_influencing_partners_parent_halfsies + } + } + } + } + #Else the partner parent pays and gets hooked + else_if = { + limit = { + short_term_gold < root.massive_gold_value + } + random_parent = { + limit = { + short_term_gold >= root.massive_gold_value + bp1_yearly_2020_landed_partners_parent_trigger = yes + } + save_scope_as = bp1_yearly_2020_influencing_partners_parent_pays + #For the portrait + save_scope_as = bp1_yearly_2020_influencing_partners_parent + } + } + } + } + #Martial/intrigue brute force duel + option = { + name = bp1_yearly.2020.a + trigger = { exists = scope:bp1_yearly_2020_target } + #To block the narration-breaking default death notification + add_character_flag = { + flag = bp1_yearly_2020_suppress_death_events + days = 5 + } + if = { + #Prioritize intrigue duel, less chance of death + limit = { + scope:bp1_yearly_2020_influencing_partner = { intrigue > martial } + } + scope:bp1_yearly_2020_influencing_partner = { + bp1_yearly_2020_duel_effect = { SKILL = intrigue } + } + } + else = { + scope:bp1_yearly_2020_influencing_partner = { + bp1_yearly_2020_duel_effect = { SKILL = martial } + } + } + stress_impact = { + vengeful = medium_stress_impact_gain + family_first = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + #Pay you a massive amount of gold + a hook + option = { + name = bp1_yearly.2020.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:bp1_yearly_2020_influencing_partners_parent_only_hook } + desc = bp1_yearly.2020.c_tt_only_hook + } + triggered_desc = { + trigger = { + exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + type = favor_hook + } + } + desc = bp1_yearly.2020.c_tt_halfsies + } + triggered_desc = { + trigger = { + exists = scope:bp1_yearly_2020_influencing_partners_parent_pays + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_pays + type = favor_hook + } + } + desc = bp1_yearly.2020.c_tt_pay_and_hook + } + } + } + trigger = { + OR = { + #If our partner has enough gold + scope:bp1_yearly_2020_influencing_partner = { short_term_gold >= root.massive_gold_value } + #Or if they can go halfsies + AND = { + scope:bp1_yearly_2020_influencing_partner = { + short_term_gold < root.massive_gold_value + short_term_gold >= scope:half_gold_check_2020 + } + exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + } + #Or if partner's parent has enough gold + exists = scope:bp1_yearly_2020_influencing_partners_parent_pays + } + } + #Partner pays + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { short_term_gold >= root.massive_gold_value } + } + scope:bp1_yearly_2020_influencing_partner = { + pay_short_term_gold = { + target = root + gold = root.massive_gold_value + } + } + #Hook partner's parent first + if = { + limit = { exists = scope:bp1_yearly_2020_influencing_partners_parent_only_hook } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_only_hook + type = favor_hook + } + } + #Else hook partner + else_if = { + limit = { + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + } + #They go halfsies + else_if = { + limit = { + exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + type = favor_hook + } + } + scope:bp1_yearly_2020_influencing_partner = { + pay_short_term_gold = { + target = root + gold = scope:half_gold_check_2020 + } + } + scope:bp1_yearly_2020_influencing_partners_parent_halfsies = { + pay_short_term_gold = { + target = root + gold = scope:half_gold_check_2020 + } + } + #Hook partner's parent first + if = { + limit = { + exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + type = favor_hook + } + } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + type = favor_hook + } + } + #Else hook partner + else_if = { + limit = { + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + } + #Partner's parent pays + else_if = { + limit = { exists = scope:bp1_yearly_2020_influencing_partners_parent_pays } + scope:bp1_yearly_2020_influencing_partners_parent_pays = { + pay_short_term_gold = { + target = root + gold = root.massive_gold_value + } + } + #Hook partner's parent first + if = { + limit = { + exists = scope:bp1_yearly_2020_influencing_partners_parent_pays + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_pays + type = favor_hook + } + } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partners_parent_pays + type = favor_hook + } + } + #Else hook partner + else_if = { + limit = { + root = { + can_add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + } + add_hook = { + target = scope:bp1_yearly_2020_influencing_partner + type = favor_hook + } + } + } + #Deal with opinion reactions to this + bp1_yearly_2020_heir_change_opinions_effect = yes + if = { + limit = { exists = scope:bp1_yearly_2020_influencing_partners_parent_only_hook } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partners_parent_only_hook + modifier = pleased_opinion + opinion = 50 + } + } + else_if = { + limit = { exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + modifier = pleased_opinion + opinion = 50 + } + } + else_if = { + limit = { exists = scope:bp1_yearly_2020_influencing_partners_parent_pays } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partners_parent_pays + modifier = pleased_opinion + opinion = 50 + } + } + send_interface_toast = { + title = designate_heir_interaction_notification + left_icon = root + right_icon = scope:bp1_yearly_2020_child_to_become_heir + set_designated_heir = scope:bp1_yearly_2020_child_to_become_heir + } + hidden_effect = { + if = { + limit = { exists = scope:bp1_yearly_2020_scorned_parent } + bp1_yearly_2020_chance_of_murderous_partner_effect = { MURDEROUS_PARTNER = scope:bp1_yearly_2020_scorned_parent } + } + } + stress_impact = { + craven = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + greedy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + #Summon an interesting person to join your court + option = { + name = bp1_yearly.2020.b + trigger = { + #Mutually exclusive to the money + gold option + NOR = { + scope:bp1_yearly_2020_influencing_partner = { short_term_gold >= root.massive_gold_value } + exists = scope:bp1_yearly_2020_influencing_partners_parent_halfsies + exists = scope:bp1_yearly_2020_influencing_partners_parent_pays + } + } + custom_tooltip = bp1_yearly.2020.b_tt + trigger_event = { + id = bp1_yearly.2021 + days = 2 + } + ai_chance = { + base = 100 + } + } + #Imprison them for merely suggesting this + option = { + name = bp1_yearly.2020.d + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = irritable + has_trait = paranoid + has_trait = craven + has_trait = fickle + } + } + flavor = bp1_yearly.2020.d_tt + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2020_influencing_partner IMPRISONER = root } + stress_impact = { + craven = miniscule_stress_impact_loss + paranoid = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + #Not interested + option = { + name = bp1_yearly.2020.e + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = insulted_opinion + opinion = -20 + } + stress_impact = { + craven = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + hidden_effect = { + bp1_yearly_2020_chance_of_murderous_partner_effect = { MURDEROUS_PARTNER = scope:bp1_yearly_2020_influencing_partner } + } + ai_chance = { + base = 100 + } + } +} + +scripted_trigger bp1_yearly_2021_relevant_dynasty_person_trigger = { + this != scope:bp1_yearly_2020_influencing_partner + NOT = { is_child_of = scope:bp1_yearly_2020_influencing_partner } + NOT = { is_primary_heir_of = liege } + has_any_bad_relationship_with_root_trigger = no + opinion = { + target = scope:bp1_yearly_2020_influencing_partner + value >= 0 + } + is_landed_or_landless_administrative = no + is_available_at_peace_ai_adult = yes + $SKILL$ >= $TARGET$.$SKILL$ +} + +scripted_trigger bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { + this != scope:bp1_yearly_2020_influencing_partner + NOT = { is_child_of = scope:bp1_yearly_2020_influencing_partner } + NOT = { is_primary_heir_of = liege } + has_any_bad_relationship_with_root_trigger = no + opinion = { + target = scope:bp1_yearly_2020_influencing_partner + value >= 0 + } + is_landed_or_landless_administrative = no + is_available_at_peace_ai_adult = yes + $SKILL$ >= high_skill_rating +} + +scripted_effect bp1_yearly_2021_add_interesting_courtier_effect = { + random_list = { + #Martial Person + 1 = { + trigger = { + NOT = { exists = scope:bp1_yearly_2021_martial_person } + } + #Let's inject a partner dynasty member if we can + modifier = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_marshal_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = martial TARGET = scope:bp1_yearly_2021_marshal_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = martial } + } + } + } + } + add = 20 + } + modifier = { + OR = { + AND = { + exists = scope:bp1_yearly_2021_marshal_scope + scope:bp1_yearly_2021_marshal_scope.martial < high_skill_rating + } + NOT = { exists = scope:bp1_yearly_2021_marshal_scope } + } + add = 10 + } + #Look for a dynasty member of the consort first + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_marshal_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = martial TARGET = scope:bp1_yearly_2021_marshal_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = martial } + } + } + } + } + } + scope:bp1_yearly_2020_influencing_partner = { + #If a marshal currently exists and our dynast has more martial + if = { + limit = { exists = scope:bp1_yearly_2021_marshal_scope } + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = martial TARGET = scope:bp1_yearly_2021_marshal_scope } + } + save_scope_as = bp1_yearly_2021_martial_person + } + } + } + #Else just check if the dynast has above 15 martial + else = { + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = martial } + } + save_scope_as = bp1_yearly_2021_martial_person + } + } + } + } + } + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_martial_person_template + save_scope_as = bp1_yearly_2021_martial_person + } + scope:bp1_yearly_2021_martial_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + } + #Learning Person + 1 = { + trigger = { + NOT = { exists = scope:bp1_yearly_2021_learning_person } + } + #Let's inject a partner dynasty member if we can + modifier = { + #If we can change our learning councillor and have an appropriate dynast + faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_chaplain_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = learning TARGET = scope:bp1_yearly_2021_chaplain_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = learning } + } + } + } + } + add = 20 + } + modifier = { + OR = { + #If we can change our learning councillor and they don't exist + AND = { + faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + NOT = { exists = scope:bp1_yearly_2021_chaplain_scope } + } + #If we can change our learning councillor and they have less than 15 learning + AND = { + faith = { has_doctrine = doctrine_clerical_succession_temporal_appointment } + exists = scope:bp1_yearly_2021_chaplain_scope + scope:bp1_yearly_2021_chaplain_scope.learning < high_skill_rating + } + } + add = 10 + } + #Look for a dynasty member of the consort first + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_chaplain_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = learning TARGET = scope:bp1_yearly_2021_chaplain_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = learning } + } + } + } + } + } + scope:bp1_yearly_2020_influencing_partner = { + #If a chaplain currently exists and our dynast has more learning + if = { + limit = { exists = scope:bp1_yearly_2021_chaplain_scope } + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = learning TARGET = scope:bp1_yearly_2021_chaplain_scope } + } + save_scope_as = bp1_yearly_2021_learning_person + } + } + } + #Else just check if the dynast has above 15 learning + else = { + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = learning } + } + save_scope_as = bp1_yearly_2021_learning_person + } + } + } + } + } + else = { + if = { + #If witchcraft is accepted, create a witch + limit = { + faith = { has_doctrine = doctrine_witchcraft_accepted } + } + create_character = { + location = root.location + template = bp1_yearly_2021_learning_witch_template + save_scope_as = bp1_yearly_2021_learning_person + } + scope:bp1_yearly_2021_learning_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_learning_person_template + save_scope_as = bp1_yearly_2021_learning_person + } + scope:bp1_yearly_2021_learning_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + } + } + #Stewardship Person + 1 = { + trigger = { + NOT = { exists = scope:bp1_yearly_2021_stewardship_person } + } + #Let's inject a partner dynasty member if we can + modifier = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_steward_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = stewardship TARGET = scope:bp1_yearly_2021_steward_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = stewardship } + } + } + } + } + add = 20 + } + modifier = { + OR = { + AND = { + exists = scope:bp1_yearly_2021_steward_scope + scope:bp1_yearly_2021_steward_scope.stewardship < high_skill_rating + } + NOT = { exists = scope:bp1_yearly_2021_steward_scope } + } + add = 10 + } + #Look for a dynasty member of the consort first + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_steward_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = stewardship TARGET = scope:bp1_yearly_2021_steward_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = stewardship } + } + } + } + } + } + scope:bp1_yearly_2020_influencing_partner = { + #If a steward currently exists and our dynast has more stewardship + if = { + limit = { exists = scope:bp1_yearly_2021_steward_scope } + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = stewardship TARGET = scope:bp1_yearly_2021_steward_scope } + } + save_scope_as = bp1_yearly_2021_stewardship_person + } + } + } + #Else just check if the dynast has above 15 stewardship + else = { + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = stewardship } + } + save_scope_as = bp1_yearly_2021_stewardship_person + } + } + } + } + } + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_stewardship_person_template + save_scope_as = bp1_yearly_2021_stewardship_person + } + scope:bp1_yearly_2021_stewardship_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + } + #Diplomacy Person + 1 = { + trigger = { + NOT = { exists = scope:bp1_yearly_2021_diplomacy_person } + } + #Let's inject a partner dynasty member if we can + modifier = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_chancellor_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = diplomacy TARGET = scope:bp1_yearly_2021_chancellor_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = diplomacy } + } + } + } + } + add = 20 + } + modifier = { + OR = { + AND = { + exists = scope:bp1_yearly_2021_chancellor_scope + scope:bp1_yearly_2021_chancellor_scope.diplomacy < high_skill_rating + } + NOT = { exists = scope:bp1_yearly_2021_chancellor_scope } + } + add = 10 + } + #Look for a dynasty member of the consort first + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_chancellor_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = diplomacy TARGET = scope:bp1_yearly_2021_chancellor_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = diplomacy } + } + } + } + } + } + scope:bp1_yearly_2020_influencing_partner = { + #If a chancellor currently exists and our dynast has more diplomacy + if = { + limit = { exists = scope:bp1_yearly_2021_chancellor_scope } + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = diplomacy TARGET = scope:bp1_yearly_2021_chancellor_scope } + } + save_scope_as = bp1_yearly_2021_diplomacy_person + } + } + } + #Else just check if the dynast has above 15 diplomacy + else = { + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = diplomacy } + } + save_scope_as = bp1_yearly_2021_diplomacy_person + } + } + } + } + } + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_diplomacy_person_template + save_scope_as = bp1_yearly_2021_diplomacy_person + } + scope:bp1_yearly_2021_diplomacy_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + } + #Intrigue Person + 1 = { + trigger = { + NOT = { exists = scope:bp1_yearly_2021_intrigue_person } + } + #Let's inject a partner dynasty member if we can + modifier = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_spymaster_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = intrigue TARGET = scope:bp1_yearly_2021_spymaster_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = intrigue } + } + } + } + } + add = 20 + } + modifier = { + OR = { + AND = { + exists = scope:bp1_yearly_2021_spymaster_scope + scope:bp1_yearly_2021_spymaster_scope.intrigue < high_skill_rating + } + NOT = { exists = scope:bp1_yearly_2021_spymaster_scope } + } + add = 10 + } + #Look for a dynasty member of the consort first + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + exists = dynasty + OR = { + AND = { + exists = scope:bp1_yearly_2021_spymaster_scope + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = intrigue TARGET = scope:bp1_yearly_2021_spymaster_scope } + } + } + } + dynasty = { + any_dynasty_member = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = intrigue } + } + } + } + } + } + scope:bp1_yearly_2020_influencing_partner = { + #If a spymaster currently exists and our dynast has more intrigue + if = { + limit = { exists = scope:bp1_yearly_2021_spymaster_scope } + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_trigger = { SKILL = intrigue TARGET = scope:bp1_yearly_2021_spymaster_scope } + } + save_scope_as = bp1_yearly_2021_intrigue_person + } + } + } + #Else just check if the dynast has above 15 intrigue + else = { + dynasty = { + random_dynasty_member = { + limit = { + bp1_yearly_2021_relevant_dynasty_person_no_target_trigger = { SKILL = intrigue } + } + } + save_scope_as = bp1_yearly_2021_intrigue_person + } + } + } + } + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_intrigue_person_template + save_scope_as = bp1_yearly_2021_intrigue_person + } + scope:bp1_yearly_2021_intrigue_person = { + set_variable = { + name = created_in_bp1_yearly_2021 + value = yes + days = 60 + } + } + } + } + } +} + +scripted_effect bp1_yearly_2021_set_up_portrait_effect = { + $SCOPE$ = { + if = { + limit = { + NOT = { exists = scope:bp1_yearly_2021_first_person } + } + save_scope_as = bp1_yearly_2021_first_person + } + else_if = { + limit = { + NOT = { exists = scope:bp1_yearly_2021_second_person } + } + save_scope_as = bp1_yearly_2021_second_person + } + else_if = { + limit = { + NOT = { exists = scope:bp1_yearly_2021_third_person } + } + save_scope_as = bp1_yearly_2021_third_person + } + } +} + +scripted_trigger bp1_yearly_2021_clean_up_character_trigger = { + exists = scope:bp1_yearly_2021_$SKILL$_person + scope:bp1_yearly_2021_$SKILL$_person = { + has_variable = created_in_bp1_yearly_2021 + NOT = { has_character_flag = bp1_yearly_2021_chosen_courtier } + } +} + +scripted_effect bp1_yearly_2021_clean_up_character_effect = { + scope:bp1_yearly_2021_$SKILL$_person = { + death = { + death_reason = death_vanished + } + } +} + +#Summon up a person to your liking +bp1_yearly.2021 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2021.t + desc = bp1_yearly.2021.desc + theme = family + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:bp1_yearly_2020_influencing_partner + animation = chancellor + } + #First Person + lower_left_portrait = { + trigger = { exists = scope:bp1_yearly_2021_first_person } + character = scope:bp1_yearly_2021_first_person + } + #Second Person + lower_center_portrait = { + trigger = { exists = scope:bp1_yearly_2021_second_person } + character = scope:bp1_yearly_2021_second_person + } + #Third Person + lower_right_portrait = { + trigger = { exists = scope:bp1_yearly_2021_third_person } + character = scope:bp1_yearly_2021_third_person + } + immediate = { + if = { + limit = { exists = cp:councillor_marshal } + cp:councillor_marshal = { save_scope_as = bp1_yearly_2021_marshal_scope } + } + if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { save_scope_as = bp1_yearly_2021_chaplain_scope } + } + if = { + limit = { exists = cp:councillor_steward } + cp:councillor_steward = { save_scope_as = bp1_yearly_2021_steward_scope } + } + if = { + limit = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { save_scope_as = bp1_yearly_2021_chancellor_scope } + } + if = { + limit = { exists = cp:councillor_spymaster } + cp:councillor_spymaster = { save_scope_as = bp1_yearly_2021_spymaster_scope } + } + #Conjure up 3 interesting courtiers + bp1_yearly_2021_add_interesting_courtier_effect = yes + bp1_yearly_2021_add_interesting_courtier_effect = yes + bp1_yearly_2021_add_interesting_courtier_effect = yes + #Set up portraits to display + if = { + limit = { exists = scope:bp1_yearly_2021_martial_person } + bp1_yearly_2021_set_up_portrait_effect = { SCOPE = scope:bp1_yearly_2021_martial_person } + } + if = { + limit = { exists = scope:bp1_yearly_2021_learning_person } + bp1_yearly_2021_set_up_portrait_effect = { SCOPE = scope:bp1_yearly_2021_learning_person } + } + if = { + limit = { exists = scope:bp1_yearly_2021_stewardship_person } + bp1_yearly_2021_set_up_portrait_effect = { SCOPE = scope:bp1_yearly_2021_stewardship_person } + } + if = { + limit = { exists = scope:bp1_yearly_2021_diplomacy_person } + bp1_yearly_2021_set_up_portrait_effect = { SCOPE = scope:bp1_yearly_2021_diplomacy_person } + } + if = { + limit = { exists = scope:bp1_yearly_2021_intrigue_person } + bp1_yearly_2021_set_up_portrait_effect = { SCOPE = scope:bp1_yearly_2021_intrigue_person } + } + } + #Pick Martial + option = { + name = bp1_yearly.2021.a + trigger = { exists = scope:bp1_yearly_2021_martial_person } + send_interface_toast = { + title = bp1_yearly.2021.a_tt + left_icon = scope:bp1_yearly_2021_martial_person + add_courtier = scope:bp1_yearly_2021_martial_person + scope:bp1_yearly_2021_martial_person = { + add_character_flag = bp1_yearly_2021_chosen_courtier + } + reverse_add_opinion = { + target = scope:bp1_yearly_2021_martial_person + modifier = pleased_opinion + opinion = 40 + } + } + save_scope_as = bp1_yearly_2021_new_courtier + } + #Pick Learning + option = { + name = bp1_yearly.2021.b + trigger = { exists = scope:bp1_yearly_2021_learning_person } + send_interface_toast = { + title = bp1_yearly.2021.b_tt + left_icon = scope:bp1_yearly_2021_learning_person + add_courtier = scope:bp1_yearly_2021_learning_person + scope:bp1_yearly_2021_learning_person = { + add_character_flag = bp1_yearly_2021_chosen_courtier + } + reverse_add_opinion = { + target = scope:bp1_yearly_2021_learning_person + modifier = pleased_opinion + opinion = 40 + } + } + save_scope_as = bp1_yearly_2021_new_courtier + } + #Pick Stewardship + option = { + name = bp1_yearly.2021.c + trigger = { exists = scope:bp1_yearly_2021_stewardship_person } + send_interface_toast = { + title = bp1_yearly.2021.c_tt + left_icon = scope:bp1_yearly_2021_stewardship_person + add_courtier = scope:bp1_yearly_2021_stewardship_person + scope:bp1_yearly_2021_stewardship_person = { + add_character_flag = bp1_yearly_2021_chosen_courtier + } + reverse_add_opinion = { + target = scope:bp1_yearly_2021_stewardship_person + modifier = pleased_opinion + opinion = 40 + } + } + save_scope_as = bp1_yearly_2021_new_courtier + } + #Pick Diplomacy + option = { + name = bp1_yearly.2021.d + trigger = { exists = scope:bp1_yearly_2021_diplomacy_person } + send_interface_toast = { + title = bp1_yearly.2021.d_tt + left_icon = scope:bp1_yearly_2021_diplomacy_person + add_courtier = scope:bp1_yearly_2021_diplomacy_person + scope:bp1_yearly_2021_diplomacy_person = { + add_character_flag = bp1_yearly_2021_chosen_courtier + } + reverse_add_opinion = { + target = scope:bp1_yearly_2021_diplomacy_person + modifier = pleased_opinion + opinion = 40 + } + } + save_scope_as = bp1_yearly_2021_new_courtier + } + #Pick Intrigue + option = { + name = bp1_yearly.2021.e + trigger = { exists = scope:bp1_yearly_2021_intrigue_person } + send_interface_toast = { + title = bp1_yearly.2021.e_tt + left_icon = scope:bp1_yearly_2021_intrigue_person + add_courtier = scope:bp1_yearly_2021_intrigue_person + scope:bp1_yearly_2021_intrigue_person = { + add_character_flag = bp1_yearly_2021_chosen_courtier + } + reverse_add_opinion = { + target = scope:bp1_yearly_2021_intrigue_person + modifier = pleased_opinion + opinion = 40 + } + } + save_scope_as = bp1_yearly_2021_new_courtier + } + #Actually, I have changed my mind + option = { + name = bp1_yearly.2021.f + add_character_flag = bp1_yearly_2021_picked_none + stress_impact = { + fickle = miniscule_stress_impact_loss + } + } + after = { + hidden_effect = { + #...clean up the unused characters + if = { + limit = { + bp1_yearly_2021_clean_up_character_trigger = { SKILL = martial } + } + bp1_yearly_2021_clean_up_character_effect = { SKILL = martial } + } + if = { + limit = { + bp1_yearly_2021_clean_up_character_trigger = { SKILL = learning } + } + bp1_yearly_2021_clean_up_character_effect = { SKILL = learning } + } + if = { + limit = { + bp1_yearly_2021_clean_up_character_trigger = { SKILL = stewardship } + } + bp1_yearly_2021_clean_up_character_effect = { SKILL = stewardship } + } + if = { + limit = { + bp1_yearly_2021_clean_up_character_trigger = { SKILL = diplomacy } + } + bp1_yearly_2021_clean_up_character_effect = { SKILL = diplomacy } + } + if = { + limit = { + bp1_yearly_2021_clean_up_character_trigger = { SKILL = intrigue } + } + bp1_yearly_2021_clean_up_character_effect = { SKILL = intrigue } + } + } + trigger_event = { + id = bp1_yearly.2023 + days = { 2 5 } + } + } +} + +#Your partner is imprisoned/dead +bp1_yearly.2022 = { + type = letter_event + opening = bp1_yearly.2022.t + desc = { + desc = bp1_yearly.2022.desc_intro + first_valid = { + #Your partner is imprisoned + triggered_desc = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = yes } + } + desc = bp1_yearly.2022.desc_imprisoned + } + #Your partner died + triggered_desc = { + desc = bp1_yearly.2022.desc_dead + } + } + } + sender = scope:bp1_yearly_2020_target + #Oh no! + option = { + name = { + text = { + first_valid = { + #If our partner was imprisoned + triggered_desc = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = yes } + } + desc = bp1_yearly.2022.a_imprisoned + } + #Else they died + triggered_desc = { + desc = bp1_yearly.2022.b_dead + } + } + } + } + #If our partner was imprisoned or killed by rival, deepen rivalry + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned_by = scope:bp1_yearly_2020_target + is_alive = no + } + } + can_set_relation_nemesis_trigger = { CHARACTER = scope:bp1_yearly_2020_target } + } + # Split set_relation nemesis into two cases based on what the reason should be. - Chad + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_imprisoned_by = scope:bp1_yearly_2020_target } + } + set_relation_nemesis = { + reason = nemesis_imprisoned_partner + target = scope:bp1_yearly_2020_target + involved_character = scope:bp1_yearly_2020_influencing_partner + } + } + else_if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = no } + } + set_relation_nemesis = { + reason = nemesis_killed_partner + target = scope:bp1_yearly_2020_target + involved_character = scope:bp1_yearly_2020_influencing_partner + } + } + } + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = no } + } + stress_impact = { + vengeful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + family_first = medium_stress_impact_gain + just = minor_stress_impact_gain + } + } + else = { + stress_impact = { + vengeful = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + family_first = minor_stress_impact_gain + just = miniscule_stress_impact_gain + } + } + trigger_event = { + id = bp1_yearly.2023 + days = { 2 5 } + } + } +} + +scripted_effect bp1_yearly_2023_apply_dis_or_honorable_modifier_effect = { + #If we already have the modifier, refresh it + if = { + limit = { + NOT = { has_character_modifier = bp1_yearly_2023_$REMOVE$_modifier } + has_character_modifier = bp1_yearly_2023_$ADD$_modifier + } + remove_character_modifier = bp1_yearly_2023_$ADD$_modifier + add_character_modifier = { + modifier = bp1_yearly_2023_$ADD$_modifier + years = 30 + } + } + #If we already have the modifier, remove and replace + else_if = { + limit = { has_character_modifier = bp1_yearly_2023_$REMOVE$_modifier } + remove_character_modifier = bp1_yearly_2023_$REMOVE$_modifier + add_character_modifier = { + modifier = bp1_yearly_2023_$ADD$_modifier + years = 30 + } + } + #If we don't have any previously, get ADD + else_if = { + limit = { + NOR = { + has_character_modifier = bp1_yearly_2023_$ADD$_modifier + has_character_modifier = bp1_yearly_2023_$REMOVE$_modifier + } + } + add_character_modifier = { + modifier = bp1_yearly_2023_$ADD$_modifier + years = 30 + } + } +} + +#Handle the set_designated_heir +bp1_yearly.2023 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2023.t + desc = { + first_valid = { + triggered_desc = { + #They completed their task + trigger = { + OR = { + has_character_flag = bp1_yearly_2020_target_killed + exists = scope:bp1_yearly_2021_new_courtier + } + } + desc = bp1_yearly.2023.desc_triumphant + } + triggered_desc = { + #They died while trying to kill your rival/nemesis + trigger = { + exists = scope:bp1_yearly_2020_target + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned_by = scope:bp1_yearly_2020_target + is_alive = no + } + } + } + desc = bp1_yearly.2023.desc_sad + } + triggered_desc = { + #They killed your rival/nemesis, is presenting their head + trigger = { + NOT = { exists = scope:bp1_yearly_2021_new_courtier } + } + desc = bp1_yearly.2023.desc_hesitant + } + } + first_valid = { + #They attempted to kill your rival/nemesis + triggered_desc = { + #They killed your rival/nemesis, is presenting their head + trigger = { + exists = scope:bp1_yearly_2020_target + has_character_flag = bp1_yearly_2020_target_killed + } + desc = bp1_yearly.2023.desc_killed_target + } + triggered_desc = { + #They are imprisoned by your rival/nemesis + trigger = { + exists = scope:bp1_yearly_2020_target + scope:bp1_yearly_2020_influencing_partner = { + is_imprisoned_by = scope:bp1_yearly_2020_target + } + } + desc = bp1_yearly.2023.desc_imprisoned + } + triggered_desc = { + #They died attempting to kill your rival/nemesis + trigger = { + exists = scope:bp1_yearly_2020_target + scope:bp1_yearly_2020_influencing_partner = { is_alive = no } + } + desc = bp1_yearly.2023.desc_died + } + #They summoned a person of your liking to court + triggered_desc = { + #You picked the martial person + trigger = { + exists = scope:bp1_yearly_2021_new_courtier + # CU: added check for error suppression + exists = scope:bp1_yearly_2021_martial_person + scope:bp1_yearly_2021_new_courtier = scope:bp1_yearly_2021_martial_person + } + desc = bp1_yearly.2023.desc_picked_martial + } + triggered_desc = { + #You picked the learning person + trigger = { + exists = scope:bp1_yearly_2021_new_courtier + # CU: added check for error suppression + exists = scope:bp1_yearly_2021_learning_person + scope:bp1_yearly_2021_new_courtier = scope:bp1_yearly_2021_learning_person + } + desc = bp1_yearly.2023.desc_picked_learning + } + triggered_desc = { + #You picked the stewardship person + trigger = { + exists = scope:bp1_yearly_2021_new_courtier + # CU: added check for error suppression + exists = scope:bp1_yearly_2021_stewardship_person + scope:bp1_yearly_2021_new_courtier = scope:bp1_yearly_2021_stewardship_person + } + desc = bp1_yearly.2023.desc_picked_stewardship + } + triggered_desc = { + #You picked the diplomacy person + trigger = { + exists = scope:bp1_yearly_2021_new_courtier + # CU: added check for error suppression + exists = scope:bp1_yearly_2021_diplomacy_person + scope:bp1_yearly_2021_new_courtier = scope:bp1_yearly_2021_diplomacy_person + } + desc = bp1_yearly.2023.desc_picked_diplomacy + } + triggered_desc = { + #You picked the intrigue person + trigger = { + exists = scope:bp1_yearly_2021_new_courtier + # CU: added check for error suppression + exists = scope:bp1_yearly_2021_intrigue_person + scope:bp1_yearly_2021_new_courtier = scope:bp1_yearly_2021_intrigue_person + } + desc = bp1_yearly.2023.desc_picked_intrigue + } + triggered_desc = { + #You didn't pick any of the summoned people + trigger = { + NOT = { exists = scope:bp1_yearly_2021_new_courtier } + } + desc = bp1_yearly.2023.desc_picked_none + } + } + first_valid = { + #If they did something for us and we're supposed to honor our agreement + triggered_desc = { + trigger = { + OR = { + has_character_flag = bp1_yearly_2020_target_killed + exists = scope:bp1_yearly_2021_new_courtier + } + } + desc = bp1_yearly.2023.desc_outro + } + #If the partner is imprisoned or dead + triggered_desc = { + trigger = { + exists = scope:bp1_yearly_2020_target + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned_by = scope:bp1_yearly_2020_target + is_alive = no + } + } + } + desc = bp1_yearly.2023.desc_outro_sad + } + } + } + theme = family + override_background = { reference = bp1_kitchen_western } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_character_flag = bp1_yearly_2020_target_killed } + animation = disbelief + } + triggered_animation = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned = yes + is_alive = no + } + } + } + animation = sadness + } + animation = personality_rational + } + #If the partner isn't dead or imprisoned, display them + right_portrait = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { + is_imprisoned = no + is_alive = yes + } + } + character = scope:bp1_yearly_2020_influencing_partner + animation = war_over_win + } + #If we picked one of the people to join our court, display that person + lower_left_portrait = { + trigger = { exists = scope:bp1_yearly_2021_new_courtier } + character = scope:bp1_yearly_2021_new_courtier + } + #Display the 'new heir' in question + lower_center_portrait = { + character = scope:bp1_yearly_2020_child_to_become_heir + } + lower_right_portrait = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = no } + } + character = scope:bp1_yearly_2020_influencing_partner + } + immediate = { + #Lose the stress you were supposed to lose when rival/nemesis died + if = { + limit = { has_character_flag = bp1_yearly_2020_target_killed } + stress_impact = { + base = minor_stress_impact_loss + } + } + } + #Set designated heir + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned_by = scope:bp1_yearly_2020_target + is_alive = no + } + } + } + desc = bp1_yearly.2023.a_imprisoned_dead + } + triggered_desc = { + desc = bp1_yearly.2023.a + } + } + } + } + #Deal with opinion reactions to this + bp1_yearly_2020_heir_change_opinions_effect = yes + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { is_alive = no } + } + bp1_yearly_2023_apply_dis_or_honorable_modifier_effect = { ADD = honorable REMOVE = dishonorable } + stress_impact = { + family_first = miniscule_stress_impact_loss + honest = miniscule_stress_impact_loss + } + } + send_interface_toast = { + title = designate_heir_interaction_notification + left_icon = root + right_icon = scope:bp1_yearly_2020_child_to_become_heir + set_designated_heir = scope:bp1_yearly_2020_child_to_become_heir + } + hidden_effect = { + if = { + limit = { exists = scope:bp1_yearly_2020_scorned_parent } + bp1_yearly_2020_chance_of_murderous_partner_effect = { MURDEROUS_PARTNER = scope:bp1_yearly_2020_scorned_parent } + } + } + } + #No, imprison them + option = { + name = { + text = { + first_valid = { + #If they successfully killed the rival/nemesis + triggered_desc = { + trigger = { has_character_flag = bp1_yearly_2020_target_killed } + desc = bp1_yearly.2023.b_killer + } + #If we just don't trust them + triggered_desc = { + desc = bp1_yearly.2023.b + } + } + } + } + trigger = { + scope:bp1_yearly_2020_influencing_partner = { + is_imprisoned = no + is_alive = yes + } + } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2020_influencing_partner IMPRISONER = root } + #Sting more if they actually killed your rival/nemesis + if = { + limit = { has_character_flag = bp1_yearly_2020_target_killed } + bp1_yearly_2023_apply_dis_or_honorable_modifier_effect = { ADD = dishonorable REMOVE = honorable } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = betrayed_me_opinion + opinion = -50 + } + stress_impact = { + family_first = minor_stress_impact_gain + honest = medium_stress_impact_gain + craven = miniscule_stress_impact_loss + paranoid = minor_stress_impact_loss + } + } + else = { + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = betrayed_me_opinion + opinion = -30 + } + stress_impact = { + honest = minor_stress_impact_gain + craven = miniscule_stress_impact_loss + paranoid = minor_stress_impact_loss + } + } + } + #No, I've changed my mind + option = { + name = { + text = { + first_valid = { + #I mean, _technically_ they didn't finish the job... + triggered_desc = { + trigger = { + scope:bp1_yearly_2020_influencing_partner = { + OR = { + is_imprisoned_by = scope:bp1_yearly_2020_target + is_alive = no + } + } + } + desc = bp1_yearly.2023.c_imprisoned_dead + } + #This isn't right + triggered_desc = { + desc = bp1_yearly.2023.c + } + } + } + } + #If the partner is available + if = { + limit = { + scope:bp1_yearly_2020_influencing_partner = { + is_imprisoned = no + is_alive = yes + } + } + #And we took the person option but didn't pick anyone, they can sort of understand + if = { + limit = { has_character_flag = bp1_yearly_2021_picked_none } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = insulted_opinion + opinion = -20 + } + stress_impact = { + craven = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + } + } + #Otherwise, if they killed our rival/nemesis we're just being an ass + else_if = { + limit = { has_character_flag = bp1_yearly_2020_target_killed } + reverse_add_opinion = { + target = scope:bp1_yearly_2020_influencing_partner + modifier = betrayed_me_opinion + opinion = -50 + } + bp1_yearly_2023_apply_dis_or_honorable_modifier_effect = { ADD = dishonorable REMOVE = honorable } + stress_impact = { + family_first = minor_stress_impact_gain + honest = medium_stress_impact_gain + craven = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + } + hidden_effect = { + bp1_yearly_2020_chance_of_murderous_partner_effect = { MURDEROUS_PARTNER = scope:bp1_yearly_2020_influencing_partner } + } + } + #If they're dead or imprisoned, nothing happens + } + after = { + remove_character_flag = bp1_yearly_2020_target_killed + remove_character_flag = bp1_yearly_2021_picked_none + } +} + +################################################## +# #Mopey consort wants some guidance +# by Filippa Gannholm Kirsten +# #bp1_yearly.2030 +################################################## +scripted_trigger bp1_yearly_2030_is_relevant_consort_trigger = { + is_available_ai_adult = yes + NOR = { + this = $TARGET$ + has_relation_nemesis = $TARGET$ + has_relation_best_friend = $TARGET$ + } +} + +scripted_effect bp1_yearly_2030_relationship_effect = { + #Starting as Potential Friends + if = { + limit = { + has_relation_potential_friend = $TARGET$ + } + random_list = { + #Increase friendship - Friends + 2 = { + trigger = { + can_set_relation_friend_trigger = { CHARACTER = $TARGET$ } + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_friend + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + improve_relationship_effect = { + TARGET = $TARGET$ + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + #Nothing happens + 1 = { + desc = bp1_yearly.2030.tt_nothing + } + #Decrease friendship - Potential Rival + 2 = { + desc = bp1_yearly.2030.tt_potential_rival + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + worsen_relationship_effect = { + TARGET = $TARGET$ + REASON = rival_forced_to_socialize + } + } + } + } + } + } + } + #Starting as Friends + else_if = { + limit = { + has_relation_friend = $TARGET$ + } + random_list = { + #Increase friendship - Best Friend + 2 = { + trigger = { + can_set_relation_best_friend_trigger = { CHARACTER = $TARGET$ } + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_best_friend + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + improve_relationship_effect = { + TARGET = $TARGET$ + REASON = best_friend_socializing + } + } + } + } + } + #Nothing happens + 1 = { + desc = bp1_yearly.2030.tt_nothing + } + #Decrease friendship - Potential Friend + 2 = { + desc = bp1_yearly.2030.tt_potential_rival + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + worsen_relationship_effect = { + TARGET = $TARGET$ + REASON = rival_forced_to_socialize + } + } + } + } + } + } + } + #Starting as Potential Rivals + else_if = { + limit = { + has_relation_potential_rival = $TARGET$ + } + random_list = { + #Increase friendship - Potential Friend + 2 = { + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_potential_friend + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + improve_relationship_effect = { + TARGET = $TARGET$ + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + #Nothing happens + 1 = { + desc = bp1_yearly.2030.tt_nothing + } + #Decrease friendship - Rival + 2 = { + desc = bp1_yearly.2030.tt_rival + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + worsen_relationship_effect = { + TARGET = $TARGET$ + REASON = rival_forced_to_socialize + } + } + } + } + } + } + } + #Starting as Rivals + else_if = { + limit = { + has_relation_rival = $TARGET$ + } + random_list = { + #Increase friendship - Potential Friend + 2 = { + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_potential_friend + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + improve_relationship_effect = { + TARGET = $TARGET$ + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + #Nothing happens + 1 = { + desc = bp1_yearly.2030.tt_nothing + } + #Decrease friendship - Nemesis + 2 = { + desc = bp1_yearly.2030.tt_nemesis + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + worsen_relationship_effect = { + TARGET = $TARGET$ + REASON = rival_forced_to_socialize + } + } + } + } + } + } + } + #Blank Slate + else = { + random_list = { + #Increase friendship - Potential Friend + 2 = { + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_potential_friend + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + improve_relationship_effect = { + TARGET = $TARGET$ + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + #Nothing happens + 1 = { + desc = bp1_yearly.2030.tt_nothing + } + #Decrease friendship - Nemesis + 2 = { + desc = bp1_yearly.2030.tt_potential_rival + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + worsen_relationship_effect = { + TARGET = $TARGET$ + REASON = rival_forced_to_socialize + } + } + } + } + } + } + } +} + +scripted_effect bp1_yearly_2030_improve_lowest_skill_effect = { + random_list = { + 1 = { + add_$SKILL$_skill = 1 + } + 1 = { + add_character_modifier = { + modifier = bp1_yearly_2030_failed_student_modifier + years = 5 + } + } + } +} + +#Credit to Hugo Cortell +scripted_effect bp1_yearly_2030_get_lowest_skill_effect = { + save_scope_value_as = { + name = lowest_character_skill + value = flag:diplomacy + } + save_scope_value_as = { + name = lowest_character_skill_value + value = diplomacy + } + #Let's make it a bit more random in case you have the same level in a lot of skills + random_list = { + 50 = { + if = { + limit = { martial <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:martial + } + save_scope_value_as = { + name = lowest_character_skill_value + value = martial + } + } + if = { + limit = { stewardship <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:stewardship + } + save_scope_value_as = { + name = lowest_character_skill_value + value = stewardship + } + } + if = { + limit = { intrigue <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:intrigue + } + save_scope_value_as = { + name = lowest_character_skill_value + value = intrigue + } + } + if = { + limit = { learning <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:learning + } + save_scope_value_as = { + name = lowest_character_skill_value + value = learning + } + } + } + 50 = { + if = { + limit = { learning <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:learning + } + save_scope_value_as = { + name = lowest_character_skill_value + value = learning + } + } + if = { + limit = { intrigue <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:intrigue + } + save_scope_value_as = { + name = lowest_character_skill_value + value = intrigue + } + } + if = { + limit = { stewardship <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:stewardship + } + save_scope_value_as = { + name = lowest_character_skill_value + value = stewardship + } + } + if = { + limit = { martial <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:martial + } + save_scope_value_as = { + name = lowest_character_skill_value + value = martial + } + } + } + 50 = { + if = { + limit = { learning <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:learning + } + save_scope_value_as = { + name = lowest_character_skill_value + value = learning + } + } + if = { + limit = { martial <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:martial + } + save_scope_value_as = { + name = lowest_character_skill_value + value = martial + } + } + if = { + limit = { intrigue <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:intrigue + } + save_scope_value_as = { + name = lowest_character_skill_value + value = intrigue + } + } + if = { + limit = { stewardship <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:stewardship + } + save_scope_value_as = { + name = lowest_character_skill_value + value = stewardship + } + } + } + 50 = { + if = { + limit = { learning <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:learning + } + save_scope_value_as = { + name = lowest_character_skill_value + value = learning + } + } + if = { + limit = { martial <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:martial + } + save_scope_value_as = { + name = lowest_character_skill_value + value = martial + } + } + if = { + limit = { intrigue <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:intrigue + } + save_scope_value_as = { + name = lowest_character_skill_value + value = intrigue + } + } + if = { + limit = { stewardship <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:stewardship + } + save_scope_value_as = { + name = lowest_character_skill_value + value = stewardship + } + } + if = { + limit = { diplomacy <= scope:lowest_character_skill_value } + save_scope_value_as = { + name = lowest_character_skill + value = flag:diplomacy + } + save_scope_value_as = { + name = lowest_character_skill_value + value = diplomacy + } + } + } + } +} + +bp1_yearly.2030 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2030.t + desc = bp1_yearly.2030.desc + theme = friendly + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:bp1_yearly_2030_mopey_consort + animation = sadness + } + lower_right_portrait = scope:bp1_yearly_2030_target_consort + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_playable_character = yes + any_consort = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + } + any_consort = { + bp1_yearly_2030_is_relevant_consort_trigger = { TARGET = scope:first_consort } + } + is_at_war = no + } + weight_multiplier = { + base = 1 + modifier = { + any_consort = { + count >= 3 + } + add = 2 + } + modifier = { + any_consort = { + count = 4 + } + add = 2 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Find a consort + random_consort = { + limit = { is_available_ai_adult = yes } + save_scope_as = bp1_yearly_2030_mopey_consort + } + #Find a ... lover to be? + if = { + limit = { + OR = { + has_trait = lustful + has_trait = seducer + } + scope:bp1_yearly_2030_mopey_consort = { + NOT = { has_trait = chaste } + OR = { + has_sexuality = bisexual + has_sexuality = homosexual + } + } + any_consort = { + can_set_relation_lover_trigger = { CHARACTER = scope:bp1_yearly_2030_mopey_consort } + is_available_ai_adult = yes + this != scope:bp1_yearly_2030_mopey_consort + } + } + random_consort = { + limit = { + NOT = { has_trait = chaste } + can_set_relation_lover_trigger = { CHARACTER = scope:bp1_yearly_2030_mopey_consort } + bp1_yearly_2030_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2030_mopey_consort } + } + save_scope_as = bp1_yearly_2030_target_consort + } + scope:bp1_yearly_2030_mopey_consort = { add_character_flag = bp1_yearly_2030_potential_lover_exists } + } + #Otherwise find another consort who can do relation stuff with this consort + else = { + random_consort = { + limit = { + bp1_yearly_2030_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2030_mopey_consort } + } + save_scope_as = bp1_yearly_2030_target_consort + } + } + #Find the lowest skill to improve + scope:bp1_yearly_2030_mopey_consort = { bp1_yearly_2030_get_lowest_skill_effect = yes } + } + #Befriend other consort + option = { + name = bp1_yearly.2030.a + trigger = { exists = scope:bp1_yearly_2030_target_consort } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = craven + has_trait = paranoid + has_trait = reclusive + } + } + #But what if they end up discussing me... + desc = bp1_yearly.2030.a_tt_paranoia + } + triggered_desc = { + trigger = { has_trait = gregarious } + #I'm sure this will work out nicely. + desc = bp1_yearly.2030.a_tt_gregarious + } + } + } + scope:bp1_yearly_2030_mopey_consort = { + bp1_yearly_2030_relationship_effect = { TARGET = scope:bp1_yearly_2030_target_consort } + } + stress_impact = { + craven = miniscule_stress_impact_gain + reclusive = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + gregarious = miniscule_stress_impact_loss + } + ai_chance = { + base = 5 + #Paranoid be paranoid + modifier = { + has_trait = paranoid + add = -50 + } + modifier = { + has_trait = gregarious + add = 20 + } + ai_value_modifier = { + ai_sociability = 1 + ai_compassion = 0.5 + } + } + } + #Befriend with benefits + option = { + name = bp1_yearly.2030.b + trigger = { + scope:bp1_yearly_2030_mopey_consort = { has_character_flag = bp1_yearly_2030_potential_lover_exists } + OR = { + has_trait = lustful + has_trait = seducer + } + } + flavor = bp1_yearly.2030.b_tt + scope:bp1_yearly_2030_mopey_consort = { + random_list = { + #Lover + 1 = { + modifier = { + number_of_personality_traits_in_common = { + target = scope:bp1_yearly_2030_target_consort + value >= 1 + } + factor = 2 + } + modifier = { + number_of_personality_traits_in_common = { + target = scope:bp1_yearly_2030_target_consort + value >= 2 + } + factor = 3 + } + modifier = { + number_of_personality_traits_in_common = { + target = scope:bp1_yearly_2030_target_consort + value >= 3 + } + factor = 4 + } + desc = bp1_yearly.2030.tt_lover + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + set_relation_lover = { reason = lover_consorts_encouraged target = scope:bp1_yearly_2030_target_consort involved_character = root } + } + stress_impact = { + lustful = miniscule_stress_impact_loss + } + } + } + } + #Damage relation + 1 = { + desc = bp1_yearly.2030.tt_potential_rival + #No can do + modifier = { + scope:bp1_yearly_2030_target_consort = { has_trait = chaste } + factor = 10 + } + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2030_mopey_consort + right_icon = scope:bp1_yearly_2030_target_consort + scope:bp1_yearly_2030_mopey_consort = { + add_opinion = { + target = scope:bp1_yearly_2030_target_consort + modifier = awkward_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:bp1_yearly_2030_target_consort + modifier = awkward_opinion + opinion = -15 + } + } + } + } + } + } + } + #This is a player option + ai_chance = { + base = 0 + } + } + #Improve a skill + option = { + name = bp1_yearly.2030.c + scope:bp1_yearly_2030_mopey_consort = { + switch = { + trigger = scope:lowest_character_skill + flag:diplomacy = { + bp1_yearly_2030_improve_lowest_skill_effect = { SKILL = diplomacy } + } + flag:martial = { + bp1_yearly_2030_improve_lowest_skill_effect = { SKILL = martial } + } + flag:stewardship = { + bp1_yearly_2030_improve_lowest_skill_effect = { SKILL = stewardship } + } + flag:intrigue = { + bp1_yearly_2030_improve_lowest_skill_effect = { SKILL = intrigue } + } + flag:learning = { + bp1_yearly_2030_improve_lowest_skill_effect = { SKILL = learning } + } + } + } + stress_impact = { + ambitious = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = ambitious + add = 20 + } + ai_value_modifier = { + ai_rationality = 1 + } + } + } + #I have more important matters to tend to + option = { + name = bp1_yearly.2030.d + reverse_add_opinion = { + target = scope:bp1_yearly_2030_mopey_consort + modifier = insulted_opinion + opinion = -15 + } + stress_impact = { + gregarious = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 5 + modifier = { + has_trait = callous + add = 20 + } + ai_value_modifier = { + ai_sociability = -1 + } + } + } + after = { + scope:bp1_yearly_2030_mopey_consort = { + remove_character_flag = bp1_yearly_2030_potential_lover_exists + } + } +} + +################################################## +# #Consort is upset with other consort +# by Filippa Gannholm Kirsten +# #bp1_yearly.2040 +################################################## +bp1_yearly.2040 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2040.t + desc = { + desc = bp1_yearly.2040.desc + first_valid = { + triggered_desc = { + trigger = { + scope:bp1_yearly_2040_upset_consort = { has_trait = paranoid } + } + desc = bp1_yearly.2040.desc_paranoia + } + triggered_desc = { + desc = bp1_yearly.2040.desc_default + } + } + desc = bp1_yearly.2040.desc_outro + } + theme = unfriendly + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:bp1_yearly_2040_upset_consort + animation = rage + } + lower_center_portrait = { + character = scope:bp1_yearly_2040_target_consort + } + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_playable_character = yes + any_consort = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + } + any_consort = { + bp1_yearly_2030_is_relevant_consort_trigger = { TARGET = scope:first_consort } + } + } + weight_multiplier = { + base = 1 + modifier = { + any_consort = { + count >= 3 + } + add = 2 + } + modifier = { + any_consort = { + count = 4 + } + add = 2 + } + modifier = { + any_consort = { + OR = { + has_trait = vengeful + has_trait = deceitful + has_trait = sadistic + has_trait = wrathful + } + has_trait = paranoid + } + add = 2 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Find a consort + random_consort = { + limit = { + is_available_ai_adult = yes + has_trait = paranoid + } + alternative_limit = { is_available_ai_adult = yes } + save_scope_as = bp1_yearly_2040_upset_consort + } + #Find a target consort + random_consort = { + limit = { + bp1_yearly_2030_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2040_upset_consort } + } + save_scope_as = bp1_yearly_2040_target_consort + } + } + #Soothe them + option = { + name = bp1_yearly.2040.a + flavor = bp1_yearly.2040.a_tt + scope:bp1_yearly_2040_upset_consort = { + random_list = { + 3 = { + desc = bp1_yearly.2040.tt_success + add_opinion = { + target = scope:bp1_yearly_2040_target_consort + modifier = friendliness_opinion + opinion = 15 + } + reverse_add_opinion = { + target = scope:bp1_yearly_2040_target_consort + modifier = friendliness_opinion + opinion = 15 + } + } + 4 = { + desc = bp1_yearly.2040.tt_critical_success + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2040_upset_consort + right_icon = scope:bp1_yearly_2040_target_consort + scope:bp1_yearly_2040_upset_consort = { + improve_relationship_effect = { + TARGET = scope:bp1_yearly_2040_target_consort + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + #_Befriend_ you say + 1 = { + desc = bp1_yearly.2040.tt_severe_success + trigger = { + OR = { + has_trait = gregarious + has_trait = compassionate + has_trait = diligent + has_trait = ambitious + has_trait = deceitful + } + can_start_scheme = { + type = befriend + target_character = scope:bp1_yearly_2040_target_consort + } + } + start_scheme = { + type = befriend + target_character = scope:bp1_yearly_2040_target_consort + } + } + } + } + ai_chance = { + base = 100 + } + } + #Egg them on + option = { + name = bp1_yearly.2040.b + flavor = bp1_yearly.2040.b_tt + scope:bp1_yearly_2040_upset_consort = { + random_list = { + 3 = { + desc = bp1_yearly.2040.tt_failure + add_opinion = { + target = scope:bp1_yearly_2040_target_consort + modifier = unfriendly_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:bp1_yearly_2040_target_consort + modifier = unfriendly_opinion + opinion = -15 + } + } + 4 = { + desc = bp1_yearly.2040.tt_critical_failure + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2040_upset_consort + right_icon = scope:bp1_yearly_2040_target_consort + scope:bp1_yearly_2040_upset_consort = { + worsen_relationship_effect = { + TARGET = scope:bp1_yearly_2040_target_consort + REASON = rival_spouses_do_not_get_along + } + } + } + } + } + #I have been slighted + 1 = { + desc = bp1_yearly.2040.tt_severe_failure + trigger = { + OR = { + has_trait = vengeful + has_trait = deceitful + has_trait = sadistic + has_trait = wrathful + } + has_trait = paranoid + can_start_scheme = { + type = murder + target_character = scope:bp1_yearly_2040_target_consort + } + } + modifier = { + opinion = { + target = scope:bp1_yearly_2040_target_consort + value <= -10 + } + factor = 1.5 + } + #MURDER VENGEANCE reeee + start_scheme = { + type = murder + target_character = scope:bp1_yearly_2040_target_consort + } + } + } + } + stress_impact = { + honest = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + #Diplomacy - amicable resolution + option = { + name = bp1_yearly.2040.c + flavor = bp1_yearly.2040.c_tt + trigger = { diplomacy >= 10 } + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2040_upset_consort + right_icon = scope:bp1_yearly_2040_target_consort + scope:bp1_yearly_2040_upset_consort = { + improve_relationship_effect = { + TARGET = scope:bp1_yearly_2040_target_consort + REASON = generic_encouraged_bonding_at_court + } + } + } + stress_impact = { + just = miniscule_stress_impact_loss + cynical = miniscule_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + #I have more important matters to tend to + option = { + name = bp1_yearly.2040.d + flavor = bp1_yearly.2040.d_tt + scope:bp1_yearly_2040_upset_consort = { + random_list = { + 4 = { + desc = bp1_yearly.2040.tt_success + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_success + left_icon = scope:bp1_yearly_2040_upset_consort + right_icon = scope:bp1_yearly_2040_target_consort + scope:bp1_yearly_2040_upset_consort = { + improve_relationship_effect = { + TARGET = scope:bp1_yearly_2040_target_consort + REASON = generic_encouraged_bonding_at_court + } + } + } + } + } + 4 = { + desc = bp1_yearly.2040.tt_failure + root = { + send_interface_toast = { + title = bp1_yearly.2030.tt_failure + left_icon = scope:bp1_yearly_2040_upset_consort + right_icon = scope:bp1_yearly_2040_target_consort + scope:bp1_yearly_2040_upset_consort = { + worsen_relationship_effect = { + TARGET = scope:bp1_yearly_2040_target_consort + REASON = rival_spouses_do_not_get_along + } + } + } + } + } + #I have been slighted + 1 = { + desc = bp1_yearly.2040.tt_severe_failure + trigger = { + OR = { + has_trait = vengeful + has_trait = deceitful + has_trait = sadistic + has_trait = wrathful + } + has_trait = paranoid + can_start_scheme = { + type = murder + target_character = scope:bp1_yearly_2040_target_consort + } + } + modifier = { + opinion = { + target = scope:bp1_yearly_2040_target_consort + value <= -10 + } + factor = 1.5 + } + #MURDER VENGEANCE reeee + start_scheme = { + type = murder + target_character = scope:bp1_yearly_2040_target_consort + } + } + } + } + reverse_add_opinion = { + target = scope:bp1_yearly_2040_upset_consort + modifier = ignored_concerns + opinion = -15 + } + stress_impact = { + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +################################################## +# #Friendly consorts want to start a study circle +# by Filippa Gannholm Kirsten +# #bp1_yearly.2050 +################################################## +scripted_trigger bp1_yearly_2050_is_relevant_consort_trigger = { + is_available_ai_adult = yes + NOT = { this = $TARGET$ } + OR = { + has_relation_potential_friend = $TARGET$ + has_relation_friend = $TARGET$ + has_relation_best_friend = $TARGET$ + opinion = { + target = $TARGET$ + value >= medium_positive_opinion + } + } +} + +scripted_effect bp1_yearly_2050_find_subsequent_highest_skill_effect = { + if = { + limit = { diplomacy > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:diplomacy + } + save_scope_value_as = { + name = highest_consort_skill_value + value = diplomacy + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { martial > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:martial + } + save_scope_value_as = { + name = highest_consort_skill_value + value = martial + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { stewardship > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:stewardship + } + save_scope_value_as = { + name = highest_consort_skill_value + value = stewardship + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { intrigue > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:intrigue + } + save_scope_value_as = { + name = highest_consort_skill_value + value = intrigue + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { learning > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:learning + } + save_scope_value_as = { + name = highest_consort_skill_value + value = learning + } + save_scope_as = highest_consort_skill_person + } +} + +scripted_effect bp1_yearly_2050_find_highest_skill_effect = { + scope:bp1_yearly_2050_first_consort = { + save_scope_value_as = { + name = highest_consort_skill + value = flag:diplomacy + } + save_scope_value_as = { + name = highest_consort_skill_value + value = diplomacy + } + save_scope_as = highest_consort_skill_person + if = { + limit = { martial > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:martial + } + save_scope_value_as = { + name = highest_consort_skill_value + value = martial + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { stewardship > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:stewardship + } + save_scope_value_as = { + name = highest_consort_skill_value + value = stewardship + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { intrigue > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:intrigue + } + save_scope_value_as = { + name = highest_consort_skill_value + value = intrigue + } + save_scope_as = highest_consort_skill_person + } + if = { + limit = { learning > scope:highest_consort_skill_value } + save_scope_value_as = { + name = highest_consort_skill + value = flag:learning + } + save_scope_value_as = { + name = highest_consort_skill_value + value = learning + } + save_scope_as = highest_consort_skill_person + } + } + scope:bp1_yearly_2050_second_consort = { + bp1_yearly_2050_find_subsequent_highest_skill_effect = yes + } + if = { + limit = { exists = scope:bp1_yearly_2050_third_consort } + scope:bp1_yearly_2050_third_consort = { + bp1_yearly_2050_find_subsequent_highest_skill_effect = yes + } + } + if = { + limit = { exists = scope:bp1_yearly_2050_fourth_consort } + scope:bp1_yearly_2050_fourth_consort = { + bp1_yearly_2050_find_subsequent_highest_skill_effect = yes + } + } +} + +scripted_effect bp1_yearly_2050_apply_skill_effect = { + scope:bp1_yearly_2050_first_consort = { + add_$SKILL$_skill = 1 + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + scope:bp1_yearly_2050_second_consort = { + add_$SKILL$_skill = 1 + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + if = { + limit = { exists = scope:bp1_yearly_2050_third_consort } + scope:bp1_yearly_2050_third_consort = { + add_$SKILL$_skill = 1 + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } + if = { + limit = { exists = scope:bp1_yearly_2050_fourth_consort } + scope:bp1_yearly_2050_fourth_consort = { + add_$SKILL$_skill = 1 + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } +} + +bp1_yearly.2050 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2050.t + desc = { + first_valid = { + triggered_desc = { + trigger = { has_trait = paranoid } + desc = bp1_yearly.2050.desc_intro_paranoid + } + triggered_desc = { + desc = bp1_yearly.2050.desc_intro + } + } + desc = bp1_yearly.2050.desc + first_valid = { + triggered_desc = { + trigger = { + scope:highest_consort_skill = flag:diplomacy + } + desc = bp1_yearly.2050.desc_diplomacy + } + triggered_desc = { + trigger = { + scope:highest_consort_skill = flag:martial + } + desc = bp1_yearly.2050.desc_martial + } + triggered_desc = { + trigger = { + scope:highest_consort_skill = flag:stewardship + } + desc = bp1_yearly.2050.desc_stewardship + } + triggered_desc = { + trigger = { + scope:highest_consort_skill = flag:intrigue + } + desc = bp1_yearly.2050.desc_intrigue + } + triggered_desc = { + trigger = { + scope:highest_consort_skill = flag:learning + } + desc = bp1_yearly.2050.desc_learning + } + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:bp1_yearly_2050_fourth_consort + } + desc = bp1_yearly.2050.desc_quartet + } + triggered_desc = { + trigger = { + exists = scope:bp1_yearly_2050_third_consort + NOT = { exists = scope:bp1_yearly_2050_fourth_consort } + } + desc = bp1_yearly.2050.desc_trio + } + triggered_desc = { + trigger = { + NOR = { + exists = scope:bp1_yearly_2050_third_consort + exists = scope:bp1_yearly_2050_fourth_consort + } + } + desc = bp1_yearly.2050.desc_duo + } + } + triggered_desc = { + trigger = { has_trait = paranoid } + desc = bp1_yearly.2050.desc_paranoid + } + } + theme = friendly + override_background = { reference = courtyard } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = paranoid } + animation = personality_cynical + } + animation = personality_compassionate + } + right_portrait = { + character = scope:bp1_yearly_2050_first_consort + animation = personality_rational + } + lower_left_portrait = { + trigger = { exists = scope:bp1_yearly_2050_fourth_consort } + character = scope:bp1_yearly_2050_fourth_consort + } + lower_center_portrait = { + trigger = { exists = scope:bp1_yearly_2050_third_consort } + character = scope:bp1_yearly_2050_third_consort + } + lower_right_portrait = { + trigger = { exists = scope:bp1_yearly_2050_second_consort } + character = scope:bp1_yearly_2050_second_consort + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_playable_character = yes + any_consort = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + root = { + any_consort = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:first_consort } + } + } + } + } + weight_multiplier = { + base = 1 + modifier = { + any_consort = { + count >= 3 + } + add = 2 + } + modifier = { + any_consort = { + count = 4 + } + add = 2 + } + modifier = { + any_consort = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + root = { + any_consort = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:first_consort } + } + } + } + add = 2 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Find a consort + random_consort = { + limit = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + root = { + any_consort = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:first_consort } + } + } + } + save_scope_as = bp1_yearly_2050_first_consort + } + #Find our second consort + random_consort = { + limit = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_first_consort } + } + save_scope_as = bp1_yearly_2050_second_consort + } + #Find any additional consort + random_consort = { + limit = { + OR = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_first_consort } + AND = { + exists = scope:bp1_yearly_2050_second_consort + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_second_consort } + } + } + NOR = { + this = scope:bp1_yearly_2050_first_consort + this = scope:bp1_yearly_2050_second_consort + } + } + save_scope_as = bp1_yearly_2050_third_consort + } + random_consort = { + limit = { + OR = { + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_first_consort } + AND = { + exists = scope:bp1_yearly_2050_second_consort + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_second_consort } + } + AND = { + exists = scope:bp1_yearly_2050_third_consort + bp1_yearly_2050_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2050_third_consort } + } + } + NOR = { + this = scope:bp1_yearly_2050_first_consort + this = scope:bp1_yearly_2050_second_consort + this = scope:bp1_yearly_2050_third_consort + } + } + save_scope_as = bp1_yearly_2050_fourth_consort + } + #See who is most knowledgable in the pinpointed skill to lead the teaching + bp1_yearly_2050_find_highest_skill_effect = yes + #If paranoid, this is a traumatic memory + if = { + limit = { + has_trait = paranoid + exists = scope:bp1_yearly_2050_fourth_consort + } + create_character_memory = { + type = ganged_up_on_four_memory + participants = { + consort_1 = scope:bp1_yearly_2050_first_consort + consort_2 = scope:bp1_yearly_2050_second_consort + consort_3 = scope:bp1_yearly_2050_third_consort + consort_4 = scope:bp1_yearly_2050_fourth_consort + } + } + } + #Three consorts + else_if = { + limit = { + has_trait = paranoid + exists = scope:bp1_yearly_2050_third_consort + NOT = { exists = scope:bp1_yearly_2050_fourth_consort } + } + create_character_memory = { + type = ganged_up_on_three_memory + participants = { + consort_1 = scope:bp1_yearly_2050_first_consort + consort_2 = scope:bp1_yearly_2050_second_consort + consort_3 = scope:bp1_yearly_2050_third_consort + } + } + } + } + #Agree to their request + option = { + name = bp1_yearly.2050.a + flavor = bp1_yearly.2050.a_tt + pay_short_term_gold = { + target = scope:highest_consort_skill_person + gold = major_gold_value + } + capital_county = { + add_county_modifier = { + modifier = bp1_yearly_2050_development_modifier + years = 10 + } + } + if = { + limit = { scope:highest_consort_skill = flag:diplomacy } + bp1_yearly_2050_apply_skill_effect = { SKILL = diplomacy } + } + else_if = { + limit = { scope:highest_consort_skill = flag:martial } + bp1_yearly_2050_apply_skill_effect = { SKILL = martial } + } + else_if = { + limit = { scope:highest_consort_skill = flag:stewardship } + bp1_yearly_2050_apply_skill_effect = { SKILL = stewardship } + } + else_if = { + limit = { scope:highest_consort_skill = flag:intrigue } + bp1_yearly_2050_apply_skill_effect = { SKILL = intrigue } + } + else_if = { + limit = { scope:highest_consort_skill = flag:learning } + bp1_yearly_2050_apply_skill_effect = { SKILL = learning } + } + stress_impact = { + greedy = medium_stress_impact_gain + paranoid = minor_stress_impact_gain + generous = miniscule_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + #Compromise? + option = { + name = bp1_yearly.2050.b + flavor = bp1_yearly.2050.b_tt_greedy + trigger = { has_trait = greedy } + pay_short_term_gold = { + target = scope:highest_consort_skill_person + gold = { + value = major_gold_value + multiply = 0.5 + } + } + capital_county = { + add_county_modifier = { + modifier = bp1_yearly_2050_compromise_development_modifier + years = 10 + } + } + stress_impact = { + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + #This is annoying/stressful - imprison them + option = { + name = bp1_yearly.2050.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { has_trait = paranoid } + desc = bp1_yearly.2050.c_tt_paranoid + } + triggered_desc = { + trigger = { + OR = { + has_trait = sadistic + has_trait = wrathful + has_trait = irritable + } + } + desc = bp1_yearly.2050.c_tt_irritable + } + } + } + trigger = { + OR = { + has_trait = sadistic + has_trait = wrathful + has_trait = irritable + has_trait = paranoid + } + } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2050_first_consort IMPRISONER = root } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2050_second_consort IMPRISONER = root } + if = { + limit = { exists = scope:bp1_yearly_2050_third_consort } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2050_third_consort IMPRISONER = root } + } + if = { + limit = { exists = scope:bp1_yearly_2050_fourth_consort } + rightfully_imprison_character_effect = { TARGET = scope:bp1_yearly_2050_fourth_consort IMPRISONER = root } + } + stress_impact = { + paranoid = minor_stress_impact_loss + irritable = minor_stress_impact_loss + just = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + #I don't believe in this + option = { + name = bp1_yearly.2050.d + flavor = bp1_yearly.2050.d_tt + reverse_add_opinion = { + target = scope:bp1_yearly_2050_first_consort + modifier = dismissed_me_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:bp1_yearly_2050_second_consort + modifier = dismissed_me_opinion + opinion = -15 + } + if = { + limit = { exists = scope:bp1_yearly_2050_third_consort } + reverse_add_opinion = { + target = scope:bp1_yearly_2050_third_consort + modifier = dismissed_me_opinion + opinion = -15 + } + } + if = { + limit = { exists = scope:bp1_yearly_2050_fourth_consort } + reverse_add_opinion = { + target = scope:bp1_yearly_2050_fourth_consort + modifier = dismissed_me_opinion + opinion = -15 + } + } + stress_impact = { + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +################################################## +# #Friendly consorts want to tutor other consort's child +# by Filippa Gannholm Kirsten +# #bp1_yearly.2060 +################################################## +scripted_trigger bp1_yearly_2060_is_relevant_child_trigger = { + is_available_ai = yes + is_child_of = root + age > 5 + age < 20 +} + +scripted_trigger bp1_yearly_2060_is_relevant_consort_trigger = { + is_available_ai_adult = yes + NOT = { this = $TARGET$ } + OR = { + has_relation_potential_friend = $TARGET$ + has_relation_friend = $TARGET$ + has_relation_best_friend = $TARGET$ + opinion = { + target = $TARGET$ + value >= medium_positive_opinion + } + } + any_child = { + bp1_yearly_2060_is_relevant_child_trigger = yes + } + highest_skill = $SKILL$ +} + +scripted_trigger bp1_yearly_2060_has_matching_consort_with_highest_skill_trigger = { + is_available_ai_adult = yes + save_temporary_scope_as = first_consort + OR = { + AND = { + highest_skill = diplomacy + root = { + any_consort = { + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:first_consort SKILL = diplomacy } + } + } + } + AND = { + highest_skill = martial + root = { + any_consort = { + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:first_consort SKILL = martial } + highest_skill = martial + } + } + } + AND = { + highest_skill = stewardship + root = { + any_consort = { + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:first_consort SKILL = stewardship } + highest_skill = stewardship + } + } + } + AND = { + highest_skill = intrigue + root = { + any_consort = { + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:first_consort SKILL = intrigue } + highest_skill = intrigue + } + } + } + AND = { + highest_skill = learning + root = { + any_consort = { + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:first_consort SKILL = learning } + highest_skill = learning + } + } + } + } +} + +scripted_effect bp1_yearly_2060_find_high_skill_tutor_effect = { + scope:bp1_yearly_2060_first_consort = { + save_scope_as = bp1_yearly_2060_high_skill_tutoring_consort + } + if = { + limit = { scope:bp1_yearly_2060_second_consort.$SKILL$ > scope:bp1_yearly_2060_high_skill_tutoring_consort.$SKILL$ } + scope:bp1_yearly_2060_second_consort = { + save_scope_as = bp1_yearly_2060_high_skill_tutoring_consort + } + } +} + +scripted_effect bp1_yearly_2060_find_low_skill_tutor_effect = { + scope:bp1_yearly_2060_first_consort = { + save_scope_as = bp1_yearly_2060_low_skill_tutoring_consort + } + if = { + limit = { scope:bp1_yearly_2060_second_consort.$SKILL$ > scope:bp1_yearly_2060_low_skill_tutoring_consort.$SKILL$ } + scope:bp1_yearly_2060_second_consort = { + save_scope_as = bp1_yearly_2060_low_skill_tutoring_consort + } + } +} + +scripted_effect bp1_yearly_2060_bolstered_duel_effect = { + duel = { + skill = $SKILL$ + value = average_skill_rating + 75 = { + desc = bp1_yearly.2060.tt_success + scope:bp1_yearly_2060_target_child = { + add_$SKILL$_skill = 1 + add_opinion = { + target = scope:bp1_yearly_2060_first_consort + modifier = tutored_me_opinion + opinion = 10 + } + add_opinion = { + target = scope:bp1_yearly_2060_second_consort + modifier = tutored_me_opinion + opinion = 10 + } + } + } + 25 = { + desc = bp1_yearly.2060.tt_critical_success + scope:bp1_yearly_2060_target_child = { + add_$SKILL$_skill = 2 + add_opinion = { + target = scope:bp1_yearly_2060_first_consort + modifier = tutored_me_opinion + opinion = 20 + } + add_opinion = { + target = scope:bp1_yearly_2060_second_consort + modifier = tutored_me_opinion + opinion = 20 + } + } + } + } +} + +scripted_effect bp1_yearly_2060_duel_effect = { + duel = { + skill = $SKILL$ + value = average_skill_rating + 75 = { + desc = bp1_yearly.2060.tt_success + scope:bp1_yearly_2060_target_child = { + add_$SKILL$_skill = 1 + add_opinion = { + target = scope:bp1_yearly_2060_first_consort + modifier = tutored_me_opinion + opinion = 20 + } + add_opinion = { + target = scope:bp1_yearly_2060_second_consort + modifier = tutored_me_opinion + opinion = 20 + } + } + } + 25 = { + desc = bp1_yearly.2060.tt_failure + #Nothing happens + } + } +} + +bp1_yearly.2060 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2060.t + desc = { + desc = bp1_yearly.2060.desc_intro + first_valid = { + triggered_desc = { + trigger = { + scope:bp1_yearly_2060_first_consort = { highest_skill = diplomacy } + } + desc = bp1_yearly.2060.desc_diplomacy + } + triggered_desc = { + trigger = { + scope:bp1_yearly_2060_first_consort = { highest_skill = martial } + } + desc = bp1_yearly.2060.desc_martial + } + triggered_desc = { + trigger = { + scope:bp1_yearly_2060_first_consort = { highest_skill = stewardship } + } + desc = bp1_yearly.2060.desc_stewardship + } + triggered_desc = { + trigger = { + scope:bp1_yearly_2060_first_consort = { highest_skill = intrigue } + } + desc = bp1_yearly.2060.desc_intrigue + } + triggered_desc = { + trigger = { + scope:bp1_yearly_2060_first_consort = { highest_skill = learning } + } + desc = bp1_yearly.2060.desc_learning + } + } + desc = bp1_yearly.2060.desc_outro + } + theme = family + override_background = { reference = corridor_day } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = paranoid } + animation = personality_cynical + } + animation = personality_rational + } + right_portrait = { + character = scope:bp1_yearly_2060_first_consort + animation = happiness + } + lower_center_portrait = { + trigger = { exists = scope:bp1_yearly_2060_target_child } + character = scope:bp1_yearly_2060_target_child + } + lower_right_portrait = { + trigger = { exists = scope:bp1_yearly_2060_second_consort } + character = scope:bp1_yearly_2060_second_consort + } + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_playable_character = yes + any_consort = { bp1_yearly_2060_has_matching_consort_with_highest_skill_trigger = yes } + } + weight_multiplier = { + base = 1 + #The more the merrier + modifier = { + any_consort = { + count >= 3 + } + add = 2 + } + modifier = { + any_consort = { + count = 4 + } + add = 2 + } + modifier = { + any_consort = { + has_trait = gregarious + } + add = 2 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Find a consort + random_consort = { + limit = { bp1_yearly_2060_has_matching_consort_with_highest_skill_trigger = yes } + save_scope_as = bp1_yearly_2060_first_consort + } + #Find our second consort + random_consort = { + limit = { + OR = { + AND = { + scope:bp1_yearly_2060_first_consort = { highest_skill = diplomacy } + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2060_first_consort SKILL = diplomacy } + } + AND = { + scope:bp1_yearly_2060_first_consort = { highest_skill = martial } + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2060_first_consort SKILL = martial } + } + AND = { + scope:bp1_yearly_2060_first_consort = { highest_skill = stewardship } + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2060_first_consort SKILL = stewardship } + } + AND = { + scope:bp1_yearly_2060_first_consort = { highest_skill = intrigue } + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2060_first_consort SKILL = intrigue } + } + AND = { + scope:bp1_yearly_2060_first_consort = { highest_skill = learning } + bp1_yearly_2060_is_relevant_consort_trigger = { TARGET = scope:bp1_yearly_2060_first_consort SKILL = learning } + } + } + } + save_scope_as = bp1_yearly_2060_second_consort + } + #Find a child + scope:bp1_yearly_2060_second_consort = { + random_child = { + limit = { bp1_yearly_2060_is_relevant_child_trigger = yes } + save_scope_as = bp1_yearly_2060_target_child + } + } + #For localization + scope:bp1_yearly_2060_target_child = { + bp1_yearly_2030_get_lowest_skill_effect = yes + switch = { + trigger = scope:lowest_character_skill + flag:diplomacy = { add_character_flag = bp1_yearly_2060_diplomacy_lowest_skill } + flag:martial = { add_character_flag = bp1_yearly_2060_martial_lowest_skill } + flag:stewardship = { add_character_flag = bp1_yearly_2060_stewardship_lowest_skill } + flag:intrigue = { add_character_flag = bp1_yearly_2060_intrigue_lowest_skill } + flag:learning = { add_character_flag = bp1_yearly_2060_learning_lowest_skill } + } + } + #For determining which options to show, so we don't have Diplomacy on both options for instance + scope:bp1_yearly_2060_first_consort = { + switch = { + trigger = highest_skill + diplomacy = { + save_scope_value_as = { + name = consort_compare_skill + value = flag:diplomacy + } + } + martial = { + save_scope_value_as = { + name = consort_compare_skill + value = flag:martial + } + } + stewardship = { + save_scope_value_as = { + name = consort_compare_skill + value = flag:stewardship + } + } + intrigue = { + save_scope_value_as = { + name = consort_compare_skill + value = flag:intrigue + } + } + learning = { + save_scope_value_as = { + name = consort_compare_skill + value = flag:learning + } + } + } + } + #Find the consort with highest level of the intended skill for the duel + scope:bp1_yearly_2060_first_consort = { + switch = { + trigger = highest_skill + diplomacy = { + bp1_yearly_2060_find_high_skill_tutor_effect = { SKILL = diplomacy } + } + martial = { + bp1_yearly_2060_find_high_skill_tutor_effect = { SKILL = martial } + } + stewardship = { + bp1_yearly_2060_find_high_skill_tutor_effect = { SKILL = stewardship } + } + intrigue = { + bp1_yearly_2060_find_high_skill_tutor_effect = { SKILL = intrigue } + } + learning = { + bp1_yearly_2060_find_high_skill_tutor_effect = { SKILL = learning } + } + } + } + #If the consort skill and the child skill are different, determine which consort has highest skill in the child skill and appoint them + if = { + limit = { + scope:consort_compare_skill != scope:lowest_character_skill + } + switch = { + trigger = scope:lowest_character_skill + flag:diplomacy = { + bp1_yearly_2060_find_low_skill_tutor_effect = { SKILL = diplomacy } + } + flag:martial = { + bp1_yearly_2060_find_low_skill_tutor_effect = { SKILL = martial } + } + flag:stewardship = { + bp1_yearly_2060_find_low_skill_tutor_effect = { SKILL = stewardship } + } + flag:intrigue = { + bp1_yearly_2060_find_low_skill_tutor_effect = { SKILL = intrigue } + } + flag:learning = { + bp1_yearly_2060_find_low_skill_tutor_effect = { SKILL = learning } + } + } + } + } + #Let's go with the consort skill + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_trait = paranoid } + desc = bp1_yearly.2060.a_paranoid + } + triggered_desc = { + desc = bp1_yearly.2060.a + } + } + } + } + #Who knows what else they're indoctrinating... + flavor = { + triggered_desc = { + trigger = { has_trait = paranoid } + desc = bp1_yearly.2060.a_tt_paranoid + } + } + scope:bp1_yearly_2060_high_skill_tutoring_consort = { + switch = { + trigger = highest_skill + diplomacy = { + bp1_yearly_2060_bolstered_duel_effect = { SKILL = diplomacy } + } + martial = { + bp1_yearly_2060_bolstered_duel_effect = { SKILL = martial } + } + stewardship = { + bp1_yearly_2060_bolstered_duel_effect = { SKILL = stewardship } + } + intrigue = { + bp1_yearly_2060_bolstered_duel_effect = { SKILL = intrigue } + } + learning = { + bp1_yearly_2060_bolstered_duel_effect = { SKILL = learning } + } + } + } + stress_impact = { + paranoid = minor_stress_impact_gain + arrogant = miniscule_stress_impact_gain + trusting = miniscule_stress_impact_loss + } + ai_chance = { + base = 10 + #Paranoid be paranoid + modifier = { + has_trait = paranoid + add = -50 + } + modifier = { + has_trait = arrogant + add = -15 + } + #Trusting and liking the intiating consort is beneficial + modifier = { + has_trait = trusting + add = 20 + } + opinion_modifier = { + opinion_target = scope:bp1_yearly_2060_high_skill_tutoring_consort + multiplier = -1 + } + ai_value_modifier = { + ai_rationality = 1 + ai_honor = 0.5 + } + } + } + #Actually, please educate the child in it's lowest skill + option = { + name = bp1_yearly.2060.b + trigger = { + scope:consort_compare_skill != scope:lowest_character_skill + } + scope:bp1_yearly_2060_low_skill_tutoring_consort = { + switch = { + trigger = scope:lowest_character_skill + flag:diplomacy = { + bp1_yearly_2060_duel_effect = { SKILL = diplomacy } + } + flag:martial = { + bp1_yearly_2060_duel_effect = { SKILL = martial } + } + flag:stewardship = { + bp1_yearly_2060_duel_effect = { SKILL = stewardship } + } + flag:intrigue = { + bp1_yearly_2060_duel_effect = { SKILL = intrigue } + } + flag:learning = { + bp1_yearly_2060_duel_effect = { SKILL = learning } + } + } + } + ai_chance = { + base = 5 + #Paranoid be paranoid + modifier = { + has_trait = paranoid + add = -50 + } + modifier = { + has_trait = arrogant + add = -15 + } + #Trusting and liking the intiating consort is beneficial + modifier = { + has_trait = trusting + add = 20 + } + #They prefer the other consort + opinion_modifier = { + opinion_target = scope:bp1_yearly_2060_low_skill_tutoring_consort + multiplier = -1 + } + ai_value_modifier = { + ai_rationality = 1 + ai_honor = 0.5 + } + } + } + #If the consort's highest skill and the child's lowest skill are the same, opt out + option = { + name = bp1_yearly.2060.c + trigger = { scope:consort_compare_skill = scope:lowest_character_skill } + reverse_add_opinion = { + target = scope:bp1_yearly_2060_first_consort + modifier = dismissed_me_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:bp1_yearly_2060_second_consort + modifier = dismissed_me_opinion + opinion = -15 + } + stress_impact = { + ambitious = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 5 + #Paranoid be paranoid + modifier = { + has_trait = paranoid + add = 50 + } + modifier = { + has_trait = ambitious + add = -25 + } + modifier = { + has_trait = trusting + add = -20 + } + opinion_modifier = { + opinion_target = scope:bp1_yearly_2060_first_consort + multiplier = 1 + } + } + } + after = { + scope:bp1_yearly_2060_target_child = { + remove_character_flag = bp1_yearly_2060_diplomacy_lowest_skill + remove_character_flag = bp1_yearly_2060_martial_lowest_skill + remove_character_flag = bp1_yearly_2060_stewardship_lowest_skill + remove_character_flag = bp1_yearly_2060_intrigue_lowest_skill + remove_character_flag = bp1_yearly_2060_learning_lowest_skill + } + } +} + +################################################## +# #Childless older spouse ponders your relationship +# by Filippa Gannholm Kirsten +# #bp1_yearly.2070 +################################################## +bp1_yearly.2070 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.2070.t + desc = bp1_yearly.2070.desc + theme = love + override_background = { reference = wilderness } + left_portrait = { + character = root + animation = love + } + right_portrait = { + character = scope:bp1_yearly_2070_soulmate + animation = sadness + } + trigger = { + #DLC check + has_bp1_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_playable_character = yes + NOT = { has_character_flag = had_event_bp1_yearly_2070 } + any_consort = { + is_available_ai_adult = yes + has_relation_soulmate = root + is_attracted_to_gender_of = root + OR = { + has_sexuality = homosexual + fertility <= 0.1 + } + age > 40 + opinion = { + target = root + value >= 90 + } + NOT = { + any_child = { exists = this } + } + } + } + immediate = { + #play_music_cue = "mx_cue_touching_moment" + #You only get this once in a lifetime. + add_character_flag = had_event_bp1_yearly_2070 + #Find a consort + random_consort = { + limit = { + is_available_ai_adult = yes + has_relation_soulmate = root + is_attracted_to_gender_of = root + opinion = { + target = root + value >= 90 + } + NOT = { + any_child = { exists = this } + } + OR = { + has_sexuality = homosexual + fertility <= 0.1 + } + age > 40 + } + save_scope_as = bp1_yearly_2070_soulmate + } + create_character_memory = { + type = childless_soulmate_memory + participants = { + childless_soulmate = scope:bp1_yearly_2070_soulmate + } + } + } + #I got to spend all of this time with _you_ + option = { + name = bp1_yearly.2070.a + flavor = bp1_yearly.2070.a_tt + add_character_modifier = { + modifier = bp1_yearly_2070_accepting_modifier + } + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + #It was simply not HighGods will + option = { + name = bp1_yearly.2070.b + flavor = bp1_yearly.2070.b_tt + trigger = { + NOR = { + has_sexuality = homosexual + scope:bp1_yearly_2070_soulmate = { has_sexuality = homosexual } + } + } + add_character_modifier = { + modifier = bp1_yearly_2070_zealous_modifier + } + stress_impact = { + zealous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + #You and I both know that is for the best + option = { + name = bp1_yearly.2070.c + flavor = bp1_yearly.2070.c_tt + trigger = { + OR = { + has_trait = cynical + scope:bp1_yearly_2070_soulmate = { has_trait = cynical } + } + } + add_character_modifier = { + modifier = bp1_yearly_2070_cynicism_modifier + } + stress_impact = { + cynical = medium_stress_impact_loss + } + ai_chance = { + base = 100 + } + } +} diff --git a/events/dlc/bp1/bp1_yearly_oltner.txt b/events/dlc/bp1/bp1_yearly_oltner.txt new file mode 100644 index 00000000..a29d5558 --- /dev/null +++ b/events/dlc/bp1/bp1_yearly_oltner.txt @@ -0,0 +1,2305 @@ +namespace = bp1_yearly + +scripted_trigger appropriate_family_memory = { + has_memory_category = family + has_memory_category = positive + any_memory_participant = { + house ?= root.house + NOT = { + has_relation_rival = root + } + trigger_if = { + limit = { + is_alive = no + exists = killer + } + killer != root + } + } +} + +# Reflect over a family memory +bp1_yearly.4000 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.4000.t + desc = { + desc = bp1_yearly.4000.desc + first_valid = { + triggered_desc = { + trigger = { + scope:family_memory_participant = { is_alive = yes } + } + desc = bp1_yearly.4000.desc.alive + } + desc = bp1_yearly.4000.desc.dead + } + desc = bp1_yearly.4000.desc_end + } + + theme = family + + override_background = { + trigger = { + is_landed = yes + } + reference = corridor_day + } + override_background = { + trigger = { + is_landed = no + } + reference = bp1_bonfire + } + override_background = { + trigger = { + has_government = nomad_government + } + reference = mpo_campfire_steppe + } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = yes } + } + animation = happiness + } + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = no } + } + animation = grief + } + } + + right_portrait = { + character = scope:family_memory_participant + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = yes } + } + animation = happiness + } + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = no } + } + animation = pain + } + } + + cooldown = { years = 5 } + + trigger = { + has_bp1_dlc_trigger = yes + exists = root.house + stress > 0 + NOR = { + # Not a psychopath + has_trait = callous + has_trait = sadistic + } + any_memory = { + appropriate_family_memory = yes + } + } + + immediate = { + random_memory = { + limit = { + appropriate_family_memory = yes + } + save_scope_as = family_memory + random_memory_participant = { + limit = { + house ?= root.house + NOT = { + has_relation_rival = root + } + trigger_if = { + limit = { + is_alive = no + exists = killer + } + killer != root + } + } + save_scope_as = family_memory_participant + } + } + } + + option = { + name = bp1_yearly.4000.family_first + trait = family_first + trigger = { + has_trait = family_first + } + dynasty = { add_dynasty_prestige = minor_dynasty_prestige_gain } + stress_impact = { + base = minor_stress_impact_loss + #honest = minor_stress_impact_gain + #compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1000 + } + } + + option = { + name = bp1_yearly.4000.a + trigger = { + scope:family_memory_participant = { + is_alive = no + } + } + stress_impact = { + base = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { + name = bp1_yearly.4000.b + trigger = { + scope:family_memory_participant = { + is_alive = yes + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + option = { + name = bp1_yearly.4000.c + trigger = { + scope:family_memory_participant = { + is_alive = no + } + } + duel = { + skill = diplomacy + value = 10 + 50 = { + desc = bp1_yearly.4000.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + save_scope_as = success_poem + trigger_event = bp1_yearly.4001 + show_as_tooltip = { + add_stress = minor_stress_impact_loss + every_close_family_member = { + custom = yearly_persian.1101.every_family + limit = { this != root } + add_opinion = { + modifier = pleased_opinion + opinion = 30 + target = root + } + } + } + } + 50 = { + desc = bp1_yearly.4000.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + save_scope_as = fail_poem + trigger_event = bp1_yearly.4001 + show_as_tooltip = { + add_stress = medium_stress_impact_gain + } + } + } + stress_impact = { + shy = major_stress_impact_gain + cynical = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = cynical + } + } + } + } + + option = { + name = bp1_yearly.4000.d + trigger = { + scope:family_memory_participant = { + is_alive = yes + } + } + pay_short_term_gold = { + target = scope:family_memory_participant + gold = minor_gold_value + } + scope:family_memory_participant = { + progress_towards_friend_effect = { + CHARACTER = root + OPINION = 0 + REASON = friend_gift_house + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + } + + stress_impact = { + base = minor_stress_impact_loss + greedy = major_stress_impact_gain + arrogant = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 25 + modifier = { + factor = 0 + gold < major_gold_value + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = honest + has_trait = arbitrary + } + } + } + } +} + +# Family poem +bp1_yearly.4001 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.4000.t + desc = { + desc = bp1_yearly.4001.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:success_poem + } + desc = bp1_yearly.4001.desc.success_poem + } + desc = bp1_yearly.4001.desc.fail_poem + } + } + + theme = family + + override_background = { reference = corridor_day } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:success_poem + } + animation = chancellor + } + triggered_animation = { + trigger = { + exists = scope:fail_poem + } + animation = stress + } + } + + right_portrait = { + character = scope:family_memory_participant + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = yes } + } + animation = happiness + } + triggered_animation = { + trigger = { + scope:family_memory_participant = { is_alive = no } + } + animation = pain + } + } + + immediate = { + select_poem_subject_gender_effect = { + SUBJECT = flag:specific + SUBJECT_TARGET = scope:family_memory_participant + } + select_poem_theme_mourning_effect = yes + } + + option = { + name = bp1_yearly.4001.a + trigger = { + exists = scope:success_poem + } + add_stress = minor_stress_impact_loss + every_close_family_member = { + custom = yearly_persian.1101.every_family + limit = { this != root } + add_opinion = { + modifier = pleased_opinion + opinion = 30 + target = root + } + } + if = { + limit = { + NOT = { + has_trait = lifestyle_poet + } + } + random = { + chance = 20 + add_trait = lifestyle_poet + } + } + } + + option = { + name = bp1_yearly.4001.b + trigger = { + exists = scope:fail_poem + } + add_stress = medium_stress_impact_gain + } +} + +scripted_trigger appropriate_mother = { + mother ?= { + appropriate_other_parent_trigger = yes + } +} + +scripted_trigger appropriate_father = { + father ?= { + appropriate_other_parent_trigger = yes + } +} + +scripted_trigger disliked_guardian_trigger = { + NOR = { + this = scope:child_other_parent + has_relation_friend = scope:child_other_parent + has_relation_lover = scope:child_other_parent + reverse_opinion = { + target = scope:child_other_parent + value >= 60 + } + } + OR = { + has_relation_rival = scope:child_other_parent + reverse_opinion = { + target = scope:child_other_parent + value <= -30 + } + has_trait = intellect_bad + learning < 8 + AND = { + has_trait = sadistic + scope:child_other_parent = { + NOT = { + has_trait = sadistic + } + } + } + } +} + +scripted_trigger appropriate_other_parent_trigger = { + this != root + is_spouse_of = root + is_courtier_of = root + is_available_ai_adult = yes + save_temporary_scope_as = child_other_parent + OR = { + any_relation = { + type = friend + OR = { + desired_guardian_trigger = yes + any_courtier = { + desired_guardian_trigger = yes + } + any_councillor = { + desired_guardian_trigger = yes + } + } + } + any_relation = { + type = lover + OR = { + desired_guardian_trigger = yes + any_courtier = { + desired_guardian_trigger = yes + } + any_councillor = { + desired_guardian_trigger = yes + } + } + } + any_close_family_member = { + desired_guardian_trigger = yes + } + root = { + any_courtier = { + desired_guardian_trigger = yes + } + } + root = { + any_councillor = { + desired_guardian_trigger = yes + } + } + } +} + +scripted_trigger desired_guardian_trigger = { + is_physically_able_adult = yes + num_of_relation_ward < 2 + OR = { + is_ruler = yes + exists = liege + } + reverse_opinion = { + target = scope:child_other_parent + value >= 30 + } + NOR = { + this = root + this = scope:child_other_parent + has_trait = sadistic + has_relation_rival = scope:child_other_parent + reverse_opinion = { + target = scope:child_other_parent + value <= -30 + } + has_trait = intellect_bad + learning < 8 + } + OR = { + learning >= 12 + has_trait = intellect_good + has_relation_friend = scope:child_other_parent + has_relation_lover = scope:child_other_parent + } +} + +scripted_trigger appropriate_guardian_child_trigger = { + age <= 12 + is_physically_able = yes + exists = liege + NOT = { + has_character_flag = replaced_guardian + } + OR = { + AND = { + OR = { + root.faith = { has_doctrine = doctrine_gender_male_dominated } + NOR = { + root.faith = { has_doctrine = doctrine_gender_male_dominated } + root.faith = { has_doctrine = doctrine_gender_female_dominated } + } + } + appropriate_mother = yes + any_relation = { type = guardian } + any_relation = { + type = guardian + disliked_guardian_trigger = yes + } + } + AND = { + OR = { + root.faith = { has_doctrine = doctrine_gender_female_dominated } + NOR = { + root.faith = { has_doctrine = doctrine_gender_male_dominated } + root.faith = { has_doctrine = doctrine_gender_female_dominated } + } + } + appropriate_father = yes + any_relation = { type = guardian } + any_relation = { + type = guardian + disliked_guardian_trigger = yes + } + } + } +} + +scripted_effect select_new_guardian_effect = { + every_relation = { + type = friend + if = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + every_courtier = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + every_councillor = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + } + every_relation = { + type = lover + if = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + every_courtier = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + every_councillor = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + } + every_close_family_member = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + root = { + every_courtier = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + every_councillor = { + limit = { + desired_guardian_trigger = yes + } + add_to_list = proposed_guardians + } + } + random_in_list = { + list = proposed_guardians + weight = { + base = 1 + modifier = { + add = 5 + OR = { + has_relation_friend = scope:child_other_parent + has_relation_lover = scope:child_other_parent + } + } + modifier = { + add = 5 + this.dynasty = scope:child_other_parent.dynasty + } + modifier = { + add = 2 + has_education_rank_4_trigger = yes + } + modifier = { + add = 1 + has_education_rank_3_trigger = yes + } + } + save_scope_as = proposed_guardian + } +} + +# Spouse demands their child gets a better guardian +bp1_yearly.4010 = { + type = character_event + content_source = dlc_006 + title = bp1_yearly.4010.t + desc = { + desc = bp1_yearly.4010.desc + first_valid = { + triggered_desc = { + trigger = { + scope:current_guardian = { + this = root + } + } + desc = bp1_yearly.4010.desc.root + } + desc = bp1_yearly.4010.desc.other + } + desc = bp1_yearly.4010.desc_end + } + + theme = family + + override_background = { reference = throne_room } + + left_portrait = { + character = scope:parent_that_want_guardian_change + animation = worry + } + + right_portrait = { + character = scope:child_to_change_guardian + animation = personality_irrational + } + + lower_left_portrait = scope:proposed_guardian + lower_right_portrait = scope:current_guardian + + cooldown = { years = 5 } + + trigger = { + trigger_if = { + limit = { + is_ai = yes + } + has_trait = family_first + } + has_bp1_dlc_trigger = yes + any_child = { + appropriate_guardian_child_trigger = yes + } + } + + immediate = { + random_child = { + limit = { + appropriate_guardian_child_trigger = yes + } + save_scope_as = child_to_change_guardian + if = { + limit = { + OR = { + root.faith = { has_doctrine = doctrine_gender_male_dominated } + NOR = { + root.faith = { has_doctrine = doctrine_gender_male_dominated } + root.faith = { has_doctrine = doctrine_gender_female_dominated } + } + } + appropriate_mother = yes + any_relation = { type = guardian } + any_relation = { + type = guardian + disliked_guardian_trigger = yes + } + } + mother = { + save_scope_as = parent_that_want_guardian_change + } + } + else = { + father = { + save_scope_as = parent_that_want_guardian_change + } + } + random_relation = { + type = guardian + save_scope_as = current_guardian + } + scope:parent_that_want_guardian_change = { + save_temporary_scope_as = child_other_parent + select_new_guardian_effect = yes + } + } + + scope:child_to_change_guardian = { + save_scope_as = ward + scope:proposed_guardian = { save_scope_as = guardian } + scope:child_to_change_guardian.liege = { save_scope_as = ward_liege } + scope:proposed_guardian.liege = { save_scope_as = guardian_liege } + } + hidden_effect = { + scope:parent_that_want_guardian_change = { + progress_towards_rival_effect = { + CHARACTER = scope:current_guardian + REASON = rival_guardian_change + OPINION = 0 + } + add_opinion = { + target = scope:current_guardian + modifier = annoyed_opinion + opinion = -30 + } + random = { # Become full-on rivals + chance = 25 + progress_towards_rival_effect = { + CHARACTER = scope:current_guardian + REASON = rival_guardian_change + OPINION = 0 + } + } + } + } + } + + option = { + name = bp1_yearly.4010.c + trait = family_first + trigger = { + has_trait = family_first + } + custom_tooltip = bp1_yearly.4010.c_effect + hidden_effect = { + scope:child_to_change_guardian = { + education_point_acquisition_effect = yes + education_point_acquisition_effect = yes + } + } + scope:parent_that_want_guardian_change = { + add_opinion = { + target = root + modifier = relieved_opinion + opinion = 30 + } + } + ai_chance = { + base = 1000 + } + } + + option = { # Agree to switch guardians + name = bp1_yearly.4010.a + + remove_guardian_effect = { + GUARDIAN = scope:current_guardian + WARD = scope:child_to_change_guardian + RETURN_WARD = no + HIDE_OPINION = yes + } + if = { + limit = { + scope:child_to_change_guardian.liege != root + scope:current_guardian = { + is_ruler = no + } + } + scope:child_to_change_guardian.liege = { + add_opinion = { + modifier = insulted_opinion + target = root + opinion = -30 + } + } + } + scope:current_guardian = { + if = { + limit = { + this != root + } + add_opinion = { + modifier = insult_opinion + target = root + opinion = -30 + } + } + } + + educate_child_event_effect = yes + + hidden_effect = { + send_interface_message = { + type = event_childhood_neutral + title = educate_child_interaction_notification + left_icon = scope:guardian + right_icon = scope:ward + show_as_tooltip = { + educate_child_event_effect = yes + } + } + } + + scope:parent_that_want_guardian_change = { + add_opinion = { + target = root + modifier = relieved_opinion + opinion = 30 + } + } + + scope:child_to_change_guardian = { + random = { + chance = { + value = 0 + add = scope:proposed_guardian.learning + multiply = 4 + } + custom_tooltip = bp1_yearly.4010.a_effect + hidden_effect = { + education_point_acquisition_effect = yes + } + } + } + + hidden_effect = { + scope:proposed_guardian = { + add_character_flag = replaced_guardian + if = { # Chance of ulterior motives + limit = { + can_add_hook = { + type = loyalty_hook + target = scope:child_to_change_guardian + } + } + random = { + chance = { + value = 0 + add = scope:proposed_guardian.intrigue + multiply = 2 + } + add_hook = { + type = loyalty_hook + target = scope:child_to_change_guardian + } + } + } + } + } + + stress_impact = { + arrogant = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 75 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = stubborn + has_trait = paranoid + } + } + } + } + + option = { + name = bp1_yearly.4010.b + name = { + trigger = { scope:current_guardian = { this != root } } + text = bp1_yearly.4010.b + } + name = { + trigger = { scope:current_guardian = { this = root } } + text = bp1_yearly.4010.b_alt + } + + scope:parent_that_want_guardian_change = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -25 + } + } + stress_impact = { + trusting = massive_stress_impact_gain + compassionate = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + ai_chance = { + base = 25 + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = fickle + } + } + } + } +} + +bp1_yearly.4020 = { # Friend commissions a piece of poetry commemorating one of your victories + type = character_event + content_source = dlc_006 + title = bp1_yearly.4020.t + desc = bp1_yearly.4020.desc + + theme = friend_relation + + override_background = { reference = garden } + + left_portrait = { + character = root + animation = happiness + } + + right_portrait = { + character = scope:poetry_friend + animation = chancellor + } + + artifact = { # To display the artifact in the event-window + target = scope:newly_created_artifact + position = lower_center_portrait + } + + lower_right_portrait = scope:war_memory_participant + + cooldown = { years = 25 } + + trigger = { + has_bp1_dlc_trigger = yes + any_relation = { + type = friend + is_available_ai_adult = yes + OR = { + has_trait = lifestyle_poet + diplomacy >= 8 + } + save_temporary_scope_as = friend_check + } + any_memory = { + memory_type = war_won + NOT = { + any_memory_participant = { + this = scope:friend_check + } + } + any_memory_participant = { + this != root + } + } + } + + immediate = { + random_relation = { + type = friend + limit = { + is_available_ai_adult = yes + OR = { + has_trait = lifestyle_poet + diplomacy >= 8 + } + } + weight = { + base = 1 + modifier = { + add = 100 + has_trait = lifestyle_poet + } + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + modifier = { + add = diplomacy + } + } + if = { + limit = { + NOT = { + has_trait = lifestyle_poet + } + } + random = { + chance = { + value = diplomacy + multiply = 2 + } + add_trait = lifestyle_poet + } + } + save_scope_as = poetry_friend + } + random_memory = { + memory_type = war_won + limit = { + NOT = { + any_memory_participant = { + this = scope:poetry_friend + } + } + any_memory_participant = { + this != root + } + } + save_scope_as = war_memory + random_memory_participant = { + limit = { + NOR = { + this = scope:poetry_friend + this = root + } + } + save_scope_as = war_memory_participant + } + } + scope:poetry_friend = { + select_poem_subject_gender_effect = { + SUBJECT = flag:specific + SUBJECT_TARGET = root + } + select_poem_theme_strife_effect = yes + } + hidden_effect_new_object = { + create_artifact_poetry_effect = { OWNER = root } + scope:newly_created_artifact = { + save_scope_as = poetry_artifact + } + } + } + + option = { + name = bp1_yearly.4020.a + + trigger = { + has_royal_court = yes + } + + scope:poetry_friend = { + if = { + limit = { + can_set_relation_best_friend_trigger = { CHARACTER = root } + } + set_relation_best_friend = { reason = best_friend_poetry copy_reason = friend target = root } + } + add_opinion = { + target = root + modifier = flattered_opinion + opinion = 30 + } + } + + custom_tooltip = bp1_yearly.4020.a_effect + + remove_short_term_gold = minor_gold_value + + hidden_effect_new_object = { + scope:newly_created_artifact = { + add_scaled_artifact_modifier_grandeur_small_effect = yes + + reforge_artifact = { + type = pedestal + } + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + gold < major_gold_value + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = shy + } + } + } + } + + option = { + name = bp1_yearly.4020.b + + scope:poetry_friend = { + add_opinion = { + target = root + modifier = friendliness_opinion + opinion = 15 + } + } + + custom_tooltip = bp1_yearly.4020.b_effect + + ai_chance = { + base = 100 + } + } + + option = { + name = bp1_yearly.4020.c + + trigger = { + exists = scope:war_memory_participant + scope:war_memory_participant = { + is_alive = yes + } + } + + add_prestige = major_prestige_gain + + scope:war_memory_participant = { + progress_towards_rival_effect = { + CHARACTER = root + REASON = rival_war_memory + OPINION = 0 + } + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -30 + } + } + + custom_tooltip = bp1_yearly.4020.b_effect + + stress_impact = { + forgiving = massive_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = compassionate + } + } + } + } + + option = { + name = bp1_yearly.4020.d + + destroy_artifact = scope:newly_created_artifact + + add_piety = major_piety_gain + + scope:poetry_friend = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + + stress_impact = { + arrogant = massive_stress_impact_gain + cynical = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 25 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = cynical + has_trait = ambitious + } + } + } + } +} + +scripted_trigger marriage_rival_trigger = { + is_available_ai_adult = yes + is_married = no + is_concubine = no + can_marry_trigger = yes + OR = { + is_male = yes + age <= 40 + } + + OR = { + has_trait = seducer + has_trait = schemer + has_trait = diplomat + has_trait = lustful + has_trait = vengeful + has_trait = ambitious + has_trait = beauty_good + has_trait = physique_good + intrigue >= 10 + diplomacy >= 10 + } + + NOR = { + has_trait = honest + AND = { + exists = dynasty + exists = root.dynasty + dynasty = root.dynasty + } + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + + save_temporary_scope_as = rival_check +} + +scripted_trigger appopriate_vassal_trigger = { + primary_title.tier >= tier_county + is_available_ai_adult = yes + OR = { + AND = { + exists = scope:rival_check + is_attracted_to_gender_of = scope:rival_check + } + AND = { + exists = scope:marriage_rival + is_attracted_to_gender_of = scope:marriage_rival + } + } + OR = { + AND = { + exists = scope:rival_check + could_marry_character_trigger = { CHARACTER = scope:rival_check } + } + AND = { + exists = scope:marriage_rival + could_marry_character_trigger = { CHARACTER = scope:marriage_rival } + } + } + + NOR = { + has_trait = content + has_trait = chaste + has_trait = loyal + AND = { + exists = scope:rival_check + this = scope:rival_check + } + AND = { + exists = scope:marriage_rival + this = scope:marriage_rival + } + AND = { + exists = dynasty + exists = root.dynasty + dynasty = root.dynasty + } + has_relation_rival = root + has_relation_friend = root + has_relation_lover = root + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + AND = { + primary_spouse ?= { + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + AND = { + exists = dynasty + exists = root.dynasty + dynasty = root.dynasty + } + } + } + } + AND = { + betrothed ?= { + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + AND = { + exists = dynasty + exists = root.dynasty + dynasty = root.dynasty + } + } + } + } + } +} + +bp1_yearly.4030 = { # Rival nestles their way into marrying one of your vassals, turns them disloyal + type = character_event + content_source = dlc_006 + title = bp1_yearly.4030.t + desc = { + desc = bp1_yearly.4030.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:spurned_partner + } + desc = bp1_yearly.4030.desc_bond_broken + } + desc = bp1_yearly.4030.desc_no_broken_bonds + } + desc = bp1_yearly.4030.desc_end + } + + theme = rival_relation + + override_background = { reference = throne_room } + + left_portrait = { + character = scope:marriage_rival + animation = scheme + } + + right_portrait = { + character = scope:marriage_vassal + animation = flirtation + } + + lower_right_portrait = scope:spurned_partner + + cooldown = { years = 25 } + + trigger = { + has_bp1_dlc_trigger = yes + any_relation = { + type = rival + marriage_rival_trigger = yes + } + any_vassal = { + appopriate_vassal_trigger = yes + } + } + + immediate = { + random_relation = { + type = rival + limit = { + marriage_rival_trigger = yes + } + weight = { + base = 1 + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + } + save_scope_as = marriage_rival + } + random_vassal = { + limit = { + appopriate_vassal_trigger = yes + } + weight = { + base = 1 + modifier = { + add = 1000 + is_married = no + } + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + } + save_scope_as = marriage_vassal + } + + scope:marriage_vassal = { + if = { + limit = { + is_married = yes + } + primary_spouse = { + save_scope_as = spurned_partner + hidden_effect = { + add_opinion = { + modifier = divorced_me_opinion + target = scope:marriage_vassal + } + } + } + divorce = primary_spouse + } + else_if = { + limit = { + is_betrothed = yes + } + betrothed = { + save_scope_as = spurned_partner + hidden_effect = { + add_opinion = { + modifier = broke_betrothal_opinion + target = scope:marriage_vassal + } + } + } + break_betrothal = betrothed + } + + if = { + limit = { + is_female = yes + scope:marriage_rival = { + is_lowborn = yes + } + } + marry_matrilineal = scope:marriage_rival + } + else = { + marry = scope:marriage_rival + } + add_trait = disloyal + add_opinion = { + modifier = distrustful + target = root + } + } + } + + option = { + name = bp1_yearly.4030.a + + duel = { + skill = diplomacy + value = scope:marriage_vassal.diplomacy + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = bp1_yearly.4030.a.success + + send_interface_toast = { + title = bp1_yearly.4030.a.success + left_icon = scope:marriage_vassal + scope:marriage_vassal = { + remove_opinion = { + target = root + modifier = distrustful + } + remove_trait = disloyal + add_trait_force_tooltip = loyal + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = bp1_yearly.4030.a.failure + + send_interface_toast = { + title = bp1_yearly.4030.a.failure + left_icon = scope:marriage_vassal + scope:marriage_vassal = { + progress_towards_rival_effect = { + CHARACTER = root + REASON = rival_seduced_vassal + OPINION = 0 + } + } + } + } + } + + stress_impact = { + shy = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = forgiving + } + } + } + } + + option = { + name = bp1_yearly.4030.b + + trigger = { + exists = scope:spurned_partner + } + + duel = { + skill = learning + value = scope:marriage_vassal.learning + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = bp1_yearly.4030.b.success + + send_interface_toast = { + title = bp1_yearly.4030.b.success + left_icon = scope:marriage_vassal + scope:marriage_vassal = { + remove_opinion = { + target = root + modifier = distrustful + } + remove_trait = disloyal + add_piety_level = -2 + divorce = scope:marriage_rival + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = bp1_yearly.4030.b.failure + + send_interface_toast = { + title = bp1_yearly.4030.b.failure + left_icon = scope:marriage_vassal + scope:marriage_vassal = { + progress_towards_rival_effect = { + CHARACTER = root + REASON = rival_seduced_vassal + OPINION = 0 + } + } + } + } + } + + stress_impact = { + cynical = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + content = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = cynical + has_trait = arrogant + } + } + } + } + + option = { + name = bp1_yearly.4030.c + + trigger = { + exists = scope:spurned_partner + } + + scope:spurned_partner = { + scope:marriage_vassal = { save_scope_as = relationship_reason_involved_character } + progress_towards_friend_effect = { + CHARACTER = root + OPINION = 0 + REASON = friend_supported_me_against_spouse + } + clear_saved_scope = relationship_reason_involved_character + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:marriage_rival } + } + set_relation_rival = { + target = scope:marriage_rival + reason = rival_abandoned_marriage + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:marriage_vassal } + } + set_relation_rival = { + target = scope:marriage_vassal + reason = rival_abandoned_marriage + } + } + add_opinion = { + opinion = -40 + modifier = hate_opinion + target = scope:marriage_rival + } + add_opinion = { + opinion = -40 + modifier = hate_opinion + target = scope:marriage_vassal + } + } + if = { + limit = { + can_add_hook = { + target = scope:spurned_partner + type = loyalty_hook + } + } + add_hook = { + target = scope:spurned_partner + type = loyalty_hook + } + } + + stress_impact = { + honest = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + shy = minor_stress_impact_gain + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = paranoid + } + } + } + } + + option = { + name = bp1_yearly.4030.d + + stress_impact = { + brave = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + diligent = minor_stress_impact_gain + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = brave + has_trait = wrathful + has_trait = vengeful + } + } + } + } +} + +bp1_yearly.4040 = { # Kindly grandmother won't stop feeding you snacks; suffer the consequences of overeating, or break her heart? + type = character_event + content_source = dlc_006 + title = bp1_yearly.4040.t + desc = { + random_valid = { + triggered_desc = { # Intro desc + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 1 + } + desc = bp1_yearly.4040.desc.intro.1 + } + triggered_desc = { # Another snack? Nice! + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 2 + var:food_fed_by_grandmother > 1 + } + desc = bp1_yearly.4040.desc.intro.2 + } + triggered_desc = { # It's getting a bit much + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 4 + var:food_fed_by_grandmother > 2 + } + desc = bp1_yearly.4040.desc.feeding.1 + } + triggered_desc = { # It's getting a bit much + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 4 + var:food_fed_by_grandmother > 2 + } + desc = bp1_yearly.4040.desc.feeding.2 + } + triggered_desc = { # It's getting insane + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother > 4 + } + desc = bp1_yearly.4040.desc.feeding.3 + } + triggered_desc = { # It's getting insane + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother > 4 + } + desc = bp1_yearly.4040.desc.feeding.4 + } + triggered_desc = { # It's getting insane + trigger = { + scope:kindly_grandmother = { + is_alive = no + } + } + desc = bp1_yearly.4040.desc.dead + } + } + } + + theme = family + + override_background = { reference = bp1_kitchen_western } + + left_portrait = { + character = root + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 1 + } + animation = ecstasy + } + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 2 + var:food_fed_by_grandmother > 1 + } + animation = happiness + } + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + var:food_fed_by_grandmother <= 4 + var:food_fed_by_grandmother > 2 + } + animation = worry + } + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother > 4 + } + animation = disbelief + } + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = no + } + } + animation = grief + } + } + + right_portrait = { + character = scope:kindly_grandmother + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + } + animation = love + } + + triggered_animation = { + trigger = { + scope:kindly_grandmother = { + is_alive = no + } + } + animation = pain + } + } + + lower_right_portrait = scope:spurned_partner + + trigger = { + has_bp1_dlc_trigger = yes + age >= 6 + OR = { + exists = scope:kindly_grandmother + AND = { + NOT = { + has_character_flag = had_grandmother_event + } + any_close_family_member = { + is_available_ai_adult = yes + OR = { + is_grandparent_of = root + is_great_grandparent_of = root + } + ai_rationality <= 0 + ai_compassion >= 0 + is_ruler = no + is_married = no + is_concubine = no + NOR = { + has_trait = sadistic + has_trait = callous + has_relation_rival = root + } + } + } + } + } + + immediate = { + set_favorite_treat_effect = yes + add_character_flag = had_grandmother_event + if = { + limit = { + NOT = { + exists = scope:kindly_grandmother + } + } + random_close_family_member = { + limit = { + is_available_ai_adult = yes + OR = { + is_grandparent_of = root + is_great_grandparent_of = root + } + ai_rationality <= 0 + ai_compassion >= 0 + is_ruler = no + is_married = no + is_concubine = no + NOR = { + has_trait = sadistic + has_trait = callous + has_relation_rival = root + } + } + save_scope_as = kindly_grandmother + } + } + hidden_effect = { + if = { + limit = { + scope:kindly_grandmother = { + is_alive = yes + is_ruler = no + NOT = { + is_courtier_of = root + } + } + } + add_courtier = scope:kindly_grandmother + } + if = { + limit = { + NOT = { has_variable = food_fed_by_grandmother } + } + set_variable = { + name = food_fed_by_grandmother + value = 1 + } + } + } + } + + option = { + name = bp1_yearly.4040.family_first + + trait = family_first + trigger = { + has_trait = family_first + scope:kindly_grandmother = { + is_alive = yes + } + } + + add_stress = medium_stress_impact_loss + + scope:kindly_grandmother = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 50 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp1_yearly.4040.dead + + add_stress = miniscule_stress_impact_gain + + trigger = { + scope:kindly_grandmother = { + is_alive = no + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp1_yearly.4040.a + fallback = yes + + trigger = { + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 1 + } + + hidden_effect = { + change_current_weight = 20 + change_variable = { + name = food_fed_by_grandmother + add = 1 + } + trigger_event = { + id = bp1_yearly.4040 + days = { 50 150 } + } + } + + scope:kindly_grandmother = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 20 + } + } + + stress_impact = { + base = medium_stress_impact_loss + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = temperate + } + } + } + + option = { + name = bp1_yearly.4040.b + + trigger = { + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 1 + } + + scope:kindly_grandmother = { + add_stress = minor_stress_impact_gain + if = { + limit = { + has_opinion_modifier = { + target = root + modifier = love_opinion + } + } + remove_opinion = { + target = root + modifier = love_opinion + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + trusting = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + comfort_eater = medium_stress_impact_gain + gluttonous = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = trusting + has_trait = gregarious + has_trait = comfort_eater + has_trait = gluttonous + has_trait = greedy + } + } + } + } + + option = { + name = bp1_yearly.4040.c + + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 4 + var:food_fed_by_grandmother > 1 + } + + hidden_effect = { + change_current_weight = 20 + change_variable = { + name = food_fed_by_grandmother + add = 1 + } + trigger_event = { + id = bp1_yearly.4040 + days = { 50 150 } + } + } + + scope:kindly_grandmother = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 20 + } + } + + stress_impact = { + base = minor_stress_impact_loss + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = temperate + } + } + } + + option = { + name = bp1_yearly.4040.d + + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother <= 4 + var:food_fed_by_grandmother > 1 + } + + scope:kindly_grandmother = { + add_stress = { + value = medium_stress_impact_gain + multiply = root.var:food_fed_by_grandmother + } + if = { + limit = { + has_opinion_modifier = { + target = root + modifier = love_opinion + } + } + remove_opinion = { + target = root + modifier = love_opinion + } + } + } + + stress_impact = { + comfort_eater = medium_stress_impact_gain + gluttonous = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + trusting = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + OR = { + has_trait = comfort_eater + has_trait = gluttonous + } + } + } + } + + option = { + name = bp1_yearly.4040.e + + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother > 4 + } + + hidden_effect = { + change_current_weight = 20 + change_variable = { + name = food_fed_by_grandmother + add = 1 + } + trigger_event = { + id = bp1_yearly.4040 + days = { 50 150 } + } + } + + scope:kindly_grandmother = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 20 + } + } + + stress_impact = { + base = -1 + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = temperate + } + } + } + + option = { + name = bp1_yearly.4040.f + + trigger = { + scope:kindly_grandmother = { + is_alive = yes + } + exists = var:food_fed_by_grandmother + var:food_fed_by_grandmother > 4 + } + + scope:kindly_grandmother = { + add_stress = { + value = medium_stress_impact_gain + multiply = root.var:food_fed_by_grandmother + } + if = { + limit = { + has_opinion_modifier = { + target = root + modifier = love_opinion + } + } + remove_opinion = { + target = root + modifier = love_opinion + } + } + add_opinion = { + target = root + modifier = heartbroken_opinion + opinion = -50 + } + } + + stress_impact = { + comfort_eater = medium_stress_impact_gain + gluttonous = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + OR = { + has_trait = comfort_eater + has_trait = gluttonous + } + } + } + } +} diff --git a/events/dlc/bp2/bp2_adult_education_activity_events.txt b/events/dlc/bp2/bp2_adult_education_activity_events.txt new file mode 100644 index 00000000..5d77ff7b --- /dev/null +++ b/events/dlc/bp2/bp2_adult_education_activity_events.txt @@ -0,0 +1,3594 @@ +namespace = bp2_adult_education + +# INVALIDATION - PRISON +bp2_adult_education.0005 = { + type = character_event + content_source = dlc_009 + title = bp2_adult_education.0005.t + desc = bp2_adult_education.0005.desc + theme = prison + + left_portrait = { + character = root + animation = prisonhouse + } + + immediate = { + imprisoner ?= { + save_scope_as = jailor + } + create_character_memory = { + type = imprisoned_adult_education + participants = { + jailor = scope:jailor + } + } + } + + option = { + name = bp2_adult_education.0005.a + } +} + +scripted_trigger adult_education_teacher_would_leave_trigger = { + NOT = { # Don't poach player courtiers + liege ?= { is_ai = no } + } + OR = { + has_relation_friend = root + opinion = { + target = root + value >= 60 + } + } +} + +# CONCLUSION EVENT +bp2_adult_education.0009 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.0009.t + desc = { + desc = bp2_adult_education.0009.desc + triggered_desc = { + trigger = { + scope:teacher_1 = { adult_education_teacher_would_leave_trigger = yes } + } + desc = bp2_adult_education.0009.desc_teacher_1 + } + triggered_desc = { + trigger = { + scope:teacher_2 = { adult_education_teacher_would_leave_trigger = yes } + } + desc = bp2_adult_education.0009.desc_teacher_2 + } + } + theme = university + + center_portrait = { + character = root + animation = thinking + } + left_portrait = { + character = scope:teacher_1 + triggered_animation = { + trigger = { + scope:teacher_1 = { adult_education_teacher_would_leave_trigger = yes } + } + animation = admiration + } + animation = eyeroll + } + right_portrait = { + character = scope:teacher_2 + triggered_animation = { + trigger = { + scope:teacher_2 = { adult_education_teacher_would_leave_trigger = yes } + } + animation = ecstasy + } + animation = personality_zealous + } + + immediate = { + #Reward effects + adult_education_completed_log_entry_effect = yes + scope:activity = { + random_attending_character = { + limit = { + has_character_flag = teacher_1 + } + save_scope_as = teacher_1 + } + random_attending_character = { + limit = { + has_character_flag = teacher_2 + } + save_scope_as = teacher_2 + } + } + } + + option = { + trigger = { + has_government = landless_adventurer_government + } + name = bp2_adult_education.0009.e + add_contact = scope:teacher_1 + add_contact = scope:teacher_2 + ai_chance = { + base = 0 + } + } + + option = { + trigger = { + NOR = { + scope:teacher_1 ?= { adult_education_teacher_would_leave_trigger = yes } + scope:teacher_2 ?= { adult_education_teacher_would_leave_trigger = yes } + } + } + name = bp2_adult_education.0009.a + ai_chance = { + base = 100 + } + } + + option = { + trigger = { + scope:teacher_1 ?= { adult_education_teacher_would_leave_trigger = yes } + } + name = bp2_adult_education.0009.b + hidden_effect = { + current_travel_plan ?= { add_companion = scope:teacher_1 } + if = { + limit = { + scope:teacher_1.liege != root + } + add_courtier = scope:teacher_1 + } + } + show_as_tooltip = { add_courtier = scope:teacher_1 } + ai_chance = { + base = 10 + } + } + + option = { + trigger = { + scope:teacher_2 ?= { adult_education_teacher_would_leave_trigger = yes } + } + name = bp2_adult_education.0009.c + hidden_effect = { + current_travel_plan ?= { add_companion = scope:teacher_2 } + if = { + limit = { + scope:teacher_2.liege != root + } + add_courtier = scope:teacher_2 + } + } + show_as_tooltip = { add_courtier = scope:teacher_2 } + ai_chance = { + base = 10 + } + } + + option = { + trigger = { + OR = { + scope:teacher_1 ?= { adult_education_teacher_would_leave_trigger = yes } + scope:teacher_2 ?= { adult_education_teacher_would_leave_trigger = yes } + } + } + name = bp2_adult_education.0009.d + ai_chance = { + base = 100 + } + } + + after = { + if = { + limit = { + is_ai = yes + } + scope:activity = { + every_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + has_character_flag = student_1 + has_character_flag = student_2 + } + } + silent_disappearance_ai_if_created_effect = yes + } + } + } + } +} + +## ARRIVAL EVENTS +bp2_adult_education.0010 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.0010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + location = { + has_university_building_trigger = yes + } + } + desc = bp2_adult_education.0010.desc_uni + } + desc = bp2_adult_education.0010.desc_religious + } + desc = bp2_adult_education.0010.desc_end + triggered_desc = { + trigger = { + "scope:host.capital_province.squared_distance(scope:location)" >= squared_distance_massive + } + desc = bp2_adult_education.0010.desc_very_very_far + } + } + theme = university + + center_portrait = { + character = root + animation = happy_teacher + } + + immediate = { + scope:activity.activity_location = { save_scope_as = location } + } + + option = { + name = bp2_adult_education.0010.a + } +} + +### ADULT EDUCATION AT DESTINATION EVENTS ### + +# You take part in an intellectual debate. A teacher observes. + +bp2_adult_education.1000 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1000.t + desc = bp2_adult_education.1000.desc + theme = university + + left_portrait = { + character = root + animation = dismissal + } + center_portrait = { + character = scope:student + animation = eyeroll + } + right_portrait = { + character = scope:teacher + animation = thinking + outfit_tags = { spectacles_outfit } + } + + trigger = { + NOT = { + scope:activity = { + has_variable = has_had_event_1000 + } + } + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1000 + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + save_scope_as = student + } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: quote the classics + option = { + name = bp2_adult_education.1000.a + flavor = bp2_adult_education.1000.a.tt + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = learning + target = scope:student + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1000.a.success + send_interface_toast = { + title = bp2_adult_education.1000.a.success.tt + left_icon = scope:student + scope:activity = { + add_activity_log_entry = { + key = university_debate_won_log + score = 25 + tags = { positive } + character = root + target = scope:student + + #Effect + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + } + } + scope:teacher = { + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 20 + } + } + root = { + stress_impact = { + diligent = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1000.a.failure + send_interface_toast = { + title = bp2_adult_education.1000.a.failure.tt + left_icon = scope:student + scope:activity = { + add_activity_log_entry = { + key = university_debate_won_log + score = 25 + tags = { negative } + character = scope:student + target = root + + #Effect + root = { + progress_towards_rival_effect = { + CHARACTER = scope:student + REASON = rival_bested_me_in_debate + OPINION = default_rival_opinion + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + diligent = medium_stress_impact_gain + scholar = major_stress_impact_gain + } + } + } + } + scope:teacher = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option B: Goliardic Life intent: improptu poetry + option = { + name = bp2_adult_education.1000.b + flavor = bp2_adult_education.1000.b.tt + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = diplomacy + target = scope:student + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1000.b.success + send_interface_toast = { + title = bp2_adult_education.1000.b.success.tt + left_icon = scope:student + scope:activity = { + add_activity_log_entry = { + key = university_debate_won_log + score = 25 + tags = { positive } + character = root + target = scope:student + + #Effect + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + root = { add_diplomacy_skill = 1 } + } + } + scope:teacher = { + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 20 + } + } + root = { + stress_impact = { + gregarious = medium_stress_impact_loss + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1000.b.failure + send_interface_toast = { + title = bp2_adult_education.1000.b.failure.tt + left_icon = scope:student + scope:activity = { + add_activity_log_entry = { + key = university_debate_won_log + score = 25 + tags = { negative } + character = scope:student + target = root + + #Effect + root = { + progress_towards_rival_effect = { + CHARACTER = scope:student + REASON = rival_bested_me_in_debate + OPINION = default_rival_opinion + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + lifestyle_poet = major_stress_impact_gain + shy = major_stress_impact_gain + } + } + } + } + scope:teacher = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option C: I have books to read, bye + option = { + name = bp2_adult_education.1000.c + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + gregarious = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +# Learning the local language + +bp2_adult_education.1010 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1010.t + desc = bp2_adult_education.1010.desc + theme = university + + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:teacher + animation = personality_rational + outfit_tags = { spectacles_outfit } + } + + trigger = { + NOR = { + scope:activity = { has_variable = has_had_event_1010 } + scope:activity = { has_variable = has_had_event_1011 } + scope:activity = { has_variable = has_had_event_1012 } + knows_language_of_culture = scope:activity.activity_location.county.culture + } + num_of_known_languages <= language_soft_cap + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1010 + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: learn the language + option = { + name = bp2_adult_education.1010.a + trigger = { + has_activity_intent = study_hard_intent + } + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_uni_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { learn_language_of_culture = scope:location.county.culture } + } + custom_tooltip = adult_education_tt_positive_major + activity_special_type_progression_major = yes + } + stress_impact = { + base = major_stress_impact_gain + diligent = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = 50 + } + modifier = { + has_trait = lazy + add = -50 + } + } + } + + # Option B: Goliardic Life intent: try to learn the language through poetry + option = { + name = bp2_adult_education.1010.b + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = diplomacy + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1010.b.success + send_interface_toast = { + title = bp2_adult_education.1010.b.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_uni_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + learn_language_of_culture = scope:location.county.culture + if = { + limit = { + NOT = { + has_trait = lifestyle_poet + } + } + add_trait = lifestyle_poet + } + else = { + add_diplomacy_skill = 1 + add_trait_xp = { + trait = lifestyle_poet + value = 10 + } + } + } + } + custom_tooltip = adult_education_tt_positive_medium + activity_special_type_progression_medium = yes + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1010.b.failure + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + random = { + chance = 30 + add_diplomacy_skill = 1 + } + } + stress_impact = { + base = minor_stress_impact_gain + diligent = medium_stress_impact_gain + lifestyle_poet = major_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + } + } + + # Option D: Goliardic Life intent: try to learn the language through the people + option = { + name = bp2_adult_education.1010.d + flavor = bp2_adult_education.1010.d.tt + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = intrigue + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1010.b.success + send_interface_toast = { + title = bp2_adult_education.1010.b.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_uni_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + learn_language_of_culture = scope:location.county.culture + add_intrigue_skill = 1 + } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1010.b.failure + random_list = { + 5 = { + modifier = { + has_trait = education_diplomacy + add = 5 + } + modifier = { + has_diplomacy_lifestyle_trait_trigger = yes + add = 10 + } + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + add_diplomacy_skill = 1 + } + + } + 5 = { + modifier = { + has_trait = education_intrigue + add = 5 + } + modifier = { + has_intrigue_lifestyle_trait_trigger = yes + add = 10 + } + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + add_intrigue_skill = 1 + } + } + 5 = { + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + add_prowess_skill = 1 + } + } + 60 = { + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + add_character_modifier = { + modifier = bp2_uni_bad_encounters_modifier + years = 5 + } + } + } + 15 = { + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + custom_tooltip = goliard_shenanigans_get_lovers_pox.tt + contract_disease_effect = { DISEASE = lovers_pox TREATMENT_EVENT = no } + } + } + 15 = { + send_interface_toast = { + title = bp2_adult_education.1010.b.failure.tt + left_icon = root + increase_wounds_no_death_effect = { REASON = fight } + } + } + } + stress_impact = { + craven = major_stress_impact_gain + shy = major_stress_impact_gain + gregarious = minor_stress_impact_loss + brave = minor_stress_impact_loss + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = shy + add = -75 + } + modifier = { + has_trait = craven + add = -75 + } + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1010.c + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + base = minor_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 100 + } + } + } +} + +# Learning the lithurgical language + +scripted_effect bp2_learn_lithurgical_language_effect = { + if = { + limit = { + scope:activity.activity_location.county.faith.religion = religion:islam_religion + } + learn_language = language_arabic + } + else_if = { + limit = { + OR = { + scope:activity.activity_location.county.faith.religion = religion:judaism_religion + scope:activity.activity_location.county.faith = faith:nestorian + } + } + learn_language = language_aramaic + } + else_if = { + limit = { + scope:activity.activity_location.county.faith = faith:catholic + } + learn_language = language_latin + } + else_if = { + limit = { + OR = { + scope:activity.activity_location.county.faith = faith:orthodox + scope:activity.activity_location.county.faith = faith:coptic + } + } + learn_language = language_greek + } +} + +bp2_adult_education.1011 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1011.t + desc = bp2_adult_education.1011.desc + theme = university + + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:teacher + animation = personality_rational + outfit_tags = { spectacles_outfit } + } + + trigger = { + NOR = { + scope:activity = { has_variable = has_had_event_1010 } + scope:activity = { has_variable = has_had_event_1011 } + scope:activity = { has_variable = has_had_event_1012 } + } + num_of_known_languages <= language_soft_cap + OR = { + scope:activity.activity_location.county.faith.religion = religion:islam_religion + scope:activity.activity_location.county.faith.religion = religion:judaism_religion + scope:activity.activity_location.county.faith = faith:catholic + scope:activity.activity_location.county.faith = faith:orthodox + scope:activity.activity_location.county.faith = faith:coptic + scope:activity.activity_location.county.faith = faith:nestorian + } + trigger_if = { + limit = { + scope:activity.activity_location.county.faith.religion = religion:islam_religion + } + NOT = { knows_language = language_arabic } + } + trigger_else_if = { + limit = { + OR = { + scope:activity.activity_location.county.faith.religion = religion:judaism_religion + scope:activity.activity_location.county.faith = faith:nestorian + } + } + NOT = { knows_language = language_aramaic } + } + trigger_else_if = { + limit = { + scope:activity.activity_location.county.faith = faith:catholic + } + NOT = { knows_language = language_latin } + } + trigger_else_if = { + limit = { + OR = { + scope:activity.activity_location.county.faith = faith:orthodox + scope:activity.activity_location.county.faith = faith:coptic + } + } + NOT = { knows_language = language_greek } + } + trigger_else = { + always = no + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1011 + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: hit the religious texts + option = { + name = bp2_adult_education.1011.a + trigger = { + has_activity_intent = study_hard_intent + } + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_lithurgy_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { bp2_learn_lithurgical_language_effect = yes } + custom_tooltip = adult_education_tt_positive_major + activity_special_type_progression_major = yes + } + } + stress_impact = { + base = major_stress_impact_gain + diligent = medium_stress_impact_loss + stubborn = minor_stress_impact_loss + lazy = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = 100 + } + modifier = { + has_trait = lazy + add = -75 + } + modifier = { + has_trait = fickle + add = -75 + } + } + } + + # Option D: Study hard intent: learn from the masters + option = { + name = bp2_adult_education.1011.d + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skills = { learning diplomacy } + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1011.d.success + send_interface_toast = { + title = bp2_adult_education.1011.d.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_lithurgy_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + bp2_learn_lithurgical_language_effect = yes + add_character_modifier = { + modifier = bp2_dialogue_with_the_masters_modifier + years = 10 + } + } + custom_tooltip = adult_education_tt_positive_medium + activity_special_type_progression_medium = yes + scope:teacher = { + add_opinion = { + target = root + opinion = 30 + modifier = pleased_opinion + } + } + } + } + stress_impact = { + shy = minor_stress_impact_gain + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1011.d.failure + send_interface_toast = { + title = bp2_adult_education.1011.d.failure.tt + left_icon = root + add_character_modifier = { + modifier = foolish_endeavor_modifier + years = 5 + } + stress_impact = { + base = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = shy + add = -75 + } + modifier = { + has_trait = gregarious + add = 75 + } + modifier = { + has_trait = arrogant + add = 75 + } + } + } + + # Option B: Goliardic Life intent: learn from class + option = { + name = bp2_adult_education.1011.b + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skills = { learning diplomacy } + value = high_skill_rating + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1011.d.success + send_interface_toast = { + title = bp2_adult_education.1011.d.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_lithurgy_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + bp2_learn_lithurgical_language_effect = yes + } + custom_tooltip = adult_education_tt_positive_medium + activity_special_type_progression_medium = yes + } + } + stress_impact = { + shy = medium_stress_impact_gain + lazy = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + } + } + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1011.b.failure + send_interface_toast = { + title = bp2_adult_education.1011.d.failure.tt + left_icon = root + custom_tooltip = bp2_adult_education.1011.b.tt + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + scope:teacher = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = shy + add = -75 + } + modifier = { + has_trait = gregarious + add = 75 + } + modifier = { + has_trait = arrogant + add = 75 + } + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1010.c + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + base = minor_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 100 + } + } + } +} + +# Learning the teacher's language + +bp2_adult_education.1012 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1012.t + desc = bp2_adult_education.1012.desc + theme = university + + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:teacher + animation = personality_rational + outfit_tags = { spectacles_outfit } + } + + trigger = { + NOR = { + scope:activity = { has_variable = has_had_event_1010 } + scope:activity = { has_variable = has_had_event_1011 } + scope:activity = { has_variable = has_had_event_1012 } + } + num_of_known_languages <= language_soft_cap + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + save_temporary_scope_as = teacher_check + } + } + NOT = { knows_language_of_culture = scope:teacher_check.culture } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + culture != scope:activity.activity_location.county.culture + } + } + add = 2 + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1012 + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + culture != scope:activity.activity_location.county.culture + root = { NOT = { knows_language_of_culture = prev.culture } } + } + alternative_limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + root = { NOT = { knows_language_of_culture = prev.culture } } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: get close to the teacher + option = { + name = bp2_adult_education.1012.a + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = learning + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1012.a.success + send_interface_toast = { + title = bp2_adult_education.1012.a.success.tt + left_icon = root + right_icon = scope:teacher + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_teacher_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + learn_language_of_culture = scope:teacher.culture + } + } + custom_tooltip = adult_education_tt_positive_major + activity_special_type_progression_major = yes + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher } + } + progress_towards_friend_effect = { + REASON = friend_learned_my_language + CHARACTER = scope:teacher + OPINION = default_friend_opinion + } + } + stress_impact = { + shy = medium_stress_impact_gain + lazy = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1012.a.failure + send_interface_toast = { + title = bp2_adult_education.1012.a.failure.tt + left_icon = root + right_icon = scope:teacher + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = minor } + scope:teacher = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option B: Goliardic Life intent: find someone to help + option = { + name = bp2_adult_education.1012.b + flavor = bp2_adult_education.1012.b.tt + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = intrigue + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1012.a.success + send_interface_toast = { + title = bp2_adult_education.1012.a.success.tt + left_icon = root + right_icon = scope:teacher + scope:activity = { + add_activity_log_entry = { + key = learned_language_of_teacher_log + score = 25 + tags = { language good activity } + show_in_conclusion = yes + character = root + + #Effect + root = { + learn_language_of_culture = scope:teacher.culture + add_intrigue_skill = 1 + } + } + custom_tooltip = adult_education_tt_positive_medium + activity_special_type_progression_medium = yes + } + stress_impact = { + shy = medium_stress_impact_gain + lazy = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1012.a.failure + send_interface_toast = { + title = bp2_adult_education.1012.a.failure.tt + left_icon = root + right_icon = scope:teacher + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = minor } + scope:teacher = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1010.c + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + base = minor_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + fickle = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 100 + } + modifier = { + has_trait = diligent + add = -100 + } + modifier = { + has_trait = gregarious + add = -100 + } + modifier = { + has_trait = ambitious + add = -75 + } + modifier = { + has_trait = fickle + add = 75 + } + } + } +} + +# Goliards activities + +bp2_adult_education.1020 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1020.t + desc = { + desc = bp2_adult_education.1020.desc + random_valid = { + triggered_desc = { + trigger = { + scope:student = { + OR = { + has_trait = lustful + has_trait = rakish + AND = { + has_trait = lifestyle_poet + NOT = { has_trait = chaste } + } + } + } + } + desc = bp2_adult_education.1020.desc.lusty_poetry + } + triggered_desc = { + trigger = { + scope:student = { + drinks_alcohol_trigger = yes + OR = { + has_trait = drunkard + has_trait = gluttonous + AND = { + has_trait = lifestyle_poet + NOT = { has_trait = temperate } + } + } + } + scope:location.county.faith = { + NOT = { + has_doctrine = doctrine_theocracy_lay_clergy + } + } + } + desc = bp2_adult_education.1020.desc.drinking_poetry + } + triggered_desc = { + trigger = { + scope:student = { + OR = { + has_trait = cynical + AND = { + has_trait = lifestyle_poet + NOT = { has_trait = zealous } + } + } + } + scope:location.county.faith = { + NOT = { + has_doctrine = doctrine_theocracy_lay_clergy + } + } + } + desc = bp2_adult_education.1020.desc.satyre_poetry + } + triggered_desc = { + trigger = { + scope:location = { + geographical_region = world_europe_west + } + current_date >= 1100.1.1 + } + desc = bp2_adult_education.1020.desc.carmina_burana + } + triggered_desc = { + trigger = { + scope:student = { + NOT = { has_trait = zealous } + OR = { + has_trait = profligate + has_trait = generous + } + } + } + desc = bp2_adult_education.1020.desc.dice + } + desc = bp2_adult_education.1020.desc.donkey + } + desc = bp2_adult_education.1020.desc.end + } + theme = university + + left_portrait = { + character = scope:student + animation = drink + } + center_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:teacher + animation = disapproval + outfit_tags = { spectacles_outfit } + } + + cooldown = { years = 5 } + + trigger = { + scope:activity.activity_location = { geographical_region = world_europe } + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + save_scope_as = student + hidden_effect = { + random_list = { + 10 = { add_trait = lifestyle_poet } + 10 = { add_trait = drunkard } + 10 = { add_trait = rakish } + 10 = { add_trait = profligate } + 40 = { } + } + } + } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: Absolutely no + option = { + name = bp2_adult_education.1020.a + trigger = { + has_activity_intent = study_hard_intent + } + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher } + } + progress_towards_friend_effect = { + REASON = friend_refused_the_goliards + CHARACTER = scope:teacher + OPINION = default_friend_opinion + } + } + stress_impact = { + diligent = minor_stress_impact_loss + shy = minor_stress_impact_loss + cynical = minor_stress_impact_gain + gregarious = major_stress_impact_gain + lifestyle_reveler = massive_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = 100 + } + modifier = { + has_trait = lifestyle_reveler + add = -100 + } + modifier = { + has_trait = gregarious + add = -50 + } + } + } + + # Option B: Study hard intent: ...why not? + option = { + name = bp2_adult_education.1020.b + flavor = bp2_adult_education.1020.b.tt + trigger = { + has_activity_intent = study_hard_intent + } + scope:activity = { + add_activity_log_entry = { + key = participated_in_goliardy_log + score = 25 + tags = { activity } + character = root + target = scope:student + + #Effect + root = { + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1020.c.tt } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher } + } + progress_towards_rival_effect = { + REASON = rival_followed_the_goliards + CHARACTER = scope:teacher + OPINION = default_rival_opinion + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_gain + shy = medium_stress_impact_gain + zealous = medium_stress_impact_gain + diligent = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = -100 + } + modifier = { + has_trait = lifestyle_reveler + add = 100 + } + modifier = { + has_trait = gregarious + add = 50 + } + } + } + + # Option C: Goliardic Life intent: oh yeah + option = { + name = bp2_adult_education.1020.c + trigger = { + has_activity_intent = university_revelry_intent + } + scope:activity = { + add_activity_log_entry = { + key = participated_in_goliardy_log + score = 25 + tags = { activity } + character = root + target = scope:student + + #Effect + root = { + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1020.c.tt } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher } + } + progress_towards_rival_effect = { + REASON = rival_followed_the_goliards + CHARACTER = scope:teacher + OPINION = default_rival_opinion + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:student } + } + progress_towards_friend_effect = { + REASON = friend_goliardic_shenanigans + CHARACTER = scope:student + OPINION = default_friend_opinion + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 200 + } + } + + # Option D: opt-out + option = { + name = bp2_adult_education.1020.d + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + stress_impact = { + base = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +# "Getting hazed" + +bp2_adult_education.1030 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1030.t + desc = { + desc = bp2_adult_education.1030.desc + first_valid = { + triggered_desc = { + trigger = { + drinks_alcohol_trigger = yes + } + desc = bp2_adult_education.1030.desc_alcohol + } + desc = bp2_adult_education.1030.desc_fallback + } + } + theme = university + + center_portrait = { + character = root + triggered_animation = { + trigger = { + has_activity_intent = study_hard_intent + } + animation = eyeroll + } + triggered_animation = { + trigger = { + has_activity_intent = university_revelry_intent + } + animation = ecstasy + } + } + right_portrait = { + character = scope:student + animation = wedding_drunk + } + + cooldown = { years = 5 } + + trigger = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + save_scope_as = student + } + } + } + + # Option A: Study hard intent: ...maybe? + option = { + name = bp2_adult_education.1030.a + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = diplomacy + value = average_skill_rating + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1030.a.success + send_interface_toast = { + title = bp2_adult_education.1030.a.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = one_of_the_boys_log + score = 25 + tags = { } + character = root + target = scope:student + + #Effect + root = { + add_character_modifier = { + modifier = bp2_uni_connections_modifier + years = 10 + } + } + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + } + } + } + stress_impact = { + diligent = minor_stress_impact_gain + gregarious = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + } + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1030.a.failure + send_interface_toast = { + title = bp2_adult_education.1030.a.failure.tt + left_icon = root + add_character_modifier = { + modifier = bp2_uni_isolation_modifier + years = 10 + } + } + stress_impact = { + base = minor_stress_impact_gain + diligent = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_gain + } + } + } + ai_chance = { + base = 75 + } + } + + # Option B: Goliardic Life intent: hit me! + option = { + name = bp2_adult_education.1030.b + trigger = { + has_activity_intent = university_revelry_intent + } + scope:activity = { + add_activity_log_entry = { + key = one_of_the_boys_log + score = 25 + tags = { } + character = root + target = scope:student + + #Effect + root = { + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1030.b.tt } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:student } + } + progress_towards_friend_effect = { + REASON = friend_goliardic_shenanigans + CHARACTER = scope:student + OPINION = default_friend_opinion + } + } + } + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + } + } + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 125 + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1030.c + if = { + limit = { + has_activity_intent = study_hard_intent + } + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + stress_impact = { + gregarious = medium_stress_impact_gain + lifestyle_reveler = medium_stress_impact_gain + } + } + else = { + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + base = medium_stress_impact_gain + diligent = minor_stress_impact_loss + } + } + + ai_chance = { + base = 100 + modifier = { + has_activity_intent = university_revelry_intent + add = -50 + } + modifier = { + has_activity_intent = study_hard_intent + add = 50 + } + } + } +} + +# The teachers have opposing schools of thought + +bp2_adult_education.1040 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1040.t + desc = bp2_adult_education.1040.desc + theme = university + + left_portrait = { + character = scope:teacher_1 + animation = anger + outfit_tags = { spectacles_outfit } + } + center_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:teacher_2 + animation = rage + outfit_tags = { spectacles_outfit } + } + + cooldown = { years = 5 } + + trigger = { + scope:activity = { + any_attending_character = { + has_character_flag = teacher_1 + save_temporary_scope_as = teacher_1_temp + } + any_attending_character = { + has_character_flag = teacher_2 + trigger_if = { + limit = { + scope:teacher_1_temp = { has_trait = education_diplomacy } + } + NOT = { has_trait = education_diplomacy } + } + trigger_else_if = { + limit = { + scope:teacher_1_temp = { has_trait = education_martial } + } + NOT = { has_trait = education_martial } + } + trigger_else_if = { + limit = { + scope:teacher_1_temp = { has_trait = education_stewardship } + } + NOT = { has_trait = education_stewardship } + } + trigger_else_if = { + limit = { + scope:teacher_1_temp = { has_trait = education_intrigue } + } + NOT = { has_trait = education_intrigue } + } + trigger_else = { + NOT = { has_trait = education_learning } + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + has_character_flag = teacher_1 + } + save_scope_as = teacher_1 + } + random_attending_character = { + limit = { + has_character_flag = teacher_2 + } + save_scope_as = teacher_2 + } + } + hidden_effect = { + scope:teacher_1 = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_2 } + } + set_relation_rival = { + target = scope:teacher_2 + reason = rival_grave_insult + } + } + } + } + } + + # Option A: side with teacher_1 + option = { + name = bp2_adult_education.1040.a + scope:activity = { + add_activity_log_entry = { + key = sided_with_teacher_log + score = 25 + tags = { activity positive } + character = root + target = scope:teacher_1 + + #Effect + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + root = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_friend_opinion + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_rival_opinion + } + } + } + } + } + stress_impact = { + honest = minor_stress_impact_loss + gregarious = minor_stress_impact_gain + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option B: side with teacher_2 + option = { + name = bp2_adult_education.1040.b + scope:activity = { + add_activity_log_entry = { + key = sided_with_teacher_log + score = 25 + tags = { activity positive } + character = root + target = scope:teacher_2 + + #Effect + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + root = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_friend_opinion + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_rival_opinion + } + } + } + } + } + stress_impact = { + honest = minor_stress_impact_loss + gregarious = minor_stress_impact_gain + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option C: Study hard intent: both have merits + option = { + name = bp2_adult_education.1040.c + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = learning + value = high_skill_rating + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = scholar + add = 20 + } + modifier = { + has_trait = deceitful + add = 10 + } + modifier = { + has_trait = diligent + add = 10 + } + desc = bp2_adult_education.1040.c.success + send_interface_toast = { + title = bp2_adult_education.1040.c.success.tt + left_icon = scope:teacher_1 + right_icon = scope:teacher_2 + scope:activity = { + add_activity_log_entry = { + key = balanced_teachers_opinions_log + score = 25 + tags = { activity positive learning } + character = root + + #Effect + custom_tooltip = adult_education_tt_positive_massive + scope:activity = { activity_special_type_progression_massive = yes } + root = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_friend_opinion + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_friend_opinion + } + } + } + } + } + } + stress_impact = { + scholar = minor_stress_impact_loss + deceitful = minor_stress_impact_loss + diligent = minor_stress_impact_loss + } + } + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1040.c.failure + send_interface_toast = { + title = bp2_adult_education.1040.c.failure.tt + left_icon = scope:teacher_1 + right_icon = scope:teacher_2 + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_rival_opinion + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_rival_opinion + } + } + stress_impact = { + base = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 150 + } + } + + + # Option D: Goliardic Life intent: let's discuss it around some wine + option = { + name = bp2_adult_education.1040.d + flavor = bp2_adult_education.1040.d.tt + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = intrigue + value = average_skill_rating + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1040.d.success + send_interface_toast = { + title = bp2_adult_education.1040.d.success.tt + left_icon = scope:teacher_1 + right_icon = scope:teacher_2 + scope:activity = { + add_activity_log_entry = { + key = balanced_teachers_opinions_log + score = 25 + tags = { activity positive intrigue } + character = root + + #Effect + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + root = { + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = massive } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_friend_opinion + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_friend_effect = { + REASON = friend_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_friend_opinion + } + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + gregarious = medium_stress_impact_loss + shy = minor_stress_impact_gain + callous = minor_stress_impact_gain + inappetetic = medium_stress_impact_gain + reclusive = medium_stress_impact_gain + } + } + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1040.d.failure + send_interface_toast = { + title = bp2_adult_education.1040.d.failure.tt + left_icon = scope:teacher_1 + right_icon = scope:teacher_2 + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_1 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_1 + OPINION = default_rival_opinion + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher_2 } + } + progress_towards_rival_effect = { + REASON = rival_not_supported_me_in_dispute + CHARACTER = scope:teacher_2 + OPINION = default_rival_opinion + } + } + stress_impact = { + base = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_gain + inappetetic = medium_stress_impact_gain + reclusive = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 150 + modifier = { + has_trait = gregarious + add = 50 + } + } + } + + # Option E: opt-out: does it really matter? + option = { + name = bp2_adult_education.1040.e + reverse_add_opinion = { + target = scope:teacher_1 + modifier = ignored_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:teacher_2 + modifier = ignored_opinion + opinion = -15 + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 50 + } + modifier = { + has_trait = fickle + add = 25 + } + } + } +} + +# All students are foreigners + +bp2_adult_education.1050 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1050.t + desc = bp2_adult_education.1050.desc + theme = university + + left_portrait = { + character = scope:student_1 + animation = happiness + } + center_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:student_2 + animation = admiration + } + + cooldown = { years = 5 } + + trigger = { + root.culture = { + this != scope:activity.activity_location.county.culture + } + scope:activity = { + any_attending_character = { + has_character_flag = student_1 + culture = { + NOR = { + this = scope:activity.activity_location.county.culture + this = root.culture + } + } + save_temporary_scope_as = student_1_temp + } + any_attending_character = { + has_character_flag = student_2 + culture = { + NOR = { + this = scope:activity.activity_location.county.culture + this = root.culture + this = scope:student_1_temp.culture + } + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + has_character_flag = student_1 + } + save_scope_as = student_1 + } + random_attending_character = { + limit = { + has_character_flag = student_2 + } + save_scope_as = student_2 + } + } + } + + # Option A: Study hard intent: learn from each other + option = { + name = bp2_adult_education.1050.a + trigger = { + has_activity_intent = study_hard_intent + } + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + scope:student_1.culture = { + change_cultural_acceptance = { + target = root.culture + value = low_positive_culture_acceptance + desc = cultural_acceptance_gain_hold_court_event_outcome + } + } + scope:student_2.culture = { + change_cultural_acceptance = { + target = root.culture + value = low_positive_culture_acceptance + desc = cultural_acceptance_gain_hold_court_event_outcome + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + impatient = medium_stress_impact_gain + zealous = medium_stress_impact_gain + shy = medium_stress_impact_gain + reclusive = major_stress_impact_gain + irritable = major_stress_impact_gain + humble = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = humble + add = 100 + } + modifier = { + has_trait = impatient + add = -50 + } + modifier = { + has_trait = arrogant + add = -50 + } + } + } + + # Option B: Goliardic Life intent: have fun together + option = { + name = bp2_adult_education.1050.b + trigger = { + has_activity_intent = university_revelry_intent + } + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1020.c.tt } + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = major } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:student_1 } + } + progress_towards_friend_effect = { + REASON = friend_in_foreign_land + CHARACTER = scope:student_1 + OPINION = default_friend_opinion + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:student_2 } + } + progress_towards_friend_effect = { + REASON = friend_in_foreign_land + CHARACTER = scope:student_2 + OPINION = default_friend_opinion + } + } + stress_impact = { + diligent = medium_stress_impact_gain + shy = medium_stress_impact_gain + gregarious = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = -50 + } + modifier = { + has_trait = shy + add = -50 + } + modifier = { + has_trait = gregarious + add = 50 + } + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1050.c + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + stress_impact = { + shy = minor_stress_impact_loss + diligent = minor_stress_impact_loss + humble = medium_stress_impact_gain + gregarious = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + add = -100 + } + modifier = { + has_trait = humble + add = -50 + } + } + } +} + +# Sic et Non inspired reflections + +bp2_adult_education.1060 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1060.t + desc = bp2_adult_education.1060.desc + theme = university + + center_portrait = { + character = root + animation = personality_rational + } + + cooldown = { years = 5 } + + trigger = { + always = yes + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = theologian + add = 2 + } + modifier = { + has_trait = scholar + add = 1 + } + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + } + root = { save_scope_as = book_creator } + } + + # Option A: Study hard intent: think and try to resolve the questions + option = { + name = bp2_adult_education.1060.a + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = learning + value = high_skill_rating + 15 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1060.a.crit_success + send_interface_toast = { + title = bp2_adult_education.1060.a.crit_success.tt + left_icon = root + hidden_effect = { + if = { + limit = { + has_dlc_feature = royal_court + root = { has_royal_court = yes } + } + create_artifact_book_effect = { + OWNER = root + CREATOR = root + SET_SUBJECT = flag:learning + SET_TOPIC = flag:learning_theological_treaties + } + } + else = { + save_temporary_scope_value_as = { + name = should_be_trinket + value = yes + } + create_artifact_book_effect = { + OWNER = root + CREATOR = root + SET_SUBJECT = flag:learning + SET_TOPIC = flag:learning_theological_treaties + } + } + hidden_effect_new_object = { + scope:newly_created_artifact = { + set_artifact_name = sic_et_non_book_name + set_artifact_description = sic_et_non_book_desc + set_artifact_rarity = famed + } + } + } + custom_tooltip = bp2_adult_education.1060.a.tt + scope:activity = { + add_activity_log_entry = { + key = sic_et_non_log + score = 25 + tags = { good learning activity } + character = root + + #Effect + custom_tooltip = adult_education_tt_positive_massive + scope:activity = { activity_special_type_progression_massive = yes } + } + } + } + stress_impact = { + base = medium_stress_impact_loss + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1060.a.success + send_interface_toast = { + title = bp2_adult_education.1060.a.success.tt + left_icon = root + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + } + stress_impact = { + base = minor_stress_impact_loss + } + } + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1060.a.failure + send_interface_toast = { + title = bp2_adult_education.1060.a.failure.tt + left_icon = root + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + } + stress_impact = { + base = medium_stress_impact_gain + } + } + } + + ai_chance = { + base = 100 + } + } + + # Option B: Goliardic Life intent: the answer is out of these walls! + option = { + name = bp2_adult_education.1060.b + trigger = { + has_activity_intent = university_revelry_intent + } + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1060.b.tt } + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + stress_impact = { + base = minor_stress_impact_loss + diligent = minor_stress_impact_gain + scholar = major_stress_impact_gain + theologian = major_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1060.c + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = lazy + add = 100 + } + modifier = { + has_trait = intellect_bad + add = 100 + } + modifier = { + has_trait = dull + add = 100 + } + } + } +} + +# Class debate vs other student + +bp2_adult_education.1070 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1070.t + desc = bp2_adult_education.1070.desc + theme = university + + left_portrait = { + character = scope:teacher + animation = thinking + outfit_tags = { spectacles_outfit } + } + center_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:student + animation = wedding_objection_start + } + lower_right_portrait = scope:student_2 + + cooldown = { years = 5 } + + trigger = { + scope:activity = { + any_attending_character = { + has_character_flag = student_1 + } + any_attending_character = { + has_character_flag = student_2 + } + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + } + save_scope_as = student + } + random_attending_character = { + limit = { + OR = { + has_character_flag = student_1 + has_character_flag = student_2 + } + this != scope:student + } + save_scope_as = student_2 + } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + + } + + # Option A: Study hard intent: + option = { + name = bp2_adult_education.1070.a + trigger = { + has_activity_intent = study_hard_intent + } + duel = { + skill = learning + target = scope:student + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1070.a.success + send_interface_toast = { + title = bp2_adult_education.1070.a.success.tt + left_icon = root + right_icon = scope:student + + scope:activity = { + add_activity_log_entry = { + key = won_a_debate_log + score = 25 + tags = { } + character = root + target = scope:student + + #Effect + root = { + reverse_add_opinion = { + target = scope:teacher + modifier = proud_opinion + opinion = 20 + } + stress_impact = { + base = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + } + } + } + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1070.a.failure + send_interface_toast = { + title = bp2_adult_education.1070.a.failure.tt + left_icon = root + right_icon = scope:student + + scope:activity = { + add_activity_log_entry = { + key = won_a_debate_log + score = 25 + tags = { } + character = scope:student + target = root + + #Effect + root = { + stress_impact = { + base = medium_stress_impact_gain + shy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + } + } + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option B: Goliardic Life intent: + option = { + name = bp2_adult_education.1070.b + trigger = { + has_activity_intent = university_revelry_intent + } + duel = { + skill = diplomacy + target = scope:student + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_adult_education.1070.b.success + send_interface_toast = { + title = bp2_adult_education.1070.a.success.tt + left_icon = root + right_icon = scope:student + + scope:activity = { + add_activity_log_entry = { + key = won_a_debate_log + score = 25 + tags = { } + character = root + target = scope:student + + #Effect + root = { + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = major } + reverse_add_opinion = { + target = scope:teacher + modifier = proud_opinion + opinion = 20 + } + stress_impact = { + base = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + shy = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + } + } + } + custom_tooltip = adult_education_tt_positive_tiny + scope:activity = { activity_special_type_progression_tiny = yes } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_adult_education.1070.b.failure + send_interface_toast = { + title = bp2_adult_education.1070.a.failure.tt + left_icon = root + right_icon = scope:student + + scope:activity = { + add_activity_log_entry = { + key = won_a_debate_log + score = 25 + tags = { } + character = scope:student + target = root + + #Effect + root = { + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = minor } + stress_impact = { + base = medium_stress_impact_gain + shy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + } + } + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option C: opt-out + option = { + name = bp2_adult_education.1070.c + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:student_2 } + } + progress_towards_rival_effect = { + REASON = rival_put_me_in_the_spot + CHARACTER = scope:student_2 + OPINION = default_rival_opinion + } + } + stress_impact = { + shy = major_stress_impact_loss + reclusive = major_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = shy + add = 100 + } + modifier = { + has_trait = reclusive + add = 100 + } + } + } +} + +# Teacher is an infidel + +bp2_adult_education.1080 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1080.t + desc = bp2_adult_education.1080.desc + theme = university + + center_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:teacher + animation = idle + } + + cooldown = { years = 5 } + + trigger = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + OR = { + is_infidel_trigger = { WHO = this TARGET = root } + is_heathen_trigger = { WHO = this TARGET = root } + is_heretic_trigger = { WHO = this TARGET = root } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = zealous + add = 1 + } + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + OR = { + is_infidel_trigger = { WHO = this TARGET = root } + is_heathen_trigger = { WHO = this TARGET = root } + is_heretic_trigger = { WHO = this TARGET = root } + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: don't care as long as I learn + option = { + name = bp2_adult_education.1080.a + trigger = { + has_activity_intent = study_hard_intent + } + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + stress_impact = { + zealous = major_stress_impact_gain + theologian = major_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option B: Goliardic Life intent: prank + option = { + name = bp2_adult_education.1080.b + trigger = { + has_activity_intent = university_revelry_intent + } + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + bp2_goliards_potential_shenanigans_effect = { TITLE_VALUE = bp2_adult_education.1080.b.tt } + stress_impact = { + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option C: Zealous/Theologian: a disgrace! + option = { + name = bp2_adult_education.1080.c + trigger = { + OR = { + has_trait = zealous + has_focus_or_focus_trait_trigger = { FOCUS = learning_theology_focus } + has_trait = faith_warrior + has_trait = crusader_king + } + NOT = { + any_secret = { type = secret_non_believer } + } + } + add_piety = major_piety_gain + add_prestige = medium_prestige_gain + stress_impact = { + cynical = major_stress_impact_gain + gregarious = major_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + # Option D: secret non believer - convert + option = { + name = bp2_adult_education.1080.d + trigger = { + OR = { + any_secret = { type = secret_non_believer } + has_trait = cynical + } + is_ai = no + } + set_character_faith = scope:teacher.faith + if = { + limit = { + scope:teacher.faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher } + } + progress_towards_friend_effect = { + REASON = friend_converted_explorer + CHARACTER = scope:teacher + OPINION = 30 + } + } + else = { + scope:teacher = { + add_opinion = { + target = root + modifier = pious_opinion + opinion = 30 + } + } + } + stress_impact = { + zealous = massive_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_zeal = -0.5 + } + } + } + + # Option E: tolerance/learning + option = { + name = bp2_adult_education.1080.e + trigger = { + OR = { + has_trait = compassionate + has_trait = gregarious + has_trait = diligent + has_focus_or_focus_trait_trigger = { FOCUS = learning_scholarship_focus } + has_focus_or_focus_trait_trigger = { FOCUS = learning_medicine_focus } + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + } + } + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + add_character_modifier = tolerant_opinion_modifier + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:teacher } + } + progress_towards_friend_effect = { + REASON = friend_religious_tolerance + CHARACTER = scope:teacher + OPINION = default_friend_opinion + } + } + stress_impact = { + zealous = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + } + } + } +} + +# Study a live bird + +bp2_adult_education.1090 = { + type = activity_event + content_source = dlc_009 + title = bp2_adult_education.1090.t + desc = bp2_adult_education.1090.desc + theme = university + + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:teacher + animation = hunting_falcon + } + + cooldown = { years = 5 } + + trigger = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + has_trait = education_martial + } + } + add = 0.5 + } + modifier = { + scope:activity = { + any_attending_character = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + has_trait = lifestyle_hunter + } + } + add = 1 + } + } + + immediate = { + scope:activity = { + activity_location = { save_scope_as = location } + random_attending_character = { + limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + OR = { + has_trait = education_martial + has_trait = lifestyle_hunter + } + } + alternative_limit = { + OR = { + has_character_flag = teacher_1 + has_character_flag = teacher_2 + } + } + save_scope_as = teacher + } + } + } + + # Option A: Study hard intent: Kill it and study its innards + option = { + name = bp2_adult_education.1090.a + trigger = { + has_activity_intent = study_hard_intent + } + add_prestige = medium_prestige_loss + custom_tooltip = adult_education_tt_positive_major + scope:activity = { activity_special_type_progression_major = yes } + stress_impact = { + humble = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + zealous = medium_stress_impact_gain + lazy = medium_stress_impact_gain + craven = major_stress_impact_gain + } + if = { + limit = { + OR = { + culture = { has_cultural_tradition = tradition_vegetarianism } + faith = { has_doctrine = tenet_sanctity_of_nature } + } + } + custom_tooltip = bp2_adult_education.1090.a.tt + add_stress = major_stress_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = sadistic + add = 100 + } + modifier = { + has_trait = scholar + add = 100 + } + modifier = { + has_trait = whole_of_body + add = 100 + } + modifier = { + has_trait = diligent + add = 50 + } + modifier = { + has_trait = craven + add = -50 + } + modifier = { + has_trait = compassionate + add = -25 + } + } + } + + # Option B: Goliardic Life intent: Let it out and study the chaos + option = { + name = bp2_adult_education.1090.b + trigger = { + has_activity_intent = university_revelry_intent + } + flavor = bp2_adult_education.1090.b.tt + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = major } + scope:teacher = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -25 + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:teacher } + } + progress_towards_rival_effect = { + REASON = rival_chaos_in_class + CHARACTER = scope:teacher + OPINION = 0 + } + } + + stress_impact = { + forgiving = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + diligent = major_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = fickle + add = 50 + } + modifier = { + has_trait = gregarious + add = 50 + } + modifier = { + has_trait = shy + add = -100 + } + } + } + + #Option C: opt out - look from afar + option = { + name = bp2_adult_education.1090.c + custom_tooltip = adult_education_tt_positive_medium + scope:activity = { activity_special_type_progression_medium = yes } + stress_impact = { + brave = minor_stress_impact_gain + diligent = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 75 + } + } +} diff --git a/events/dlc/bp2/bp2_character_interaction_events.txt b/events/dlc/bp2/bp2_character_interaction_events.txt new file mode 100644 index 00000000..4bf676cc --- /dev/null +++ b/events/dlc/bp2/bp2_character_interaction_events.txt @@ -0,0 +1,514 @@ +namespace = bp2_character_interaction + +# Influence Ward's Personality - Success Event +bp2_character_interaction.1001 = { + type = character_event + content_source = dlc_009 + title = bp2_character_interaction.1001.t + desc = { + desc = bp2_character_interaction.1001.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:target_trait = trait:lustful } + desc = bp2_character_interaction.1001.desc_lustful + } + triggered_desc = { + trigger = { scope:target_trait = trait:chaste } + desc = bp2_character_interaction.1001.desc_chaste + } + triggered_desc = { + trigger = { scope:target_trait = trait:gluttonous } + desc = bp2_character_interaction.1001.desc_gluttonous + } + triggered_desc = { + trigger = { scope:target_trait = trait:temperate } + desc = bp2_character_interaction.1001.desc_temperate + } + triggered_desc = { + trigger = { scope:target_trait = trait:greedy } + desc = bp2_character_interaction.1001.desc_greedy + } + triggered_desc = { + trigger = { scope:target_trait = trait:generous } + desc = bp2_character_interaction.1001.desc_generous + } + triggered_desc = { + trigger = { scope:target_trait = trait:lazy } + desc = bp2_character_interaction.1001.desc_lazy + } + triggered_desc = { + trigger = { scope:target_trait = trait:diligent } + desc = bp2_character_interaction.1001.desc_diligent + } + triggered_desc = { + trigger = { scope:target_trait = trait:wrathful } + desc = bp2_character_interaction.1001.desc_wrathful + } + triggered_desc = { + trigger = { scope:target_trait = trait:calm } + desc = bp2_character_interaction.1001.desc_calm + } + triggered_desc = { + trigger = { scope:target_trait = trait:patient } + desc = bp2_character_interaction.1001.desc_patient + } + triggered_desc = { + trigger = { scope:target_trait = trait:impatient } + desc = bp2_character_interaction.1001.desc_impatient + } + triggered_desc = { + trigger = { scope:target_trait = trait:arrogant} + desc = bp2_character_interaction.1001.desc_arrogant + } + triggered_desc = { + trigger = { scope:target_trait = trait:humble } + desc = bp2_character_interaction.1001.desc_humble + } + triggered_desc = { + trigger = { scope:target_trait = trait:deceitful } + desc = bp2_character_interaction.1001.desc_deceitful + } + triggered_desc = { + trigger = { scope:target_trait = trait:honest } + desc = bp2_character_interaction.1001.desc_honest + } + triggered_desc = { + trigger = { scope:target_trait = trait:craven } + desc = bp2_character_interaction.1001.desc_craven + } + triggered_desc = { + trigger = { + scope:target_trait = trait:brave + scope:recipient = { is_landed = yes } + } + desc = bp2_character_interaction.1001.desc_brave_self + } + triggered_desc = { + trigger = { + scope:target_trait = trait:brave + scope:recipient = { exists = liege } + } + desc = bp2_character_interaction.1001.desc_brave_liege + } + triggered_desc = { + trigger = { + scope:target_trait = trait:brave + } + desc = bp2_character_interaction.1001.desc_brave_root + } + triggered_desc = { + trigger = { scope:target_trait = trait:shy } + desc = bp2_character_interaction.1001.desc_shy + } + triggered_desc = { + trigger = { scope:target_trait = trait:gregarious } + desc = bp2_character_interaction.1001.desc_gregarious + } + triggered_desc = { + trigger = { scope:target_trait = trait:ambitious } + desc = bp2_character_interaction.1001.desc_ambitious + } + triggered_desc = { + trigger = { scope:target_trait = trait:content } + desc = bp2_character_interaction.1001.desc_content + } + triggered_desc = { + trigger = { scope:target_trait = trait:arbitrary } + desc = bp2_character_interaction.1001.desc_arbitrary + } + triggered_desc = { + trigger = { scope:target_trait = trait:just } + desc = bp2_character_interaction.1001.desc_just + } + triggered_desc = { + trigger = { scope:target_trait = trait:cynical } + desc = bp2_character_interaction.1001.desc_cynical + } + triggered_desc = { + trigger = { scope:target_trait = trait:zealous } + desc = bp2_character_interaction.1001.desc_zealous + } + triggered_desc = { + trigger = { scope:target_trait = trait:paranoid } + desc = bp2_character_interaction.1001.desc_paranoid + } + triggered_desc = { + trigger = { scope:target_trait = trait:trusting } + desc = bp2_character_interaction.1001.desc_trusting + } + triggered_desc = { + trigger = { scope:target_trait = trait:compassionate } + desc = bp2_character_interaction.1001.desc_compassionate + } + triggered_desc = { + trigger = { scope:target_trait = trait:callous } + desc = bp2_character_interaction.1001.desc_callous + } + triggered_desc = { + trigger = { scope:target_trait = trait:sadistic } + desc = bp2_character_interaction.1001.desc_sadistic + } + triggered_desc = { + trigger = { scope:target_trait = trait:stubborn } + desc = bp2_character_interaction.1001.desc_stubborn + } + triggered_desc = { + trigger = { scope:target_trait = trait:fickle } + desc = bp2_character_interaction.1001.desc_fickle + } + triggered_desc = { + trigger = { scope:target_trait = trait:eccentric } + desc = bp2_character_interaction.1001.desc_eccentric + } + triggered_desc = { + trigger = { scope:target_trait = trait:vengeful } + desc = bp2_character_interaction.1001.desc_vengeful + } + triggered_desc = { + trigger = { scope:target_trait = trait:forgiving } + desc = bp2_character_interaction.1001.desc_forgiving + } + } + } + theme = family + override_background = { + trigger = { + scope:recipient = { + age < 12 + } + } + reference = bp2_nursery + } + override_background = { + trigger = { + scope:recipient = { + age >= 12 + } + } + reference = garden + } + + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:recipient + triggered_animation = { + trigger = { + OR = { + scope:target_trait = trait:greedy + scope:target_trait = trait:generous + } + } + animation = hunting_shortbow_rest_arrow_default + } + animation = admiration + } + + trigger = { + exists = scope:target_trait + } + + immediate = { + scope:recipient = { + set_favorite_toy_effect = yes + } + } + + option = { + name = bp2_character_interaction.1001.a + flavor = bp2_character_interaction.1001.a.flavor + add_opinion = { + target = scope:recipient + modifier = pleased_opinion + opinion = 20 + } + scope:recipient = { + add_trait = scope:target_trait + add_opinion = { + target = root + modifier = admiration_opinion + opinion = 20 + } + } + if = { + limit = { + scope:recipient = { + any_parent = { + this != root + is_ai = no + } + } + } + scope:recipient = { + every_parent = { + limit = { + this != root + is_ai = no + } + send_interface_message = { + type = event_childhood_good_text + title = guardian_influenced_personality + desc = guardian_influenced_personality_desc + left_icon = scope:recipient + right_icon = scope:actor + } + } + } + } + stress_impact = { + base = minor_stress_impact_gain + } + } +} + +# Influence Ward's Personality - Basic Failure Event +bp2_character_interaction.1002 = { + type = character_event + content_source = dlc_009 + title = bp2_character_interaction.1002.t + desc = { + desc = bp2_character_interaction.1002.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:target_trait = trait:lustful } + desc = bp2_character_interaction.1002.desc_lustful + } + triggered_desc = { + trigger = { scope:target_trait = trait:chaste } + desc = bp2_character_interaction.1002.desc_chaste + } + triggered_desc = { + trigger = { scope:target_trait = trait:gluttonous } + desc = bp2_character_interaction.1002.desc_gluttonous + } + triggered_desc = { + trigger = { scope:target_trait = trait:temperate } + desc = bp2_character_interaction.1002.desc_temperate + } + triggered_desc = { + trigger = { scope:target_trait = trait:greedy } + desc = bp2_character_interaction.1002.desc_greedy + } + triggered_desc = { + trigger = { scope:target_trait = trait:generous } + desc = bp2_character_interaction.1002.desc_generous + } + triggered_desc = { + trigger = { scope:target_trait = trait:lazy } + desc = bp2_character_interaction.1002.desc_lazy + } + triggered_desc = { + trigger = { scope:target_trait = trait:diligent } + desc = bp2_character_interaction.1002.desc_diligent + } + triggered_desc = { + trigger = { scope:target_trait = trait:wrathful } + desc = bp2_character_interaction.1002.desc_wrathful + } + triggered_desc = { + trigger = { scope:target_trait = trait:calm } + desc = bp2_character_interaction.1002.desc_calm + } + triggered_desc = { + trigger = { scope:target_trait = trait:patient } + desc = bp2_character_interaction.1002.desc_patient + } + triggered_desc = { + trigger = { scope:target_trait = trait:impatient } + desc = bp2_character_interaction.1002.desc_impatient + } + triggered_desc = { + trigger = { scope:target_trait = trait:arrogant} + desc = bp2_character_interaction.1002.desc_arrogant + } + triggered_desc = { + trigger = { scope:target_trait = trait:humble } + desc = bp2_character_interaction.1002.desc_humble + } + triggered_desc = { + trigger = { scope:target_trait = trait:deceitful } + desc = bp2_character_interaction.1002.desc_deceitful + } + triggered_desc = { + trigger = { scope:target_trait = trait:honest } + desc = bp2_character_interaction.1002.desc_honest + } + triggered_desc = { + trigger = { scope:target_trait = trait:craven } + desc = bp2_character_interaction.1002.desc_craven + } + triggered_desc = { + trigger = { scope:target_trait = trait:brave } + desc = bp2_character_interaction.1002.desc_brave + } + triggered_desc = { + trigger = { scope:target_trait = trait:shy } + desc = bp2_character_interaction.1002.desc_shy + } + triggered_desc = { + trigger = { scope:target_trait = trait:gregarious } + desc = bp2_character_interaction.1002.desc_gregarious + } + triggered_desc = { + trigger = { scope:target_trait = trait:ambitious } + desc = bp2_character_interaction.1002.desc_ambitious + } + triggered_desc = { + trigger = { scope:target_trait = trait:content } + desc = bp2_character_interaction.1002.desc_content + } + triggered_desc = { + trigger = { scope:target_trait = trait:arbitrary } + desc = bp2_character_interaction.1002.desc_arbitrary + } + triggered_desc = { + trigger = { scope:target_trait = trait:just } + desc = bp2_character_interaction.1002.desc_just + } + triggered_desc = { + trigger = { scope:target_trait = trait:cynical } + desc = bp2_character_interaction.1002.desc_cynical + } + triggered_desc = { + trigger = { scope:target_trait = trait:zealous } + desc = bp2_character_interaction.1002.desc_zealous + } + triggered_desc = { + trigger = { scope:target_trait = trait:paranoid } + desc = bp2_character_interaction.1002.desc_paranoid + } + triggered_desc = { + trigger = { scope:target_trait = trait:trusting } + desc = bp2_character_interaction.1002.desc_trusting + } + triggered_desc = { + trigger = { scope:target_trait = trait:compassionate } + desc = bp2_character_interaction.1002.desc_compassionate + } + triggered_desc = { + trigger = { scope:target_trait = trait:callous } + desc = bp2_character_interaction.1002.desc_callous + } + triggered_desc = { + trigger = { scope:target_trait = trait:sadistic } + desc = bp2_character_interaction.1002.desc_sadistic + } + triggered_desc = { + trigger = { scope:target_trait = trait:stubborn } + desc = bp2_character_interaction.1002.desc_stubborn + } + triggered_desc = { + trigger = { scope:target_trait = trait:fickle } + desc = bp2_character_interaction.1002.desc_fickle + } + triggered_desc = { + trigger = { scope:target_trait = trait:eccentric } + desc = bp2_character_interaction.1002.desc_eccentric + } + triggered_desc = { + trigger = { scope:target_trait = trait:vengeful } + desc = bp2_character_interaction.1002.desc_vengeful + } + triggered_desc = { + trigger = { scope:target_trait = trait:forgiving } + desc = bp2_character_interaction.1002.desc_forgiving + } + } + } + theme = family + override_background = { + trigger = { + scope:recipient = { + age < 12 + } + } + reference = bp2_nursery + } + override_background = { + trigger = { + scope:recipient = { + age >= 12 + } + } + reference = garden + } + + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:recipient + triggered_animation = { + trigger = { + OR = { + scope:target_trait = trait:greedy + scope:target_trait = trait:generous + } + } + animation = hunting_shortbow_rest_arrow_default + } + triggered_animation = { + trigger = { scope:target_trait = trait:paranoid } + animation = disapproval + } + triggered_animation = { + trigger = { scope:recipient = { age >= 12 } } + animation = shame + } + animation = clutching_toy + } + + immediate = { + scope:recipient = { + set_favorite_toy_effect = yes + } + } + + option = { + name = bp2_character_interaction.1002.a + flavor = bp2_character_interaction.1002.a.flavor + scope:recipient = { + add_opinion = { + target = root + modifier = confused_opinion + opinion = -20 + } + } + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + if = { + limit = { + scope:recipient = { + any_parent = { + this != root + is_ai = no + } + } + } + scope:recipient = { + every_parent = { + limit = { + this != root + is_ai = no + } + send_interface_message = { + type = event_childhood_bad_text + title = guardian_influenced_personality_fail + desc = guardian_influenced_personality_fail_desc + left_icon = scope:recipient + right_icon = scope:actor + } + } + } + } + stress_impact = { + base = medium_stress_impact_gain + } + } +} diff --git a/events/dlc/bp2/bp2_child_of_destiny_events.txt b/events/dlc/bp2/bp2_child_of_destiny_events.txt new file mode 100644 index 00000000..62fc2567 --- /dev/null +++ b/events/dlc/bp2/bp2_child_of_destiny_events.txt @@ -0,0 +1,1891 @@ +namespace = destiny_child + +################################################## +# The Child of Destiny +# by Nick Meredith +################################################## + +#Lead-in event +destiny_child.0001 = { + type = character_event + content_source = dlc_009 + title = destiny_child.0001.t + desc = destiny_child.0001.desc + theme = family + override_background = { reference = corridor_day } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:destiny_child + animation = personality_honorable + } + cooldown = { years = 100 } #Ensure we don't have too many children of destiny! + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + #You are either a parent or guardian of a wondrous child + OR = { + any_warden_hostage = { + age < 14 + age > 9 + NOR = { #Allowed to be physically weak, but not an idiot + has_trait = intellect_bad + has_trait = dull + } + } + any_child = { + age < 14 + age > 9 + NOR = { #Allowed to be physically weak, but not an idiot + has_trait = intellect_bad + has_trait = dull + } + save_temporary_scope_as = child_destiny + } + } + } + + immediate = { + if = { + limit = { + any_warden_hostage = { + age < 14 + age > 9 + NOR = { + has_trait = intellect_bad + has_trait = dull + } + } + } + random_warden_hostage = { + limit = { + age < 14 + age > 9 + NOR = { + has_trait = intellect_bad + has_trait = dull + } + } + save_scope_as = destiny_child + } + } + else = { + random_child = { + limit = { + age < 14 + age > 9 + NOR = { + has_trait = intellect_bad + has_trait = dull + } + } + save_scope_as = destiny_child + } + } + } + + #Yes, I think they are! + option = { + name = destiny_child.0001.a + + flavor = destiny_child.0001.a.tt + + scope:destiny_child = { + add_character_modifier = { + modifier = bp2_destined_modifier + } + set_variable = { + name = destiny_child + value = scope:destiny_child + } + } + + create_story = { + type = story_destiny_child + save_scope_as = story + } + + random_owned_story = { + type = story_destiny_child + set_variable = { + name = destiny_child + value = scope:destiny_child + } + } + + stress_impact = { + paranoid = minor_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + impatient = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 0.5 + } + } + } + + #What nonsense. + option = { + name = destiny_child.0001.b + + scope:destiny_child = { + add_character_modifier = { + modifier = bp2_stifled_potential_modifier + years = 10 + } + } + + stress_impact = { + paranoid = minor_stress_impact_loss + content = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + diligent = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + ai_sociability = -0.5 + } + } + } +} + +#Child is developing physically +destiny_child.1000 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1000.t + desc = destiny_child.1000.desc + theme = physical_health + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:destiny_child + animation = marshal_wooden_sword + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + #Just to make sure it doesn't seem strange + scope:destiny_child = { + NOR = { + has_trait = weak + has_trait = physique_bad + } + } + } + + #Yes, continue as you're doing! + option = { + name = destiny_child.1000.a + + scope:destiny_child = { + add_trait = strong + add_prowess_skill = 2 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + strong = minor_stress_impact_loss + lazy = minor_stress_impact_gain + content = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 0.5 + } + } + } + + #Remember to be sensible + option = { + name = destiny_child.1000.b + + scope:destiny_child = { + add_trait = athletic + add_martial_skill = 2 + } + + stress_impact = { + diligent = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + athletic = minor_stress_impact_loss + lazy = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = -0.5 + } + } + } +} + +#Child is debating religious scholars +destiny_child.1005 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1005.t + desc = destiny_child.1005.desc + theme = learning + override_background = { reference = garden } + left_portrait = { + character = root + animation = personality_zealous + } + right_portrait = { + character = scope:destiny_child + animation = go_to_your_room + } + lower_right_portrait = { + character = scope:realm_priest + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + OR = { + cp:councillor_court_chaplain ?= { + is_available_ai_adult = yes + location = root.location + } + any_court_position_holder = { + type = camp_priest_camp_officer + is_available_ai_adult = yes + location = root.location + } + } + } + + immediate = { + + cp:councillor_court_chaplain ?= { + save_scope_as = realm_priest + } + if = { + limit = { + NOT = { exists = scope:realm_priest } + } + random_court_position_holder = { + type = camp_priest_camp_officer + save_scope_as = realm_priest + } + } + } + + #Really push yourself! + option = { + name = destiny_child.1005.a + + if = { + limit = { + scope:destiny_child = { + NOT = { + has_trait = shrewd + } + } + } + scope:destiny_child = { + random = { + chance = 75 + add_trait = shrewd + } + } + } + else = { + scope:destiny_child = { + random = { + chance = 75 + add_learning_skill = 4 + } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + zealous = minor_stress_impact_loss + lazy = minor_stress_impact_gain + content = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_sociability = 0.5 + } + } + } + + #You should be a warrior first! + option = { + name = destiny_child.1005.b + + scope:destiny_child = { + add_learning_skill = -1 + add_martial_skill = { 1 2 } + add_prowess_skill = { 1 2 } + } + + reverse_add_opinion = { + target = scope:realm_priest + modifier = disappointed_opinion + opinion = -30 + } + + stress_impact = { + brave = miniscule_stress_impact_loss + cynical = minor_stress_impact_loss + wrathful = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + zealous = medium_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + ai_sociability = -0.5 + } + } + } + + #Keep it up + option = { + name = destiny_child.1005.c + + scope:destiny_child = { + add_learning_skill = 2 + add_stress = minor_stress_loss + } + + stress_impact = { + diligent = miniscule_stress_impact_gain + ambitious = miniscule_stress_impact_gain + zealous = medium_stress_impact_gain + lazy = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + cynical = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } +} + +#They offer advice on military strategy +destiny_child.1010 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1010.t + desc = destiny_child.1010.desc + theme = martial + override_background = { + reference = study + } + left_portrait = { + character = root + animation = throne_room_one_handed_passive_2 + } + right_portrait = { + character = scope:destiny_child + animation = thinking + } + lower_right_portrait = { + character = scope:marshal + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + OR = { + root.cp:councillor_marshal ?= { + location = root.location + is_available_ai_adult = yes + } + any_court_position_holder = { + type = second_camp_officer + is_available_ai_adult = yes + } + } + } + + immediate = { + if = { + limit = { + exists = root.cp:councillor_marshal + } + cp:councillor_marshal = { + save_scope_as = marshal + } + } + else = { + random_court_position_holder = { + type = second_camp_officer + save_scope_as = marshal + } + } + } + + #Well done! But there is another way... + option = { + name = destiny_child.1010.a + + trigger = { + OR = { + martial > 15 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + } + + flavor = destiny_child.1010.a.tt + + scope:destiny_child = { + add_martial_skill = { 3 5 } + } + + stress_impact = { + base = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + lazy = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + strategist = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + #My goodness, they're right! + option = { + name = destiny_child.1010.b + + trigger = { + NOR = { + martial > 15 + has_trait = education_martial_4 + } + } + + scope:destiny_child = { + add_martial_skill = { 2 4 } + } + + stress_impact = { + brave = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + lazy = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + strategist = minor_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_boldness = 0.5 + ai_honor = 1 + } + } + } + + #Go over it with me again? + option = { + name = destiny_child.1010.c + + scope:destiny_child = { + add_martial_skill = { 1 2 } + } + + add_character_modifier = { + modifier = bp2_destiny_tutor_modifier + years = 20 + } + + add_martial_lifestyle_xp = minor_lifestyle_experience + + stress_impact = { + paranoid = minor_stress_impact_loss + content = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + diligent = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = 1 + } + } + } +} + +#You find the child practicing the blade with a knight +destiny_child.1015 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1015.t + desc = destiny_child.1015.desc + theme = martial + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:destiny_child + animation = sword_coup_degrace + } + lower_right_portrait = { + character = scope:knight + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + any_knight = { + location = root.location + is_available_ai_adult = yes + } + } + + immediate = { + random_knight = { + limit = { + location = root.location + is_available_ai_adult = yes + } + save_scope_as = knight + } + } + + #Push yourself. You must achieve greatness! + option = { + name = destiny_child.1015.a + + scope:destiny_child = { + duel = { + skill = prowess + target = scope:knight + + 50 = { #They push themselves to new heights + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = destiny_child.1015.a.success + send_interface_toast = { + title = destiny_child.1015.a.success + left_icon = root + right_icon = scope:destiny_child + + scope:destiny_child = { + add_prowess_skill = { 2 4 } + } + } + } + + 40 = { #They exert themselves too hard and injure themselves + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = destiny_child.1015.a.failure + send_interface_toast = { + title = destiny_child.1015.a.failure + left_icon = root + right_icon = scope:destiny_child + + scope:destiny_child = { + increase_wounds_effect = { REASON = accident } + } + } + } + + 10 = { #They are woefully short of standards and gain something potentially nasty + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = destiny_child.1015.a.critfailure + send_interface_toast = { + title = destiny_child.1015.a.critfailure + left_icon = root + right_icon = scope:destiny_child + + scope:destiny_child = { + random_list = { + 1 = { + add_trait = scarred + } + 1 = { + add_trait = disfigured + } + 1 = { + apply_maimed_trait_and_modifier_effect = yes + } + } + progress_towards_rival_effect = { + REASON = rival_pushed_too_far + CHARACTER = root + OPINION = default_rival_opinion + } + } + } + } + } + } + + stress_impact = { + humble = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + diligent = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_energy = -0.5 + } + } + } + + #Here, let me teach you + option = { + name = destiny_child.1015.b + + duel = { + skill = prowess + value = high_skill_rating + + 50 = { #You teach them even better than the knight would + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = destiny_child.1015.b.success + send_interface_toast = { + title = destiny_child.1015.b.success + left_icon = root + right_icon = scope:destiny_child + + add_stress = minor_stress_loss + + scope:destiny_child = { + add_prowess_skill = { 3 5 } + } + } + } + + 50 = { #Your skills already pale next to the chosen one's + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = destiny_child.1015.b.failure + send_interface_toast = { + title = destiny_child.1015.b.failure + left_icon = root + right_icon = scope:destiny_child + + add_stress = minor_stress_gain + + scope:destiny_child = { + add_prowess_skill = -1 + } + } + } + } + + stress_impact = { + humble = minor_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + diligent = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + #Keep at it, you two, and a penny for [knight's] troubles! + option = { + name = destiny_child.1015.c + + scope:destiny_child = { + add_prowess_skill = { 1 2 } + } + + pay_short_term_gold = { + target = scope:knight + gold = 15 + } + + reverse_add_opinion = { + target = scope:knight + modifier = grateful_opinion + opinion = 15 + } + + stress_impact = { + humble = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + generous = miniscule_stress_impact_loss + arrogant = minor_stress_impact_gain + shy = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_greed = -1 + } + } + } +} + +#They learn from a midwife or physician +destiny_child.1020 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1020.t + desc = destiny_child.1020.desc + theme = physical_health + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:destiny_child + animation = throne_room_conversation_1 + } + lower_right_portrait = { + character = scope:herbalist + } + lower_left_portrait = { + character = scope:physician + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + #You have a court physician + court_position:court_physician_court_position ?= { + location = root.location + } + + #Ensure landed + is_landed = yes + } + + immediate = { + court_position:court_physician_court_position = { save_scope_as = physician } + if = { + limit = { + any_courtier_or_guest = { + location = root.location + is_available_ai_adult = yes + has_trait = lifestyle_herbalist + scope:physician != this + } + } + random_courtier_or_guest = { + limit = { + location = root.location + is_available_ai_adult = yes + has_trait = lifestyle_herbalist + scope:physician != this + } + save_scope_as = herbalist + } + } + else = { + create_character = { + template = servant_character + dynasty = none + location = root.capital_province + gender_female_chance = 50 + save_scope_as = herbalist + after_creation = { + add_character_flag = created + } + } + scope:herbalist = { + add_trait = lifestyle_herbalist + } + } + + } + + #Your time with the physician could be time well spent + option = { + name = destiny_child.1020.a + + scope:destiny_child = { + add_trait = lifestyle_physician + add_learning_skill = 2 + } + + stress_impact = { + trusting = minor_stress_impact_gain + paranoid = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + } + } + } + + #Herbalism is an interesting area of research! + option = { + name = destiny_child.1020.b + + scope:destiny_child = { + add_trait = lifestyle_herbalist + add_learning_skill = 2 + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + } + } + } + + #Just... don't let it take too much time away from your studies + option = { + name = destiny_child.1020.c + + scope:destiny_child = { + random = { + chance = 25 + add_trait = lifestyle_herbalist + } + random = { + chance = 25 + add_trait = lifestyle_physician + } + random_list = { + 1 = { + add_diplomacy_skill = { 1 2 } + } + 1 = { + add_martial_skill = { 1 2 } + } + 1 = { + add_stewardship_skill = { 1 2 } + } + 1 = { + add_intrigue_skill = { 1 2 } + } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_honor = 0.5 + } + } + } + after = { + scope:herbalist = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +#A great knight has heard of your child's ability and wants to meet them +destiny_child.1025 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1025.t + desc = destiny_child.1025.desc + theme = martial + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:famous_knight + animation = jockey_idle + camera = camera_event_horse_right + } + lower_center_portrait = { + character = scope:destiny_child + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + } + + immediate = { + create_character = { + template = new_commander_character + dynasty = none + culture = root.culture + faith = root.faith + location = root.location + gender_female_chance = root_soldier_female_chance + save_scope_as = famous_knight + } + hidden_effect = { + scope:famous_knight = { + add_trait = tourney_participant + random_list = { + 1 = { + add_trait_xp = { + trait = tourney_participant + track = horse + value = { + integer_range = { + min = 50 + max = 75 + } + } + } + } + 1 = { + add_trait_xp = { + trait = tourney_participant + track = bow + value = { + integer_range = { + min = 50 + max = 75 + } + } + } + } + 1 = { + add_trait_xp = { + trait = tourney_participant + track = foot + value = { + integer_range = { + min = 50 + max = 75 + } + } + } + } + } + } + } + } + + #STAY AWAY! + option = { + name = destiny_child.1025.a + + trigger = { + has_trait = paranoid + } + + scope:destiny_child = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } + + reverse_add_opinion = { + target = scope:destiny_child + modifier = disappointed_opinion + opinion = -15 + } + + reverse_add_opinion = { + target = scope:famous_knight + modifier = annoyed_opinion + opinion = -25 + } + + stress_impact = { + base = major_stress_impact_loss #Throw Paranoid a bit of a bone + content = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + ambitious = minor_stress_impact_gain + diligent = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = -1 + } + } + } + + #Train them? A wonderful idea! + option = { + name = destiny_child.1025.b + + scope:destiny_child = { + add_trait = tourney_participant + } + + if = { + limit = { + scope:famous_knight = { + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 70 + } + } + } + scope:destiny_child = { + add_trait_xp = { + trait = tourney_participant + track = horse + value = { + integer_range = { + min = 25 + max = 75 + } + } + } + } + } + else_if = { + limit = { + scope:famous_knight = { + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 70 + } + } + } + scope:destiny_child = { + add_trait_xp = { + trait = tourney_participant + track = bow + value = { + integer_range = { + min = 25 + max = 75 + } + } + } + } + } + else = { + scope:destiny_child = { + add_trait_xp = { + trait = tourney_participant + track = foot + value = { + integer_range = { + min = 25 + max = 75 + } + } + } + } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 0.5 + } + } + } + + #Perhaps the knight can stay? + option = { + name = destiny_child.1025.c + + add_courtier = scope:famous_knight + + scope:destiny_child = { + add_prowess_skill = 1 + } + + stress_impact = { + generous = miniscule_stress_impact_loss + greedy = minor_stress_impact_gain + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_sociability = 1 + } + } + } + after = { + scope:famous_knight = { + silent_disappearance_ai_effect = yes + } + } +} + +#You designate the child as your primary heir +destiny_child.1030 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1030.t + desc = destiny_child.1030.desc + theme = family + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:destiny_child + animation = personality_honorable + } + lower_center_portrait = { + character = scope:current_heir + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Age check + is_available_adult = yes + + #Ensure you are actually their liege and they aren't your primary heir + any_heir = { + has_variable = destiny_child + NOT = { + is_primary_heir_of = root + } + } + + any_heir = { + is_primary_heir_of = root + NOT = { + has_variable = destiny_child + } + } + + #Ensure you can't already just switch 'em + NOT = { + has_realm_law = crown_authority_3 + } + } + + immediate = { + random_heir = { + limit = { + is_primary_heir_of = root + this != scope:destiny_child + } + save_scope_as = current_heir + } + } + + #Try to work them into position + option = { + name = destiny_child.1030.a + + trigger = { + OR = { + intrigue > 15 + has_trait = schemer + } + } + + duel = { + skill = intrigue + value = decent_skill_rating + + 50 = { #You subtly shift them into position + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = destiny_child.1030.a.success + + send_interface_toast = { + title = designate_heir_interaction_notification + left_icon = root + right_icon = scope:destiny_child + + set_designated_heir = scope:destiny_child + } + } + + 50 = { #You fail to do it quietly + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = destiny_child.1030.a.failure + send_interface_toast = { + title = designate_heir_interaction_notification + left_icon = root + right_icon = scope:destiny_child + + set_designated_heir = scope:destiny_child + + add_tyranny = medium_tyranny_gain + + add_prestige = medium_prestige_loss + + every_vassal = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + modifier = angry_opinion + opinion = -40 + target = root + } + } + } + } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = medium_stress_impact_gain + deceitful = miniscule_stress_impact_loss + honest = minor_stress_impact_gain + patient = minor_stress_impact_loss + impatient = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 0.5 + } + } + } + + #Designate them your heir + option = { + name = destiny_child.1030.b + + set_designated_heir = scope:destiny_child + + add_tyranny = medium_tyranny_gain + + add_prestige = major_prestige_loss + + every_vassal = { + limit = { + NOT = { + has_vassal_stance = courtly + } + } + custom = all_vassals + add_opinion = { + modifier = suspicion_opinion + opinion = -40 + target = root + } + } + + every_vassal = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + modifier = angry_opinion + opinion = -60 + target = root + } + } + + reverse_add_opinion = { + target = scope:destiny_child + modifier = grateful_opinion + opinion = 35 + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + patient = minor_stress_impact_gain + impatient = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 0.5 + } + } + } + + #Leave it as it is + option = { + name = destiny_child.1030.c + + flavor = destiny_child.1030.c.tt + + if = { + limit = { + scope:current_heir = { + is_ai = yes + } + } + scope:current_heir = { + add_stewardship_skill = { 1 2 } + } + } + scope:destiny_child = { + add_intrigue_skill = { 2 3 } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_compassion = 0.5 + } + } + } +} + +#The destiny child is being fawned over by their peers +destiny_child.1035 = { + type = character_event + content_source = dlc_009 + title = destiny_child.1035.t + desc = { + desc = destiny_child.1035.desc + triggered_desc = { + trigger = { + scope:destiny_child = { + NOR = { + is_attracted_to_gender_of = scope:flirter_1 + is_attracted_to_gender_of = scope:flirter_2 + } + } + } + desc = destiny_child.1035.notinterested + } + triggered_desc = { + trigger = { + scope:destiny_child = { + OR = { + is_attracted_to_gender_of = scope:flirter_1 + is_attracted_to_gender_of = scope:flirter_2 + } + } + } + desc = destiny_child.1035.interested + } + } + theme = love + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:destiny_child + animation = flirtation + } + lower_center_portrait = { + character = scope:flirter_1 + } + lower_right_portrait = { + character = scope:flirter_2 + } + cooldown = { years = 10 } + trigger = { + has_bp2_dlc_trigger = yes + + #Standard checks check + is_available_adult = yes + location = capital_province #To ensure the pool triggers work + + #Make sure destiny child is old enough for this not to be weird + scope:destiny_child = { + age > 12 + } + + #Ensure landed + is_landed = yes + } + + immediate = { + + create_character = { + template = servant_character + age = { 12 15 } + dynasty = none + location = root.location + gender_female_chance = scope:destiny_child.marriage_gender_adjusted_female_chance + save_scope_as = flirter_1 + } + + create_character = { + template = servant_character + age = { 12 15 } + dynasty = none + location = root.location + gender_female_chance = scope:destiny_child.marriage_gender_adjusted_female_chance + save_scope_as = flirter_2 + } + + hidden_effect = { #Tooltip doesn't like this for some reason + scope:flirter_1 = { + set_relation_crush = scope:destiny_child + } + scope:flirter_2 = { + set_relation_crush = scope:destiny_child + } + } + } + + #Destiny child seems taken with the first one! + option = { + name = destiny_child.1035.a + + trigger = { + scope:destiny_child = { + is_attracted_to_gender_of = scope:flirter_1 + } + } + + if = { + limit = { + scope:destiny_child = { + AND = { + number_of_personality_traits < childhood_personality_trait_gain_limit + NOR = { + has_trait = lustful + has_trait = chaste + } + } + } + } + random = { + chance = 50 + scope:destiny_child = { + add_trait = lustful + } + } + } + + add_courtier = scope:flirter_1 + + scope:destiny_child = { + set_relation_crush = scope:flirter_1 + } + + reverse_add_opinion = { + target = scope:flirter_1 + modifier = grateful_opinion + opinion = 35 + } + + stress_impact = { + lustful = miniscule_stress_impact_loss + chaste = minor_stress_impact_gain + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_sociability = 1 + } + } + } + + #Destiny child seems taken with the second one! + option = { + name = destiny_child.1035.b + + trigger = { + scope:destiny_child = { + is_attracted_to_gender_of = scope:flirter_2 + } + } + + if = { + limit = { + scope:destiny_child = { + AND = { + number_of_personality_traits < childhood_personality_trait_gain_limit + NOR = { + has_trait = lustful + has_trait = chaste + } + } + } + } + random = { + chance = 50 + scope:destiny_child = { + add_trait = lustful + } + } + } + + add_courtier = scope:flirter_2 + + scope:destiny_child = { + set_relation_crush = scope:flirter_2 + } + + reverse_add_opinion = { + target = scope:flirter_2 + modifier = grateful_opinion + opinion = 35 + } + + stress_impact = { + lustful = miniscule_stress_impact_loss + chaste = minor_stress_impact_gain + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_sociability = 1 + } + } + } + + #It's good that you don't let it get to you + option = { + name = destiny_child.1035.c + + trigger = { + scope:destiny_child = { + NOR = { + is_attracted_to_gender_of = scope:flirter_1 + is_attracted_to_gender_of = scope:flirter_2 + } + } + } + + if = { + limit = { + scope:destiny_child = { + AND = { + number_of_personality_traits < childhood_personality_trait_gain_limit + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + } + random = { + chance = 75 + scope:destiny_child = { + add_trait = diligent + } + } + } + + reverse_add_opinion = { + target = scope:destiny_child + modifier = confusedly_appreciative_opinion + opinion = 20 + } + + stress_impact = { + base = miniscule_stress_impact_loss + lustful = minor_stress_impact_gain + chaste = miniscule_stress_impact_loss + callous = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_compassion = 1 + } + } + } + + #Kid, you gotta concentrate! + option = { + name = destiny_child.1035.d + + flavor = destiny_child.1035.d.tt + + if = { + limit = { + scope:destiny_child = { + AND = { + number_of_personality_traits < childhood_personality_trait_gain_limit + NOR = { + has_trait = lustful + has_trait = chaste + } + } + } + } + random = { + chance = 50 + scope:destiny_child = { + add_trait = chaste + } + } + } + + random = { + chance = 25 + scope:destiny_child = { + add_diplomacy_skill = 1 + } + } + + random = { + chance = 25 + scope:destiny_child = { + add_stewardship_skill = 1 + } + } + + random = { + chance = 25 + scope:destiny_child = { + add_learning_skill = 1 + } + } + + reverse_add_opinion = { + target = scope:destiny_child + modifier = disappointed_opinion + opinion = -15 + } + + stress_impact = { + lustful = medium_stress_impact_gain + chaste = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + callous = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_sociability = -1 + } + } + } + after = { + scope:flirter_1 = { + silent_disappearance_ai_effect = yes + } + scope:flirter_2 = { + silent_disappearance_ai_effect = yes + } + } +} + +#Destiny child becomes an adult +destiny_child.9999 = { + type = character_event + content_source = dlc_009 + title = destiny_child.9999.t + desc = destiny_child.9999.desc + theme = family + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:destiny_child + animation = personality_honorable + } + override_background = { reference = council_chamber } + trigger = { + has_bp2_dlc_trigger = yes + } + + immediate = { + if = { + limit = { + scope:destiny_child = { + has_character_modifier = bp2_destined_modifier + } + } + scope:destiny_child = { + remove_character_modifier = bp2_destined_modifier + } + } + random_owned_story = { + type = story_destiny_child + end_story = yes + } + } + + #End story cycle + option = { + name = destiny_child.9999.a + + scope:destiny_child = { + add_character_modifier = bp2_tool_of_fate_modifier + } + + scope:destiny_child = { + add_diplomacy_skill = { 2 4 } + add_martial_skill = { 2 4 } + add_stewardship_skill = { 2 4 } + add_intrigue_skill = { 2 4 } + add_learning_skill = { 2 4 } + } + + scope:destiny_child = { remove_variable = destiny_child } + + stress_impact = { + base = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } +} diff --git a/events/dlc/bp2/bp2_decision_events.txt b/events/dlc/bp2/bp2_decision_events.txt new file mode 100644 index 00000000..d60c98db --- /dev/null +++ b/events/dlc/bp2/bp2_decision_events.txt @@ -0,0 +1,831 @@ +namespace = bp2_decision + +################################################## +# +# FIND WET NURSE +# 0001 Find a character to be a wet nurse +# +################################################## + +bp2_decision.0001 = { #find wet nurse candidates + type = character_event + content_source = dlc_009 + title = bp2_decision.0001.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = root.primary_spouse } + desc = bp2_decision.0001.desc + } + desc = bp2_decision.0001.desc_widower + } + } + theme = family + override_background = { + reference = bp2_nursery + } + left_portrait = { + character = scope:wet_nurse_candidate_1 + } + right_portrait = { + character = scope:wet_nurse_candidate_2 + } + + immediate = { + if = { + limit = { + any_spouse = { } + } + random_spouse = { + save_scope_as = spouse + } + } + hidden_effect = { + if = { + limit = { + exists = capital_province + any_pool_character = { + province = root.capital_province + can_be_employed_as = wet_nurse_court_position + } + } + random_pool_character = { + province = root.capital_province + limit = { can_be_employed_as = wet_nurse_court_position} + save_scope_as = wet_nurse_candidate_1 + } + if = { + limit = { + exists = capital_province + any_pool_character = { + province = root.capital_province + can_be_employed_as = wet_nurse_court_position + this != scope:wet_nurse_candidate_1 + } + } + save_scope_as = wet_nurse_candidate_2 + } + else = { + create_character = { #create poor candidate without a child + template = generic_peasant_character + gender = female + age = { 18 25 } + culture = root.culture + faith = root.faith + location = root.location + save_scope_as = wet_nurse_candidate_2 + } + } + } + else = { + create_character = { #create a good candidate with a child + template = bp2_wet_nurse_template + location = root.location + save_scope_as = wet_nurse_candidate_1 + } + create_character = { + template = peasant_child_character + age = { 0 5 } + culture = root.culture + faith = root.faith + location = root.location + save_scope_as = wet_nurse_candidate_1_child + } + scope:wet_nurse_candidate_1_child = { + set_mother = scope:wet_nurse_candidate_1 + } + create_character = { #create poor candidate without a child + template = generic_peasant_character + gender = female + age = { 18 25 } + culture = root.culture + faith = root.faith + location = root.location + save_scope_as = wet_nurse_candidate_2 + } + } + } + } + + # Expensive wet nurse with great health and a chance for good trait + option = { + name = bp2_decision.0001.a + custom_tooltip = bp2_decision.0001.a.aptitude + pay_treasury_or_gold = { + target = scope:wet_nurse_candidate_1 + value = tiny_treasury_or_gold_value + } + hidden_effect = { + add_courtier = scope:wet_nurse_candidate_1 + add_courtier = scope:wet_nurse_candidate_1_child + } + if = { #reappoint the former wet nurse, fire current one if exists + limit = { + employs_court_position = wet_nurse_court_position + } + every_court_position_holder = { + type = wet_nurse_court_position + save_temporary_scope_as = current_wet_nurse + } + replace_court_position = { + recipient = scope:wet_nurse_candidate_1 + holder = scope:current_wet_nurse + court_position = wet_nurse_court_position + } + } + else = { + appoint_court_position = { + recipient = scope:wet_nurse_candidate_1 + court_position = wet_nurse_court_position + } + } + stress_impact = { + greedy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + add = -100 + } + modifier = { + short_term_gold < minor_gold_value + factor = 0 + } + } + } + + # Cheaper wet nurse; all random traits + option = { + name = bp2_decision.0001.b + custom_tooltip = bp2_decision.0001.b.aptitude + pay_treasury_or_gold = { + target = scope:wet_nurse_candidate_2 + value = { + add = tiny_treasury_or_gold_value + divide = 3 + } + } + hidden_effect = { + add_courtier = scope:wet_nurse_candidate_2 + } + if = { #reappoint the former wet nurse, fire current one if exists + limit = { + employs_court_position = wet_nurse_court_position + } + every_court_position_holder = { + type = wet_nurse_court_position + save_temporary_scope_as = current_wet_nurse + } + replace_court_position = { + recipient = scope:wet_nurse_candidate_2 + holder = scope:current_wet_nurse + court_position = wet_nurse_court_position + } + } + else = { + appoint_court_position = { + recipient = scope:wet_nurse_candidate_2 + court_position = wet_nurse_court_position + } + } + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + short_term_gold < tiny_gold_value_check + factor = 0 + } + } + } + + # On seconds thoughts, I won't hire a wet nurse at all... + option = { + name = bp2_decision.0001.c + ai_chance = { + base = 0 + modifier = { + short_term_gold < tiny_gold_value_check + add = 10 + } + } + } + + after = { + if = { + limit = { scope:wet_nurse_candidate_1 = { has_court_position = wet_nurse_court_position } } + scope:wet_nurse_candidate_2 = { + silent_disappearance_effect = yes + } + } + else_if = { + limit = { scope:wet_nurse_candidate_2 = { has_court_position = wet_nurse_court_position } } + scope:wet_nurse_candidate_1 = { + silent_disappearance_effect = yes + } + scope:wet_nurse_candidate_1_child = { + silent_disappearance_effect = yes + } + } + else = { + scope:wet_nurse_candidate_1 = { + silent_disappearance_effect = yes + } + scope:wet_nurse_candidate_2 = { + silent_disappearance_effect = yes + } + scope:wet_nurse_candidate_1_child = { + silent_disappearance_effect = yes + } + } + } +} + +bp2_decision.0002 = { #rites of passage + type = character_event + content_source = dlc_009 + title = bp2_decision.0002.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal != root } + desc = bp2_decision.0002.desc + } + desc = bp2_decision.0002.desc_root + } + triggered_desc = { + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:duel + } + } + } + desc = bp2_decision.0002.desc_duel + } + triggered_desc = { + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:scarification + } + } + } + desc = bp2_decision.0002.desc_scarification + } + triggered_desc = { + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:seclusion + } + } + } + desc = bp2_decision.0002.desc_seclusion + } + triggered_desc = { + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:hair_shaving + } + } + } + desc = bp2_decision.0002.desc_hair_shaving + } + triggered_desc = { + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:cleansing + } + } + } + desc = bp2_decision.0002.desc_cleansing + } + first_valid = { + triggered_desc = { + trigger = { scope:teentribal != root } + desc = bp2_decision.0002.desc_end + } + desc = bp2_decision.0002.desc_end_root + } + } + theme = family + override_background = { + reference = holy_site_generic_scope + } + + left_portrait = { + character = root + animation = war_defender + } + right_portrait = { + trigger = { scope:teentribal != root } + character = scope:teentribal + animation = throne_room_bow_1 + } + lower_right_portrait = { + trigger = { exists = scope:priest } + character = scope:priest + } + + immediate = { + capital_province = { + save_scope_as = holy_site_scope + } + location = { + save_scope_as = rite_location + } + if = { + limit = { + is_landed = yes + character_can_rites_of_passage_trigger = yes + } + save_scope_as = teentribal + } + else_if = { + limit = { + any_child = { + character_can_rites_of_passage_trigger = yes + } + } + save_scope_as = liege + random_child = { + limit = { + character_can_rites_of_passage_trigger = yes + } + weight = { + base = 1 + modifier = { + has_character_flag = unproven_adult_flag + add = 100 + } + modifier = { + is_primary_heir_of = scope:liege + add = 100 + } + modifier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + add = 10 + } + } + save_scope_as = teentribal + } + } + else_if = { + limit = { + any_courtier = { + is_hostage_of = root + character_can_rites_of_passage_trigger = yes + } + } + save_scope_as = liege + random_courtier = { + limit = { + is_hostage_of = root + character_can_rites_of_passage_trigger = yes + } + weight = { + base = 1 + modifier = { + has_character_flag = unproven_adult_flag + add = 100 + } + modifier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + add = 10 + } + } + save_scope_as = teentribal + } + } + if = { #grab a court chaplain if you have one + limit = { + cp:councillor_court_chaplain ?= { + is_available_ai_adult = yes + } + } + cp:councillor_court_chaplain = { + save_scope_as = priest + } + } + if = { #duel rite for warrior cultures + limit = { + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + } + } + } + scope:teentribal = { + add_to_variable_list = { + name = possible_rites + target = flag:duel + } + } + } + if = { #scarification rite for warrior cultures + limit = { + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + has_cultural_pillar = ethos_communal + } + } + } + scope:teentribal = { + add_to_variable_list = { + name = possible_rites + target = flag:scarification + } + } + } + if = { #seclusion rite for non-communal cultures + limit = { + culture = { + NOT = { + has_cultural_pillar = ethos_communal + } + } + } + scope:teentribal = { + add_to_variable_list = { + name = possible_rites + target = flag:seclusion + } + } + } + if = { #hair shaving rite non-warrior cultures + limit = { + culture = { + OR = { + has_cultural_pillar = ethos_spiritual + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_bureaucratic + } + } + } + scope:teentribal = { + add_to_variable_list = { + name = possible_rites + target = flag:hair_shaving + } + } + } + if = { #cleansing for non-warrior cultures + limit = { + culture = { + NOT = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + } + } + } + scope:teentribal = { + add_to_variable_list = { + name = possible_rites + target = flag:cleansing + } + if = { + limit = { + scope:rite_location = { + OR = { + is_riverside_province = yes + is_coastal = yes + } + } + } + set_variable = { + name = cleansing_type + value = flag:water_cleanse + } + } + else = { + set_variable = { + name = cleansing_type + value = flag:fire_cleanse + } + } + } + } + } + + option = { #combat duel + name = bp2_decision.0002.a + flavor = bp2_decision.0002.a.flavor + custom_tooltip = bp2_decision.0002.a.tt + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:duel + } + } + } + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_decision.0002.a.win + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + } + } + 1= { + desc = bp2_decision.0002.a.lose + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + } + } + } + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:dueling_rite_memory + } + } + trigger_event = bp2_yearly.7021 + ai_chance = { + base = 1 + } + } + + option = { #scarification + name = bp2_decision.0002.b + flavor = bp2_decision.0002.b.tt + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:scarification + } + } + } + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_decision.0002.b_scarred + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + custom_tooltip = bp2_decision.0002.b_scarred.tt + } + } + 1= { + desc = bp2_decision.0002.b_modifier + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + } + } + } + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:scarification_rite_memory + } + } + trigger_event = bp2_yearly.7023 + ai_chance = { + base = 1 + } + } + + option = { #seclusion + name = bp2_decision.0002.c + flavor = bp2_decision.0002.c.tt + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:seclusion + } + } + } + show_as_tooltip = { + custom_tooltip = bp2_decision.0002.c.destination + random_list = { + 1 = { + desc = bp2_decision.0002.c_win + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.c_trait + } + } + 1= { + desc = bp2_decision.0002.c_lose + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 25 + } + increase_wounds_no_death_effect = { REASON = wild_animal } + } + } + } + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:seclusion_rite_memory + } + } + trigger_event = bp2_yearly.7024 + ai_chance = { + base = 1 + } + } + + option = { #hair shave + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:hair_shaving + } + } + } + name = bp2_decision.0002.d + flavor = bp2_decision.0002.d.tt + show_as_tooltip = { + random_list = { + 1 = { + show_chance = no + desc = bp2_decision.0002.d_bald + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_character_modifier = { + modifier = shaven_bald_modifier + years = 3 + } + custom_tooltip = bp2_decision.0002.effect_tt + add_piety = medium_piety_gain + } + } + 1 = { + show_chance = no + desc = bp2_decision.0002.d_shave + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + custom_tooltip = bp2_decision.0002.d_artifact + } + } + } + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:shaving_hair_rite_memory + } + } + trigger_event = bp2_yearly.7026 + ai_chance = { + base = 1 + } + } + + option = { #fire/water cleansing + trigger = { + scope:teentribal = { + is_target_in_variable_list = { + name = possible_rites + target = flag:cleansing + } + } + } + name = bp2_decision.0002.e + flavor = bp2_decision.0002.e.tt + show_as_tooltip = { + random_list = { + 1 = { + show_chance = no + desc = bp2_decision.0002.e.full + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + if = { + limit = { + num_sinful_traits > 0 + } + custom_tooltip = bp2_decision.0002.e_flip + } + custom_tooltip = bp2_decision.0002.effect_tt + add_piety = medium_piety_gain + if = { + limit = { + scope:teentribal.var:cleansing_type = flag:water_cleanse + } + add_stress = minor_stress_gain + } + else = { + add_character_modifier = { + modifier = scorched_soles_modifier + years = 5 + } + } + } + } + 1 = { + show_chance = no + desc = bp2_decision.0002.e.partially + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + custom_tooltip = bp2_decision.0002.effect_tt + } + } + } + } + if = { + limit = { + scope:teentribal.var:cleansing_type = flag:water_cleanse + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:water_cleanse_rite_memory + } + } + trigger_event = bp2_yearly.7027 + } + else_if = { + limit = { + scope:teentribal.var:cleansing_type = flag:fire_cleanse + } + scope:teentribal = { #set variable to determine which rite was completed when creating a memory + set_variable = { + name = chosen_rite_memory + value = flag:fire_cleanse_rite_memory + } + } + trigger_event = bp2_yearly.7028 + } + ai_chance = { + base = 1 + } + } + + option = { # opt out - trigger the decision cooldown, don't get your money back. Think of it as a non-refundable deposit. + name = bp2_decision.0002.f + flavor = bp2_decision.0002.tt + scope:teentribal ?= { + remove_variable ?= cleansing_type + remove_variable ?= chosen_rite_memory + clear_variable_list ?= possible_rites + } + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} diff --git a/events/dlc/bp2/bp2_hostage_system.txt b/events/dlc/bp2/bp2_hostage_system.txt new file mode 100644 index 00000000..5491a0ac --- /dev/null +++ b/events/dlc/bp2/bp2_hostage_system.txt @@ -0,0 +1,2266 @@ +namespace = bp2_hostage_system + +### +### WAR EXECUTION/SPARING +### + +scripted_effect bp2_new_war_joiner_save_hostages_effect = { + # Tidy up previous scopes + every_in_list = { + list = hostages + remove_from_list = hostages + } + clear_saved_scope = hostage + every_in_list = { + list = my_hostages + remove_from_list = my_hostages + } + clear_saved_scope = my_hostage + # Save our hostages from participants, who we have not previously spared + every_warden_hostage = { + limit = { + home_court ?= { is_at_war_with = root } + NOT = { + has_opinion_modifier = { + target = root + modifier = spared_me_opinion + } + } + save_temporary_scope_as = hostage_temp + scope:war = { is_participant = scope:hostage_temp.home_court } + } + add_to_list = hostages + } + random_in_list = { + list = hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = home_court } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = home_court } + } + save_scope_as = hostage + home_court = { save_scope_as = hostage_home_court } + } + # Save hostages of participants that we have, who have not been spared previously + if = { + limit = { + any_home_court_hostage = { + warden ?= { is_at_war_with = root } + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:hostage_temp.warden + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:hostage_temp.warden } + } + } + every_home_court_hostage = { + limit = { + warden ?= { is_at_war_with = root } + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:hostage_temp.warden + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:hostage_temp.warden } + } + add_to_list = my_hostages + } + random_in_list = { + list = my_hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = my_hostage + } + } +} + +scripted_effect bp2_execute_hostages_option_effect = { + save_scope_as = hostage_warden + every_in_list = { + list = hostages + save_scope_as = hostage + home_court = { save_scope_as = hostage_home_court } + show_as_tooltip = { bp2_execute_hostage_effect = yes } + scope:hostage_home_court = { + trigger_event = { id = bp2_hostage_system.0140 days = 1 } + } + } +} + +scripted_effect bp2_spared_hostage_option_effect = { + save_scope_as = hostage_sparer + every_in_list = { + list = hostages + add_opinion = { + target = scope:hostage_sparer + modifier = spared_me_opinion + opinion = 40 + } + } + scope:hostage_home_court = { + if = { + limit = { is_ai = yes} + if = { + limit = { + NOT = { + any_in_list = { + list = hostages + has_character_flag = byz_claimant_flag + } + } + } + add_opinion = { + target = scope:hostage_sparer + modifier = spared_hostage_opinion + opinion = 20 + } + } + } + trigger_event = { id = bp2_hostage_system.0141 days = 1 } + } + hidden_effect = { + scope:hostage_home_court = { + send_interface_toast = { + title = hostage_spared_toast + left_icon = scope:hostage + right_icon = scope:hostage_sparer + show_as_tooltip = { + scope:hostage = { + add_opinion = { + target = scope:hostage_sparer + modifier = spared_me_opinion + opinion = 40 + } + } + } + } + } + scope:hostage_sparer = { + send_interface_toast = { + title = hostage_spared_toast + left_icon = scope:hostage + right_icon = scope:hostage_home_court + show_as_tooltip = { + scope:hostage = { + add_opinion = { + target = scope:hostage_sparer + modifier = spared_me_opinion + opinion = 40 + } + } + } + } + } + } +} + +# Declare war and have hostage to execute +bp2_hostage_system.0100 = { + type = character_event + title = bp2_hostage_system.0100.t + desc = { + desc = bp2_hostage_system.0100.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:victim } + desc = bp2_hostage_system.0100.executed_hostage + } + triggered_desc = { + trigger = { exists = scope:hostage_sparer } + desc = bp2_hostage_system.0100.spared_hostage + } + desc = bp2_hostage_system.0100.desc + } + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = root + } + NOT = { exists = scope:hostage_sparer } + } + desc = bp2_hostage_system.0100.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + character = scope:hostage + animation = beg + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_home_court + + immediate = { + # Tidy up previous scopes + every_in_list = { + list = hostages + remove_from_list = hostages + } + clear_saved_scope = hostage + every_in_list = { + list = my_hostages + remove_from_list = my_hostages + } + clear_saved_scope = my_hostage + # Save our hostages from participants, who we have not previously spared + every_warden_hostage = { + limit = { + home_court ?= scope:defender + NOT = { + has_opinion_modifier = { + target = root + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:defender } + } + add_to_list = hostages + } + random_in_list = { + list = hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = home_court } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = home_court } + } + save_scope_as = hostage + } + scope:defender = { save_scope_as = hostage_home_court } + # Save hostages of participants that we have, who have not been spared previously + if = { + limit = { + any_home_court_hostage = { + warden ?= scope:defender + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:defender + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:defender } + } + } + every_home_court_hostage = { + limit = { + warden ?= scope:defender + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:defender + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:defender } + } + add_to_list = my_hostages + } + random_in_list = { + list = my_hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = my_hostage + } + } + } + + option = { + trigger = { + NOT = { + any_in_list = { + list = hostages + has_character_flag = byz_claimant_flag + } + } + } + name = bp2_hostage_system.0100.a + bp2_execute_hostages_option_effect = yes + ai_chance = { + base = 100 + modifier = { + exists = scope:victim + add = 50 + } + ai_value_modifier = { + ai_compassion = -0.25 + ai_vengefulness = 0.25 + } + } + } + + option = { + name = bp2_hostage_system.0100.b + bp2_spared_hostage_option_effect = yes + ai_chance = { + base = 0 + opinion_modifier = { + opinion_target = scope:hostage + multiplier = 1 + } + opinion_modifier = { + opinion_target = scope:hostage_home_court + multiplier = 0.5 + } + modifier = { + exists = scope:hostage_sparer + add = 50 + } + ai_value_modifier = { + ai_compassion = 0.25 + ai_vengefulness = -0.25 + } + } + } +} + +# Attacked and have hostage to execute +bp2_hostage_system.0110 = { + type = character_event + title = bp2_hostage_system.0110.t + desc = { + desc = bp2_hostage_system.0110.desc + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = root + } + NOT = { exists = scope:hostage_sparer } + } + desc = bp2_hostage_system.0100.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = beg + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:attacker + + immediate = { + # Tidy up previous scopes + every_in_list = { + list = hostages + remove_from_list = hostages + } + clear_saved_scope = hostage + every_in_list = { + list = my_hostages + remove_from_list = my_hostages + } + clear_saved_scope = my_hostage + # Save our hostages from participants, who we have not previously spared + every_warden_hostage = { + limit = { + home_court ?= scope:attacker + NOT = { + has_opinion_modifier = { + target = root + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:attacker } + } + add_to_list = hostages + } + random_in_list = { + list = hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = home_court } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = home_court } + } + save_scope_as = hostage + } + scope:attacker = { save_scope_as = hostage_home_court } + # Save hostages of participants that we have, who have not been spared previously + if = { + limit = { + any_home_court_hostage = { + warden ?= scope:attacker + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:attacker + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:attacker } + } + } + every_home_court_hostage = { + limit = { + warden ?= scope:attacker + save_temporary_scope_as = hostage_temp + NOT = { + has_opinion_modifier = { + target = scope:attacker + modifier = spared_me_opinion + } + } + scope:war = { is_participant = scope:attacker } + } + add_to_list = my_hostages + } + random_in_list = { + list = my_hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = my_hostage + } + } + } + + option = { + trigger = { + NOT = { + any_in_list = { + list = hostages + has_character_flag = byz_claimant_flag + } + } + } + name = bp2_hostage_system.0110.a + bp2_execute_hostages_option_effect = yes + ai_chance = { + base = 100 + modifier = { + exists = scope:victim + add = 50 + } + ai_value_modifier = { + ai_compassion = -0.25 + ai_vengefulness = 0.25 + } + } + } + + option = { + name = bp2_hostage_system.0110.b + bp2_spared_hostage_option_effect = yes + ai_chance = { + base = 0 + opinion_modifier = { + opinion_target = scope:hostage + multiplier = 1 + } + opinion_modifier = { + opinion_target = scope:hostage_home_court + multiplier = 0.5 + } + modifier = { + exists = scope:hostage_sparer + add = 50 + } + ai_value_modifier = { + ai_compassion = 0.25 + ai_vengefulness = -0.25 + } + } + } +} + +# Joined war and have hostage to execute +bp2_hostage_system.0120 = { + type = character_event + title = bp2_hostage_system.0120.t + desc = { + desc = bp2_hostage_system.0120.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:victim } + desc = bp2_hostage_system.0100.executed_hostage + } + triggered_desc = { + trigger = { exists = scope:hostage_sparer } + desc = bp2_hostage_system.0100.spared_hostage + } + desc = bp2_hostage_system.0120.desc + } + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = root + } + NOT = { exists = scope:hostage_sparer } + } + desc = bp2_hostage_system.0100.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = beg + } + lower_left_portrait = scope:my_hostage + lower_center_portrait = scope:war_joiner_ally + lower_right_portrait = scope:hostage_home_court + + trigger = { + any_warden_hostage = { + home_court ?= { is_at_war_with = root } + save_temporary_scope_as = hostage_temp + } + scope:war = { is_participant = scope:hostage_temp.home_court } + } + + immediate = { + save_scope_as = new_participant + bp2_new_war_joiner_save_hostages_effect = yes + } + + option = { + trigger = { + NOT = { + any_in_list = { + list = hostages + has_character_flag = byz_claimant_flag + } + } + } + name = bp2_hostage_system.0120.a + bp2_execute_hostages_option_effect = yes + ai_chance = { + base = 100 + modifier = { + exists = scope:victim + add = 50 + } + ai_value_modifier = { + ai_compassion = -0.25 + ai_vengefulness = 0.25 + } + } + } + + option = { + name = bp2_hostage_system.0120.b + bp2_spared_hostage_option_effect = yes + ai_chance = { + base = 0 + opinion_modifier = { + opinion_target = scope:hostage + multiplier = 1 + } + opinion_modifier = { + opinion_target = scope:hostage_home_court + multiplier = 0.5 + } + modifier = { + exists = scope:hostage_sparer + add = 50 + } + ai_value_modifier = { + ai_compassion = 0.25 + ai_vengefulness = -0.25 + } + } + } +} + +# Existing war participant and have hostage to execute from new war joiner +bp2_hostage_system.0130 = { + type = character_event + title = bp2_hostage_system.0130.t + desc = { + desc = bp2_hostage_system.0130.desc + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = root + } + NOT = { exists = scope:hostage_sparer } + } + desc = bp2_hostage_system.0100.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + character = scope:hostage + animation = beg + } + lower_left_portrait = scope:my_hostage + lower_center_portrait = scope:war_joiner_ally + lower_right_portrait = scope:hostage_home_court + cooldown = { days = 1 } + + trigger = { + any_warden_hostage = { home_court ?= scope:war_joiner } + } + + immediate = { + save_scope_as = existing_participant + bp2_new_war_joiner_save_hostages_effect = yes + } + + option = { + name = bp2_hostage_system.0130.a + bp2_execute_hostages_option_effect = yes + ai_chance = { + base = 100 + modifier = { + exists = scope:victim + add = 50 + } + ai_value_modifier = { + ai_compassion = -0.25 + ai_vengefulness = 0.25 + } + } + } + + option = { + name = bp2_hostage_system.0130.b + bp2_spared_hostage_option_effect = yes + ai_chance = { + base = 0 + opinion_modifier = { + opinion_target = scope:hostage + multiplier = 1 + } + opinion_modifier = { + opinion_target = scope:hostage_home_court + multiplier = 0.5 + } + modifier = { + exists = scope:hostage_sparer + add = 50 + } + ai_value_modifier = { + ai_compassion = 0.25 + ai_vengefulness = -0.25 + } + } + } +} + +# Inform home court of hostage execution +bp2_hostage_system.0140 = { + type = letter_event + opening = { desc = bp2_hostage_system.0140.opening } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:executioner = scope:war.primary_attacker } + desc = bp2_hostage_system.0140.attacker + } + triggered_desc = { + trigger = { scope:executioner = scope:war.primary_defender } + desc = bp2_hostage_system.0140.defender + } + triggered_desc = { + trigger = { + scope:executioner = { is_attacker_in_war = scope:war } + } + desc = bp2_hostage_system.0140.attacker_ally + } + triggered_desc = { + trigger = { + scope:executioner = { is_defender_in_war = scope:war } + } + desc = bp2_hostage_system.0140.defender_ally + } + } + } + sender = { + character = scope:executioner + animation = dismissal + } + cooldown = { days = 1 } + + immediate = { + every_in_list = { + list = hostages + limit = { home_court = root } + save_scope_as = hostage + home_court = { save_scope_as = home_court } + bp2_execute_hostage_effect = yes + } + } + + option = { + name = { + text = bp2_hostage_system.0140.a.attacker + trigger = { scope:executioner = scope:war.primary_attacker } + } + name = { + text = bp2_hostage_system.0140.a.defender + trigger = { scope:executioner = scope:war.primary_defender } + } + name = { + text = bp2_hostage_system.0140.a.attacker_ally + trigger = { + scope:executioner = { is_attacker_in_war = scope:war } + } + } + name = { + text = bp2_hostage_system.0140.a.defender_ally + trigger = { + scope:executioner = { is_defender_in_war = scope:war } + } + } + } + + after = { + clear_saved_scope = my_hostage + clear_saved_scope = hostage + if = { + limit = { + is_attacker_in_war = scope:war + any_warden_hostage = { + home_court ?= scope:executioner + } + } + if = { + limit = { this = scope:war.primary_attacker } + trigger_event = { id = bp2_hostage_system.0100 days = 3 } + } + else = { + trigger_event = { id = bp2_hostage_system.0120 days = 3 } + } + } + } +} + +# Inform home court of hostage sparing +bp2_hostage_system.0141 = { + type = letter_event + opening = { desc = bp2_hostage_system.0141.opening } + desc = { + desc = bp2_hostage_system.0141.intro + first_valid = { + triggered_desc = { + trigger = { scope:hostage_sparer = scope:war.primary_attacker } + desc = bp2_hostage_system.0141.attacker + } + triggered_desc = { + trigger = { scope:hostage_sparer = scope:war.primary_defender } + desc = bp2_hostage_system.0141.defender + } + triggered_desc = { + trigger = { + scope:hostage_sparer = { is_attacker_in_war = scope:war } + } + desc = bp2_hostage_system.0141.attacker_ally + } + triggered_desc = { + trigger = { + scope:hostage_sparer = { is_defender_in_war = scope:war } + } + desc = bp2_hostage_system.0141.defender_ally + } + } + triggered_desc = { + trigger = { + exists = scope:my_hostage + NOT = { + scope:my_hostage = { + has_opinion_modifier = { + target = root + modifier = spared_me_opinion + } + } + } + } + desc = bp2_hostage_system.0141.request + } + } + sender = { + character = scope:hostage_sparer + animation = dismissal + } + cooldown = { days = 1 } + + immediate = { + show_as_tooltip = { + every_in_list = { + list = hostages + add_opinion = { + target = scope:hostage_sparer + modifier = spared_me_opinion + opinion = 40 + } + } + } + } + + option = { + name = { + text = bp2_hostage_system.0141.a.attacker + trigger = { scope:hostage_sparer = scope:war.primary_attacker } + } + name = { + text = bp2_hostage_system.0141.a.defender + trigger = { scope:hostage_sparer = scope:war.primary_defender } + } + name = { + text = bp2_hostage_system.0141.a.attacker_ally + trigger = { + scope:hostage_sparer = { is_attacker_in_war = scope:war } + } + } + name = { + text = bp2_hostage_system.0141.a.defender_ally + trigger = { + scope:hostage_sparer = { is_defender_in_war = scope:war } + } + } + } + + after = { + clear_saved_scope = my_hostage + clear_saved_scope = hostage + if = { + limit = { + is_attacker_in_war = scope:war + any_warden_hostage = { + home_court ?= scope:hostage_sparer + } + } + if = { + limit = { this = scope:war.primary_attacker } + trigger_event = { id = bp2_hostage_system.0100 days = 3 } + } + else = { + trigger_event = { id = bp2_hostage_system.0120 days = 3 } + } + } + } +} + +### +### COMING OF AGE +### + +# Hostage comes of age +bp2_hostage_system.0200 = { + type = character_event + title = bp2_hostage_system.0200.t + desc = { + desc = bp2_hostage_system.0200.desc + first_valid = { + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = root + } + } + desc = bp2_hostage_system.0200.my_hostage + } + desc = bp2_hostage_system.0200.closing + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = war_over_win + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_home_court + + trigger = { + scope:hostage = { is_hostage_of = root } + NOT = { + any_home_court_hostage = { + is_travelling = yes + OR = { + exists = var:short_hostage_duration + exists = var:long_hostage_duration + exists = var:hostage_duration + } + } + } + } + + immediate = { + save_scope_as = hostage_warden + scope:hostage.home_court = { + save_scope_as = hostage_home_court + if = { + limit = { + any_warden_hostage = { home_court ?= root } + } + every_warden_hostage = { + limit = { home_court ?= root } + add_to_list = my_hostages + } + random_in_list = { + list = my_hostages + weight = { + base = 1 + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = my_hostage + } + } + } + if = { + limit = { + scope:hostage = { + NOT = { has_relation_rival = root } + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + reverse_opinion = { + target = scope:hostage + value >= 25 + } + } + progress_towards_friend_effect = { + REASON = friend_well_treated_hostage + CHARACTER = scope:hostage + OPINION = default_friend_opinion + } + } + scope:hostage = { + save_opinion_value_as = { + name = warden_opinion + target = warden + } + } + random_list = { + 0 = { + modifier = { add = var:hook_chance } + add_hook = { + type = hostage_loyalty + target = scope:hostage + } + } + 100 = { + modifier = { + add = { + value = 0 + subtract = var:hook_chance + } + } + custom_tooltip = bp2_hostage_hook_failed_tt + } + } + } + } + + option = { # Send home + name = bp2_hostage_system.0200.a + trigger = { + NAND = { + is_ai = yes + scope:hostage_warden.house ?= scope:hostage.house + scope:hostage.house != scope:hostage_home_court.house + } + } + show_as_tooltip = { + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + } + if = { + limit = { + exists = scope:my_hostage + scope:hostage_home_court = { is_ai = yes } + scope:my_hostage = { is_adult = yes } + } + custom_tooltip = hostage_more_likely_to_return_tt + } + scope:hostage_home_court = { + trigger_event = { id = bp2_hostage_system.0201 days = 1 } + } + ai_chance = { + base = 25 + bp2_hostage_return_personality_modifier = { + WARDEN = root + HOME_COURT = scope:hostage_home_court + } + modifier = { + scope:hostage = { + has_character_flag = byz_claimant_flag + } + factor = 0 + } + min = 0 + } + } + + option = { # Keep + name = { + text = bp2_hostage_system.0200.b + trigger = { + NOT = { exists = scope:my_hostage } + } + } + name = { + text = bp2_hostage_system.0200.b.my_hostage + trigger = { + scope:my_hostage ?= { is_adult = no } + } + } + custom_tooltip = { + text = halved_hostage_prestige_tt + add_character_flag = { + flag = halved_hostage_prestige_income + years = hostage_adulthood_retained_halved_prestige_duration_value + } + } + scope:hostage_home_court = { + show_as_tooltip = { + add_opinion = { + modifier = angry_opinion + opinion = -15 + target = root + } + } + trigger_event = { id = bp2_hostage_system.0202 days = 1 } + } + ai_chance = { + base = 10 + modifier = { + scope:hostage_warden.house ?= scope:hostage.house + scope:hostage.house != scope:hostage_home_court.house + add = 1000 + } + } + } + + after = { + remove_variable = hook_chance + } +} + +# Hostage comes of age and returned +bp2_hostage_system.0201 = { + type = character_event + title = bp2_hostage_system.0200.t + desc = { + desc = bp2_hostage_system.0201.desc + first_valid = { + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + is_adult = yes + home_court = scope:hostage_warden + } + } + desc = bp2_hostage_system.0201.my_hostage_adult + } + triggered_desc = { + trigger = { + scope:my_hostage ?= { + is_alive = yes + home_court = scope:hostage_warden + } + } + desc = bp2_hostage_system.0201.my_hostage + } + } + } + theme = hostage + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:hostage + animation = admiration + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_warden + + immediate = { + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + } + + option = { # Ok + name = bp2_hostage_system.0201.a + trigger = { + NOT = { exists = scope:my_hostage } + } + } + + option = { # Return hostage aswell + name = bp2_hostage_system.0201.b + trigger = { exists = scope:my_hostage } + show_as_tooltip = { + bp2_return_hostage_effect = { HOSTAGE = scope:my_hostage } + } + scope:hostage_warden = { + trigger_event = { id = bp2_hostage_system.0203 days = 1 } + } + ai_chance = { + base = 25 + bp2_hostage_return_personality_modifier = { + WARDEN = root + HOME_COURT = scope:hostage_warden + } + min = 0 + } + } + + option = { # Keep hostage + name = { + text = bp2_hostage_system.0201.c.adult + trigger = { + scope:my_hostage = { is_adult = yes } + } + } + name = { + text = bp2_hostage_system.0201.c + trigger = { + scope:my_hostage = { is_adult = no } + } + } + trigger = { exists = scope:my_hostage } + scope:hostage_warden = { + custom_tooltip = { + text = halved_hostage_prestige_tt + add_character_flag = { + flag = halved_hostage_prestige_income + years = hostage_adulthood_retained_halved_prestige_duration_value + } + } + show_as_tooltip = { + add_opinion = { + modifier = angry_opinion + opinion = -15 + target = root + } + } + trigger_event = { id = bp2_hostage_system.0204 days = 1 } + } + ai_chance = { + base = 10 + modifier = { + scope:my_hostage = { is_adult = no } + add = 40 + } + } + } +} + +# Hostage comes of age and retained +bp2_hostage_system.0202 = { + type = character_event + title = bp2_hostage_system.0202.t + desc = bp2_hostage_system.0202.desc + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = happiness + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_warden + + immediate = { + scope:hostage_warden = { custom_tooltip = halved_hostage_prestige_tt } + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = angry_opinion + opinion = -15 + target = scope:hostage_warden + } + } + } + + option = { + name = bp2_hostage_system.0202.a + } +} + +# Hostage returned in return +bp2_hostage_system.0203 = { + type = character_event + title = bp2_hostage_system.0203.t + desc = { + desc = bp2_hostage_system.0203.desc + desc = bp2_hostage_system.0203.closing + } + theme = hostage + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:my_hostage + animation = admiration + } + lower_right_portrait = scope:hostage + lower_left_portrait = scope:hostage_home_court + + immediate = { + bp2_return_hostage_effect = { HOSTAGE = scope:my_hostage } + } + + option = { + name = bp2_hostage_system.0201.a + } +} + +# Hostage retained in return +bp2_hostage_system.0204 = { + type = character_event + title = bp2_hostage_system.0202.t + desc = { + desc = bp2_hostage_system.0203.desc + desc = bp2_hostage_system.0204.closing + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = happiness + } + lower_left_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_home_court + + immediate = { + scope:hostage_home_court = { custom_tooltip = halved_hostage_prestige_tt } + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = angry_opinion + opinion = -15 + target = scope:hostage_home_court + } + } + } + + option = { + name = bp2_hostage_system.0202.a + } +} + +### +### DEATH +### + +# Hostage has died - warden +bp2_hostage_system.0300 = { + type = character_event + title = bp2_hostage_system.0300.t + desc = { + desc = bp2_hostage_system.0300.intro + first_valid = { + triggered_desc = { + trigger = { scope:hostage.killer ?= root } + desc = bp2_hostage_system.0300.killer + } + triggered_desc = { + trigger = { + scope:hostage = { had_gruesome_death_trigger = yes} + } + desc = bp2_hostage_system.0300.violent + } + desc = bp2_hostage_system.0300.fallback + } + desc = bp2_hostage_system.0300.desc + triggered_desc = { + trigger = { + any_home_court_hostage = { warden ?= scope:hostage_home_court } + } + desc = bp2_hostage_system.0300.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = pain + } + lower_center_portrait = scope:my_hostage + lower_right_portrait = scope:hostage_home_court + + trigger = { + scope:hostage = { + NAND = { + killer = root + death_reason = death_hostage_execution + } + } + } + + immediate = { + play_music_cue = mx_cue_death + show_as_tooltip = { + scope:hostage = { # Reason not shown in tooltip + death = { death_reason = death_fight } + } + } + if = { + limit = { + scope:hostage_home_court = { is_ai = yes } + } + if = { # You killed a *HOSTAGE*! + limit = { + scope:hostage.killer ?= root + NOT = { + any_secret = { + type = secret_murder + secret_target = scope:hostage + } + } + } + reverse_add_opinion = { + target = scope:hostage_home_court + modifier = killed_hostage_opinion + } + } + else = { # Hostage died on your watch + reverse_add_opinion = { + target = scope:hostage_home_court + modifier = hostage_died_opinion + } + } + } + if = { + limit = { + any_home_court_hostage = { warden ?= scope:hostage_home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:hostage_home_court } + save_scope_as = my_hostage + } + } + } + + option = { + name = bp2_hostage_system.0300.a + } + + after = { + custom_tooltip = hostage_death_reluctance_tt + scope:hostage_home_court = { + trigger_event = { id = bp2_hostage_system.0301 days = 1 } + } + } +} + +# Hostage has died - home court +bp2_hostage_system.0301 = { + type = letter_event + opening = { desc = bp2_hostage_system.0301.opening } + desc = { + desc = bp2_hostage_system.0301.intro + first_valid = { + triggered_desc = { + trigger = { + scope:hostage.killer ?= scope:hostage_warden + NOT = { + scope:hostage_warden = { + any_secret = { + type = secret_murder + secret_target = scope:hostage + } + } + } + } + desc = bp2_hostage_system.0301.killer + } + triggered_desc = { + trigger = { + scope:hostage = { had_gruesome_death_trigger = yes } + } + desc = bp2_hostage_system.0301.violent + } + desc = bp2_hostage_system.0301.fallback + } + desc = bp2_hostage_system.0301.desc + triggered_desc = { + trigger = { exists = scope:my_hostage } + desc = bp2_hostage_system.0301.my_hostage + } + } + sender = { + character = scope:hostage_warden + animation = dismissal + } + cooldown = { days = 1 } + + immediate = { + show_as_tooltip = { + scope:hostage = { # Reason not shown in tooltip + death = { death_reason = death_fight } + } + } + } + + option = { + name = { + text = bp2_hostage_system.0301.a.killer + trigger = { + scope:hostage.killer ?= scope:hostage_warden + NOT = { + scope:hostage_warden = { + any_secret = { + type = secret_murder + secret_target = scope:hostage + } + } + } + } + } + name = { + text = bp2_hostage_system.0301.a.violent + trigger = { + scope:hostage = { had_gruesome_death_trigger = yes } + } + } + name = { + text = bp2_hostage_system.0301.a + trigger = { + NOR = { + scope:hostage = { had_gruesome_death_trigger = yes } + scope:hostage.killer ?= scope:hostage_warden + } + } + } + } +} + +### +### INVALIDATION +### + +scripted_trigger hostage_adopted_invalidation_trigger = { + scope:hostage.house = scope:warden.house + scope:hostage.house != scope:home_court.house +} + +# Hostage no longer valid - warden +bp2_hostage_system.0400 = { + type = character_event + title = bp2_hostage_system.0400.t + desc = { + # HOSTAGE INVALID + first_valid = { + triggered_desc = { # Hostage inherited land + trigger = { + scope:reason ?= flag:ruler + scope:hostage = { is_landed = yes } + } + desc = bp2_hostage_system.0400.landed_hostage + } + triggered_desc = { # Hostage inherited domicile + trigger = { scope:reason ?= flag:ruler } + desc = bp2_hostage_system.0400.ruler_hostage + } + triggered_desc = { # Hostage imprisoned by me + trigger = { + scope:reason ?= flag:imprisoner + root = scope:imprisoner + } + desc = bp2_hostage_system.0400.imprisoned_hostage_self + } + triggered_desc = { # Hostage imprisoned + trigger = { scope:reason ?= flag:imprisoner } + desc = bp2_hostage_system.0400.imprisoned_hostage + } + triggered_desc = { # Hostage escaped imprisonment + trigger = { exists = scope:imprison_failure } + desc = bp2_hostage_system.0400.imprisoned_hostage_fail + } + triggered_desc = { # Adopted + trigger = { hostage_adopted_invalidation_trigger = yes } + desc = bp2_hostage_system.0400.adopted + } + triggered_desc = { # Home court no longer considers hostage important + trigger = { scope:reason ?= flag:invalid } + desc = bp2_hostage_system.0400.unrelated_hostage + } + # HOME COURT INVALID + triggered_desc = { + trigger = { scope:reason ?= flag:home_court } + desc = { + first_valid = { + triggered_desc = { # Home court lost lands + trigger = { + scope:home_court = { is_alive = yes } + exists = scope:lost_title + } + desc = bp2_hostage_system.0400.unlanded_home_court_title + } + triggered_desc = { # Home court lost lands + trigger = { + scope:home_court = { is_alive = yes } + } + desc = bp2_hostage_system.0400.unlanded_home_court + } + desc = bp2_hostage_system.0400.dead_home_court + } + } + } + # WARDEN INVALID + triggered_desc = { + trigger = { scope:reason ?= flag:warden } + desc = { + first_valid = { + triggered_desc = { # Home court lost lands + trigger = { + scope:warden = { is_alive = yes } + exists = scope:lost_title + } + desc = bp2_hostage_system.0400.unlanded_warden_title + } + desc = bp2_hostage_system.0400.unlanded_warden + } + } + } + } + # RETURN FLAVOR + first_valid = { + triggered_desc = { # Hostage imprisoned by me + trigger = { + OR = { + exists = scope:imprison_failure + AND = { + scope:reason ?= flag:imprisoner + root = scope:imprisoner + } + } + } + desc = bp2_hostage_system.0400.imprisoned_self + } + triggered_desc = { # Hostage imprisoned + trigger = { scope:reason ?= flag:imprisoner } + desc = bp2_hostage_system.0400.imprisoned + } + triggered_desc = { # Hostage inherited + trigger = { scope:reason ?= flag:ruler } + desc = bp2_hostage_system.0400.ruler + } + triggered_desc = { # No heirs of warden to take over + trigger = { hostage_adopted_invalidation_trigger = yes } + desc = bp2_hostage_system.0400.adopted_stay + } + triggered_desc = { # Hostage family exists + trigger = { + scope:home_court = { is_alive = yes } + } + desc = bp2_hostage_system.0400.family + } + desc = bp2_hostage_system.0400.no_family + } + triggered_desc = { + trigger = { exists = scope:my_hostage } + desc = bp2_hostage_system.0400.my_hostage + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + triggered_animation = { + trigger = { + scope:hostage.house = scope:warden.house + scope:hostage.house != scope:home_court.house + } + animation = admiration + } + } + right_portrait = { + character = scope:hostage + triggered_animation = { + trigger = { scope:reason ?= flag:imprisoner } + animation = prisonhouse + } + triggered_animation = { + trigger = { scope:reason ?= flag:ruler } + animation = war_over_win + } + animation = happiness + } + lower_right_portrait = scope:home_court + lower_center_portrait = scope:imprisoner + lower_left_portrait = scope:my_hostage + + immediate = { + scope:home_court = { + random_in_list = { + variable = invalidated_warden_hostages + limit = { var:recently_invalidated_hostage ?= root } + save_scope_as = my_hostage + } + } + show_as_tooltip = { + scope:hostage = { # Reason not shown in tooltip + return_hostage = yes + } + scope:my_hostage ?= { + return_hostage = yes + } + } + if = { + limit = { scope:reason ?= flag:ruler } + scope:hostage.primary_title.previous_holder = { save_scope_as = previous_holder } + } + if = { + limit = { + any_home_court_hostage = { warden ?= scope:home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:home_court } + save_scope_as = my_hostage + } + } + if = { + limit = { + hostage_adopted_invalidation_trigger = yes + } + hidden_effect = { + scope:hostage = { # Reason not shown in tooltip + return_hostage = yes + } + } + scope:warden = { add_courtier = scope:hostage } + } + } + + option = { # Go + name = bp2_hostage_system.0400.a + trigger = { hostage_adopted_invalidation_trigger = no } + } + + option = { # Stay + name = bp2_hostage_system.0400.b + trigger = { hostage_adopted_invalidation_trigger = yes } + } + + after = { + scope:home_court = { trigger_event = bp2_hostage_system.0401 } + } +} + +# Hostage no longer valid - home court +bp2_hostage_system.0401 = { + type = character_event + title = bp2_hostage_system.0400.t + desc = { + # HOSTAGE INVALID + first_valid = { + triggered_desc = { # Hostage inherited + trigger = { + scope:reason = flag:ruler + scope:hostage = { is_landed = yes } + } + desc = bp2_hostage_system.0401.landed_hostage + } + triggered_desc = { # Hostage inherited + trigger = { scope:reason = flag:ruler } + desc = bp2_hostage_system.0401.landed_hostage + } + triggered_desc = { # Hostage imprisoned by warden + trigger = { + scope:reason = flag:imprisoner + scope:warden = scope:imprisoner + } + desc = bp2_hostage_system.0401.imprisoned_hostage_self + } + triggered_desc = { # Hostage imprisoned + trigger = { scope:reason = flag:imprisoner } + desc = bp2_hostage_system.0401.imprisoned_hostage + } + triggered_desc = { # Hostage escaped imprisonment by warden + trigger = { exists = scope:imprison_failure } + desc = bp2_hostage_system.0401.imprisoned_hostage_fail + } + triggered_desc = { # Adopted + trigger = { hostage_adopted_invalidation_trigger = yes } + desc = bp2_hostage_system.0401.adopted + } + triggered_desc = { # Home court no longer considers hostage important + trigger = { scope:reason = flag:invalid } + desc = bp2_hostage_system.0401.unrelated_hostage + } + # HOME COURT INVALID + triggered_desc = { + trigger = { scope:reason ?= flag:home_court } + desc = { + first_valid = { + triggered_desc = { # Home court lost lands + trigger = { + scope:home_court = { is_alive = yes } + exists = scope:lost_title + } + desc = bp2_hostage_system.0401.unlanded_home_court_title + } + desc = bp2_hostage_system.0401.unlanded_home_court + } + } + } + # WARDEN INVALID + triggered_desc = { + trigger = { scope:reason ?= flag:warden } + desc = { + first_valid = { + triggered_desc = { # Home court lost lands + trigger = { + scope:warden = { is_alive = yes } + exists = scope:lost_title + } + desc = bp2_hostage_system.0401.unlanded_warden_title + } + desc = bp2_hostage_system.0401.unlanded_warden + } + } + } + } + # RETURN FLAVOR + first_valid = { + triggered_desc = { # Hostage imprisoned + trigger = { scope:reason = flag:imprisoner } + desc = bp2_hostage_system.0401.imprisoned + } + triggered_desc = { # Hostage imprisoned + trigger = { exists = scope:imprison_failure } + desc = bp2_hostage_system.0401.imprisoned_fail + } + triggered_desc = { # Hostage inherited + trigger = { scope:reason = flag:ruler } + desc = bp2_hostage_system.0400.ruler + } + triggered_desc = { # No heirs of warden to take over + trigger = { hostage_adopted_invalidation_trigger = yes } + desc = bp2_hostage_system.0401.adopted_stay + } + triggered_desc = { # Hostage family exists + trigger = { + scope:home_court = { is_alive = yes } + } + desc = bp2_hostage_system.0400.family + } + desc = bp2_hostage_system.0400.no_family + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = scope:warden + animation = worry + triggered_animation = { + trigger = { + scope:hostage.house = scope:warden.house + scope:hostage.house != scope:home_court.house + } + animation = admiration + } + } + right_portrait = { + character = scope:hostage + triggered_animation = { + trigger = { scope:reason = flag:imprisoner } + animation = prisonhouse + } + triggered_animation = { + trigger = { scope:reason = flag:ruler } + animation = war_over_win + } + animation = happiness + } + lower_center_portrait = scope:imprisoner + lower_left_portrait = scope:my_hostage + + trigger = { + NOT = { exists = scope:my_hostage } + } + + immediate = { + show_as_tooltip = { + scope:hostage = { # Reason not shown in tooltip + return_hostage = yes + } + } + scope:home_court = { save_scope_as = bg_override_char } + if = { + limit = { + any_home_court_hostage = { warden ?= scope:home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:home_court } + save_scope_as = my_hostage + } + } + if = { + limit = { + hostage_adopted_invalidation_trigger = yes + } + show_as_tooltip = { + scope:warden = { add_courtier = scope:hostage } + } + } + } + + option = { # Go + name = bp2_hostage_system.0401.a + trigger = { hostage_adopted_invalidation_trigger = no } + } + + option = { # Stay + name = bp2_hostage_system.0401.b + trigger = { hostage_adopted_invalidation_trigger = yes } + } +} + +# Hostage no longer valid - hostage +bp2_hostage_system.0402 = { + type = character_event + title = bp2_hostage_system.0400.t + orphan = yes + desc = { + # HOSTAGE INVALID + desc = bp2_hostage_system.0402.inherited + # RETURN FLAVOR + first_valid = { + triggered_desc = { # Hostage family exists + trigger = { + scope:home_court = { is_alive = no } + } + desc = bp2_hostage_system.0402.dead + } + } + } + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = scope:hostage + animation = worry + } + right_portrait = { + character = scope:warden + animation = dismissal + } + lower_center_portrait = scope:home_court + + immediate = { + show_as_tooltip = { + scope:hostage = { # Reason not shown in tooltip + return_hostage = yes + } + } + if = { + limit = { + any_home_court_hostage = { warden ?= scope:home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:home_court } + save_scope_as = my_hostage + } + } + } + + option = { + name = bp2_hostage_system.0401.a + } +} + +# Hostage home court changes - warden +bp2_hostage_system.0410 = { + type = character_event + title = bp2_hostage_system.0410.t + desc = bp2_hostage_system.0410.desc + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:hostage + animation = pain + } + lower_right_portrait = scope:home_court + lower_left_portrait = scope:my_hostage + + trigger = { + is_landed_or_landless_administrative = yes + } + + immediate = { + if = { + limit = { + any_home_court_hostage = { warden ?= scope:home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:home_court } + save_scope_as = my_hostage + } + } + } + + option = { + name = bp2_hostage_system.0410.a + trigger = { exists = scope:my_hostage } + save_scope_as = both_returned + scope:home_court = { + trigger_event = { id = bp2_hostage_system.0411 days = 1 } + } + show_as_tooltip = { + scope:my_hostage = { return_hostage = yes } + scope:hostage = { return_hostage = yes } + } + } + + option = { + name = bp2_hostage_system.0410.b + trigger = { exists = scope:my_hostage } + save_scope_as = my_hostage_returned + scope:home_court = { + trigger_event = { id = bp2_hostage_system.0411 days = 1 } + } + show_as_tooltip = { + scope:my_hostage = { return_hostage = yes } + } + } + + option = { + name = bp2_hostage_system.0410.c + save_scope_as = hostage_returned + scope:home_court = { + trigger_event = { id = bp2_hostage_system.0411 days = 1 } + } + show_as_tooltip = { + scope:hostage = { return_hostage = yes } + } + } + + option = { + name = bp2_hostage_system.0410.d + } +} + +# Hostage home court changes - home court +bp2_hostage_system.0411 = { + type = letter_event + opening = { desc = bp2_hostage_system.0411.opening } + desc = { + desc = bp2_hostage_system.0411.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:my_hostage_returned } + desc = bp2_hostage_system.0411.my_hostage + } + triggered_desc = { + trigger = { exists = scope:both_returned } + desc = bp2_hostage_system.0411.both + } + desc = bp2_hostage_system.0411.hostage + } + } + sender = scope:warden + + immediate = { + if = { + limit = { exists = scope:my_hostage_returned } + bp2_return_hostage_effect = { HOSTAGE = scope:my_hostage } + } + else_if = { + limit = { exists = scope:both_returned } + bp2_return_hostage_effect = { HOSTAGE = scope:my_hostage } + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + } + else = { + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + } + } + + option = { + name = bp2_hostage_system.0411.a + } +} + +### +### TRAVEL +### + +# Hostage arrives at warden's court - warden +bp2_hostage_system.0500 = { + type = character_event + title = bp2_hostage_system.0500.t + desc = { + desc = bp2_hostage_system.0500.desc + triggered_desc = { + trigger = { scope:hostage.age >= 6 } + desc = bp2_hostage_system.0500.anxious + } + first_valid = { + triggered_desc = { + trigger = { + location = root.capital_province + scope:hostage.age >= 6 + } + desc = bp2_hostage_system.0500.home + } + desc = bp2_hostage_system.0500.away + } + } + theme = hostage + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = war_over_tie + trigger = { location = root.capital_province } + } + right_portrait = { + character = scope:hostage + } + lower_right_portrait = scope:hostage_home_court + lower_left_portrait = scope:my_hostage + + immediate = { + if = { + limit = { + any_home_court_hostage = { warden ?= scope:hostage_home_court } + } + random_home_court_hostage = { + limit = { warden ?= scope:hostage_home_court } + save_scope_as = my_hostage + } + } + show_as_tooltip = { + scope:hostage_warden = { take_hostage = scope:hostage } + } + scope:hostage_home_court = { + if = { # Hostage's letter + limit = { scope:hostage.age >= 10 } + trigger_event = { id = bp2_hostage_system.0501 } + } + else = { # Warden's letter + trigger_event = { id = bp2_hostage_system.0502 } + } + } + } + + option = { + name = { + trigger = { + location = root.capital_province + scope:hostage.age >= 6 + } + text = bp2_hostage_system.0500.a.home + } + name = { + trigger = { + OR = { + location != root.capital_province + scope:hostage.age < 6 + } + } + text = bp2_hostage_system.0500.a + } + } +} + +# Hostage arrives at warden's court - home_court +bp2_hostage_system.0501 = { + type = letter_event + opening = bp2_hostage_system.0501.opening + desc = { + desc = bp2_hostage_system.0501.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:alone } + desc = bp2_hostage_system.0501.child_alone + } + triggered_desc = { + trigger = { + scope:hostage = { is_adult = no } + } + desc = bp2_hostage_system.0501.child + } + desc = bp2_hostage_system.0501.adult + } + } + sender = scope:hostage + + immediate = { + scope:hostage_warden = { take_hostage = scope:hostage } + if = { + limit = { + scope:hostage = { is_adult = no } + scope:hostage_warden = { + any_courtier_or_guest = { + count = 0 + this != scope:hostage + is_adult = no + } + } + } + save_scope_as = alone + } + } + + option = { + name = { + trigger = { exists = scope:alone } + text = bp2_hostage_system.0501.a.child_alone + } + name = { + trigger = { + scope:hostage = { is_adult = no } + } + text = bp2_hostage_system.0501.a.child + } + name = { + trigger = { + scope:hostage = { is_adult = yes } + } + text = bp2_hostage_system.0501.a + } + } +} + +# Hostage arrives at warden's court - home_court +bp2_hostage_system.0502 = { + type = letter_event + opening = bp2_hostage_system.0502.opening + desc = bp2_hostage_system.0502.desc + sender = scope:hostage_warden + + immediate = { + scope:hostage_warden = { take_hostage = scope:hostage } + } + + option = { + name = bp2_hostage_system.0502.a + } +} + +# Hostage arrives home - home court +bp2_hostage_system.0510 = { + type = character_event + title = bp2_hostage_system.0203.t + desc = { + desc = bp2_hostage_system.0510.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:hostage.var:short_hostage_duration } + desc = bp2_hostage_system.0510.duration_short + } + triggered_desc = { + trigger = { exists = scope:hostage.var:long_hostage_duration } + desc = bp2_hostage_system.0510.duration_long + } + desc = bp2_hostage_system.0510.duration + } + first_valid = { + triggered_desc = { + trigger = { + location = root.capital_province + scope:hostage.age >= 3 + } + desc = bp2_hostage_system.0510.home + } + desc = bp2_hostage_system.0510.away + } + } + theme = hostage + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = admiration + trigger = { location = root.capital_province } + } + right_portrait = { + character = scope:hostage + animation = war_over_win + } + lower_right_portrait = scope:hostage_warden + lower_left_portrait = scope:my_hostage + + trigger = { + OR = { + exists = scope:hostage_warden + exists = scope:warden + } + } + + immediate = { + if = { + limit = { + exists = scope:warden + } + scope:warden = { save_scope_as = hostage_warden } + } + if = { + limit = { + any_warden_hostage = { home_court ?= scope:hostage_warden } + } + random_warden_hostage = { + limit = { home_court ?= scope:hostage_warden } + save_scope_as = my_hostage + } + } + show_as_tooltip = { bp2_return_hostage_effect = { HOSTAGE = scope:hostage } } + } + + option = { + name = bp2_hostage_system.0201.a + } + + after = { + scope:hostage = { + remove_variable = short_hostage_duration + remove_variable = long_hostage_duration + remove_variable = hostage_duration + } + } +} + diff --git a/events/dlc/bp2/bp2_yearly_1_events.txt b/events/dlc/bp2/bp2_yearly_1_events.txt new file mode 100644 index 00000000..22fd1694 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_1_events.txt @@ -0,0 +1,6953 @@ +namespace = bp2_yearly +#### +# bp2_yearly.1000 - Parent/Guardian: Your child/ward walks in on you performing your stress trait +# bp2_yearly.1001 - Follow-up; the child is mimicking your stress behavior +# bp2_yearly.1005 - Child: You notice your parent/guardian performing a stress trait +# +# bp2_yearly.1010 - Parent/Guardian: Your child gives you a hug +# bp2_yearly.1015 - Parent/Guardian: Your child/ward found a pouch of gold while exploring +# bp2_yearly.1020 - Parent/Guardian: Your child/ward has found a secret in court +# +# bp2_yearly.1030 - Parent: Your child does not have the same educational trait as you. Change? +# bp2_yearly.1035 - Parent/Guardian: Your child/ward has a rock collection +# bp2_yearly.1040 - Parent/Guardian: Your child/ward has a text about martial arts +# bp2_yearly.1045 - Parent/Guardian: There is a brawl among some children +# +################# +## Event Chain ## +## The Builder ## +## 1050 - 1072 ## +################# +# bp2_yearly.1050 - The tide/sandstorm is ruining your sandcastle! +# bp2_yearly.1051 - Follow-up: Curse you, tide! +# bp2_yearly.1055 - You are challenged to a den-building competition +# bp2_yearly.1056 - Follow-up: Things went down in the woods +# bp2_yearly.1060 - Appreciate the architecture of your capital +# bp2_yearly.1061 - Follow-up: You spend the day with WhatsTheirFace +# bp2_yearly.1065 - Your input is desired on the next building target +# bp2_yearly.1070 - All of our efforts have culminated into _this_ +# bp2_yearly.1071 - Follow-up: Get the sweet sweet loo... I mean, sweet sweet effects! +# bp2_yearly.1072 - Clean up: You dun messed up, son + + +scripted_trigger bp2_yearly_1000_is_appropriate_child = { + age > 4 + age < 16 + is_available = yes + is_ai = yes + location = root.location + NOT = { has_variable = witnessed_trait } + OR = { + AND = { + root = { has_trait = drunkard } + NOT = { has_trait = drunkard } + } + AND = { + root = { has_trait = reclusive } + NOT = { has_trait = reclusive } + } + AND = { + root = { has_trait = irritable } + NOT = { has_trait = irritable } + } + AND = { + root = { has_trait = flagellant } + NOT = { has_trait = flagellant } + } + AND = { + root = { has_trait = profligate } + NOT = { has_trait = profligate } + } + AND = { + root = { has_trait = improvident } + NOT = { has_trait = improvident } + } + AND = { + root = { has_trait = comfort_eater } + NOT = { has_trait = comfort_eater } + } + AND = { + root = { has_trait = inappetetic } + NOT = { has_trait = inappetetic } + } + AND = { + root = { has_trait = journaller } + NOT = { has_trait = journaller } + } + AND = { + root = { has_trait = hashishiyah } + NOT = { has_trait = hashishiyah } + any_courtier_or_guest = { + is_available_adult = yes + has_any_bad_relationship_with_root_trigger = no + } + } + AND = { + NOT = { has_trait = confider } + root = { + has_trait = confider + any_relation = { + type = friend + is_available = yes + location = root.location + } + } + } + AND = { + root = { + has_trait = athletic + NOT = { has_trait = one_legged } + } + NOT = { + has_trait = athletic + has_trait = one_legged + } + } + } +} + +scripted_effect bp2_yearly_1000_award_trait_effect = { + if = { + limit = { exists = scope:triggered_trait } + this = { + switch = { + trigger = scope:triggered_trait + flag:drunkard = { add_trait = drunkard } + flag:hashishiyah = { add_trait = hashishiyah } + flag:reclusive = { add_trait = reclusive } + flag:irritable = { add_trait = irritable } + flag:flagellant = { add_trait = flagellant } + flag:profligate = { add_trait = profligate } + flag:improvident = { add_trait = improvident } + flag:contrite = { add_trait = contrite } + flag:comfort_eater = { add_trait = comfort_eater } + flag:inappetetic = { add_trait = inappetetic } + flag:journaller = { add_trait = journaller } + flag:confider = { add_trait = confider } + flag:athletic = { add_trait = athletic } + } + } + } + else_if = { + limit = { exists = var:witnessed_trait } + this = { + switch = { + trigger = var:witnessed_trait + flag:drunkard = { add_trait = drunkard } + flag:hashishiyah = { add_trait = hashishiyah } + flag:reclusive = { add_trait = reclusive } + flag:irritable = { add_trait = irritable } + flag:flagellant = { add_trait = flagellant } + flag:profligate = { add_trait = profligate } + flag:improvident = { add_trait = improvident } + flag:contrite = { add_trait = contrite } + flag:comfort_eater = { add_trait = comfort_eater } + flag:inappetetic = { add_trait = inappetetic } + flag:journaller = { add_trait = journaller } + flag:confider = { add_trait = confider } + flag:athletic = { add_trait = athletic } + } + } + } +} + +#Parent/Guardian: Your child/ward walks in on you performing your stress trait +bp2_yearly.1000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1000.t + desc = { + #Hoppsan + first_valid = { + triggered_desc = { + trigger = { scope:triggered_trait = flag:drunkard } + desc = bp2_yearly.1000.desc_drunkard + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:hashishiyah } + desc = bp2_yearly.1000.desc_hashishiyah + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:reclusive } + desc = bp2_yearly.1000.desc_reclusive + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:irritable } + desc = bp2_yearly.1000.desc_irritable + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:flagellant } + desc = bp2_yearly.1000.desc_flagellant + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:profligate } + desc = bp2_yearly.1000.desc_profligate + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:improvident } + desc = bp2_yearly.1000.desc_improvident + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:contrite } + desc = bp2_yearly.1000.desc_contrite + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:comfort_eater } + desc = bp2_yearly.1000.desc_comfort_eater + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:inappetetic } + desc = bp2_yearly.1000.desc_inappetetic + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:journaller } + desc = bp2_yearly.1000.desc_journaller + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:confider } + desc = bp2_yearly.1000.desc_confider + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:athletic } + desc = bp2_yearly.1000.desc_athletic + } + } + #Is it a *good* stress trait or a *bad* stress trait? + first_valid = { + #Hmm, this isn't _great_ + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:comfort_eater + } + } + desc = bp2_yearly.1000.outro_bad + } + #Meh, it's fine + desc = bp2_yearly.1000.outro + } + } + theme = family + #Let's be in a couple of different places + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:contrite + scope:triggered_trait = flag:inappetetic + scope:triggered_trait = flag:confider + } + } + reference = feast_event + } + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:comfort_eater + scope:triggered_trait = flag:journaller + } + } + reference = relaxing_room + } + override_background = { + trigger = { scope:triggered_trait = flag:reclusive } + reference = study + } + override_background = { + trigger = { scope:triggered_trait = flag:flagellant } + reference = dungeon + } + override_background = { + trigger = { scope:triggered_trait = flag:profligate } + reference = market + } + override_background = { + trigger = { scope:triggered_trait = flag:athletic } + reference = courtyard + } + override_background = { + trigger = { scope:triggered_trait = flag:improvident } + reference = temple + } + #Fallback + override_background = { reference = throne_room } + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:triggered_trait = flag:drunkard } + animation = drink_goblet + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:improvident } + animation = personality_compassionate + } + triggered_animation = { + trigger = { + OR = { + scope:triggered_trait = flag:irritable + AND = { + has_trait = eccentric + scope:triggered_trait = flag:reclusive + } + } + } + animation = rage + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:reclusive } + animation = personality_cynical + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:journaller } + animation = reading + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:flagellant } + animation = pain + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:contrite } + animation = personality_zealous + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:confider } + animation = admiration + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:athletic } + animation = ecstasy + } + triggered_animation = { + trigger = { + scope:triggered_trait = flag:profligate + has_trait = eccentric + } + animation = steward + } + triggered_animation = { + trigger = { + OR = { + has_trait = eccentric + has_trait = lunatic + scope:triggered_trait = flag:hashishiyah + } + } + animation = personality_irrational + } + animation = stress + } + right_portrait = { + character = scope:appropriate_child + triggered_animation = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:comfort_eater + } + } + animation = shock + } + animation = thinking + } + lower_left_portrait = { + trigger = { exists = scope:portrait_to_display } + character = scope:portrait_to_display + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available_adult = yes + is_landed_or_landless_administrative = yes + is_ai = no + #Longer cooldown if you removed a stress trait + NOT = { has_character_flag = bp2_yearly_1001_removed_stress_trait } + #Check if we have a stress trait; and if an appropriate child does not have the stress trait (so it's transferrable) + OR = { + any_child = { + bp2_yearly_1000_is_appropriate_child = yes + } + any_relation = { + type = ward + bp2_yearly_1000_is_appropriate_child = yes + } + any_warden_hostage = { + opinion = { + target = root + value >= low_negative_opinion + } + bp2_yearly_1000_is_appropriate_child = yes + } + } + } + weight_multiplier = { + base = 0 + #The more stress traits; the higher chance + modifier = { + has_trait = drunkard + add = 1 + } + modifier = { + has_trait = hashishiyah + add = 1 + } + modifier = { + has_trait = reclusive + add = 1 + } + modifier = { + has_trait = irritable + add = 1 + } + modifier = { + has_trait = flagellant + add = 1 + } + modifier = { + has_trait = profligate + add = 1 + } + modifier = { + has_trait = improvident + add = 1 + } + modifier = { + has_trait = contrite + add = 1 + } + modifier = { + has_trait = comfort_eater + add = 1 + } + modifier = { + has_trait = inappetetic + add = 1 + } + modifier = { + has_trait = journaller + add = 1 + } + modifier = { + has_trait = confider + add = 1 + } + modifier = { + has_trait = athletic + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_stress" + #Your own children first + if = { + limit = { + any_child = { + bp2_yearly_1000_is_appropriate_child = yes + } + } + random_child = { + #A child you care about + limit = { + opinion = { + target = root + value >= low_positive_opinion + } + bp2_yearly_1000_is_appropriate_child = yes + } + #Otherwise pick whoever + alternative_limit = { bp2_yearly_1000_is_appropriate_child = yes } + save_scope_as = appropriate_child + } + } + #Otherwise a ward + else_if = { + limit = { + any_relation = { + type = ward + bp2_yearly_1000_is_appropriate_child = yes + } + } + random_relation = { + type = ward + #A child you care about + limit = { + opinion = { + target = root + value >= low_positive_opinion + } + bp2_yearly_1000_is_appropriate_child = yes + } + #Otherwise pick whoever + alternative_limit = { bp2_yearly_1000_is_appropriate_child = yes } + save_scope_as = appropriate_child + } + } + else_if = { + limit = { + any_warden_hostage = { + opinion = { + target = root + value >= low_negative_opinion + } + bp2_yearly_1000_is_appropriate_child = yes + } + } + random_warden_hostage = { + limit = { + opinion = { + target = root + value >= low_negative_opinion + } + bp2_yearly_1000_is_appropriate_child = yes + } + save_scope_as = appropriate_child + } + } + random_list = { + #Set a trait to work from and remember it; weights what stress coping events the child may get later in life + 1 = { + trigger = { has_trait = drunkard } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:drunkard + } + } + } + 1 = { + trigger = { has_trait = hashishiyah } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:hashishiyah + } + } + } + 1 = { + trigger = { has_trait = reclusive } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:reclusive + } + } + } + 1 = { + trigger = { has_trait = irritable } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:irritable + } + } + random_dummy_gender_effect = yes + } + 1 = { + trigger = { has_trait = flagellant } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:flagellant + } + } + add_character_flag = should_be_topless + } + 1 = { + trigger = { has_trait = profligate } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:profligate + } + } + random_dummy_gender_effect = yes + } + 1 = { + trigger = { has_trait = improvident } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:improvident + } + } + } + 1 = { + trigger = { + has_trait = contrite + any_courtier_or_guest = { + is_available_adult = yes + has_any_bad_relationship_with_root_trigger = no + } + } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:contrite + } + } + random_courtier_or_guest = { + limit = { + is_available_adult = yes + has_any_bad_relationship_with_root_trigger = no + } + save_scope_as = other_guest + save_scope_as = portrait_to_display + } + } + 1 = { + trigger = { has_trait = comfort_eater } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:comfort_eater + } + set_favorite_treat_effect = yes + } + set_favorite_treat_effect = yes + } + 1 = { + trigger = { has_trait = inappetetic } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:inappetetic + } + } + } + 1 = { + trigger = { has_trait = journaller } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:journaller + } + } + } + 1 = { + trigger = { + has_trait = confider + any_relation = { + type = friend + is_available = yes + location = root.location + } + } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:confider + } + } + random_relation = { + type = friend + limit = { + is_available = yes + location = root.location + } + save_scope_as = confider_friend + save_scope_as = portrait_to_display + } + } + 1 = { + trigger = { + has_trait = athletic + NOT = { has_trait = one_legged } + } + scope:appropriate_child = { + set_variable = { + name = witnessed_trait + value = flag:athletic + } + } + if = { + limit = { is_male = yes } #Yes, this is a boring restriction but it's the current lense for how things worked back then, I suspect + add_character_flag = should_be_topless + } + } + } + #To save us some script lines in the rest of the event, let's refer to a scope instead + scope:appropriate_child = { + if = { + limit = { exists = var:witnessed_trait } + switch = { + trigger = scope:appropriate_child.var:witnessed_trait + flag:drunkard = { + save_scope_value_as = { + name = triggered_trait + value = flag:drunkard + } + } + flag:hashishiyah = { + save_scope_value_as = { + name = triggered_trait + value = flag:hashishiyah + } + } + flag:reclusive = { + save_scope_value_as = { + name = triggered_trait + value = flag:reclusive + } + } + flag:irritable = { + save_scope_value_as = { + name = triggered_trait + value = flag:irritable + } + } + flag:flagellant = { + save_scope_value_as = { + name = triggered_trait + value = flag:flagellant + } + } + flag:profligate = { + save_scope_value_as = { + name = triggered_trait + value = flag:profligate + } + } + flag:improvident = { + save_scope_value_as = { + name = triggered_trait + value = flag:improvident + } + } + flag:contrite = { + save_scope_value_as = { + name = triggered_trait + value = flag:contrite + } + } + flag:comfort_eater = { + save_scope_value_as = { + name = triggered_trait + value = flag:comfort_eater + } + } + flag:inappetetic = { + save_scope_value_as = { + name = triggered_trait + value = flag:inappetetic + } + } + flag:journaller = { + save_scope_value_as = { + name = triggered_trait + value = flag:journaller + } + } + flag:confider = { + save_scope_value_as = { + name = triggered_trait + value = flag:confider + } + } + flag:athletic = { + save_scope_value_as = { + name = triggered_trait + value = flag:athletic + } + } + } + } + } + if = { + limit = { + scope:triggered_trait = flag:hashishiyah + } + add_character_flag = is_naked + } + } + #Hmm. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:profligate + scope:triggered_trait = flag:comfort_eater + scope:triggered_trait = flag:inappetetic + } + } + desc = bp2_yearly.1000.a + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:reclusive } + desc = bp2_yearly.1000.b_reclusive + } + desc = bp2_yearly.1000.a_good + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:profligate + scope:triggered_trait = flag:improvident + } + } + desc = bp2_yearly.1000.a.flavor + } + desc = bp2_yearly.1000.a.flavor_good + } + } + custom_tooltip = bp2_yearly.1000.a.tt + #We're not too concerned that we got caught doing these; enjoy the stress loss + if = { + limit = { + OR = { + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:improvident + scope:triggered_trait = flag:contrite + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + } + trigger_event = { + days = 5 + id = bp2_yearly.1001 + } + #AI won't be getting this event + } + #Toot-toot, stress trait schmesh trait... + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { scope:triggered_trait = flag:drunkard } + desc = bp2_yearly.1000.b_drunkard + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:contrite } + desc = bp2_yearly.1000.b_contrite + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:inappetetic } + desc = bp2_yearly.1000.b_inappetetic + } + triggered_desc = { + trigger = { + scope:triggered_trait = flag:confider + + } + desc = bp2_yearly.1000.b_us + } + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:irritable + } + } + desc = bp2_yearly.1000.b_agitated + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:hashishiyah } + desc = bp2_yearly.1000.b_hashishiyah + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:flagellant } + desc = bp2_yearly.1000.b_flagellant + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:improvident } + desc = bp2_yearly.1000.b_improvident + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:athletic } + desc = bp2_yearly.1000.b_athletic + } + desc = bp2_yearly.1000.b + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:irritable + } + } + desc = bp2_yearly.1000.b.flavor_agitated + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:contrite } + desc = bp2_yearly.1000.b.flavor_contrite + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:inappetetic } + desc = bp2_yearly.1000.b.flavor_inappetetic + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:confider } + desc = bp2_yearly.1000.b.flavor_confider + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:flagellant } + desc = bp2_yearly.1000.b.flavor_flagellant + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:improvident } + desc = bp2_yearly.1000.b.flavor_improvident + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:athletic } + desc = bp2_yearly.1000.b.flavor_athletic + } + desc = bp2_yearly.1000.b.flavor + } + } + trigger = { has_trait = eccentric } + scope:appropriate_child = { bp2_yearly_1000_award_trait_effect = yes } + #If it's not a chummy stress trait, let's lash out... + if = { + limit = { + OR = { + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:irritable + } + } + reverse_add_opinion = { + target = scope:appropriate_child + modifier = stress_lashed_out_opinion + opinion = -40 + } + stress_impact = { + base = major_stress_impact_loss + } + } + #Otherwise indulge them + else = { + reverse_add_opinion = { + target = scope:appropriate_child + modifier = teaching_moment_opinion + opinion = 25 + } + #More stress relief trade-off for worse inflicted stress traits + if = { + limit = { + OR = { + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + stress_impact = { + base = minor_stress_impact_loss + } + } + else_if = { + limit = { + OR = { + scope:triggered_trait = flag:improvident + scope:triggered_trait = flag:contrite + } + } + stress_impact = { + base = medium_stress_impact_loss + } + } + else = { + stress_impact = { + base = major_stress_impact_loss + } + } + } + #AI won't be getting this event + } + after = { + if = { + limit = { has_character_flag = should_be_topless } + remove_character_flag = should_be_topless + } + if = { + limit = { has_character_flag = is_naked } + remove_character_flag = is_naked + } + } +} + +#Follow-up; the child is mimicking your stress behavior +bp2_yearly.1001 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1001.t + desc = { + #Hoppsan + first_valid = { + triggered_desc = { + trigger = { scope:triggered_trait = flag:drunkard } + desc = bp2_yearly.1001.desc_drunkard + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:hashishiyah } + desc = bp2_yearly.1001.desc_hashishiyah + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:reclusive } + desc = bp2_yearly.1001.desc_reclusive + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:irritable } + desc = bp2_yearly.1001.desc_irritable + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:flagellant } + desc = bp2_yearly.1001.desc_flagellant + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:profligate } + desc = bp2_yearly.1001.desc_profligate + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:improvident } + desc = bp2_yearly.1001.desc_improvident + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:contrite } + desc = bp2_yearly.1001.desc_contrite + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:comfort_eater } + desc = bp2_yearly.1001.desc_comfort_eater + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:inappetetic } + desc = bp2_yearly.1001.desc_inappetetic + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:journaller } + desc = bp2_yearly.1001.desc_journaller + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:confider } + desc = bp2_yearly.1001.desc_confider + } + triggered_desc = { + trigger = { scope:triggered_trait = flag:athletic } + desc = bp2_yearly.1001.desc_athletic + } + } + first_valid = { + #Hmm, this isn't _great_ + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:profligate + scope:triggered_trait = flag:comfort_eater + scope:triggered_trait = flag:inappetetic + scope:triggered_trait = flag:improvident + scope:triggered_trait = flag:contrite + } + } + desc = bp2_yearly.1001.outro_bad + } + } + } + theme = family + #Let's be in a couple of different places + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:inappetetic + } + } + reference = feast_event + } + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:comfort_eater + } + } + reference = study + } + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:journaller + } + } + reference = bp2_nursery + } + override_background = { + trigger = { scope:triggered_trait = flag:flagellant } + reference = dungeon + } + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:athletic + scope:triggered_trait = flag:contrite + } + } + reference = courtyard + } + override_background = { + trigger = { scope:triggered_trait = flag:drunkard } + reference = bp1_wine_cellar + } + override_background = { + trigger = { + OR = { + scope:triggered_trait = flag:profligate + scope:triggered_trait = flag:improvident + scope:triggered_trait = flag:confider + } + } + reference = market + } + #Fallback + override_background = { reference = throne_room } + left_portrait = { + character = scope:appropriate_child + triggered_animation = { + trigger = { scope:triggered_trait = flag:drunkard } + animation = sick + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:improvident } + animation = personality_compassionate + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:irritable } + animation = rage + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:reclusive } + animation = anger + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:journaller } + animation = thinking + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:flagellant } + animation = pain + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:hashishiyah } + animation = personality_irrational + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:contrite } + animation = personality_zealous + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:confider } + animation = admiration + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:comfort_eater } + animation = shame + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:profligate } + animation = steward + } + triggered_animation = { + trigger = { scope:triggered_trait = flag:athletic } + animation = ecstasy + } + animation = stress + } + right_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + scope:triggered_trait = flag:drunkard + scope:triggered_trait = flag:hashishiyah + scope:triggered_trait = flag:reclusive + scope:triggered_trait = flag:flagellant + scope:triggered_trait = flag:comfort_eater + } + } + animation = shock + } + triggered_animation = { + trigger = { + OR = { + scope:triggered_trait = flag:profligate + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + scope:triggered_trait = flag:improvident + } + } + animation = thinking + } + animation = eavesdrop + } + immediate = { + #play_music_cue = "mx_cue_stress" + if = { + limit = { scope:triggered_trait = flag:contrite } + random_dummy_gender_effect = yes + } + scope:appropriate_child = { + if = { + limit = { + scope:triggered_trait = flag:athletic + is_male = yes + } + add_character_flag = should_be_topless + } + } + } + #Teach them better + option = { + name = bp2_yearly.1001.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + desc = bp2_yearly.1001.a.flavor_good + } + desc = bp2_yearly.1001.a.flavor + } + } + #These traits are net positive + if = { + limit = { + OR = { + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + duel = { + skill = learning + value = average_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + opinion_modifier = { + opinion_target = scope:appropriate_child + multiplier = 3 + step = 5 + } + modifier = { + has_trait = family_first + add = 25 + } + modifier = { + has_trait = diplomat + add = 10 + } + desc = bp2_yearly.1001.a.trait.desc + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1001.a.trait.t + left_icon = root + right_icon = scope:appropriate_child + scope:appropriate_child = { bp2_yearly_1000_award_trait_effect = yes } + reverse_add_opinion = { + target = scope:appropriate_child + modifier = teaching_moment_opinion + opinion = 25 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.1001.a.no_trait.desc + send_interface_toast = { + type = event_toast_effect_neutral + title = bp2_yearly.1001.a.no_trait.t + left_icon = root + right_icon = scope:appropriate_child + reverse_add_opinion = { + target = scope:appropriate_child + modifier = teaching_moment_opinion + opinion = 25 + } + } + } + } + } + #These traits are to be avoided + else = { + duel = { + skill = learning + value = average_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + opinion_modifier = { + opinion_target = scope:appropriate_child + multiplier = 2 + step = 5 + } + modifier = { + has_trait = family_first + add = 25 + } + modifier = { + has_trait = diplomat + add = 10 + } + desc = bp2_yearly.1001.a.no_trait.desc + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1001.a.no_trait.t + left_icon = root + right_icon = scope:appropriate_child + reverse_add_opinion = { + target = scope:appropriate_child + modifier = teaching_moment_opinion + opinion = 25 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + desc = bp2_yearly.1001.a.trait.desc + send_interface_toast = { + type = event_toast_effect_bad + title = bp2_yearly.1001.a.trait.t + left_icon = root + right_icon = scope:appropriate_child + scope:appropriate_child = { bp2_yearly_1000_award_trait_effect = yes } + } + } + } + } + #AI won't be getting this event + } + #I should change my ways + option = { + name = bp2_yearly.1001.b + flavor = bp2_yearly.1001.b.flavor + #Doesn't make sense to lose these traits + trigger = { + NOR = { + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + switch = { + trigger = scope:triggered_trait + flag:drunkard = { remove_trait = drunkard } + flag:hashishiyah = { remove_trait = hashishiyah } + flag:reclusive = { remove_trait = reclusive } + flag:irritable = { remove_trait = irritable } + flag:flagellant = { remove_trait = flagellant } + flag:profligate = { remove_trait = profligate } + flag:improvident = { remove_trait = improvident } + flag:contrite = { remove_trait = contrite } + flag:comfort_eater = { remove_trait = comfort_eater } + flag:inappetetic = { remove_trait = inappetetic } + } + #Longer cooldown if you actually changed your ways + add_character_flag = { + flag = bp2_yearly_1001_removed_stress_trait + years = 20 + } + #You're stressed about losing your outlet; but also proud about changing your ways + add_character_modifier = { + modifier = changed_ways_modifier + years = 10 + } + #Massive gain + stress_impact = { + base = major_stress_impact_gain + #Some mitigation + whole_of_body = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + #AI won't be getting this event + } + #Meh, guess it's out of my hands + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = sadistic + has_trait = eccentric + } + #That's my girl! + desc = bp2_yearly.1001.c_ecc_sadist + } + triggered_desc = { + trigger = { has_trait = callous } + #Who am I to interrupt + desc = bp2_yearly.1001.c.flavor_callous + } + desc = bp2_yearly.1001.c + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + scope:triggered_trait = flag:flagellant + has_trait = sadistic + has_trait = eccentric + } + #Let the flesh sing + desc = bp2_yearly.1001.c.flavor_ecc_sadist + } + triggered_desc = { + trigger = { has_trait = callous } + #Who said child-rearing was difficult + desc = bp2_yearly.1001.c.flavor_callous + } + desc = bp2_yearly.1001.c.flavor + } + } + #Doesn't make sense to not encourage these + trigger = { + NOR = { + scope:triggered_trait = flag:journaller + scope:triggered_trait = flag:confider + scope:triggered_trait = flag:athletic + } + } + random_list = { + 50 = { + send_interface_toast = { + type = event_toast_effect_bad + title = bp2_yearly.1001.a.trait.t + right_icon = scope:appropriate_child + scope:appropriate_child = { bp2_yearly_1000_award_trait_effect = yes } + } + } + 50 = { + #Nothing happens + } + } + #Sadists be sadists + if = { + limit = { + OR = { + scope:triggered_trait = flag:irritable + scope:triggered_trait = flag:flagellant + } + has_trait = sadistic + } + stress_impact = { + diligent = miniscule_stress_impact_gain + lazy = miniscule_stress_impact_loss + sadistic = medium_stress_impact_loss + } + } + else = { + stress_impact = { + diligent = miniscule_stress_impact_gain + lazy = miniscule_stress_impact_loss + } + } + #AI won't be getting this event + } + after = { + scope:appropriate_child = { + if = { + limit = { has_character_flag = should_be_topless } + remove_character_flag = should_be_topless + } + } + } +} + +scripted_trigger bp2_yearly_1005_is_stressed_adult = { + location = root.location + OR = { + AND = { + has_trait = drunkard + #Is the trait transferrable? + NOT = { + root = { has_trait = drunkard } + } + } + AND = { + has_trait = hashishiyah + NOT = { + root = { has_trait = hashishiyah } + } + } + AND = { + has_trait = reclusive + NOT = { + root = { has_trait = reclusive } + } + } + AND = { + has_trait = irritable + NOT = { + root = { has_trait = irritable } + } + } + AND = { + has_trait = flagellant + NOT = { + root = { has_trait = flagellant } + } + } + AND = { + has_trait = profligate + NOT = { + root = { has_trait = profligate } + } + } + AND = { + has_trait = improvident + NOT = { + root = { has_trait = improvident } + } + } + AND = { + has_trait = contrite + NOT = { + root = { has_trait = contrite } + } + } + AND = { + has_trait = comfort_eater + NOT = { + root = { has_trait = comfort_eater } + } + } + AND = { + has_trait = inappetetic + NOT = { + root = { has_trait = inappetetic } + } + } + AND = { + has_trait = journaller + NOT = { + root = { has_trait = journaller } + } + } + AND = { + has_trait = confider + any_relation = { + type = friend + is_available = yes + location = this.location + } + NOT = { + root = { has_trait = confider } + } + } + AND = { + has_trait = athletic + NOT = { + root = { has_trait = athletic } + } + } + } +} + +#Child: You notice your parent/guardian performing a stress trait +bp2_yearly.1005 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1005.t + desc = { + desc = bp2_yearly.1005.intro + #Well, this is an interesting behavior... + first_valid = { + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:drunkard } + desc = bp2_yearly.1005.desc_drunkard + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:hashishiyah } + desc = bp2_yearly.1005.desc_hashishiyah + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:reclusive } + desc = bp2_yearly.1005.desc_reclusive + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:irritable } + desc = bp2_yearly.1005.desc_irritable + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:flagellant } + desc = bp2_yearly.1005.desc_flagellant + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:profligate } + desc = bp2_yearly.1005.desc_profligate + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:improvident } + desc = bp2_yearly.1005.desc_improvident + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:contrite } + desc = bp2_yearly.1005.desc_contrite + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:comfort_eater } + desc = bp2_yearly.1005.desc_comfort_eater + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:inappetetic } + desc = bp2_yearly.1005.desc_inappetetic + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:journaller } + desc = bp2_yearly.1005.desc_journaller + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:confider } + desc = bp2_yearly.1005.desc_confider + } + triggered_desc = { + trigger = { var:witnessed_trait ?= flag:athletic } + desc = bp2_yearly.1005.desc_athletic + } + } + } + theme = family + #Let's be in a couple of different places + override_background = { + trigger = { var:witnessed_trait ?= flag:inappetetic } + reference = feast_event + } + override_background = { + trigger = { + OR = { + var:witnessed_trait ?= flag:hashishiyah + var:witnessed_trait ?= flag:comfort_eater + var:witnessed_trait ?= flag:journaller + } + } + reference = relaxing_room + } + override_background = { + trigger = { + OR = { + var:witnessed_trait ?= flag:contrite + var:witnessed_trait ?= flag:confider + } + } + reference = corridor_day + } + override_background = { + trigger = { var:witnessed_trait ?= flag:drunkard } + reference = bp1_wine_cellar + } + override_background = { + trigger = { var:witnessed_trait ?= flag:irritable } + reference = bedchamber + } + override_background = { + trigger = { var:witnessed_trait ?= flag:reclusive } + reference = study + } + override_background = { + trigger = { var:witnessed_trait ?= flag:flagellant } + reference = dungeon + } + override_background = { + trigger = { var:witnessed_trait ?= flag:profligate } + reference = market + } + override_background = { + trigger = { var:witnessed_trait ?= flag:athletic } + reference = ep2_tournament + } + override_background = { + trigger = { var:witnessed_trait ?= flag:improvident } + reference = temple + } + #Fallback + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:stressed_adult + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:drunkard } + } + animation = drink_goblet + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:improvident } + } + animation = personality_compassionate + } + triggered_animation = { + trigger = { + root = { + OR = { + var:witnessed_trait ?= flag:reclusive + var:witnessed_trait ?= flag:inappetetic + } + } + } + animation = personality_cynical + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:journaller } + } + animation = thinking + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:flagellant } + } + animation = pain + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:contrite } + } + animation = personality_zealous + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:confider } + } + animation = admiration + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:athletic } + } + animation = ecstasy + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:profligate } + } + animation = steward + } + triggered_animation = { + trigger = { + root = { var:witnessed_trait ?= flag:irritable } + } + animation = rage + } + triggered_animation = { + trigger = { + OR = { + has_trait = eccentric + has_trait = lunatic + root = { var:witnessed_trait ?= flag:hashishiyah } + } + } + animation = personality_irrational + } + animation = stress + } + lower_right_portrait = { + trigger = { exists = scope:confidant_friend } + character = scope:confidant_friend + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available_child = yes + age >= 6 + age <= 14 + is_landed = yes + is_ai = no + OR = { + any_relation = { + type = guardian + bp2_yearly_1005_is_stressed_adult = yes + } + any_parent = { bp2_yearly_1005_is_stressed_adult = yes } + } + NOT = { has_variable = witnessed_trait } + } + weight_multiplier = { + base = 0 + #The more stress traits; the higher chance + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = drunkard + } + any_parent = { + location = root.location + has_trait = drunkard + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = hashishiyah + } + any_parent = { + location = root.location + has_trait = hashishiyah + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = reclusive + } + any_parent = { + location = root.location + has_trait = reclusive + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = irritable + } + any_parent = { + location = root.location + has_trait = irritable + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = flagellant + } + any_parent = { + location = root.location + has_trait = flagellant + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = profligate + } + any_parent = { + location = root.location + has_trait = profligate + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = improvident + } + any_parent = { + location = root.location + has_trait = improvident + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = contrite + } + any_parent = { + location = root.location + has_trait = contrite + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = comfort_eater + } + any_parent = { + location = root.location + has_trait = comfort_eater + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = inappetetic + } + any_parent = { + location = root.location + has_trait = inappetetic + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = journaller + } + any_parent = { + location = root.location + has_trait = journaller + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = confider + } + any_parent = { + location = root.location + has_trait = confider + } + } + add = 1 + } + modifier = { + OR = { + any_relation = { + type = guardian + location = root.location + has_trait = athletic + } + any_parent = { + location = root.location + has_trait = athletic + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_stress" + #Your guardian first (you probably spend more time together) + random_relation = { + type = guardian + limit = { bp2_yearly_1005_is_stressed_adult = yes } + save_scope_as = stressed_adult + } + #Then a parent + if = { + limit = { + NOT = { exists = scope:stressed_adult } + } + random_parent = { + #A parent you care about + limit = { + opinion = { + target = root + value >= low_positive_opinion + } + bp2_yearly_1005_is_stressed_adult = yes + } + #Otherwise pick whoever + alternative_limit = { bp2_yearly_1005_is_stressed_adult = yes } + save_scope_as = stressed_adult + } + } + random_list = { + #Set a trait to work from and remember it; weights what stress coping events the child may get later in life + 1 = { + trigger = { + scope:stressed_adult = { has_trait = drunkard } + } + set_variable = { + name = witnessed_trait + value = flag:drunkard + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = hashishiyah } + } + set_variable = { + name = witnessed_trait + value = flag:hashishiyah + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = reclusive } + } + set_variable = { + name = witnessed_trait + value = flag:reclusive + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = irritable } + } + set_variable = { + name = witnessed_trait + value = flag:irritable + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = flagellant } + } + set_variable = { + name = witnessed_trait + value = flag:flagellant + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = profligate } + } + set_variable = { + name = witnessed_trait + value = flag:profligate + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = improvident } + } + set_variable = { + name = witnessed_trait + value = flag:improvident + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = contrite } + } + set_variable = { + name = witnessed_trait + value = flag:contrite + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = comfort_eater } + } + scope:stressed_adult = { set_favorite_treat_effect = yes } + set_variable = { + name = witnessed_trait + value = flag:comfort_eater + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = inappetetic } + } + set_variable = { + name = witnessed_trait + value = flag:inappetetic + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = journaller } + } + set_variable = { + name = witnessed_trait + value = flag:journaller + } + } + 1 = { + trigger = { + scope:stressed_adult = { + has_trait = confider + any_relation = { + type = friend + is_available = yes + location = this.location + } + } + } + scope:stressed_adult = { + random_relation = { + type = friend + limit = { + is_available = yes + location = this.location + } + save_scope_as = confidant_friend + } + } + set_variable = { + name = witnessed_trait + value = flag:confider + } + } + 1 = { + trigger = { + scope:stressed_adult = { has_trait = athletic } + } + set_variable = { + name = witnessed_trait + value = flag:athletic + } + } + } + } + #_What's the worst thing that could happen_ + option = { + name = bp2_yearly.1005.a + flavor = bp2_yearly.1005.a.flavor + random_list = { + 25 = { + trigger = { + NOR = { + var:witnessed_trait ?= flag:confider + var:witnessed_trait ?= flag:journaller + var:witnessed_trait ?= flag:athletic + } + } + desc = bp2_yearly.1005.a.insight.desc + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1005.a.insight.t + left_icon = root + add_character_modifier = { + modifier = stress_insight_modifier + #Reflecting on yourself is half the battle + } + } + } + 25 = { + desc = bp2_yearly.1005.a.stressed.desc + send_interface_toast = { + type = event_toast_effect_bad + title = bp2_yearly.1005.a.stressed.t + left_icon = root + stress_impact = { base = miniscule_stress_impact_gain } + } + } + 50 = { + desc = bp2_yearly.1005.a.trait.desc + bp2_yearly_1000_award_trait_effect = yes + stress_impact = { base = medium_stress_impact_loss } + } + } + #AI won't be getting this event + } + #Nah + option = { + name = bp2_yearly.1005.b + #AI won't be getting this event + } +} + +scripted_trigger bp2_yearly_1010_is_hugging_child = { + age >= 2 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } +} + +#Parent/Guardian: Your child/ward gives you a hug +bp2_yearly.1010 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1010.t + desc = { + desc = bp2_yearly.1010.intro + first_valid = { + #Age 2 kid doesn't speak + triggered_desc = { + trigger = { + scope:hugging_child = { age = 2 } + } + desc = bp2_yearly.1010.desc_toddler + } + #Age 3-5 kid speaks... ish + triggered_desc = { + trigger = { + scope:hugging_child = { + age > 2 + age < 6 + } + } + desc = bp2_yearly.1010.desc_rambler + } + #Age 6-10 kid speaks + triggered_desc = { + trigger = { + scope:hugging_child = { + age > 5 + age < 11 + } + } + desc = bp2_yearly.1010.desc_kid + } + #Age 10-15 teenager + triggered_desc = { + trigger = { + scope:hugging_child = { + age > 10 + age <= 15 + } + } + desc = bp2_yearly.1010.desc_teenager + } + } + first_valid = { + triggered_desc = { + trigger = { has_trait = callous } + desc = bp2_yearly.1010.outro_callous + } + triggered_desc = { + trigger = { + scope:hugging_child = { + age >= 2 + age < 11 + } + } + desc = bp2_yearly.1010.outro_young + } + desc = bp2_yearly.1010.outro_older + } + } + theme = family + override_background = { reference = council_chamber } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = personality_cynical + } + animation = shock + } + right_portrait = { + character = scope:hugging_child + animation = personality_content + } + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + static_group_filter = { + group = bp2_yearly.1010 + match = 0.25 + } + stress > 0 + is_available = yes + is_physically_able_adult = yes + is_landed = yes + OR = { + any_child = { + bp2_yearly_1010_is_hugging_child = yes + } + any_relation = { + type = ward + bp2_yearly_1010_is_hugging_child = yes + } + any_warden_hostage = { + bp2_yearly_1010_is_hugging_child = yes + } + } + } + weight_multiplier = { + base = 1 + #The more stress; the higher chance + modifier = { + stress_level > 0 + add = 1 + } + modifier = { + stress_level > 1 + add = 1 + } + modifier = { + stress_level > 2 + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_touching_moment" + #Your own children first + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1010_is_hugging_child = yes } } + random_child = { + #A child you care about + limit = { bp2_yearly_1010_is_hugging_child = yes } + save_scope_as = hugging_child + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1010_is_hugging_child = yes + } + } + random_relation = { + type = ward + #A child you care about + limit = { bp2_yearly_1010_is_hugging_child = yes } + save_scope_as = hugging_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1010_is_hugging_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { bp2_yearly_1010_is_hugging_child = yes } + save_scope_as = hugging_child + } + } + } + } + #Have some stress relief + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_trait = callous } + desc = bp2_yearly.1010.a_callous + } + desc = bp2_yearly.1010.a + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { has_trait = callous } + desc = bp2_yearly.1010.a.flavor_callous + } + desc = bp2_yearly.1010.a.flavor + } + } + stress_impact = { base = minor_stress_impact_loss } + } +} + +scripted_trigger bp2_yearly_1015_is_golden_child = { + age >= 7 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } + NOT = { has_variable = had_bp2_yearly_1015_stewardship_event } +} + +#Parent/Guardian: Your child/ward found a pouch of gold while exploring +bp2_yearly.1015 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1015.t + desc = { + desc = bp2_yearly.1015.intro + first_valid = { + triggered_desc = { + trigger = { is_parent_of = scope:golden_child } + desc = bp2_yearly.1015.desc_parent + } + desc = bp2_yearly.1015.desc_guardian + } + desc = bp2_yearly.1015.outro + } + theme = family + override_background = { reference = bedchamber } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = personality_cynical + } + triggered_animation = { + trigger = { has_trait = greedy } + animation = personality_greedy + } + animation = personality_compassionate + } + right_portrait = { + character = scope:golden_child + animation = steward + } + #Set up the cooldown + cooldown = { years = 5 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + OR = { + any_child = { bp2_yearly_1015_is_golden_child = yes } + any_relation = { + type = ward + bp2_yearly_1015_is_golden_child = yes + } + any_warden_hostage = { + bp2_yearly_1015_is_golden_child = yes + } + } + } + weight_multiplier = { + base = 1 + modifier = { + OR = { + any_child = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + any_relation = { + type = ward + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + any_warden_hostage = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Your own children first + random_child = { + limit = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1015_is_golden_child = yes } + save_scope_as = golden_child + } + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1015_is_golden_child = yes } } + random_child = { + limit = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1015_is_golden_child = yes + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1015_is_golden_child = yes } + save_scope_as = golden_child + } + modifier = { + any_child = { + bp2_yearly_1015_is_golden_child = yes + this = root.player_heir + } + add = 50 + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1015_is_golden_child = yes + } + } + random_relation = { + type = ward + limit = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1015_is_golden_child = yes } + save_scope_as = golden_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1015_is_golden_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { + bp2_yearly_1015_is_golden_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1015_is_golden_child = yes } + save_scope_as = golden_child + } + } + } + scope:golden_child = { + set_variable = { + name = had_bp2_yearly_1015_stewardship_event + value = flag:yes + } + } + } + #Have some gold + option = { + name = bp2_yearly.1015.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { has_trait = greedy } + desc = bp2_yearly.1015.a.flavor_greedy + } + desc = bp2_yearly.1015.a.flavor + } + } + add_gold = minor_gold_value + ai_chance = { + base = 100 + } + } + #Have some education + option = { + name = bp2_yearly.1015.b + trigger = { + scope:golden_child = { has_focus = education_stewardship } + } + #More points for a matching education + if = { + limit = { has_trait = education_stewardship } + custom_tooltip = bp2_yearly.1015.b.tt_matching + hidden_effect = { + scope:golden_child = { + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + } + } + else = { + custom_tooltip = bp2_yearly.1015.b.tt + hidden_effect = { + scope:golden_child = { + education_point_acquisition_additional_points_effect = { LEVEL = low } + } + } + } + reverse_add_opinion = { + target = scope:golden_child + modifier = teaching_moment_opinion + opinion = 15 + } + stress_impact = { greedy = minor_stress_impact_gain } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } +} + +scripted_trigger bp2_yearly_1020_is_secrety_child = { + age >= 7 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } + NOT = { has_variable = had_bp2_yearly_1020_intrigue_event } +} + +scripted_trigger bp2_yearly_1020_is_relevant_secret = { + is_known_by = prev #A courtier + NOR = { + secret_owner = root + is_known_by = root + } +} + +#Parent/Guardian: Your child/ward has found a secret in court +bp2_yearly.1020 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1020.t + desc = { + desc = bp2_yearly.1020.intro + first_valid = { + triggered_desc = { + trigger = { is_parent_of = scope:secrety_child } + desc = bp2_yearly.1020.desc_parent + } + desc = bp2_yearly.1020.desc_guardian + } + desc = bp2_yearly.1020.desc + } + theme = family + override_background = { reference = study } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = personality_cynical + } + triggered_animation = { + trigger = { has_trait = deceitful } + animation = schadenfreude + } + animation = personality_dishonorable + } + right_portrait = { + character = scope:secrety_child + animation = ecstasy + } + lower_center_portrait = { + character = scope:secret_keeper + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_adult = yes + OR = { + any_child = { + bp2_yearly_1020_is_secrety_child = yes + save_temporary_scope_as = child_check + } + any_relation = { + type = ward + bp2_yearly_1020_is_secrety_child = yes + save_temporary_scope_as = child_check + } + any_warden_hostage = { + bp2_yearly_1020_is_secrety_child = yes + save_temporary_scope_as = child_check + } + } + any_courtier = { + NOR = { + this = scope:child_check + this = root + is_parent_of = scope:child_check #Don't rat out your parents + } + any_secret = { + bp2_yearly_1020_is_relevant_secret = yes + NOR = { + trigger_if = { + limit = { exists = secret_target } + secret_target = scope:child_check + } + secret_owner = scope:child_check #Or yourself + } + } + } + } + weight_multiplier = { + base = 1 + modifier = { + OR = { + any_child = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_intrigue + } + any_relation = { + type = ward + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_intrigue + } + any_warden_hostage = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_intrigue + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1020_is_secrety_child = yes } } + random_child = { + limit = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_intrigue + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_intrigue + } + alternative_limit = { bp2_yearly_1020_is_secrety_child = yes } + save_scope_as = secrety_child + } + modifier = { + any_child = { + bp2_yearly_1020_is_secrety_child = yes + this = root.player_heir + } + add = 50 + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1020_is_secrety_child = yes + } + } + random_relation = { + type = ward + limit = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1020_is_secrety_child = yes } + save_scope_as = secrety_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1020_is_secrety_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { + bp2_yearly_1020_is_secrety_child = yes + has_focus = education_stewardship + } + alternative_limit = { bp2_yearly_1020_is_secrety_child = yes } + save_scope_as = secrety_child + } + } + } + #Find the secret to reveal + random_courtier = { + limit = { + NOR = { + this = scope:secrety_child + this = root + is_parent_of = scope:secrety_child #Don't rat out your parents + } + any_secret = { + bp2_yearly_1020_is_relevant_secret = yes + NOR = { + trigger_if = { + limit = { exists = secret_target } + secret_target = scope:secrety_child + } + secret_owner = scope:secrety_child #Or yourself + } + } + } + save_scope_as = secret_keeper + random_secret = { + limit = { + bp2_yearly_1020_is_relevant_secret = yes + NOR = { + trigger_if = { + limit = { exists = secret_target } + secret_target = scope:secrety_child + } + secret_owner = scope:secrety_child + } + } + hidden_effect = { + if = { + limit = { + NOT = { is_known_by = scope:secrety_child } + } + reveal_to = scope:secrety_child + } + } + save_scope_as = bp2_yearly_1020_secret_to_reveal + } + } + scope:secrety_child = { + set_variable = { + name = had_bp2_yearly_1020_intrigue_event + value = flag:yes + } + } + } + #Have a secret + option = { + name = bp2_yearly.1020.a + custom_tooltip = bp2_yearly.1020.a.tt + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1020.a.secret.t + left_icon = root + right_icon = scope:secret_keeper + scope:bp2_yearly_1020_secret_to_reveal = { reveal_to = root } + } + } + ai_chance = { + base = 100 + } + } + #Have some education + option = { + name = bp2_yearly.1020.b + trigger = { + scope:secrety_child = { has_focus = education_intrigue } + } + #More points for a matching education + if = { + limit = { has_trait = education_intrigue } + custom_tooltip = bp2_yearly.1020.b.tt_matching + hidden_effect = { + scope:secrety_child = { + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + } + } + else = { + custom_tooltip = bp2_yearly.1020.b.tt + hidden_effect = { + scope:secrety_child = { + education_point_acquisition_additional_points_effect = { LEVEL = low } + } + } + } + reverse_add_opinion = { + target = scope:secrety_child + modifier = teaching_moment_opinion + opinion = 15 + } + stress_impact = { deceitful = minor_stress_impact_gain } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 0 + } + } + } +} + +scripted_trigger bp2_yearly_1030_is_focus_child = { + age >= 5 + age < 16 + is_available = yes + is_ai = yes + OR = { # A focus is selected + has_focus = education_martial + has_focus = education_intrigue + has_focus = education_learning + has_focus = education_stewardship + has_focus = education_diplomacy + } + OR = { + AND = { + root = { has_trait = education_martial } + NOT = { has_focus = education_martial } + } + AND = { + root = { has_trait = education_intrigue } + NOT = { has_focus = education_intrigue } + } + AND = { + root = { has_trait = education_learning } + NOT = { has_focus = education_learning } + } + AND = { + root = { has_trait = education_stewardship } + NOT = { has_focus = education_stewardship } + } + AND = { + root = { has_trait = education_diplomacy } + NOT = { has_focus = education_diplomacy } + } + } + NOT = { has_variable = had_bp2_yearly_1030_focus_event } +} + +#Parent: Your child does not have the same educational trait as you. Change? +bp2_yearly.1030 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1030.t + desc = bp2_yearly.1030.desc + theme = education + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:focus_child + animation = reading + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_adult = yes + any_child = { bp2_yearly_1030_is_focus_child = yes } + } + weight_multiplier = { + base = 1 + #The better educational trait; the higher chance + modifier = { + has_trait = education_martial_2 + add = 1 + } + modifier = { + has_trait = education_martial_3 + add = 2 + } + modifier = { + has_trait = education_martial_4 + add = 3 + } + modifier = { + has_trait = education_intrigue_2 + add = 1 + } + modifier = { + has_trait = education_intrigue_3 + add = 2 + } + modifier = { + has_trait = education_intrigue_4 + add = 3 + } + modifier = { + has_trait = education_learning_2 + add = 1 + } + modifier = { + has_trait = education_learning_3 + add = 2 + } + modifier = { + has_trait = education_learning_4 + add = 3 + } + modifier = { + has_trait = education_stewardship_2 + add = 1 + } + modifier = { + has_trait = education_stewardship_3 + add = 2 + } + modifier = { + has_trait = education_stewardship_4 + add = 3 + } + modifier = { + has_trait = education_diplomacy_2 + add = 1 + } + modifier = { + has_trait = education_diplomacy_3 + add = 2 + } + modifier = { + has_trait = education_diplomacy_4 + add = 3 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + random_child = { + limit = { + bp2_yearly_1030_is_focus_child = yes + NOT = { has_variable = had_bp2_yearly_1030_focus_event } + } + save_scope_as = focus_child + } + scope:focus_child = { + set_variable = { + name = had_bp2_yearly_1030_focus_event + value = flag:yes + } + } + } + #My way or the highway + option = { + name = bp2_yearly.1030.a + custom_tooltip = bp2_yearly.1030.a.tt_change + custom_tooltip = bp2_yearly.1030.a.tt_tutor + hidden_effect = { + if = { + limit = { has_trait = education_martial } + scope:focus_child = { + set_focus = education_martial + change_variable = { + name = education_martial_variable + add = age + } + } + } + else_if = { + limit = { has_trait = education_intrigue } + scope:focus_child = { + set_focus = education_intrigue + change_variable = { + name = education_intrigue_variable + add = age + } + } + } + else_if = { + limit = { has_trait = education_learning } + scope:focus_child = { + set_focus = education_learning + change_variable = { + name = education_learning_variable + add = age + } + } + } + else_if = { + limit = { has_trait = education_stewardship } + scope:focus_child = { + set_focus = education_stewardship + change_variable = { + name = education_stewardship_variable + add = age + } + } + } + else_if = { + limit = { has_trait = education_diplomacy } + scope:focus_child = { + set_focus = education_diplomacy + change_variable = { + name = education_diplomacy_variable + add = age + } + } + } + } + stress_impact = { + base = medium_stress_impact_gain + diligent = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + #It's fine, I guess... + option = { + name = bp2_yearly.1030.b + custom_tooltip = bp2_yearly.1030.b.tt + #To avoid an empty random list + hidden_effect = { + scope:focus_child = { education_point_acquisition_effect = yes } + } + ai_chance = { + base = 100 + } + } +} + +scripted_trigger bp2_yearly_1035_is_rock_child = { + age >= 7 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } + NOT = { has_variable = had_bp2_yearly_1035_learning_event } +} + +#Parent/Guardian: Your child/ward has a rock collection +bp2_yearly.1035 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1035.t + desc = { + desc = bp2_yearly.1035.desc + first_valid = { + triggered_desc = { + trigger = { is_parent_of = scope:rock_child } + desc = bp2_yearly.1035.desc_parent + } + desc = bp2_yearly.1035.desc_guardian + } + } + theme = family + override_background = { + trigger = { + has_tgp_dlc_trigger = yes + location = { + geographical_region = world_asia_east + } + } + reference = relaxing_room + } + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = personality_cynical + } + triggered_animation = { + trigger = { has_trait = greedy } + animation = personality_greedy + } + animation = personality_coward + } + right_portrait = { + character = scope:rock_child + animation = love + } + artifact = { + target = scope:gemstone_trinket + position = lower_center_portrait + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_adult = yes + OR = { + any_child = { bp2_yearly_1035_is_rock_child = yes } + any_relation = { + type = ward + bp2_yearly_1035_is_rock_child = yes + } + any_warden_hostage = { + bp2_yearly_1035_is_rock_child = yes + } + } + } + weight_multiplier = { + base = 1 + modifier = { + OR = { + any_child = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + any_relation = { + type = ward + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + any_warden_hostage = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1035_is_rock_child = yes } } + random_child = { + limit = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + alternative_limit = { bp2_yearly_1035_is_rock_child = yes } + save_scope_as = rock_child + } + modifier = { + any_child = { + bp2_yearly_1035_is_rock_child = yes + this = root.player_heir + } + add = 50 + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1035_is_rock_child = yes + } + } + random_relation = { + type = ward + limit = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + alternative_limit = { bp2_yearly_1035_is_rock_child = yes } + save_scope_as = rock_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1035_is_rock_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { + bp2_yearly_1035_is_rock_child = yes + has_focus = education_learning + } + alternative_limit = { bp2_yearly_1035_is_rock_child = yes } + save_scope_as = rock_child + } + } + } + + root.location = { save_scope_as = trinket_location } + #Create the gemstone + hidden_effect = { + scope:rock_child = { + random_list = { + 50 = { + create_artifact = { + name = gemstone_trinket_rough + description = gemstone_trinket_rough.desc + type = miscellaneous + visuals = diamond + modifier = artifact_monthly_minor_prestige_1_modifier + modifier = artifact_learning_1_modifier + save_scope_as = gemstone_trinket + wealth = 15 + quality = 15 + max_durability = 30 + generate_history = no + } + } + 50 = { + create_artifact = { + name = gemstone_trinket_modest + description = gemstone_trinket_modest.desc + type = miscellaneous + visuals = diamond + modifier = artifact_monthly_minor_prestige_2_modifier + modifier = artifact_learning_1_modifier + save_scope_as = gemstone_trinket + wealth = 15 + quality = 15 + max_durability = 40 + generate_history = no + } + } + 50 = { + create_artifact = { + name = gemstone_trinket_brilliant + description = gemstone_trinket_brilliant.desc + type = miscellaneous + visuals = diamond + modifier = artifact_monthly_minor_prestige_3_modifier + modifier = artifact_learning_2_modifier + save_scope_as = gemstone_trinket + wealth = 15 + quality = 15 + max_durability = 50 + generate_history = no + } + } + } + + } + } + scope:rock_child = { + set_variable = { + name = had_bp2_yearly_1035_learning_event + value = flag:yes + } + } + } + #Have a gem trinket + option = { + name = bp2_yearly.1035.a + flavor = bp2_yearly.1035.a.flavor + scope:gemstone_trinket = { set_owner = root } + ai_chance = { + base = 100 + } + } + #Have some education + option = { + name = bp2_yearly.1035.b + trigger = { + scope:rock_child = { has_focus = education_learning } + } + #More points for a matching education + if = { + limit = { has_trait = education_learning } + custom_tooltip = bp2_yearly.1035.b.tt_matching + hidden_effect = { + scope:rock_child = { + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + } + } + else = { + custom_tooltip = bp2_yearly.1035.b.tt + hidden_effect = { + scope:rock_child = { + education_point_acquisition_additional_points_effect = { LEVEL = low } + } + } + } + reverse_add_opinion = { + target = scope:rock_child + modifier = teaching_moment_opinion + opinion = 15 + } + stress_impact = { greedy = minor_stress_impact_gain } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } +} + +scripted_trigger bp2_yearly_1040_is_sparring_child = { + age >= 7 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } + NOT = { has_variable = had_bp2_yearly_1040_martial_event } +} + +#Parent/Guardian: Your child/ward has a text about martial +bp2_yearly.1040 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1040.t + desc = bp2_yearly.1040.desc + theme = family + override_background = { reference = study } + left_portrait = { + character = root + animation = reading + } + right_portrait = { + character = scope:sparring_child + animation = marshal_wooden_sword + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_adult = yes + OR = { + any_child = { bp2_yearly_1040_is_sparring_child = yes } + any_relation = { + type = ward + bp2_yearly_1040_is_sparring_child = yes + } + any_warden_hostage = { + bp2_yearly_1040_is_sparring_child = yes + } + } + } + weight_multiplier = { + base = 1 + modifier = { + OR = { + any_child = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + any_relation = { + type = ward + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + any_warden_hostage = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + + + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1040_is_sparring_child = yes } } + random_child = { + limit = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + alternative_limit = { bp2_yearly_1040_is_sparring_child = yes } + save_scope_as = sparring_child + } + modifier = { + any_child = { + bp2_yearly_1040_is_sparring_child = yes + this = root.player_heir + } + add = 50 + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1040_is_sparring_child = yes + } + } + random_relation = { + type = ward + limit = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + alternative_limit = { bp2_yearly_1040_is_sparring_child = yes } + save_scope_as = sparring_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1040_is_sparring_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { + bp2_yearly_1040_is_sparring_child = yes + has_focus = education_martial + } + alternative_limit = { bp2_yearly_1040_is_sparring_child = yes } + save_scope_as = sparring_child + } + } + } + + scope:sparring_child = { + set_variable = { + name = had_bp2_yearly_1040_martial_event + value = flag:yes + } + } + } + #Have some martial + option = { + name = bp2_yearly.1040.a + flavor = bp2_yearly.1040.a.flavor + add_martial_skill = 1 + ai_chance = { + base = 100 + } + } + #Have some education + option = { + name = bp2_yearly.1040.b + trigger = { + scope:sparring_child = { has_focus = education_martial } + } + #More points for a matching education + if = { + limit = { has_trait = education_martial } + custom_tooltip = bp2_yearly.1040.b.tt_matching + hidden_effect = { + scope:sparring_child = { + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + } + } + else = { + custom_tooltip = bp2_yearly.1040.b.tt + hidden_effect = { + scope:sparring_child = { + education_point_acquisition_additional_points_effect = { LEVEL = low } + } + } + } + reverse_add_opinion = { + target = scope:sparring_child + modifier = teaching_moment_opinion + opinion = 15 + } + stress_impact = { craven = minor_stress_impact_gain } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } +} + +scripted_trigger bp2_yearly_1045_is_diplomacy_child = { + age >= 7 + age < 16 + is_available = yes + is_ai = yes + location = root.location + opinion = { + target = root + value >= medium_positive_opinion + } + NOT = { has_variable = had_bp2_yearly_1045_diplomacy_event } +} + +#Parent/Guardian: There is a brawl among some children +bp2_yearly.1045 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1045.t + desc = { + desc = bp2_yearly.1045.intro + first_valid = { + triggered_desc = { + trigger = { is_parent_of = scope:diplomacy_child } + desc = bp2_yearly.1045.desc_parent + } + desc = bp2_yearly.1045.desc_guardian + } + desc = bp2_yearly.1045.desc + } + theme = family + override_background = { reference = alley_day } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = eccentric } + animation = happiness + } + triggered_animation = { + trigger = { + OR = { + has_trait = greedy + has_trait = callous + } + } + animation = personality_dishonorable + } + animation = worry + } + right_portrait = { + character = scope:diplomacy_child + animation = shock + } + #Set up the cooldown + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_adult = yes + OR = { + any_child = { bp2_yearly_1045_is_diplomacy_child = yes } + any_relation = { + type = ward + bp2_yearly_1045_is_diplomacy_child = yes + } + any_warden_hostage = { + bp2_yearly_1045_is_diplomacy_child = yes + } + } + } + weight_multiplier = { + base = 1 + modifier = { + OR = { + any_child = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + any_relation = { + type = ward + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + any_warden_hostage = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + } + add = 1 + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + + random_list = { + 33 = { + trigger = { any_child = { bp2_yearly_1045_is_diplomacy_child = yes } } + random_child = { + limit = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + this = root.player_heir + } + alternative_limit = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + alternative_limit = { bp2_yearly_1045_is_diplomacy_child = yes } + save_scope_as = diplomacy_child + } + modifier = { + any_child = { + bp2_yearly_1045_is_diplomacy_child = yes + this = root.player_heir + } + add = 50 + } + } + 33 = { + trigger = { + any_relation = { + type = ward + bp2_yearly_1045_is_diplomacy_child = yes + } + } + random_relation = { + type = ward + limit = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + alternative_limit = { bp2_yearly_1045_is_diplomacy_child = yes } + save_scope_as = diplomacy_child + } + } + 33 = { + trigger = { + any_warden_hostage = { + bp2_yearly_1040_is_sparring_child = yes + } + } + random_warden_hostage = { + #A child you care about + limit = { + bp2_yearly_1045_is_diplomacy_child = yes + has_focus = education_diplomacy + } + alternative_limit = { bp2_yearly_1045_is_diplomacy_child = yes } + save_scope_as = diplomacy_child + } + } + } + + scope:diplomacy_child = { + set_variable = { + name = had_bp2_yearly_1045_diplomacy_event + value = flag:yes + } + } + } + #Have some diplomacy + option = { + name = bp2_yearly.1045.a + flavor = bp2_yearly.1045.a.flavor + add_prestige = minor_prestige_gain + if = { + limit = { + NOT = { has_perk = firm_hand_perk } + } + random = { + chance = 5 + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1045.a.perk.t + left_icon = root + add_perk = firm_hand_perk + } + } + } + else_if = { + limit = { has_lifestyle = diplomacy_lifestyle } + add_learning_lifestyle_xp = minor_lifestyle_experience + } + else = { + add_character_modifier = { + modifier = august_presence_modifier + years = 5 + } + } + ai_chance = { + base = 100 + } + } + #Bet on the fight + option = { + name = bp2_yearly.1045.b + flavor = bp2_yearly.1045.b.flavor + trigger = { + OR = { + has_trait = greedy + has_trait = eccentric + has_trait = callous + } + } + duel = { + skill = learning + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.1045.b.win.desc + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1045.b.win.t + left_icon = root + add_gold = medium_gold_value + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.1045.b.loss.desc + send_interface_toast = { + type = event_toast_effect_good + title = bp2_yearly.1045.b.loss.t + left_icon = root + remove_short_term_gold = minor_gold_value + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + #Have some education + option = { + name = bp2_yearly.1045.c + trigger = { + scope:diplomacy_child = { has_focus = education_diplomacy } + } + #More points for a matching education + if = { + limit = { has_trait = education_diplomacy } + custom_tooltip = bp2_yearly.1045.c.tt_matching + hidden_effect = { + scope:diplomacy_child = { + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + } + } + else = { + custom_tooltip = bp2_yearly.1045.c.tt + hidden_effect = { + scope:diplomacy_child = { + education_point_acquisition_additional_points_effect = { LEVEL = low } + } + } + } + reverse_add_opinion = { + target = scope:diplomacy_child + modifier = teaching_moment_opinion + opinion = 15 + } + stress_impact = { craven = minor_stress_impact_loss } + ai_chance = { + base = 100 + } + } +} + +################# +## Event Chain ## +## The Builder ## +## 1050 - 1072 ## +################# +#These effects keeps track of what our latest choice was +scripted_effect the_builder_stewardship_choice_tracker_effect = { + #Record the latest choice + if = { + limit = { + NOT = { exists = var:the_builder_latest_choice } + } + set_variable = { + name = the_builder_latest_choice + value = flag:stewardship + } + } + else = { + remove_variable = the_builder_latest_choice + set_variable = { + name = the_builder_latest_choice + value = flag:stewardship + } + } +} + +#These effects increments the amount of any particular choice (had to separate it to display the present/past effect correctly) +scripted_effect the_builder_stewardship_increment_effect = { + #We stack + if = { + limit = { + NOT = { exists = var:the_builder_stewardship_choices } + } + set_variable = { + name = the_builder_stewardship_choices + value = 1 + } + } + else = { + change_variable = { + name = the_builder_stewardship_choices + add = 1 + } + } + #Pick something else and we reset + if = { + limit = { exists = var:the_builder_martial_choices } + remove_variable = the_builder_martial_choices + } + if = { + limit = { exists = var:the_builder_learning_choices } + remove_variable = the_builder_learning_choices + } +} + +scripted_effect the_builder_martial_choice_tracker_effect = { + #Record the latest choice + if = { + limit = { + NOT = { exists = var:the_builder_latest_choice } + } + set_variable = { + name = the_builder_latest_choice + value = flag:martial + } + } + else = { + remove_variable = the_builder_latest_choice + set_variable = { + name = the_builder_latest_choice + value = flag:martial + } + } +} + +scripted_effect the_builder_martial_increment_effect = { + #We stack + if = { + limit = { + NOT = { exists = var:the_builder_martial_choices } + } + set_variable = { + name = the_builder_martial_choices + value = 1 + } + } + else = { + change_variable = { + name = the_builder_martial_choices + add = 1 + } + } + #Pick something else and we reset + if = { + limit = { exists = var:the_builder_learning_choices } + remove_variable = the_builder_learning_choices + } + if = { + limit = { exists = var:the_builder_stewardship_choices } + remove_variable = the_builder_stewardship_choices + } +} + +scripted_effect the_builder_learning_choice_tracker_effect = { + #Record the latest choice + if = { + limit = { + NOT = { exists = var:the_builder_latest_choice } + } + set_variable = { + name = the_builder_latest_choice + value = flag:learning + } + } + else = { + remove_variable = the_builder_latest_choice + set_variable = { + name = the_builder_latest_choice + value = flag:learning + } + } +} + +scripted_effect the_builder_learning_increment_effect = { + #We stack + if = { + limit = { + NOT = { exists = var:the_builder_learning_choices } + } + set_variable = { + name = the_builder_learning_choices + value = 1 + } + } + else = { + change_variable = { + name = the_builder_learning_choices + add = 1 + } + } + #Pick something else and we reset + if = { + limit = { exists = var:the_builder_stewardship_choices } + remove_variable = the_builder_stewardship_choices + } + if = { + limit = { exists = var:the_builder_martial_choices } + remove_variable = the_builder_martial_choices + } +} + +#The tide/storm is ruining your sand/twigcastle! +bp2_yearly.1050 = { + type = character_event + content_source = dlc_009 + title = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + OR = { + county = { is_coastal_county = yes } + graphical_wilderness_desert_trigger = yes + } + } + } + desc = bp2_yearly.1050.t + } + desc = bp2_yearly.1050.t_twig + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + desc = bp2_yearly.1050.desc + } + triggered_desc = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + desc = bp2_yearly.1050.desc_desert + } + desc = bp2_yearly.1050.desc_twig + } + } + theme = education + override_background = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + reference = bp3_coast + } + #Some more flavor than simply using reference = terrain + override_background = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + reference = wilderness_desert + } + override_background = { + trigger = { + root.location = { graphical_wilderness_forest_pine_trigger = yes } + } + reference = ep2_hunt_foggy_forest + } + override_background = { + trigger = { + root.location = { graphical_wilderness_jungle_trigger = yes } + } + reference = wilderness_jungle + } + override_background = { + trigger = { + root.location = { graphical_wilderness_steppe_trigger = yes } + } + reference = ep2_travel_settlement_steppe + } + override_background = { + trigger = { + root.location = { graphical_drylands_trigger = yes } + } + reference = drylands + } + #Fallback + override_background = { reference = ep2_hunt_foggy_forest } + left_portrait = { + character = root + animation = thinking + } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + is_landed_or_landless_administrative = yes + age >= 4 + age <= 10 + NOT = { has_variable = had_builder_event_chain } + #If the child is AI, we don't want a player regent to get snubbed by the AI builder child + trigger_if = { + limit = { is_ai = yes } + has_active_diarchy = yes + diarch = { is_ai = yes } + } + } + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + add = 10 #Should reach 50 in the on_action trigger for the chain to start + } + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + set_variable = { name = had_builder_event_chain } + } + #Bribe nature + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + desc = bp2_yearly.1050.a + } + desc = bp2_yearly.1050.a_twig + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + desc = bp2_yearly.1050.a.flavor + } + desc = bp2_yearly.1050.a.flavor_twig + } + } + the_builder_stewardship_choice_tracker_effect = yes + the_builder_stewardship_increment_effect = yes + add_stewardship_skill = 1 + ai_chance = { + base = 100 + modifier = { + ai_has_pious_builder_personality = yes + factor = 0 + } + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + #Build walls + option = { + name = bp2_yearly.1050.b + flavor = bp2_yearly.1050.b.flavor + the_builder_martial_choice_tracker_effect = yes + the_builder_martial_increment_effect = yes + add_martial_skill = 1 + ai_chance = { + base = 100 + modifier = { + ai_has_pious_builder_personality = yes + factor = 0 + } + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #Build a tiny altar + option = { + name = bp2_yearly.1050.c + flavor = bp2_yearly.1050.c.flavor + the_builder_learning_choice_tracker_effect = yes + the_builder_learning_increment_effect = yes + add_learning_skill = 1 + ai_chance = { + base = 100 + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + after = { + trigger_event = { + id = bp2_yearly.1051 + days = 1 + } + } +} + +#Follow-up: Curse you, tide! +bp2_yearly.1051 = { + type = character_event + content_source = dlc_009 + title = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + OR = { + county = { is_coastal_county = yes } + graphical_wilderness_desert_trigger = yes + } + } + } + desc = bp2_yearly.1051.t + } + desc = bp2_yearly.1051.t_twig + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + desc = bp2_yearly.1051.desc + } + triggered_desc = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + desc = bp2_yearly.1051.desc_desert + } + desc = bp2_yearly.1051.desc_twig + } + desc = bp2_yearly.1051.outro + } + theme = education + #Oh beach background; where art thou + override_background = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + reference = market_tribal #This is the closest to a beach -well this or wetlands and I personally have a hard time seeing a sand castle in a marsh- we have that doesn't star a massive longship atm + } + #Some more flavor than simply using reference = terrain + override_background = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + reference = wilderness_desert + } + override_background = { + trigger = { + root.location = { graphical_wilderness_forest_pine_trigger = yes } + } + reference = ep2_forest_managed + } + override_background = { + trigger = { + root.location = { graphical_wilderness_jungle_trigger = yes } + } + reference = wilderness_jungle + } + override_background = { + trigger = { + root.location = { graphical_wilderness_steppe_trigger = yes } + } + reference = ep2_travel_settlement_steppe + } + override_background = { + trigger = { + root.location = { graphical_drylands_trigger = yes } + } + reference = drylands + } + #Fallback + override_background = { reference = wilderness_forest_pine } + left_portrait = { + character = root + animation = personality_cynical + } + artifact = { + target = scope:iridescent_stone_trinket + position = lower_center_portrait + } + immediate = { + #play_music_cue = "mx_cue_positive_effect" + if = { + limit = { var:the_builder_latest_choice ?= flag:stewardship } + create_artifact = { + name = iridescent_stone_trinket + description = iridescent_stone_trinket.desc + type = miscellaneous + visuals = diamond + modifier = artifact_stewardship_1_modifier + modifier = artifact_stewardship_lifestyle_xp_2_modifier + save_scope_as = iridescent_stone_trinket + wealth = 15 + quality = 15 + max_durability = 40 + history = { type = created_before_history } + } + } + if = { + limit = { var:the_builder_latest_choice ?= flag:martial } + create_artifact = { + name = iridescent_stone_trinket + description = iridescent_stone_trinket.desc + type = miscellaneous + visuals = diamond + modifier = artifact_martial_1_modifier + modifier = artifact_martial_lifestyle_xp_2_modifier + save_scope_as = iridescent_stone_trinket + wealth = 15 + quality = 15 + max_durability = 40 + history = { type = created_before_history } + } + } + if = { + limit = { var:the_builder_latest_choice ?= flag:learning } + create_artifact = { + name = iridescent_stone_trinket + description = iridescent_stone_trinket.desc + type = miscellaneous + visuals = diamond + modifier = artifact_learning_1_modifier + modifier = artifact_learning_lifestyle_xp_2_modifier + save_scope_as = iridescent_stone_trinket + wealth = 15 + quality = 15 + max_durability = 40 + history = { type = created_before_history } + } + } + } + #Curse you, tide/storm! + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + root.location = { + county = { is_coastal_county = yes } + } + } + desc = bp2_yearly.1051.a + } + desc = bp2_yearly.1051.a_twig + } + } + } + } + #We are 4-10 years + after = { + if = { + limit = { age = 4 } + trigger_event = { + id = bp2_yearly.1055 + years = 4 + } + } + else_if = { + limit = { age = 5 } + trigger_event = { + id = bp2_yearly.1055 + years = 3 + } + } + else_if = { + limit = { age = 6 } + trigger_event = { + id = bp2_yearly.1055 + years = 2 + } + } + else_if = { + limit = { age = 10 } + trigger_event = { + id = bp2_yearly.1055 + years = 1 + } + } + #7-9 years + else = { + trigger_event = { + id = bp2_yearly.1055 + years = { 1 2 } + } + } + } +} + +################# +#If we for whatever reason don't finish the event chain, clean up the flags and variables +scripted_effect the_builder_clean_up_flags_effect = { + if = { + limit = { exists = var:the_builder_latest_choice } + remove_variable = the_builder_latest_choice + } + if = { + limit = { exists = var:the_builder_stewardship_choices } + remove_variable = the_builder_stewardship_choices + } + if = { + limit = { exists = var:the_builder_martial_choices } + remove_variable = the_builder_martial_choices + } + if = { + limit = { exists = var:the_builder_learning_choices } + remove_variable = the_builder_learning_choices + } +} + +#These effects accurately checks and rewards your any particular stacked type of decision +scripted_effect the_builder_stacking_stewardship_rewards_effect = { + #Stewardship + if = { + limit = { var:the_builder_latest_choice ?= flag:stewardship } + if = { + limit = { exists = var:the_builder_stewardship_choices } + if = { + limit = { var:the_builder_stewardship_choices >= 4 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_gold = major_gold_value + } + else_if = { + limit = { var:the_builder_stewardship_choices = 3 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_gold = medium_gold_value + } + else_if = { + limit = { var:the_builder_stewardship_choices = 2 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_gold = minor_gold_value + } + else_if = { + limit = { var:the_builder_stewardship_choices = 1 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_gold = tiny_gold_value + } + } + } +} + +scripted_effect the_builder_stacking_martial_rewards_effect = { + #Martial + if = { + limit = { var:the_builder_latest_choice ?= flag:martial } + if = { + limit = { exists = var:the_builder_martial_choices } + if = { + limit = { var:the_builder_martial_choices >= 4 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_prestige = major_prestige_gain + } + else_if = { + limit = { var:the_builder_martial_choices = 3 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_prestige = medium_prestige_gain + } + else_if = { + limit = { var:the_builder_martial_choices = 2 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_prestige = minor_prestige_gain + } + else_if = { + limit = { var:the_builder_martial_choices = 1 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_prestige = miniscule_prestige_gain + } + } + } +} + +scripted_effect the_builder_stacking_learning_rewards_effect = { + #Learning + if = { + limit = { var:the_builder_latest_choice ?= flag:learning } + if = { + limit = { exists = var:the_builder_learning_choices } + if = { + limit = { var:the_builder_learning_choices >= 4 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_piety = major_piety_gain + } + else_if = { + limit = { var:the_builder_learning_choices = 3 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_piety = medium_piety_gain + } + else_if = { + limit = { var:the_builder_learning_choices = 2 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_piety = minor_piety_gain + } + else_if = { + limit = { var:the_builder_learning_choices = 1 } + #To get that sweet sweet past version of the tooltip if the effect has already happened + custom_description_no_bullet = { text = reminds_of_childhood_decision } + add_piety = miniscule_piety_gain + } + } + } +} + +scripted_effect bp2_yearly_1055_economy_effect = { + the_builder_stacking_stewardship_rewards_effect = yes + add_stewardship_skill = 1 + if = { + limit = { + scope:den_challenger = { is_alive = yes } + } + worsen_relationship_effect = { + TARGET = scope:den_challenger + REASON = rival_paid_to_win + } + } +} + +scripted_effect bp2_yearly_1055_martial_effect = { + the_builder_stacking_martial_rewards_effect = yes + add_martial_skill = 1 + improve_relationship_effect = { + TARGET = scope:den_challenger + REASON = friend_built_den_together + } + if = { + limit = { has_relation_bully = scope:den_challenger } + add_prestige = minor_prestige_loss + } + if = { + limit = { + scope:den_challenger = { + NOT = { is_in_the_same_court_as = root } + } + } + add_courtier = scope:den_challenger + } +} + +scripted_effect bp2_yearly_1055_sacred_effect = { + the_builder_stacking_learning_rewards_effect = yes + create_artifact = { + name = holy_stick + description = holy_stick.desc + type = spear + visuals = spear + modifier = artifact_learning_lifestyle_xp_1_modifier + modifier = artifact_learning_2_modifier + save_scope_as = holy_stick_artifact + wealth = 25 + quality = 25 + max_durability = 40 + generate_history = no + } + add_learning_skill = 1 +} + +#You are challenged to a den-building competition +bp2_yearly.1055 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1055.t + desc = { + desc = bp2_yearly.1055.desc + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_close_family_of = scope:den_challenger + is_extended_family_of = scope:den_challenger + } + } + desc = bp2_yearly.1055.desc_related + } + triggered_desc = { + trigger = { + OR = { + has_relation_crush = scope:den_challenger + has_relation_friend = scope:den_challenger + has_relation_best_friend = scope:den_challenger + has_relation_bully = scope:den_challenger + } + } + desc = bp2_yearly.1055.desc_relations + } + desc = bp2_yearly.1055.desc_liege + } + desc = bp2_yearly.1055.outro + } + theme = education + #Some more flavor than simply using reference = terrain + override_background = { + trigger = { + root.location = { graphical_wilderness_jungle_trigger = yes } + } + reference = wilderness_jungle + } + override_background = { + trigger = { + root.location = { graphical_wilderness_steppe_trigger = yes } + } + reference = ep2_travel_settlement_steppe + } + override_background = { + trigger = { + root.location = { + OR = { + graphical_drylands_trigger = yes + graphical_wilderness_desert_trigger = yes + } + } + } + reference = drylands + } + #Fallback + override_background = { reference = ep2_hunt_forest_hut } + left_portrait = { + character = root + animation = personality_bold + } + right_portrait = { + character = scope:den_challenger + animation = schadenfreude + } + trigger = { + is_available = yes + is_landed_or_landless_administrative = yes + #If the child is AI, we don't want a player regent to get snubbed by the AI builder child + trigger_if = { + limit = { is_ai = yes } + has_active_diarchy = yes + diarch = { is_ai = yes } + } + } + on_trigger_fail = { the_builder_clean_up_flags_effect = yes } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + if = { + limit = { + any_relation = { + type = bully + is_available_ai = yes + } + } + random_relation = { + type = bully + limit = { is_available_ai = yes } + save_scope_as = den_challenger + } + } + else_if = { + limit = { + any_courtier_or_guest = { + is_available_ai = yes + is_adult = no + age > 8 + } + } + random_courtier = { + limit = { + is_available_ai = yes + is_adult = no + age > 8 + } + save_scope_as = den_challenger + } + } + else_if = { + limit = { + any_pool_character = { + province = root.location + is_available_ai = yes + is_adult = no + age > 8 + } + } + random_pool_character = { + province = root.location + limit = { + is_available_ai = yes + is_adult = no + age > 8 + } + save_scope_as = den_challenger + } + } + else = { + create_character = { + location = root.location + template = peasant_child_character + age = { 9 13 } + culture = root.location.culture + faith = root.location.faith + save_scope_as = den_challenger + after_creation = { + add_character_flag = created + } + } + } + } + #Use the virtue of 'free' labor + option = { + name = bp2_yearly.1055.a + flavor = bp2_yearly.1055.a.flavor + the_builder_stewardship_choice_tracker_effect = yes + show_as_tooltip = { bp2_yearly_1055_economy_effect = yes } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = gregarious + factor = 0 + } + } + } + #Build higher walls _together_! + option = { + name = bp2_yearly.1055.b + flavor = bp2_yearly.1055.b.flavor + the_builder_martial_choice_tracker_effect = yes + show_as_tooltip = { bp2_yearly_1055_martial_effect = yes } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + #Pft, only Deity can judge _me_ + option = { + name = bp2_yearly.1055.c + flavor = bp2_yearly.1055.c.flavor + the_builder_learning_choice_tracker_effect = yes + show_as_tooltip = { + the_builder_stacking_learning_rewards_effect = yes + add_learning_skill = 1 + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + factor = 0 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + after = { + trigger_event = { + id = bp2_yearly.1056 + days = 1 + } + } +} + +#Follow-up: Things went down in the woods +bp2_yearly.1056 = { + type = character_event + content_source = dlc_009 + title = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1056.t_economy + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1056.t_martial + } + desc = bp2_yearly.1056.t_pious + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1056.desc_economy + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1056.desc_martial + } + desc = bp2_yearly.1056.desc_pious + } + } + theme = education + #Some more flavor than simply using reference = terrain + override_background = { + trigger = { + root.location = { graphical_wilderness_jungle_trigger = yes } + } + reference = wilderness_jungle + } + override_background = { + trigger = { + root.location = { graphical_wilderness_steppe_trigger = yes } + } + reference = ep2_travel_settlement_steppe + } + override_background = { + trigger = { + root.location = { + OR = { + graphical_drylands_trigger = yes + graphical_wilderness_desert_trigger = yes + } + } + } + reference = drylands + } + #Fallback + override_background = { reference = ep2_hunt_forest_cave } + left_portrait = { + character = root + triggered_animation = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + animation = personality_dishonorable + } + triggered_animation = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + animation = admiration + } + animation = disbelief + } + right_portrait = { + trigger = { + root = { + OR = { + var:the_builder_latest_choice ?= flag:stewardship + var:the_builder_latest_choice ?= flag:martial + } + } + } + triggered_animation = { + trigger = { + root = { var:the_builder_latest_choice ?= flag:stewardship } + } + animation = disapproval + } + character = scope:den_challenger + animation = happiness + } + artifact = { + trigger = { exists = scope:holy_stick_artifact } + target = scope:holy_stick_artifact + position = lower_center_portrait + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + if = { + limit = { var:the_builder_latest_choice ?= flag:stewardship } + bp2_yearly_1055_economy_effect = yes + the_builder_stewardship_increment_effect = yes + } + else_if = { + limit = { var:the_builder_latest_choice ?= flag:martial } + bp2_yearly_1055_martial_effect = yes + the_builder_martial_increment_effect = yes + } + else = { + bp2_yearly_1055_sacred_effect = yes + the_builder_learning_increment_effect = yes + } + } + #Alright + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1056.a_economy + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1056.a_martial + } + desc = bp2_yearly.1056.a_pious + } + } + } + #Effects are handled in the immediate + } + #We are 8-11 years + after = { + if = { + limit = { age = 8 } + trigger_event = { + id = bp2_yearly.1060 + years = { 4 5 } + } + } + else_if = { + limit = { age = 9 } + trigger_event = { + id = bp2_yearly.1060 + years = { 3 4 } + } + } + #10-11 years + else = { + trigger_event = { + id = bp2_yearly.1060 + years = { 1 2 } + } + } + scope:den_challenger = { # created in the preceding event, but necessary for the immediate and the narrative in this one + silent_disappearance_ai_if_created_effect = yes + } + } +} + +################# +scripted_trigger bp2_yearly_1060_appropriate_character_trigger = { + NOR = { + opinion = { + target = root + value < medium_negative_opinion + } + has_relation_rival = root + has_relation_nemesis = root + this = root + } + is_available_ai = yes + location = root.location +} + +scripted_effect bp2_yearly_1060_give_economical_reward_effect = { + the_builder_stacking_stewardship_rewards_effect = yes + scope:economical_architecture_book = { + set_owner = root + add_artifact_history = { + location = root.location + actor = scope:steward_character + recipient = root + type = given + } + } + add_stewardship_skill = 1 + improve_relationship_effect = { + TARGET = scope:steward_character + REASON = friend_bonded_over_economical_architecture + } +} + +scripted_effect bp2_yearly_1060_give_martial_reward_effect = { + the_builder_stacking_martial_rewards_effect = yes + scope:martial_architecture_book = { + set_owner = root + add_artifact_history = { + location = root.location + actor = scope:martial_character + recipient = root + type = given + } + } + add_martial_skill = 1 + improve_relationship_effect = { + TARGET = scope:martial_character + REASON = friend_bonded_over_martial_architecture + } +} + +scripted_effect bp2_yearly_1060_give_learned_reward_effect = { + the_builder_stacking_learning_rewards_effect = yes + scope:religious_architecture_book = { + set_owner = root + add_artifact_history = { + location = root.location + actor = scope:learned_character + recipient = root + type = given + } + } + add_learning_skill = 1 + improve_relationship_effect = { + TARGET = scope:learned_character + REASON = friend_bonded_over_religious_architecture + } +} + +#Appreciate the architecture of your capital +bp2_yearly.1060 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1060.t + desc = bp2_yearly.1060.desc + theme = education + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = thinking + } + lower_left_portrait = { character = scope:steward_character } + lower_center_portrait = { character = scope:martial_character } + lower_right_portrait = { character = scope:learned_character } + trigger = { + is_available = yes + is_landed_or_landless_administrative = yes + exists = capital_province + #If the child is AI, we don't want a player regent to get snubbed by the AI builder child + trigger_if = { + limit = { is_ai = yes } + has_active_diarchy = yes + diarch = { is_ai = yes } + } + } + on_trigger_fail = { the_builder_clean_up_flags_effect = yes } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + set_variable = { + name = the_builder_sightseed_capital + value = capital_province + } + #Find a steward character + if = { + limit = { + cp:councillor_steward ?= { bp2_yearly_1060_appropriate_character_trigger = yes } + } + cp:councillor_steward = { save_scope_as = steward_character } + } + #Or a steward-savvy courtier + else_if = { + limit = { + any_courtier_or_guest = { + bp2_yearly_1060_appropriate_character_trigger = yes + stewardship >= medium_skill_rating + } + } + random_courtier_or_guest = { + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + stewardship >= medium_skill_rating + } + add_to_list = potential_steward_characters + } + ordered_in_list = { + list = potential_steward_characters + order_by = stewardship + save_scope_as = steward_character + } + } + #Or a steward-savvy pool character + else_if = { + limit = { + any_pool_character = { + province = root.location + bp2_yearly_1060_appropriate_character_trigger = yes + stewardship >= medium_skill_rating + } + } + random_pool_character = { + province = root.location + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + stewardship >= medium_skill_rating + } + save_scope_as = steward_character + } + #And add them to court + hidden_effect = { add_courtier = scope:steward_character } + } + #Or simply create a steward-savvy character + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_stewardship_person_template + save_scope_as = steward_character + after_creation = { + add_character_flag = created + } + } + #And add them to court + hidden_effect = { add_courtier = scope:steward_character } + } + #Give them a steward architecture book + hidden_effect_new_object = { + scope:steward_character = { + if = { + limit = { artifacts_use_indian_books_trigger = yes } + create_artifact = { + name = economical_architecture_book + description = economical_architecture_book_desc + type = journal + visuals = indian_book + modifier = artifact_stewardship_lifestyle_xp_2_modifier + modifier = artifact_stewardship_1_modifier + modifier = artifact_city_holding_build_speed_add_1_modifier + save_scope_as = economical_architecture_book + } + } + else = { + create_artifact = { + name = economical_architecture_book + description = economical_architecture_book_desc + type = journal + visuals = book + modifier = artifact_stewardship_lifestyle_xp_2_modifier + modifier = artifact_stewardship_1_modifier + modifier = artifact_city_holding_build_speed_add_1_modifier + save_scope_as = economical_architecture_book + } + } + } + } + #Find a martial character + if = { + limit = { + cp:councillor_marshal ?= { + bp2_yearly_1060_appropriate_character_trigger = yes + this != scope:steward_character + } + } + cp:councillor_marshal = { save_scope_as = martial_character } + } + #Or a martial-savvy courtier + else_if = { + limit = { + any_courtier_or_guest = { + bp2_yearly_1060_appropriate_character_trigger = yes + martial >= medium_skill_rating + this != scope:steward_character + } + } + random_courtier_or_guest = { + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + martial >= medium_skill_rating + this != scope:steward_character + } + add_to_list = potential_martial_characters + } + ordered_in_list = { + list = potential_martial_characters + order_by = martial + save_scope_as = martial_character + } + } + else_if = { + limit = { + any_pool_character = { + province = root.location + bp2_yearly_1060_appropriate_character_trigger = yes + martial >= medium_skill_rating + this != scope:steward_character + } + } + random_pool_character = { + province = root.location + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + martial >= medium_skill_rating + this != scope:steward_character + } + save_scope_as = martial_character + } + #And add them to court + hidden_effect = { add_courtier = scope:martial_character } + } + #Or simply create a martial-savvy character + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_martial_person_template + save_scope_as = martial_character + after_creation = { + add_character_flag = created + } + } + #And add them to court + hidden_effect = { add_courtier = scope:martial_character } + } + #Give them a martial architecture book + hidden_effect_new_object = { + scope:martial_character = { + if = { + limit = { artifacts_use_indian_books_trigger = yes } + create_artifact = { + name = martial_architecture_book + description = martial_architecture_book_desc + type = journal + visuals = indian_book + modifier = artifact_martial_lifestyle_xp_2_modifier + modifier = artifact_martial_1_modifier + modifier = artifact_castle_holding_build_speed_add_1_modifier + save_scope_as = martial_architecture_book + } + } + else = { + create_artifact = { + name = martial_architecture_book + description = martial_architecture_book_desc + type = journal + visuals = book + modifier = artifact_martial_lifestyle_xp_2_modifier + modifier = artifact_martial_1_modifier + modifier = artifact_castle_holding_build_speed_add_1_modifier + save_scope_as = martial_architecture_book + } + } + } + } + #Find a learned character + if = { + limit = { + cp:councillor_court_chaplain ?= { + bp2_yearly_1060_appropriate_character_trigger = yes + NOR = { + this = scope:steward_character + this = scope:martial_character + } + } + } + cp:councillor_court_chaplain = { save_scope_as = learned_character } + } + #Or a learning-savvy courtier + else_if = { + limit = { + any_courtier_or_guest = { + bp2_yearly_1060_appropriate_character_trigger = yes + learning >= medium_skill_rating + NOR = { + this = scope:steward_character + this = scope:martial_character + } + } + } + random_courtier_or_guest = { + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + learning >= medium_skill_rating + NOR = { + this = scope:steward_character + this = scope:martial_character + } + } + add_to_list = potential_learned_characters + } + ordered_in_list = { + list = potential_learned_characters + order_by = learning + save_scope_as = learned_character + } + } + #Or a learning-savvy pool character + else_if = { + limit = { + any_pool_character = { + province = root.location + bp2_yearly_1060_appropriate_character_trigger = yes + learning >= medium_skill_rating + NOR = { + this = scope:steward_character + this = scope:martial_character + } + } + } + random_pool_character = { + province = root.location + limit = { + bp2_yearly_1060_appropriate_character_trigger = yes + learning >= medium_skill_rating + NOR = { + this = scope:steward_character + this = scope:martial_character + } + } + save_scope_as = learned_character + } + #And add them to court + hidden_effect = { add_courtier = scope:learned_character } + } + #Or simply create a learning-savvy character + else = { + create_character = { + location = root.location + template = bp1_yearly_2021_learning_person_template + save_scope_as = learned_character + after_creation = { + add_character_flag = created + } + } + #And add them to court + hidden_effect = { add_courtier = scope:learned_character } + } + #Give them a religious architecture book + hidden_effect_new_object = { + scope:learned_character = { + if = { + limit = { artifacts_use_indian_books_trigger = yes } + create_artifact = { + name = religious_architecture_book + description = religious_architecture_book_desc + type = journal + visuals = indian_book + modifier = artifact_learning_lifestyle_xp_2_modifier + modifier = artifact_learning_1_modifier + modifier = artifact_church_holding_build_speed_add_1_modifier + save_scope_as = religious_architecture_book + } + } + else = { + create_artifact = { + name = religious_architecture_book + description = religious_architecture_book_desc + type = journal + visuals = book + modifier = artifact_learning_lifestyle_xp_2_modifier + modifier = artifact_learning_1_modifier + modifier = artifact_church_holding_build_speed_add_1_modifier + save_scope_as = religious_architecture_book + } + } + } + } + } + #Check out _that_ tradeport + option = { + name = bp2_yearly.1060.a + flavor = bp2_yearly.1060.a.flavor + the_builder_stewardship_choice_tracker_effect = yes + show_as_tooltip = { bp2_yearly_1060_give_economical_reward_effect = yes } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + #I like a good wall + option = { + name = bp2_yearly.1060.b + flavor = bp2_yearly.1060.b.flavor + the_builder_martial_choice_tracker_effect = yes + show_as_tooltip = { bp2_yearly_1060_give_martial_reward_effect = yes } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #The temple, obviously + option = { + name = bp2_yearly.1060.c + flavor = bp2_yearly.1060.c.flavor + the_builder_learning_choice_tracker_effect = yes + show_as_tooltip = { bp2_yearly_1060_give_learned_reward_effect = yes } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + after = { + trigger_event = { + id = bp2_yearly.1061 + days = 1 + } + scope:steward_character ?= { + silent_disappearance_ai_if_created_effect = yes + } + scope:martial_character ?= { + silent_disappearance_ai_if_created_effect = yes + } + scope:learned_character ?= { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +#Follow-up: You spend the day with WhatsTheirFace +bp2_yearly.1061 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1061.t + desc = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1061.desc_steward + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1061.desc_martial + } + desc = bp2_yearly.1061.desc_religion + } + desc = bp2_yearly.1061.outro + } + theme = education + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + reference = market + } + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + reference = armory + } + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:learning } + reference = holy_site_generic + } + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:architecture_character + animation = personality_compassionate + } + artifact = { + target = scope:book_to_get + position = lower_center_portrait + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + #Save character for the portrait + if = { + limit = { var:the_builder_latest_choice ?= flag:stewardship } + scope:steward_character = { save_scope_as = architecture_character } + scope:economical_architecture_book = { save_scope_as = book_to_get } + bp2_yearly_1060_give_economical_reward_effect = yes + the_builder_stewardship_increment_effect = yes + } + else_if = { + limit = { var:the_builder_latest_choice ?= flag:martial } + scope:martial_character = { save_scope_as = architecture_character } + scope:martial_architecture_book = { save_scope_as = book_to_get } + bp2_yearly_1060_give_martial_reward_effect = yes + the_builder_martial_increment_effect = yes + } + else = { + scope:learned_character = { save_scope_as = architecture_character } + scope:religious_architecture_book = { save_scope_as = book_to_get } + bp2_yearly_1060_give_learned_reward_effect = yes + the_builder_learning_increment_effect = yes + } + } + #Alright + option = { + name = bp2_yearly.1061.a + flavor = bp2_yearly.1061.a.flavor + #Effect is handled in immediate + } + #We are 12-13 years + after = { + trigger_event = { + id = bp2_yearly.1065 + years = { 1 2 } + } + } +} + +################# +scripted_trigger bp2_yearly.1065_appropriate_province_trigger = { + trigger_if = { + limit = { exists = barony.holder } + barony.holder = { is_ai = yes } + } + has_holding = yes + has_free_building_slot = yes +} + +scripted_trigger bp2_yearly_1065_can_build_building_trigger = { + building_$BUILDING$_requirement_terrain = yes + NOT = { has_building = $BUILDING$_08 } +} + +scripted_effect bp2_yearly_1065_add_buff_effect = { + if = { + limit = { has_province_modifier = $DIRECTION$_improvements_modifier } + remove_province_modifier = $DIRECTION$_improvements_modifier + add_province_modifier = { + modifier = $DIRECTION$_improvements_modifier + years = 10 + } + } + else = { + add_province_modifier = { + modifier = $DIRECTION$_improvements_modifier + years = 10 + } + } +} + +scripted_effect bp2_yearly_1065_determine_economical_building_effect = { + #Can we actually build one of these buildings? + if = { + limit = { + OR = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = common_tradeport } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = pastures } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hunting_grounds } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = orchards } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = farm_estates } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = cereal_fields } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = logging_camps } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = peat_quarries } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hill_farms } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = elephant_pens } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = plantations } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = quarries } + } + } + #Yes? In that case, randomize which! + random_list = { + #Tradeport + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = common_tradeport } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:common_tradeport + } + } + #Pastures + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = pastures } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:pastures + } + } + #Hunting Grounds + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hunting_grounds } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:hunting_grounds + } + } + #Orchards + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = orchards } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:orchards + } + } + #Farm Estates + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = farm_estates } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:farm_estates + } + } + #Cereal Fields + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = cereal_fields } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:cereal_fields + } + } + #Logging Camps + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = logging_camps } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:logging_camps + } + } + #Peat Quarries + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = peat_quarries } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:peat_quarries + } + } + #Hill Farms + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hill_farms } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:hill_farms + } + } + #Elephant Pens + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = elephant_pens } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:elephant_pens + } + } + #Plantations + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = plantations } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:plantations + } + } + #Quarries + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = quarries } + } + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:quarries + } + } + } + } + #Otherwise you get a modifier + else = { + set_variable = { + name = bp2_yearly_1065_economical_building + value = flag:modifier + } + } +} + +scripted_effect bp2_yearly_1065_add_economical_building_effect = { + #Tradeport + if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:common_tradeport } + add_next_building_tier_effect = { BUILDING = common_tradeport } + } + #Pastures + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:pastures } + add_next_building_tier_effect = { BUILDING = pastures } + } + #Hunting Grounds + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:hunting_grounds } + add_next_building_tier_effect = { BUILDING = hunting_grounds } + } + #Orchards + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:orchards } + add_next_building_tier_effect = { BUILDING = orchards } + } + #Farm Estates + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:farm_estates } + add_next_building_tier_effect = { BUILDING = farm_estates } + } + #Cereal Fields + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:cereal_fields } + add_next_building_tier_effect = { BUILDING = cereal_fields } + } + #Logging Camps + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:logging_camps } + add_next_building_tier_effect = { BUILDING = logging_camps } + } + #Peat Quarries + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:peat_quarries } + add_next_building_tier_effect = { BUILDING = peat_quarries } + } + #Hill Farms + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:hill_farms } + add_next_building_tier_effect = { BUILDING = hill_farms } + } + #Elephant Pens + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:elephant_pens } + add_next_building_tier_effect = { BUILDING = elephant_pens } + } + #Plantations + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:plantations } + add_next_building_tier_effect = { BUILDING = plantations } + } + #Quarries + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:quarries } + add_next_building_tier_effect = { BUILDING = quarries } + } + #You're all decked out; have a modifier + else_if = { + limit = { var:bp2_yearly_1065_economical_building ?= flag:modifier } + bp2_yearly_1065_add_buff_effect = { DIRECTION = economical } + } +} + +scripted_effect bp2_yearly_1065_determine_martial_building_effect = { + #Can we actually build one of these buildings? + if = { + limit = { + OR = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = ramparts } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = curtain_walls } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = watchtowers } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hill_forts } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = outposts } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = barracks } + bp2_yearly_1065_can_build_building_trigger = { BUILDING = smiths } + } + } + #Yes? In that case, randomize which! + random_list = { + #Ramparts + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = ramparts } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:ramparts + } + } + #Walls + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = curtain_walls } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:curtain_walls + } + } + #Watch Towers + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = watchtowers } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:watchtowers + } + } + #Hill Forts + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = hill_forts } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:hill_forts + } + } + #Barracks + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = barracks } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:barracks + } + } + #Smiths + 10 = { + trigger = { + bp2_yearly_1065_can_build_building_trigger = { BUILDING = smiths } + } + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:smiths + } + } + } + } + #Otherwise you get a modifier + else = { + set_variable = { + name = bp2_yearly_1065_martial_building + value = flag:modifier + } + } +} + +scripted_effect bp2_yearly_1065_add_martial_building_effect = { + #Ramparts + if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:ramparts } + add_next_building_tier_effect = { BUILDING = ramparts } + } + #Curtain Walls + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:curtain_walls } + add_next_building_tier_effect = { BUILDING = curtain_walls } + } + #Watch Towers + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:watchtowers } + add_next_building_tier_effect = { BUILDING = watchtowers } + } + #Hill Fort + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:hill_forts } + add_next_building_tier_effect = { BUILDING = hill_forts } + } + #Barracks + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:barracks } + add_next_building_tier_effect = { BUILDING = barracks } + } + #Smiths + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:smiths } + add_next_building_tier_effect = { BUILDING = smiths } + } + #You're all decked out; have a modifier + else_if = { + limit = { var:bp2_yearly_1065_martial_building ?= flag:modifier } + bp2_yearly_1065_add_buff_effect = { DIRECTION = martial } + } +} + +scripted_effect bp2_yearly_1065_determine_pious_building_effect = { + #Can we actually build one of these buildings? + if = { + limit = { + OR = { + county.holder.faith = { has_doctrine_parameter = can_build_megaliths } + county.faith = { has_doctrine_parameter = can_build_megaliths } + NOT = { has_building = monastic_schools_08 } + } + } + #Yes? In that case, randomize which! + random_list = { + #Monastic Schools + 10 = { + trigger = { + NOT = { has_building = monastic_schools_08 } + } + set_variable = { + name = bp2_yearly_1065_pious_building + value = flag:monastic_schools + } + } + #Megalith + 10 = { + trigger = { + OR = { + county.holder.faith = { has_doctrine_parameter = can_build_megaliths } + county.faith = { has_doctrine_parameter = can_build_megaliths } + } + } + set_variable = { + name = bp2_yearly_1065_pious_building + value = flag:megalith + } + } + } + } + #Otherwise you get a modifier + else = { + set_variable = { + name = bp2_yearly_1065_pious_building + value = flag:modifier + } + } +} + +scripted_effect bp2_yearly_1065_add_pious_building_effect = { + #Monastic Schools + if = { + limit = { var:bp2_yearly_1065_pious_building ?= flag:monastic_schools } + add_next_building_tier_effect = { BUILDING = monastic_schools } + } + #Megalith + else_if = { + limit = { var:bp2_yearly_1065_pious_building ?= flag:megalith } + add_next_building_tier_effect = { BUILDING = megalith } + } + #You're all decked out; have a modifier + else_if = { + limit = { var:bp2_yearly_1065_pious_building ?= flag:modifier } + bp2_yearly_1065_add_buff_effect = { DIRECTION = pious } + } +} + +#Your input is desired on the next building target +bp2_yearly.1065 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1065.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:current_regent ?= { + OR = { + is_parent_of = root + is_grandparent_of = root + is_great_grandparent_of = root + } + } + } + desc = bp2_yearly.1065.intro_parent + } + triggered_desc = { + trigger = { exists = scope:current_regent } + desc = bp2_yearly.1065.intro_regent + } + desc = bp2_yearly.1065.intro + } + first_valid = { + triggered_desc = { + trigger = { + scope:current_regent ?= { + OR = { + is_parent_of = root + is_grandparent_of = root + is_great_grandparent_of = root + } + } + exists = scope:province_holder + } + desc = bp2_yearly.1065.desc_parent_mayor + } + triggered_desc = { + trigger = { + scope:current_regent ?= { + OR = { + is_parent_of = root + is_grandparent_of = root + is_great_grandparent_of = root + } + } + } + desc = bp2_yearly.1065.desc_parent_mayor + } + triggered_desc = { + trigger = { + exists = scope:current_regent + exists = scope:province_holder + } + desc = bp2_yearly.1065.desc_regent_mayor + } + triggered_desc = { + trigger = { exists = scope:current_regent } + desc = bp2_yearly.1065.desc_regent + } + triggered_desc = { + trigger = { exists = scope:province_holder } + desc = bp2_yearly.1065.desc_mayor + } + desc = bp2_yearly.1065.desc + } + desc = bp2_yearly.1065.outro + } + theme = education + override_background = { reference = council_chamber } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + trigger = { exists = scope:current_regent } + character = scope:current_regent + animation = disapproval + } + lower_right_portrait = { + trigger = { exists = scope:province_holder } + character = scope:province_holder + } + trigger = { + is_available = yes + is_landed_or_landless_administrative = yes + #If the child is AI, we don't want a player regent to get snubbed by the AI builder child + trigger_if = { + limit = { is_ai = yes } + has_active_diarchy = yes + diarch = { is_ai = yes } + } + OR = { + any_held_title = { + title_tier = county + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + any_sub_realm_county = { + county.holder ?= { is_ai = yes } + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + } + } + on_trigger_fail = { + if = { + limit = { exists = var:the_builder_sightseed_capital } + remove_variable = the_builder_sightseed_capital + } + the_builder_clean_up_flags_effect = yes + } + immediate = { + #play_music_cue = "mx_cue_low_key_positive" + if = { + limit = { has_active_diarchy = yes } + diarch = { save_scope_as = current_regent } + } + #Find a holding to build a building in + if = { + limit = { + OR = { + any_held_title = { + title_tier = county + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + any_sub_realm_county = { + county.holder ?= { is_ai = yes } + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + } + } + #First one with an empty slot + if = { + limit = { + any_held_title = { + title_tier = county + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + } + random_held_title = { + title_tier = county + limit = { + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + save_scope_as = 1065_county_for_building + } + } + #Or a sub-realm with an empty slot + else_if = { + limit = { + any_sub_realm_county = { + county.holder ?= { is_ai = yes } + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + } + random_sub_realm_county = { + limit = { + county.holder ?= { is_ai = yes } + any_county_province = { bp2_yearly.1065_appropriate_province_trigger = yes } + } + save_scope_as = 1065_sub_realm_county_for_building + } + } + } + else = { + random_held_title = { + title_tier = county + random_county_province = { save_scope_as = 1065_province_for_buffing } + } + } + #Find the scopes in the province + if = { + limit = { + NOT = { exists = scope:1065_province_for_buffing } + } + #Hash out which one of our own provinces to build in + if = { + limit = { exists = scope:1065_county_for_building } + scope:1065_county_for_building = { + random_county_province = { + limit = { bp2_yearly.1065_appropriate_province_trigger = yes } + save_scope_as = 1065_province_for_building + } + } + } + #... or a sub-realm province + else = { + scope:1065_sub_realm_county_for_building = { + random_county_province = { + limit = { bp2_yearly.1065_appropriate_province_trigger = yes } + save_scope_as = 1065_province_for_building + } + } + } + #Save scopes for loc + scope:1065_province_for_building = { + if = { + limit = { + exists = barony.holder + barony.holder != root + trigger_if = { + limit = { exists = scope:current_regent } + barony.holder != scope:current_regent + } + } + barony.holder = { save_scope_as = province_holder } + } + } + set_variable = { + name = the_builder_constructed_building_in + value = scope:1065_province_for_building + } + } + else = { + #Save scopes for loc + scope:1065_province_for_buffing = { + if = { + limit = { + exists = barony.holder + barony.holder != root + trigger_if = { + limit = { exists = scope:current_regent } + barony.holder != scope:current_regent + } + } + barony.holder = { save_scope_as = province_holder } + } + } + set_variable = { + name = the_builder_constructed_building_in + value = scope:1065_province_for_buffing + } + } + #Determine what buildings you should get to pick from - and actually give the effect in the option + if = { + limit = { exists = scope:1065_province_for_building } + scope:1065_province_for_building = { + bp2_yearly_1065_determine_economical_building_effect = yes + bp2_yearly_1065_determine_martial_building_effect = yes + bp2_yearly_1065_determine_pious_building_effect = yes + } + } + } + #Economical improvements + option = { + name = bp2_yearly.1065.a + flavor = bp2_yearly.1065.a.flavor + the_builder_stacking_stewardship_rewards_effect = yes + add_stewardship_skill = 1 + if = { + limit = { exists = scope:1065_province_for_building } + scope:1065_province_for_building = { bp2_yearly_1065_add_economical_building_effect = yes } + } + else_if = { + limit = { exists = scope:1065_province_for_buffing } + scope:1065_province_for_buffing = { + bp2_yearly_1065_add_buff_effect = { DIRECTION = economical } + } + } + the_builder_stewardship_choice_tracker_effect = yes + the_builder_stewardship_increment_effect = yes + ai_chance = { + base = 100 + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + #Martial improvements + option = { + name = bp2_yearly.1065.b + flavor = bp2_yearly.1065.b.flavor + the_builder_stacking_martial_rewards_effect = yes + add_martial_skill = 1 + if = { + limit = { exists = scope:1065_province_for_building } + scope:1065_province_for_building = { bp2_yearly_1065_add_martial_building_effect = yes } + } + else_if = { + limit = { exists = scope:1065_province_for_buffing } + scope:1065_province_for_buffing = { + bp2_yearly_1065_add_buff_effect = { DIRECTION = martial } + } + } + the_builder_martial_choice_tracker_effect = yes + the_builder_martial_increment_effect = yes + ai_chance = { + base = 100 + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #Pious improvements, obviously + option = { + name = bp2_yearly.1065.c + flavor = bp2_yearly.1065.c.flavor + the_builder_stacking_learning_rewards_effect = yes + add_learning_skill = 1 + if = { + limit = { exists = scope:1065_province_for_building } + scope:1065_province_for_building = { + if = { + limit = { + NOT = { has_holding_type = church_holding } + } + custom_tooltip = bp2_yearly.1065.c.tt + set_holding_type = church_holding + } + bp2_yearly_1065_add_pious_building_effect = yes + } + } + else_if = { + limit = { exists = scope:1065_province_for_buffing } + scope:1065_province_for_buffing = { + bp2_yearly_1065_add_buff_effect = { DIRECTION = pious } + } + } + the_builder_learning_choice_tracker_effect = yes + the_builder_learning_increment_effect = yes + ai_chance = { + base = 100 + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #We are 14-15 + after = { + if = { + limit = { exists = scope:1065_province_for_building } + if = { + limit = { exists = var:bp2_yearly_1065_economical_building } + remove_variable = bp2_yearly_1065_economical_building + } + if = { + limit = { exists = var:bp2_yearly_1065_martial_building } + remove_variable = bp2_yearly_1065_martial_building + } + if = { + limit = { exists = var:bp2_yearly_1065_pious_building } + remove_variable = bp2_yearly_1065_pious_building + } + } + trigger_event = { + id = bp2_yearly.1070 + years = { 4 6 } + } + } +} + +################# +#All of our efforts have culminated into _this_ + +scripted_effect bp2_yearly_1070_city_builder_effect = { + the_builder_stacking_stewardship_rewards_effect = yes + give_nickname = nick_the_city_builder + add_trait = architect + add_character_modifier = the_city_builder_modifier +} + +scripted_effect bp2_yearly_1070_castle_builder_effect = { + the_builder_stacking_martial_rewards_effect = yes + give_nickname = nick_the_castle_builder + add_trait = architect + add_character_modifier = the_castle_builder_modifier +} + +scripted_effect bp2_yearly_1070_temple_builder_effect = { + the_builder_stacking_learning_rewards_effect = yes + give_nickname = nick_the_temple_builder + add_trait = architect + add_character_modifier = the_temple_builder_modifier +} + +bp2_yearly.1070 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1070.t + desc = { + desc = bp2_yearly.1070.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:1070_province_to_build_in } + desc = bp2_yearly.1070.desc + } + triggered_desc = { + trigger = { exists = scope:1070_province_to_buff } + desc = bp2_yearly.1070.desc_no_province + } + } + #Actually none of the above apply + triggered_desc = { + trigger = { + NOR = { + exists = scope:1070_province_to_build_in + exists = scope:1070_province_to_buff + } + } + desc = bp2_yearly.1070.desc_no_province_no_buff + } + } + theme = education + override_background = { reference = study } + left_portrait = { + character = root + animation = personality_compassionate + } + trigger = { + is_available = yes + is_landed_or_landless_administrative = yes + has_active_diarchy = no + has_variable = the_builder_sightseed_capital + } + on_trigger_fail = { + the_builder_clean_up_flags_effect = yes + if = { + limit = { exists = var:the_builder_sightseed_capital } + remove_variable = the_builder_sightseed_capital + } + if = { + limit = { exists = var:the_builder_constructed_building_in } + remove_variable = the_builder_constructed_building_in + } + } + immediate = { + #play_music_cue = "mx_cue_positive_effect" + var:the_builder_sightseed_capital ?= { save_scope_as = sightseed_capital } + var:the_builder_constructed_building_in ?= { save_scope_as = constructed_building_in } + #Find a holding to build + if = { + limit = { + OR = { + any_held_title = { county_has_empty_province_trigger = yes } + any_sub_realm_county = { + county.holder ?= { is_ai = yes } + any_county_province = { province_has_no_holding_trigger = yes } + } + } + } + #Build in our own area first + ordered_held_title = { + limit = { county_has_empty_province_trigger = yes } + order_by = development_level + save_scope_as = 1070_county_to_build_in + } + if = { + limit = { + NOT = { exists = scope:1070_county_to_build_in } + } + #Then a sub realm + ordered_sub_realm_county = { + limit = { + county.holder ?= { is_ai = yes } + any_county_province = { province_has_no_holding_trigger = yes } + } + order_by = development_level + save_scope_as = 1070_county_to_build_in + } + } + scope:1070_county_to_build_in = { + random_county_province = { + limit = { province_has_no_holding_trigger = yes } + set_variable = { + name = the_builder_holding + value = root + } + save_scope_as = 1070_province_to_build_in + } + } + set_variable = { + name = the_builder_constructed_holding + value = scope:1070_province_to_build_in + } + } + #If no empty provinces, buff a random holding + else_if = { + limit = { + any_held_title = { + title_tier = county + any_county_province = { + NOR = { + has_province_modifier = improved_by_the_city_builder_modifier + has_province_modifier = improved_by_the_castle_builder_modifier + has_province_modifier = improved_by_the_temple_builder_modifier + } + } + } + any_sub_realm_county = { + any_county_province = { + NOR = { + has_province_modifier = improved_by_the_city_builder_modifier + has_province_modifier = improved_by_the_castle_builder_modifier + has_province_modifier = improved_by_the_temple_builder_modifier + } + } + } + } + #Least developed county + ordered_held_title = { + title_tier = county + order_by = { + value = development_level + multiply = -1 + } + save_scope_as = 1070_county_to_buff + } + if = { + limit = { + NOT = { exists = scope:1070_county_to_buff } + } + #Least developed sub realm county + ordered_sub_realm_county = { + limit = { + any_county_province = { + NOR = { + has_province_modifier = improved_by_the_city_builder_modifier + has_province_modifier = improved_by_the_castle_builder_modifier + has_province_modifier = improved_by_the_temple_builder_modifier + } + } + } + order_by = { + value = development_level + multiply = -1 + } + save_scope_as = 1070_county_to_buff + } + } + scope:1070_county_to_buff = { + ordered_county_province = { + limit = { + NOR = { + has_province_modifier = improved_by_the_city_builder_modifier + has_province_modifier = improved_by_the_castle_builder_modifier + has_province_modifier = improved_by_the_temple_builder_modifier + } + } + #Least developed holdng + order_by = { + value = county.development_level + multiply = -1 + } + save_scope_as = 1070_province_to_buff + } + } + } + } + #Build or buff a city + option = { + name = { + text = { + first_valid = { + #Build city + triggered_desc = { + trigger = { exists = scope:1070_province_to_build_in } + desc = bp2_yearly.1070.a + } + #Buff holding + triggered_desc = { + trigger = { exists = scope:1070_province_to_buff } + desc = bp2_yearly.1070.a_buff + } + #I would probs focus on economy + desc = bp2_yearly.1070.a_none + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:1070_province_to_build_in } + desc = bp2_yearly.1070.a.flavor + } + desc = bp2_yearly.1070.a.flavor_none + } + } + the_builder_stewardship_choice_tracker_effect = yes + #We build! + if = { + limit = { exists = scope:1070_province_to_build_in } + scope:1070_province_to_build_in = { + begin_create_holding = { type = city_holding } + } + #Some custom loc to look proper in tooltip + custom_description_no_bullet = { text = upon_holding_completion } + show_as_tooltip = { + bp2_yearly_1070_city_builder_effect = yes + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_gain } + } + } + #We buff + else_if = { + limit = { exists = scope:1070_province_to_buff } + bp2_yearly_1070_city_builder_effect = yes + scope:1070_province_to_buff = { add_province_modifier = improved_by_the_city_builder_modifier } + } + #... we really should never end up here. Have some renown, because obviously your domain is pristine. + else = { + bp2_yearly_1070_city_builder_effect = yes + dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_gain } + } + ai_chance = { + base = 100 + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + #Build or buff a castle + option = { + name = { + text = { + first_valid = { + #Build castle + triggered_desc = { + trigger = { exists = scope:1070_province_to_build_in } + desc = bp2_yearly.1070.b + } + #Buff holding + triggered_desc = { + trigger = { exists = scope:1070_province_to_buff } + desc = bp2_yearly.1070.b_buff + } + #I would probs focus on defense + desc = bp2_yearly.1070.b_none + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:1070_province_to_build_in + exists = scope:1070_province_to_buff + } + } + desc = bp2_yearly.1070.b.flavor + } + desc = bp2_yearly.1070.b.flavor_none + } + } + the_builder_martial_choice_tracker_effect = yes + #We build! + if = { + limit = { exists = scope:1070_province_to_build_in } + scope:1070_province_to_build_in = { + begin_create_holding = { type = castle_holding } + } + #Some custom loc to look proper in tooltip + custom_description_no_bullet = { text = upon_holding_completion } + show_as_tooltip = { + bp2_yearly_1070_castle_builder_effect = yes + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_gain } + } + } + #We buff + else_if = { + limit = { exists = scope:1070_province_to_buff } + bp2_yearly_1070_castle_builder_effect = yes + scope:1070_province_to_buff = { add_province_modifier = improved_by_the_castle_builder_modifier } + } + #... we really should never end up here. Have some renown, because obviously your domain is pristine. + else = { + bp2_yearly_1070_castle_builder_effect = yes + dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_gain } + } + ai_chance = { + base = 100 + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #Build or buff a temple + option = { + name = bp2_yearly.1070.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:1070_province_to_build_in + exists = scope:1070_province_to_buff + } + } + desc = bp2_yearly.1070.c.flavor + } + desc = bp2_yearly.1070.c.flavor_none + } + } + the_builder_learning_choice_tracker_effect = yes + #We build! + if = { + limit = { exists = scope:1070_province_to_build_in } + scope:1070_province_to_build_in = { + begin_create_holding = { type = church_holding } + } + #Some custom loc to look proper in tooltip + custom_description_no_bullet = { text = upon_holding_completion } + show_as_tooltip = { + bp2_yearly_1070_temple_builder_effect = yes + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_gain } + } + } + #We buff + else_if = { + limit = { exists = scope:1070_province_to_buff } + bp2_yearly_1070_temple_builder_effect = yes + scope:1070_province_to_buff = { add_province_modifier = improved_by_the_temple_builder_modifier } + } + #... we really should never end up here. Have some renown, because obviously your domain is pristine. + else = { + bp2_yearly_1070_temple_builder_effect = yes + dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_gain } + } + ai_chance = { + base = 100 + modifier = { + ai_has_economical_boom_personality = yes + factor = 0 + } + modifier = { + ai_has_warlike_personality = yes + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + after = { + if = { + limit = { exists = var:the_builder_sightseed_capital } + remove_variable = the_builder_sightseed_capital + } + if = { + limit = { exists = var:the_builder_constructed_building_in } + remove_variable = the_builder_constructed_building_in + } + #If the player for whatever reason manually cancels the holding + if = { + limit = { exists = scope:1070_province_to_build_in } + set_variable = { + name = the_builder_holding_cancelled_safeguard + value = scope:1070_province_to_build_in + years = 6 #In general, a holding takes 5 years to build + } + #You dun messed up, son + trigger_event = { + id = bp2_yearly.1072 + years = 6 + } + } + } +} + +#Follow-up: Get the sweet sweet loo... I mean, sweet sweet effects! +bp2_yearly.1071 = { + type = character_event + content_source = dlc_009 + title = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1071.t_city + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1071.t_castle + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:learning } + desc = bp2_yearly.1071.t_temple + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + desc = bp2_yearly.1071.desc_city + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + desc = bp2_yearly.1071.desc_castle + } + triggered_desc = { + trigger = { var:the_builder_latest_choice ?= flag:learning } + desc = bp2_yearly.1071.desc_temple + } + } + desc = bp2_yearly.1071.outro + } + theme = education + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:stewardship } + reference = market + } + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:martial } + reference = courtyard + } + override_background = { + trigger = { var:the_builder_latest_choice ?= flag:learning } + reference = holy_site_generic + } + left_portrait = { + character = root + animation = personality_honorable + } + immediate = { + #play_music_cue = "mx_cue_positive_effect" + var:the_builder_constructed_holding ?= { save_scope_as = constructed_holding } + } + #Alright + option = { + name = bp2_yearly.1071.a + flavor = bp2_yearly.1071.a.flavor + if = { + limit = { var:the_builder_latest_choice ?= flag:stewardship } + bp2_yearly_1070_city_builder_effect = yes + } + else_if = { + limit = { var:the_builder_latest_choice ?= flag:martial } + bp2_yearly_1070_castle_builder_effect = yes + } + else_if = { + limit = { var:the_builder_latest_choice ?= flag:learning } + bp2_yearly_1070_temple_builder_effect = yes + } + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_gain } + } + after = { + if = { + limit = { has_variable = the_builder_constructed_holding } + remove_variable = the_builder_constructed_holding + } + the_builder_clean_up_flags_effect = yes + } +} + +#Clean up: You dun messed up, son +bp2_yearly.1072 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.1072.t + desc = bp2_yearly.1072.desc + theme = education + override_background = { reference = study } + left_portrait = { + character = root + animation = sadness + } + trigger = { + has_variable = the_builder_holding_cancelled_safeguard + } + immediate = { + #play_music_cue = "mx_cue_negative" + var:the_builder_holding_cancelled_safeguard = { save_scope_as = cancelled_holding } + } + #Wa-wa + option = { + name = bp2_yearly.1072.a + } + after = { + if = { + limit = { has_variable = the_builder_holding_cancelled_safeguard } + remove_variable = the_builder_holding_cancelled_safeguard + } + the_builder_clean_up_flags_effect = yes + } +} diff --git a/events/dlc/bp2/bp2_yearly_2.txt b/events/dlc/bp2/bp2_yearly_2.txt new file mode 100644 index 00000000..31efbd12 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_2.txt @@ -0,0 +1,4472 @@ +namespace = bp2_yearly + +######################## +## BP2 Yearly Events +## 2000-2999 +## by Chad Uhl +######################## +## +## In Their Footsteps (House Founder) bp2_yearly.2000 +## In Their Footsteps (Ancestor) bp2_yearly.2001 +## In Their Footsteps (Artifact follow-up) bp2_yearly.2002 +## +#### Imaginary Friend Story Cycle Events bp2_yearly.2010-99 +## Introduction Event bp2_yearly.2010 +## Playdate Event bp2_yearly.2011 +## Regent Shenanigans bp2_yearly.2012 +## Change a personality trait bp2_yearly.2013 +## Pursue a crush bp2_yearly.2014 +## Fight back against your bully bp2_yearly.2015 +## Flower crowns bp2_yearly.2016 +## Study up or go practice swordsmanship bp2_yearly.2017 +## Gain the confider or poet trait bp2_yearly.2018 +## Gain Eccentric trait bp2_yearly.2019 +## Adulthood Events - Evil bp2_yearly.2020-29 +## bp2_yearly.2020 # Your imaginary friend wants you to kill someone +## bp2_yearly.2021 # Why haven't you started your scheme? +## bp2_yearly.2022 # Murder Success - Another target? +## bp2_yearly.2023 # Murder Invalidated +## bp2_yearly.2024 # Murder Failed, try again +## bp2_yearly.2025 # Murder special ending +## Adulthood Events - Good bp2_yearly.2030-39 +## bp2_yearly.2030 # Imaginary friend reveals they are an angel +## bp2_yearly.2031 # Honor your Imaginary Friend at the Holy Site +## Adulthood Events - Neutral bp2_yearly.2040 +## bp2_yearly.2040 # Neutral ending +### END Imaginary Friend Events +## +## Laying Foundations bp2_yearly.2100 +## +#### Trait Specific Events +## Gain Humble or Arrogant bp2_yearly.2110 +## Gain Temperate or Gluttonous bp2_yearly.2120 +## Gain Generous or Greedy bp2_yearly.2130 +## Gain Honest or Deceitful bp2_yearly.2140 +## Gain Herbalist or Gardener bp2_yearly.2150 +## Gain Compassionate or Sadistic bp2_yearly.2160 +## +######################## + +scripted_trigger relevant_story_teller_trigger = { + OR = { + any_close_or_extended_family_member = { + is_relevant_to_child = yes + } + any_courtier_or_guest = { + is_relevant_to_child = yes + } + any_knight = { + is_relevant_to_child = yes + } + any_councillor = { + is_relevant_to_child = yes + } + any_court_position_holder = { + is_relevant_to_child = yes + } + } +} +# You hear a story about your house founder +bp2_yearly.2000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:story_teller.dynasty = root.dynasty } + desc = bp2_yearly.2000.desc_dynasty + } + desc = bp2_yearly.2000.desc + } + } + theme = education + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:story_teller + animation = admiration + } + lower_center_portrait = scope:root_house_founder + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + number_of_personality_traits < 3 + exists = house + root.house.house_founder ?= { + is_alive = no + number_of_personality_traits_in_common = { + target = root + value < 3 + } + number_of_opposing_personality_traits = { + target = root + value < 3 + } + } + relevant_story_teller_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 3 + culture = { + OR = { + has_cultural_tradition = tradition_mystical_ancestors + has_cultural_tradition = tradition_storytellers + } + } + } + modifier = { + factor = 4 + is_ai = no + } + } + + immediate = { + house.house_founder = { + save_scope_as = root_house_founder + } + # Grab someone to tell their story + grab_learning_char_relevant_to_child = { + CHILD = root + SCOPE_OUTPUT = story_teller + } + scope:root_house_founder = { + every_character_trait = { + if = { + limit = { + # Must be a personality trait + has_trait_category = personality + # Child does not already have this trait + root = { + NOT = { has_trait = prev } + } + # Child does not already have the opposite of this trait + any_opposite_trait = { + root = { + NOT = { has_trait = prev } + } + } + } + add_to_list = target_traits + } + } + } + + random_in_list = { + list = target_traits + save_scope_as = target_trait + random_opposite_trait = { + save_scope_as = target_trait_opposite + } + } + + random_court_position_holder = { + type = court_artificer_court_position + save_scope_as = artificer + } + + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:target_trait = trait:callous + scope:target_trait = trait:deceitful + scope:target_trait = trait:lazy + faith = { trait_is_sin = scope:target_trait } + } + } + desc = bp2_yearly.2000.a.negative + } + desc = bp2_yearly.2000.a + } + } + } + add_trait = scope:target_trait + hidden_effect = { + create_character_memory = { + type = ancestor_trait_memory + participants = { + ancestor = scope:root_house_founder + } + } + scope:new_memory = { + set_variable = { + name = target_trait + value = scope:target_trait + } + if = { + limit = { exists = var:target_trait } + #To prevent 'unused except in loc' errors + } + } + } + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2000.b + add_trait = scope:target_trait_opposite + hidden_effect = { + create_character_memory = { + type = ancestor_opposite_trait_memory + participants = { + ancestor = scope:root_house_founder + } + } + scope:new_memory = { + set_variable = { + name = target_trait_opposite + value = scope:target_trait_opposite + } + if = { + limit = { exists = var:target_trait_opposite } + #To prevent 'unused except in loc' errors + } + } + } + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2000.c + trigger = { + employs_court_position = court_artificer_court_position + } + custom_tooltip = bp2_yearly.2000.c.tt + remove_short_term_gold = medium_gold_value + trigger_event = { + id = bp2_yearly.2002 + days = { 7 21 } + } + + ai_chance = { + base = 30 + } + } + + option = { + name = bp2_yearly.2000.d + ai_chance = { + base = 0 + } + } +} + +# You hear a story about your ancestor +bp2_yearly.2001 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2000.t + desc = bp2_yearly.2001.desc + theme = education + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:story_teller + animation = admiration + } + lower_center_portrait = scope:ancestor + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + number_of_personality_traits < 3 + any_ancestor = { + even_if_dead = yes + is_alive = no + age >= 25 + number_of_personality_traits_in_common = { + target = root + value < 3 + } + number_of_opposing_personality_traits = { + target = root + value < 3 + } + } + relevant_story_teller_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 3 + culture = { + OR = { + has_cultural_tradition = tradition_mystical_ancestors + has_cultural_tradition = tradition_storytellers + } + } + } + modifier = { + factor = 4 + is_ai = no + } + } + + immediate = { + ordered_ancestor = { + even_if_dead = yes + limit = { + is_alive = no + age >= 25 + number_of_personality_traits_in_common = { + target = root + value < 3 + } + number_of_opposing_personality_traits = { + target = root + value < 3 + } + } + order_by = highest_held_title_tier + save_scope_as = ancestor + } + # Grab someone to tell their story + grab_learning_char_relevant_to_child = { + CHILD = root + SCOPE_OUTPUT = story_teller + } + scope:ancestor = { + every_character_trait = { + if = { + limit = { + # Must be a personality trait + has_trait_category = personality + # Child does not already have this trait + root = { + NOT = { has_trait = prev } + } + # Child does not already have the opposite of this trait + any_opposite_trait = { + root = { + NOT = { has_trait = prev } + } + } + } + add_to_list = target_traits + } + } + } + + random_in_list = { + list = target_traits + save_scope_as = target_trait + random_opposite_trait = { + save_scope_as = target_trait_opposite + } + } + + random_court_position_holder = { + type = court_artificer_court_position + save_scope_as = artificer + } + + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:target_trait = trait:callous + scope:target_trait = trait:deceitful + scope:target_trait = trait:lazy + faith = { trait_is_sin = scope:target_trait } + } + } + desc = bp2_yearly.2000.a.negative + } + desc = bp2_yearly.2001.a + } + } + } + #custom_tooltip = bp2_yearly.2000.a.tt + add_trait = scope:target_trait + hidden_effect = { + create_character_memory = { + type = ancestor_trait_memory + participants = { + ancestor = scope:ancestor + } + } + scope:new_memory = { + set_variable = { + name = target_trait + value = scope:target_trait + } + if = { + limit = { exists = var:target_trait } + #To prevent 'unused except in loc' errors + } + } + } + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2000.b + add_trait = scope:target_trait_opposite + hidden_effect = { + create_character_memory = { + type = ancestor_opposite_trait_memory + participants = { + ancestor = scope:ancestor + } + } + scope:new_memory = { + set_variable = { + name = target_trait_opposite + value = scope:target_trait_opposite + } + if = { + limit = { exists = var:target_trait_opposite } + #To prevent 'unused except in loc' errors + } + } + } + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2000.c + trigger = { + employs_court_position = court_artificer_court_position + } + custom_tooltip = bp2_yearly.2000.c.tt + remove_short_term_gold = medium_gold_value + trigger_event = { + id = bp2_yearly.2002 + days = { 7 21 } + } + + ai_chance = { + base = 30 + } + } + + option = { + name = bp2_yearly.2000.d + ai_chance = { + base = 0 + } + } +} + +# Artifact follow-up +bp2_yearly.2002 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2000.t + desc = bp2_yearly.2002.desc + theme = education + + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:artificer + animation = personality_honorable + } + artifact = { + target = scope:newly_created_artifact + position = lower_center_portrait + } + + trigger = { + has_bp2_dlc_trigger = yes + } + + immediate = { + random_list = { + 1 = { # Ring + create_artifact_ring_effect = { + OWNER = root + SMITH = scope:artificer + } + if = { + limit = { exists = scope:newly_created_artifact } + scope:newly_created_artifact = { + set_artifact_name = house_founder_ring_name + set_artifact_description = house_founder_ring_desc + } + } + } + 1 = { # Necklace + create_artifact_necklace_effect = { + OWNER = root + SMITH = scope:artificer + } + if = { + limit = { exists = scope:newly_created_artifact } + scope:newly_created_artifact = { + set_artifact_name = house_founder_necklace_name + set_artifact_description = house_founder_necklace_desc + } + } + } + 1 = { # Brooch + create_artifact_brooch_effect = { + OWNER = root + SMITH = scope:artificer + } + if = { + limit = { exists = scope:newly_created_artifact } + scope:newly_created_artifact = { + set_artifact_name = house_founder_brooch_name + set_artifact_description = house_founder_brooch_desc + } + } + } + } + } + + option = { + name = bp2_yearly.2002.a + show_as_tooltip = { + scope:newly_created_artifact = { set_owner = root } + } + } +} + +# Imaginary Friend - Story Cycle Start +bp2_yearly.2010 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2010.t + desc = { + desc = bp2_yearly.2010.desc + random_valid = { + triggered_desc = { + trigger = { + OR = { + mother ?= { is_ruler = yes } + father ?= { is_ruler = yes } + } + } + desc = bp2_yearly.2010.desc.landed + } + triggered_desc = { + trigger = { + mother ?= { is_alive = no } + father ?= { is_alive = no } + } + desc = bp2_yearly.2010.desc.parents_dead + } + } + desc = bp2_yearly.2010.outro + } + theme = friend_relation + override_background = { reference = bp2_nursery } + + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:imaginary_friend + animation = crying + hide_info = yes + } + + trigger = { + is_ai = no + is_landed = yes + has_bp2_dlc_trigger = yes + is_available_child = yes + age >= 6 + age <= 12 + NOT = { + any_owned_story = { + type = story_cycle_imaginary_friend + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 4 + has_trait = eccentric + } + + modifier = { + factor = 2 + any_parent = { + even_if_dead = yes + has_trait = eccentric + } + } + modifier = { + factor = 2 + any_relation = { + type = guardian + has_trait = eccentric + } + } + + } + + immediate = { + create_character = { + template = bp2_imaginary_friend_template + dynasty = none + location = root.location + save_scope_as = imaginary_friend + } + + set_variable = { + name = imaginary_friend_char + value = scope:imaginary_friend + } + + create_story = story_cycle_imaginary_friend + set_favorite_toy_effect = yes + + # Pick three random culture names - sorry for this being a bit cursed + root.faith = { + random_faith_character = { + limit = { + culture = root.culture + trigger_if = { + limit = { root = { is_female = yes } } + is_male = yes + } + trigger_if = { + limit = { root = { is_female = no } } + is_female = yes + } + } + save_scope_as = name_option_1 + } + random_faith_character = { + limit = { + culture = root.culture + this != scope:name_option_1 + trigger_if = { + limit = { root = { is_female = yes } } + is_male = yes + } + trigger_if = { + limit = { root = { is_female = no } } + is_female = yes + } + } + save_scope_as = name_option_2 + } + random_faith_character = { + limit = { + culture = root.culture + NOR = { + this = scope:name_option_1 + this = scope:name_option_2 + } + trigger_if = { + limit = { root = { is_female = yes } } + is_male = yes + } + trigger_if = { + limit = { root = { is_female = no } } + is_female = yes + } + } + save_scope_as = name_option_3 + } + } + + # for loc + if = { + limit = { + OR = { + mother ?= { + is_ruler = yes + } + father ?= { is_ruler = yes } + } + } + if = { + limit = { mother ?= { is_ruler = yes } } + mother ?= { save_scope_as = ruler_parent } + } + else = { + father ?= { save_scope_as = ruler_parent } + } + } + } + + option = { + name = bp2_yearly.2010.a + set_variable = { + name = imaginary_friend_name + value = scope:name_option_1 + } + random_owned_story = { + type = story_cycle_imaginary_friend + set_variable = { + name = imaginary_friend_name + value = scope:name_option_1 + } + } + create_character_memory = { + type = imaginary_friend_gained_memory + duration = { years = memory_default_duration } + } + random_memory = { + memory_type = imaginary_friend_gained_memory + set_variable = { + name = imaginary_friend_name + value = scope:name_option_1 + } + } + } + + option = { + name = bp2_yearly.2010.b + set_variable = { + name = imaginary_friend_name + value = scope:name_option_2 + } + random_owned_story = { + type = story_cycle_imaginary_friend + set_variable = { + name = imaginary_friend_name + value = scope:name_option_2 + } + } + create_character_memory = { + type = imaginary_friend_gained_memory + duration = { years = memory_default_duration } + } + random_memory = { + memory_type = imaginary_friend_gained_memory + set_variable = { + name = imaginary_friend_name + value = scope:name_option_2 + } + } + } + + option = { + name = bp2_yearly.2010.c + set_variable = { + name = imaginary_friend_name + value = scope:name_option_3 + } + random_owned_story = { + type = story_cycle_imaginary_friend + set_variable = { + name = imaginary_friend_name + value = scope:name_option_3 + } + } + create_character_memory = { + type = imaginary_friend_gained_memory + duration = { years = memory_default_duration } + } + random_memory = { + memory_type = imaginary_friend_gained_memory + set_variable = { + name = imaginary_friend_name + value = scope:name_option_3 + } + } + } + + after = { + send_interface_toast = { + title = gained_imaginary_friend + left_icon = root + } + scope:imaginary_friend = { + silent_disappearance_effect = yes + } + add_character_modifier = { + modifier = imaginary_friend_modifier + } + } +} + +scripted_effect necromance_imaginary_friend_character_effect = { + create_character = { + template = bp2_imaginary_friend_template + dynasty = none + location = root.location + save_scope_as = imaginary_friend + } +} + +scripted_effect increase_progress_to_eccentricity_effect = { + random_owned_story = { + type = story_cycle_imaginary_friend + change_variable = { + name = progress_to_eccentric_trait + add = $VALUE$ + } + } + if = { + limit = { $VALUE$ <= 2 } + custom_tooltip = imaginary_friend_increase_relationship + } + else_if = { + limit = { $VALUE$ >= 3 } + custom_tooltip = imaginary_friend_significantly_increase_relationship + } +} + +scripted_effect decrease_progress_to_eccentricity_effect = { + random_owned_story = { + type = story_cycle_imaginary_friend + change_variable = { + name = progress_to_eccentric_trait + subtract = $VALUE$ + } + } + custom_tooltip = imaginary_friend_decrease_relationship +} + +# You try to play with your imaginary friend at a playdate +bp2_yearly.2011 = { + type = activity_event + content_source = dlc_009 + title = bp2_yearly.2011.t + desc = bp2_yearly.2011.desc + theme = playdate_activity + override_background = { reference = bp2_nursery } + + left_portrait = { + character = root + animation = anger + } + center_portrait = { + character = scope:imaginary_friend + animation = worry + hide_info = yes + } + right_portrait = { + character = scope:participant + animation = schadenfreude + } + + trigger = { + has_bp2_dlc_trigger = yes + any_owned_story = { + type = story_cycle_imaginary_friend + } + NOT = { has_character_flag = had_event_bp2_yearly_2011 } + } + + immediate = { + add_character_flag = had_event_bp2_yearly_2011 + + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + + # Pick out a fitting activity guest to bully you + involved_activity = { + ordered_attending_character = { + limit = { + this != root + is_ai = yes + } + order_by = { + value = age + if = { # Childhood traits + limit = { + OR = { + has_trait = rowdy + has_trait = bossy + } + } + add = 10 + } + if = { # They or their parent have a higher title than you + limit = { + root = { is_landed = yes } + OR = { + AND = { + exists = highest_held_title_tier + highest_held_title_tier > root.highest_held_title_tier + } + AND = { + exists = mother.highest_held_title_tier + mother.highest_held_title_tier > root.highest_held_title_tier + } + AND = { + exists = father.highest_held_title_tier + father.highest_held_title_tier > root.highest_held_title_tier + } + } + } + add = 50 + } + else_if = { # They or their parent have a higher title than your dad + limit = { + root = { is_landed = no } + root.father = { is_landed = yes } + OR = { + AND = { + exists = highest_held_title_tier + highest_held_title_tier > root.father.highest_held_title_tier + } + AND = { + exists = mother.highest_held_title_tier + mother.highest_held_title_tier > root.father.highest_held_title_tier + } + AND = { + exists = father.highest_held_title_tier + father.highest_held_title_tier > root.father.highest_held_title_tier + } + } + } + add = 50 + } + else_if = { # They or their parent have a higher title than your mom + limit = { + root = { is_landed = no } + root.mother = { is_landed = yes } + OR = { + AND = { + exists = highest_held_title_tier + highest_held_title_tier > root.mother.highest_held_title_tier + } + AND = { + exists = mother.highest_held_title_tier + mother.highest_held_title_tier > root.mother.highest_held_title_tier + } + AND = { + exists = father.highest_held_title_tier + father.highest_held_title_tier > root.mother.highest_held_title_tier + } + } + } + add = 50 + } + } + save_scope_as = participant + } + } + } + + option = { + name = bp2_yearly.2011.a + increase_progress_to_eccentricity_effect = { VALUE = 3 } + stress_impact = { + pensive = miniscule_stress_impact_gain + rowdy = minor_stress_impact_loss + bossy = miniscule_stress_impact_loss + } + send_interface_toast = { + title = bp2_yearly.2011.bully.toast + left_icon = root + right_icon = scope:participant + set_relation_bully = { + target = scope:participant + reason = bully_childhood_imaginary_friend + } + } + create_character_memory = { + type = tormented_me_during_childhood + participants = { + tormentor = scope:participant + } + } + scope:participant = { + create_character_memory = { + type = childhood_started_bullying_positive + participants = { + victim = root + } + } + } + } + + option = { + name = bp2_yearly.2011.b + increase_progress_to_eccentricity_effect = { VALUE = 1 } + add_prestige = miniscule_prestige_loss + stress_impact = { + rowdy = minor_stress_impact_loss + bossy = miniscule_stress_impact_loss + } + } + + option = { + name = bp2_yearly.2011.c + # Rejected existence of Imaginary Friend + decrease_progress_to_eccentricity_effect = { VALUE = 5 } + stress_impact = { + pensive = miniscule_stress_impact_loss + bossy = miniscule_stress_impact_gain + rowdy = miniscule_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Regent Shenanigans +bp2_yearly.2012 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2012.t + desc = bp2_yearly.2012.desc + theme = friend_relation + override_background = { reference = courtyard } + + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:imaginary_friend + animation = thinking + hide_info = yes + } + lower_center_portrait = scope:regent_scope + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + number_of_personality_traits < personality_trait_limit + has_active_diarchy = yes + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = rowdy + add = 1 + } + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + diarch = { save_scope_as = regent_scope } + } + + option = { # Gregarious + name = bp2_yearly.2012.a + if = { + limit = { + NOR = { + has_trait = gregarious + has_trait = shy + } + } + add_trait = gregarious + } + duel = { + skill = diplomacy + target = scope:regent_scope + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.2012.a.success + send_interface_toast = { + title = bp2_yearly.2012.a.success + left_icon = root + right_icon = scope:regent_scope + change_diarchy_swing = medium_sop_swing_liege_gain + scope:regent_scope = { + add_prestige = minor_prestige_loss + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.2012.a.failure + send_interface_toast = { + title = bp2_yearly.2012.a.failure + left_icon = root + right_icon = scope:regent_scope + + scope:regent_scope = { + add_prestige = major_prestige_gain + } + } + } + } + increase_progress_to_eccentricity_effect = { VALUE = 1 } + } + + option = { # Deceitful + name = bp2_yearly.2012.b + trigger = { + NOR = { + has_trait = deceitful + has_trait = trusting + } + } + add_trait = deceitful + + duel = { + skill = intrigue + value = low_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.2012.b.success + send_interface_toast = { + title = bp2_yearly.2012.b.success + left_icon = root + right_icon = scope:regent_scope + change_diarchy_swing = medium_sop_swing_liege_gain + scope:regent_scope = { + add_prestige = minor_prestige_loss + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.2012.b.failure + send_interface_toast = { + title = bp2_yearly.2012.b.failure + left_icon = root + right_icon = scope:regent_scope + + scope:regent_scope = { + add_opinion = { + target = root + modifier = hate_opinion + opinion = -20 + } + } + } + } + } + increase_progress_to_eccentricity_effect = { VALUE = 2 } + } + + option = { + name = bp2_yearly.2012.c + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + + ai_chance = { # We want the AI to choose this so traits aren't imbalanced + base = 100 + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Chance to lose/change a personality trait +bp2_yearly.2013 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2013.t + desc = bp2_yearly.2013.desc + theme = friend_relation + override_background = { reference = garden } + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:imaginary_friend + animation = disapproval + hide_info = yes + } + + cooldown = { years = 16 } + + trigger = { + has_bp2_dlc_trigger = yes + is_ai = no # the ai doesn't need this event + is_available_child = yes + number_of_personality_traits >= 1 + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + # Pick a trait to target + random_character_trait = { + limit = { has_trait_category = personality } + save_scope_as = target_trait + } + scope:target_trait = { + random_opposite_trait = { + save_scope_as = opposite_trait + } + } + } + + option = { # Keep the trait + name = bp2_yearly.2013.a + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + } + + option = { # Lose the trait + name = bp2_yearly.2013.b + increase_progress_to_eccentricity_effect = { VALUE = 1 } + remove_trait = scope:target_trait + } + + option = { # Trade the trait + name = bp2_yearly.2013.c + increase_progress_to_eccentricity_effect = { VALUE = 2 } + remove_trait = scope:target_trait + add_trait_force_tooltip = scope:opposite_trait + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Imaginary Friend inspires you to pursue a crush +bp2_yearly.2014 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2014.t + desc = bp2_yearly.2014.desc + theme = friend_relation + override_background = { reference = garden } + + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:imaginary_friend + animation = flirtation + hide_info = yes + } + lower_center_portrait = scope:crush + + cooldown = { years = 16 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + age >= 10 + num_of_relation_crush <= 0 + NOT = { + has_trait = chaste + } + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + has_sexuality = homosexual + } + # Ensure we have a character to crush on + OR = { + any_vassal = { + save_good_crush_character_trigger_check = yes + } + any_vassal = { + any_child = { + save_good_crush_character_trigger_check = yes + } + } + any_courtier_or_guest = { + save_good_crush_character_trigger_check = yes + } + AND = { + top_liege != this + liege ?= { + save_good_crush_character_trigger_check = yes + } + } + AND = { + top_liege != this + liege ?= { + any_vassal = { + save_good_crush_character_trigger_check = yes + } + } + } + AND = { + top_liege != this + liege ?= { + any_vassal = { + any_child = { + save_good_crush_character_trigger_check = yes + } + } + } + } + AND = { + top_liege != this + liege ?= { + any_courtier_or_guest = { + save_good_crush_character_trigger_check = yes + } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = charming + add = 1 + } + } + + immediate = { + play_music_cue = "mx_cue_touching_moment" + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + # Pick someone to crush on + every_vassal = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + every_vassal = { + every_child = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + } + every_courtier_or_guest = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + if = { + limit = { + top_liege != this + liege ?= { + save_good_crush_character_trigger_check = yes + } + } + liege = { + add_to_list = crushes + } + } + if = { + limit = { + top_liege != this + liege ?= { + any_vassal = { + save_good_crush_character_trigger_check = yes + } + } + } + liege = { + every_vassal = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + } + } + if = { + limit = { + top_liege != this + liege ?= { + any_vassal = { + any_child = { + save_good_crush_character_trigger_check = yes + } + } + } + } + liege = { + every_vassal = { + every_child = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + } + } + } + if = { + limit = { + top_liege != this + liege ?= { + any_courtier_or_guest = { + save_good_crush_character_trigger_check = yes + } + } + } + liege = { + every_courtier_or_guest = { + limit = { + save_good_crush_character_trigger_check = yes + } + add_to_list = crushes + } + } + } + + random_in_list = { + list = crushes + weight = { + base = 1 + modifier = { + add = 10 + top_liege != this + exists = liege + is_primary_heir_of = liege + } + modifier = { + add = 5 + top_liege != this + exists = liege + is_heir_of = liege + } + modifier = { + add = 10 + any_parent = { + is_powerful_vassal_of = root + } + } + modifier = { + add = 5 + any_parent = { + is_vassal_of = root + } + } + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + } + save_scope_as = crush + } + } + + option = { # Raunchy Advance + name = bp2_yearly.2014.a + increase_progress_to_eccentricity_effect = { VALUE = 2 } + if = { # Add lustful if we can + limit = { + number_of_personality_traits < 4 + NOT = { has_trait = lustful } + } + add_trait = lustful + } + set_relation_crush = scope:crush + # Determine if they return the crush + random_list = { + 50 = { + send_interface_toast = { + title = bp2_yearly.2014.a.success + left_icon = root + right_icon = scope:crush + scope:crush = { set_relation_crush = root } + } + modifier = { + has_trait = charming + add = 10 + } + modifier = { + has_trait = lustful + add = 10 + } + modifier = { + has_trait = gregarious + add = 10 + } + modifier = { + has_trait = shy + add = -20 + } + modifier = { + has_trait = chaste + add = -30 + } + modifier = { + has_trait = temperate + add = -10 + } + } + 50 = {} + } + + ai_chance = { + base = 20 + modifier = { + has_trait = lustful + factor = 3 + } + } + + stress_impact = { + shy = medium_stress_impact_gain + } + } + + option = { # Charming Advance + name = bp2_yearly.2014.b + increase_progress_to_eccentricity_effect = { VALUE = 1 } + set_relation_crush = scope:crush + # Determine if they return the crush + random_list = { + 50 = { + send_interface_toast = { + title = bp2_yearly.2014.a.success + left_icon = root + right_icon = scope:crush + scope:crush = { set_relation_crush = root } + } + modifier = { + has_trait = charming + add = 10 + } + modifier = { + has_trait = lustful + add = 10 + } + modifier = { + has_trait = gregarious + add = 10 + } + modifier = { + has_trait = shy + add = -10 + } + } + 50 = {} + } + + ai_chance = { + base = 30 + modifier = { + has_trait = charming + factor = 2 + } + modifier = { + has_trait = lustful + factor = 0 + } + } + stress_impact = { + lustful = minor_stress_impact_gain + charming = minor_stress_impact_loss + } + } + + option = { # I'm more interested in #EMP you#! + name = bp2_yearly.2014.c + increase_progress_to_eccentricity_effect = { VALUE = 3 } + + ai_chance = { + base = 30 + } + } + + option = { # Aw you're too afraid of love? + name = bp2_yearly.2014.d + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + if = { + limit = { + scope:crush = { + is_ai = yes + } + } + progress_towards_friend_effect = { + CHARACTER = scope:crush + OPINION = 10 + REASON = friend_childhood_friendzoned + } + } + + ai_chance = { + base = 20 + modifier = { + OR = { + has_trait = lustful + has_trait = charming + } + factor = 0 + } + } + stress_impact = { + lustful = minor_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Imaginary friend inspires you to fight back against your bully +bp2_yearly.2015 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2015.t + desc = bp2_yearly.2015.desc + theme = friend_relation + override_background = { reference = bp2_nursery } + + left_portrait = { + character = root + animation = sadness + } + right_portrait = { + character = scope:imaginary_friend + animation = worry + hide_info = yes + } + lower_center_portrait = scope:bully + + trigger = { + has_bp2_dlc_trigger = yes + is_ai = no + is_available_child = yes + # make sure they have a bully + any_relation = { type = bully } + } + + weight_multiplier = { + base = 1 + modifier = { + any_relation = { type = bully } + add = 2 + } + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + # Save the bully + random_relation = { + type = bully + save_scope_as = bully + set_favorite_toy_effect = yes + } + } + + option = { # Fight them + name = bp2_yearly.2015.a + if = { + limit = { has_trait = craven } + remove_trait = craven + add_trait_force_tooltip = brave + } + else_if = { + limit = { + number_of_personality_traits < 4 + NOR = { + has_trait = brave + any_character_trait = { + any_opposite_trait = { + this = trait:brave + } + } + } + } + add_trait = brave + } + + duel = { + skill = prowess + target = scope:bully + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 50 + } + desc = bp2_yearly.2015.a.success + send_interface_toast = { + title = bp2_yearly.2015.a.success + left_icon = root + right_icon = scope:bully + add_prowess_skill = 1 + remove_relation_bully = scope:bully + increase_progress_to_eccentricity_effect = { VALUE = 3 } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.2015.a.failure + send_interface_toast = { + title = bp2_yearly.2015.a.failure + left_icon = root + right_icon = scope:bully + add_prestige = minor_prestige_loss + increase_progress_to_eccentricity_effect = { VALUE = 1 } + } + } + } + } + + option = { # Spread an embarrasing rumor + name = bp2_yearly.2015.b + + if = { + limit = { + number_of_personality_traits < 4 + NOR = { + has_trait = vengeful + any_character_trait = { + any_opposite_trait = { + this = trait:vengeful + } + } + } + } + add_trait = vengeful + } + + duel = { + skill = intrigue + target = scope:bully + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 50 + } + desc = bp2_yearly.2015.b.success + send_interface_toast = { + title = bp2_yearly.2015.b.success + left_icon = root + right_icon = scope:bully + add_intrigue_skill = 1 + remove_relation_bully = scope:bully + increase_progress_to_eccentricity_effect = { VALUE = 3 } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.2015.b.failure + send_interface_toast = { + title = bp2_yearly.2015.b.failure + left_icon = root + right_icon = scope:bully + add_prestige = minor_prestige_loss + increase_progress_to_eccentricity_effect = { VALUE = 1 } + } + } + } + } + + option = { # Run away and cry in your room + name = bp2_yearly.2015.c + if = { + limit = { has_trait = brave } + remove_trait = brave + add_trait_force_tooltip = craven + } + else_if = { + limit = { + number_of_personality_traits < 4 + NOR = { + has_trait = craven + any_character_trait = { + any_opposite_trait = { + this = trait:craven + } + } + } + } + add_trait = craven + } + decrease_progress_to_eccentricity_effect = { VALUE = 2 } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Imaginary Friend invites you to pick flowers and make flower crowns +bp2_yearly.2016 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2016.t + desc = bp2_yearly.2016.desc + theme = friend_relation + override_background = { reference = garden } + + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:imaginary_friend + animation = admiration + hide_info = yes + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + number_of_personality_traits < 3 + } + + cooldown = { years = 15 } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + } + + option = { + name = bp2_yearly.2016.a + if = { + limit = { + NOR = { + has_trait = compassionate + any_character_trait = { + any_opposite_trait = { + this = trait:compassionate + } + } + } + } + add_trait = compassionate + } + else_if = { + limit = { + NOR = { + has_trait = calm + any_character_trait = { + any_opposite_trait = { + this = trait:calm + } + } + } + } + add_trait = calm + } + else_if = { + limit = { + NOR = { + has_trait = content + any_character_trait = { + any_opposite_trait = { + this = trait:content + } + } + } + } + add_trait = content + } + else_if = { + limit = { + NOR = { + has_trait = humble + any_character_trait = { + any_opposite_trait = { + this = trait:humble + } + } + } + } + add_trait = humble + } + + increase_progress_to_eccentricity_effect = { VALUE = 1 } + + stress_impact = { + base = medium_stress_loss + } + + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2016.b + add_dread = minor_dread_gain + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + + ai_chance = { + base = 50 + modifier = { + OR = { + has_trait = rowdy + has_trait = pensive + has_trait = callous + has_trait = sadistic + } + add = 30 + } + } + + stress_impact = { + pensive = minor_stress_impact_loss + rowdy = minor_stress_impact_loss + charming = minor_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# If you are bookish in any way, your imaginary friend encourages you to stay up and study all the books +bp2_yearly.2017 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2017.t + desc = bp2_yearly.2017.desc + theme = friend_relation + override_background = { reference = study } + + left_portrait = { + character = root + animation = reading + } + right_portrait = { + character = scope:imaginary_friend + animation = reading + hide_info = yes + } + + cooldown = { years = 16 } + + weight_multiplier = { + base = 1 + # We don't need a ton of smart or healthy ais running 'round + modifier = { + is_ai = yes + factor = 0 + } + } + + trigger = { + has_bp2_dlc_trigger = yes + OR = { # Are they a nerd? + has_focus = education_learning + has_trait = shrewd + has_trait = pensive + } + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + } + + option = { + name = bp2_yearly.2017.a + if = { # increase learning education if you have it + limit = { has_focus = education_learning } + custom_tooltip = bp2_yearly.2017.a.tt + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + if = { # chance to gain the shrewd trait + limit = { NOT = { has_trait = shrewd } } + random = { + chance = 30 + add_trait = shrewd + } + } + increase_progress_to_eccentricity_effect = { VALUE = 1 } + + + stress_impact = { + pensive = minor_stress_impact_loss + shrewd = minor_stress_impact_loss + rowdy = minor_stress_impact_gain + curious = minor_stress_impact_gain + } + } + + option = { + name = bp2_yearly.2017.b + if = { # increase martial education if you have it + limit = { has_focus = education_martial } + custom_tooltip = bp2_yearly.2017.b.tt + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + if = { # chance to gain the athletic trait + limit = { NOT = { has_trait = athletic } } + random = { + chance = 50 + add_trait = athletic + } + } + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + + stress_impact = { + pensive = minor_stress_impact_gain + shrewd = minor_stress_impact_gain + rowdy = minor_stress_impact_loss + curious = minor_stress_impact_loss + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Chance to get the confider or poet trait +bp2_yearly.2018 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2018.t + desc = bp2_yearly.2018.desc + theme = friend_relation + override_background = { reference = relaxing_room } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:imaginary_friend + animation = admiration + hide_info = yes + } + + cooldown = { years = 16 } + + trigger = { + has_bp2_dlc_trigger = yes + NAND = { + has_trait = confider + has_trait = lifestyle_poet + } + stress >= normal_baseline_stress + } + + weight_multiplier = { + base = 1 + # We don't need a ton of ai poets and confiders running 'round + modifier = { + is_ai = yes + factor = 0 + } + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + } + + option = { # Channel your stress into the confider trait + name = bp2_yearly.2018.a + trigger = { NOT = { has_trait = confider } } + add_trait = confider + increase_progress_to_eccentricity_effect = { VALUE = 3 } + + stress_impact = { + base = minor_stress_impact_loss + } + } + + option = { # Channel your stress into the poet trait + name = bp2_yearly.2018.b + trigger = { NOT = { has_trait = lifestyle_poet } } + add_trait = lifestyle_poet + increase_progress_to_eccentricity_effect = { VALUE = 1 } + + stress_impact = { + base = minor_stress_impact_loss + } + } + + option = { # opt out + name = bp2_yearly.2018.c + if = { # increase martial education if you have it + limit = { has_focus = education_martial } + education_point_acquisition_additional_points_effect = { LEVEL = mid } + } + add_prowess_skill = 1 + stress_impact = { + base = minor_stress_impact_loss + } + decrease_progress_to_eccentricity_effect = { VALUE = 1 } + + stress_impact = { + pensive = minor_stress_impact_gain + shrewd = minor_stress_impact_gain + rowdy = minor_stress_impact_loss + curious = minor_stress_impact_loss + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Chance to gain the Eccentric Trait +bp2_yearly.2019 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2019.t + desc = { + desc = bp2_yearly.2019.desc.intro + first_valid = { + triggered_desc = { + trigger = { + is_landed = yes + scope:target_councilor = cp:councillor_court_chaplain + } + desc = bp2_yearly.2019.desc.chaplain + } + triggered_desc = { + trigger = { scope:target_councilor = cp:councillor_court_chaplain } + desc = bp2_yearly.2019.desc.chaplain_unlanded + } + triggered_desc = { + trigger = { + is_landed = yes + scope:target_councilor = cp:councillor_steward + } + desc = bp2_yearly.2019.desc.steward + } + triggered_desc = { + trigger = { scope:target_councilor = cp:councillor_steward } + desc = bp2_yearly.2019.desc.steward_unlanded + } + triggered_desc = { + trigger = { + is_landed = yes + scope:target_councilor = cp:councillor_marshal + } + desc = bp2_yearly.2019.desc.marshal + } + triggered_desc = { + trigger = { scope:target_councilor = cp:councillor_marshal } + desc = bp2_yearly.2019.desc.marshal_unlanded + } + triggered_desc = { + trigger = { + is_landed = yes + scope:target_councilor = cp:councillor_spymaster + } + desc = bp2_yearly.2019.desc.spymaster + } + triggered_desc = { + trigger = { scope:target_councilor = cp:councillor_spymaster } + desc = bp2_yearly.2019.desc.spymaster_unlanded + } + triggered_desc = { + trigger = { + is_landed = yes + scope:target_councilor = cp:councillor_chancellor + } + desc = bp2_yearly.2019.desc.chancellor + } + triggered_desc = { + trigger = { scope:target_councilor = cp:councillor_chancellor } + desc = bp2_yearly.2019.desc.chancellor_unlanded + } + triggered_desc = { + trigger = { scope:target_councilor = { is_kurultai_trigger = yes } } + desc = bp2_yearly.2019.desc.kurultai + } + } + desc = bp2_yearly.2019.desc.outro + } + theme = friend_relation + + override_background = { reference = relaxing_room } + + left_portrait = { + character = root + animation = manic + } + right_portrait = { + character = scope:target_councilor + triggered_animation = { + trigger = { + scope:target_councilor = { + has_council_position = councillor_court_chaplain + } + } + animation = chaplain + } + triggered_animation = { + trigger = { + scope:target_councilor = { + has_council_position = councillor_steward + } + } + animation = steward + } + triggered_animation = { + trigger = { + scope:target_councilor = { + has_council_position = councillor_marshal + } + } + animation = marshal + } + triggered_animation = { + trigger = { + scope:target_councilor = { + has_council_position = councillor_spymaster + } + } + animation = spymaster + } + triggered_animation = { + trigger = { + scope:target_councilor = { + has_council_position = councillor_chancellor + } + } + animation = chancellor + } + } + lower_center_portrait = { + character = scope:imaginary_friend + hide_info = yes + } + + trigger = { + has_bp2_dlc_trigger = yes + is_landless_adventurer = no + NOT = { has_character_flag = had_bp2_yearly_2019 } + # Doesn't have the opposites of Eccentric + NOR = { + has_trait = stubborn + has_trait = fickle + } + any_owned_story = { + type = story_cycle_imaginary_friend + has_variable = progress_to_eccentric_trait + var:progress_to_eccentric_trait >= 5 + } + OR = { # ensure we have a councilor to grab + exists = cp:councillor_court_chaplain + exists = cp:councillor_steward + exists = cp:councillor_marshal + exists = cp:councillor_spymaster + exists = cp:councillor_chancellor + exists = cp:councillor_kurultai_1 + exists = cp:councillor_kurultai_2 + exists = cp:councillor_kurultai_3 + exists = cp:councillor_kurultai_4 + } + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + random_list = { + 1 = { + trigger = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { save_scope_as = target_councilor } + } + 1 = { + trigger = { exists = cp:councillor_steward } + cp:councillor_steward = { save_scope_as = target_councilor } + } + 1 = { + trigger = { exists = cp:councillor_marshal } + cp:councillor_marshal = { save_scope_as = target_councilor } + } + 1 = { + trigger = { exists = cp:councillor_spymaster } + cp:councillor_spymaster = { save_scope_as = target_councilor } + } + 1 = { + trigger = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { save_scope_as = target_councilor } + } + 1 = { + trigger = { + any_councillor = { + is_kurultai_trigger = yes + } + } + random_councillor = { + limit = { + is_kurultai_trigger = yes + } + save_scope_as = target_councilor + } + } + } + add_character_flag = { + flag = had_bp2_yearly_2019 + years = 16 + } + # for option tooltips + save_scope_as = root_scope + } + + option = { + name = bp2_yearly.2019.a + flavor = bp2_yearly.2019.a.tt + add_trait = eccentric + every_vassal = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + target = root + modifier = courtly_imaginary_friend_opinion + opinion = -10 + } + } + + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2019.b + flavor = bp2_yearly.2019.b.tt + add_trait = paranoid + # Follow-up where your imaginary friend leaves + + ai_chance = { + base = 50 + } + } + + after = { scope:imaginary_friend = { silent_disappearance_effect = yes } } +} + +### IMAGINARY FRIEND ADULT EVENTS +scripted_trigger is_valid_for_imaginary_friend_adult_event_trigger = { + any_owned_story = { + type = story_cycle_imaginary_friend + save_temporary_scope_as = target_story_cycle + } + is_available_adult = yes + is_travelling = no + has_trait = eccentric +} + +## EVIL IMAGINARY FRIEND + +# Scripted effect for choosing murder target(s) +scripted_effect bp2_yearly_2020_choose_new_murder_target_effect = { + random_list = { # Choose a random murder target + 1 = { + trigger = { + any_close_family_member = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = family_target + root = { + can_start_scheme = { + type = murder + target_character = scope:family_target + } + } + } + } + random_close_family_member = { + limit = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = family_target + root = { + can_start_scheme = { + type = murder + target_character = scope:family_target + } + } + } + save_scope_as = new_murder_target + } + } + 1 = { + trigger = { + primary_spouse ?= { + is_alive = yes + save_temporary_scope_as = spouse_target + root = { + can_start_scheme = { + type = murder + target_character = scope:spouse_target + } + } + } + } + primary_spouse = { + save_scope_as = new_murder_target + } + } + 1 = { + trigger = { + any_relation = { + type = friend + is_alive = yes + is_adult = yes + save_temporary_scope_as = friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:friend_target + } + } + } + } + random_relation = { + type = friend + limit = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:friend_target + } + } + } + save_scope_as = new_murder_target + } + } + 1 = { + trigger = { + any_relation = { + type = best_friend + is_alive = yes + is_adult = yes + save_temporary_scope_as = best_friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:best_friend_target + } + } + } + } + random_relation = { + type = best_friend + limit = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = best_friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:best_friend_target + } + } + } + save_scope_as = new_murder_target + } + } + 1 = { + trigger = { + any_courtier_or_guest = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = guest_target + root = { + can_start_scheme = { + type = murder + target_character = scope:guest_target + } + } + } + } + random_courtier_or_guest = { + limit = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = guest_target + root = { + can_start_scheme = { + type = murder + target_character = scope:guest_target + } + } + } + save_scope_as = new_murder_target + } + } + } +} + +scripted_trigger bp2_yearly_2020_is_there_a_new_murder_target_trigger = { + OR = { + any_close_family_member = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = family_target + root = { + can_start_scheme = { + type = murder + target_character = scope:family_target + } + } + } + primary_spouse ?= { + is_alive = yes + save_temporary_scope_as = spouse_target + root = { + can_start_scheme = { + type = murder + target_character = scope:spouse_target + } + } + } + any_relation = { + type = friend + is_alive = yes + is_adult = yes + save_temporary_scope_as = friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:friend_target + } + } + } + any_relation = { + type = best_friend + is_alive = yes + is_adult = yes + save_temporary_scope_as = best_friend_target + root = { + can_start_scheme = { + type = murder + target_character = scope:best_friend_target + } + } + } + any_courtier_or_guest = { + is_alive = yes + is_adult = yes + save_temporary_scope_as = guest_target + root = { + can_start_scheme = { + type = murder + target_character = scope:guest_target + } + } + } + } +} + +# Your imaginary friend wants you to kill someone +bp2_yearly.2020 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2020.t + desc = bp2_yearly.2020.desc + theme = friend_relation + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = fear + } + right_portrait = { + character = scope:imaginary_friend + animation = spymaster + hide_info = yes + } + lower_center_portrait = scope:murder_target + + trigger = { + has_bp2_dlc_trigger = yes + is_valid_for_imaginary_friend_adult_event_trigger = yes + scope:target_story_cycle.var:imaginary_friend_disposition = flag:devil + NOT = { has_character_flag = had_bp2_yearly_2020 } + bp2_yearly_2020_is_there_a_new_murder_target_trigger = yes + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + add_character_flag = had_bp2_yearly_2020 + + # Choose a random murder target + bp2_yearly_2020_choose_new_murder_target_effect = yes + scope:new_murder_target = { + save_scope_as = murder_target + } + } + + option = { + name = bp2_yearly.2020.a + if = { + limit = { + can_start_scheme = { + type = murder + target_character = scope:murder_target + } + } + start_scheme = { + type = murder + target_character = scope:murder_target + } + } + + # Set up an event where your imaginary friend scolds you if you haven't started the scheme within 2 months + trigger_event = { + id = bp2_yearly.2021 + days = 60 + } + set_variable = { + name = imaginary_friend_murder_target + value = scope:murder_target + } + custom_tooltip = imaginary_friend_first_murder_scheme_tt + } + + option = { + name = bp2_yearly.2020.b + + stress_impact = { + base = massive_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + if = { + limit = { + has_variable = imaginary_friend_murder_target + any_scheme = { + type = murder + scheme_target_character = root.var:imaginary_friend_murder_target + } + } + random_scheme = { + type = murder + limit = { + scheme_target_character = root.var:imaginary_friend_murder_target + } + add_scheme_modifier = { type = imaginary_friend_murder_scheme_modifier } + } + } + } +} + +# Why haven't you started your scheme? +bp2_yearly.2021 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2021.t + desc = bp2_yearly.2021.desc + theme = friend_relation + + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:imaginary_friend + animation = rage + } + + trigger = { + has_bp2_dlc_trigger = yes + any_owned_story = { + type = story_cycle_imaginary_friend + } + has_variable = imaginary_friend_murder_target + NOT = { + any_scheme = { + type = murder + scheme_target_character = root.var:imaginary_friend_murder_target + } + } + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + root.var:imaginary_friend_murder_target = { + save_scope_as = new_murder_target + } + } + + option = { + name = bp2_yearly.2021.a + + show_as_unavailable = { + NOT = { + can_start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + } + + start_scheme = { + type = murder + target_character = scope:new_murder_target + } + # Recursively fire event in 90 days to check if the character has started a scheme + trigger_event = { + id = bp2_yearly.2021 + days = 90 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp2_yearly.2021.b + + # Recursively fire event in 90 days to check if the character has started a scheme + trigger_event = { + id = bp2_yearly.2021 + days = 90 + } + + stress_impact = { + base = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2021.c + + random_owned_story = { + type = story_cycle_imaginary_friend + end_story = yes + } + + stress_impact = { + base = medium_stress_impact_gain + compassionate = minor_stress_impact_loss + calm = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } +} + +# Murder Success - Another target? +bp2_yearly.2022 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2022.t + desc = { + desc = bp2_yearly.2022.desc + triggered_desc = { + trigger = { + has_variable = imaginary_friend_murder_count + var:imaginary_friend_murder_count >= 1 + } + desc = bp2_yearly.2022.desc.next_target + } + } + theme = friend_relation + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = paranoia + } + right_portrait = { + character = scope:imaginary_friend + animation = laugh + hide_info = yes + } + lower_center_portrait = { + character = scope:new_murder_target + } + + trigger = { + has_bp2_dlc_trigger = yes + bp2_yearly_2020_is_there_a_new_murder_target_trigger = yes + } + + immediate = { + # Revive a character to show as your imaginary friend + necromance_imaginary_friend_character_effect = yes + # Basic bonuses + add_dread = medium_dread_gain + add_stress = major_stress_loss + # Add lunacy if they don't have it already + if = { + limit = { + NOT = { has_trait = lunatic_1 } + } + add_trait = lunatic_1 + } + # Increment murder count + if = { + limit = { + NOT = { has_variable = imaginary_friend_murder_count } + } + set_variable = { + name = imaginary_friend_murder_count + value = 1 + } + } + else = { + change_variable = { + name = imaginary_friend_murder_count + add = 1 + } + } + + # Choose a random murder target + bp2_yearly_2020_choose_new_murder_target_effect = yes + } + + option = { + name = bp2_yearly.2022.a + flavor = bp2_yearly.2019.a.tt + + if = { + limit = { + can_start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + custom_tooltip = imaginary_friend_future_murder_scheme_tt + + # Set up an event where your imaginary friend scolds you if you haven't started the scheme within 2 months + trigger_event = { + id = bp2_yearly.2021 + days = 60 + } + set_variable = { + name = imaginary_friend_murder_target + value = scope:new_murder_target + } + + ai_chance = 100 + } + + option = { + name = bp2_yearly.2022.b + flavor = bp2_yearly.2019.b.tt + + stress_impact = { + base = medium_stress_impact_gain + } + + ai_chance = 0 + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + if = { + limit = { + has_variable = imaginary_friend_murder_target + any_scheme = { + type = murder + scheme_target_character = root.var:imaginary_friend_murder_target + } + } + random_scheme = { + type = murder + limit = { + scheme_target_character = root.var:imaginary_friend_murder_target + } + add_scheme_modifier = { type = imaginary_friend_murder_scheme_modifier } + } + } + } +} + +# Murder Invalidated +bp2_yearly.2023 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2023.t + desc = { + desc = bp2_yearly.2023.desc + desc = bp2_yearly.2022.desc.next_target + } + theme = friend_relation + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:imaginary_friend + animation = anger + hide_info = yes + } + lower_center_portrait = scope:new_murder_target + + trigger = { + has_bp2_dlc_trigger = yes + bp2_yearly_2020_is_there_a_new_murder_target_trigger = yes + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + # Choose a random murder target + bp2_yearly_2020_choose_new_murder_target_effect = yes + } + + option = { + name = bp2_yearly.2023.a + if = { + limit = { + can_start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + else = { + custom_tooltip = imaginary_friend_future_murder_scheme_tt + set_variable = { + name = imaginary_friend_murder_target + value = scope:new_murder_target + } + } + # Set up an event where your imaginary friend scolds you if you haven't started the scheme within 2 months + trigger_event = { + id = bp2_yearly.2021 + days = 60 + } + set_variable = { + name = imaginary_friend_murder_target + value = scope:new_murder_target + } + } + + option = { + name = bp2_yearly.2023.b + stress_impact = { + base = massive_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + if = { + limit = { + has_variable = imaginary_friend_murder_target + any_scheme = { + type = murder + scheme_target_character = root.var:imaginary_friend_murder_target + } + } + random_scheme = { + type = murder + limit = { + scheme_target_character = root.var:imaginary_friend_murder_target + } + add_scheme_modifier = { type = imaginary_friend_murder_scheme_modifier } + } + } + } +} + +# Murder Failed, try again +bp2_yearly.2024 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2024.t + desc = { + desc = bp2_yearly.2024.desc + desc = bp2_yearly.2022.desc.next_target + } + theme = friend_relation + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:imaginary_friend + animation = anger + hide_info = yes + } + lower_center_portrait = scope:new_murder_target + + trigger = { + has_bp2_dlc_trigger = yes + bp2_yearly_2020_is_there_a_new_murder_target_trigger = yes + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + # Choose a random murder target + bp2_yearly_2020_choose_new_murder_target_effect = yes + } + + option = { + name = bp2_yearly.2024.a + if = { + limit = { + can_start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + start_scheme = { + type = murder + target_character = scope:new_murder_target + } + } + else = { + custom_tooltip = imaginary_friend_future_murder_scheme_tt + set_variable = { + name = imaginary_friend_murder_target + value = scope:new_murder_target + } + } + # Set up an event where your imaginary friend scolds you if you haven't started the scheme within 2 months + trigger_event = { + id = bp2_yearly.2021 + days = 60 + } + set_variable = { + name = imaginary_friend_murder_target + value = scope:new_murder_target + } + } + + option = { + name = bp2_yearly.2024.b + stress_impact = { + base = massive_stress_impact_gain + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + if = { + limit = { + has_variable = imaginary_friend_murder_target + any_scheme = { + type = murder + scheme_target_character = root.var:imaginary_friend_murder_target + } + } + random_scheme = { + type = murder + limit = { + scheme_target_character = root.var:imaginary_friend_murder_target + } + add_scheme_modifier = { type = imaginary_friend_murder_scheme_modifier } + } + } + } +} + +# Murder special ending 2025 +bp2_yearly.2025 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2025.t + desc = bp2_yearly.2025.desc + theme = friend_relation + + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = manic + } + right_portrait = { + character = scope:imaginary_friend + animation = love + hide_info = yes + } + lower_center_portrait = scope:target + + trigger = { + has_bp2_dlc_trigger = yes + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + } + + option = { + name = bp2_yearly.2025.a + set_nickname_effect = { NICKNAME = nick_the_mad } + add_character_modifier = { + modifier = imaginary_friend_mad_modifier + } + custom_tooltip = imaginary_friend_mad_modifier_bribe_discount + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + random_owned_story = { + type = story_cycle_imaginary_friend + end_story = yes + } + if = { + limit = { has_character_modifier = imaginary_friend_modifier } + remove_character_modifier = imaginary_friend_modifier + } + } +} + +## GOOD IMAGINARY FRIEND +# Imaginary friend reveals they are an angel +bp2_yearly.2030 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2030.t + desc = bp2_yearly.2030.desc + theme = friend_relation + override_background = { reference = relaxing_room } + + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:imaginary_friend + animation = personality_content + hide_info = yes + } + + trigger = { + has_bp2_dlc_trigger = yes + is_valid_for_imaginary_friend_adult_event_trigger = yes + NOT = { has_character_flag = bp2_yearly_2030 } + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + add_character_flag = bp2_yearly_2030 + # Pick a random holy site that you can pilgrimage to + faith = { + random_holy_site = { save_scope_as = target_holy_site } + } + random_owned_story = { + type = story_cycle_imaginary_friend + set_variable = { + name = pilgrimage_destination + value = scope:target_holy_site.title_province + } + } + } + + option = { # Start a pilgrimage right now + name = bp2_yearly.2030.a + custom_tooltip = bp2_yearly.2030.a.tt + open_view_data = { + view = activity_list_detail_host_window + data = activity_type:activity_pilgrimage + player = root + } + add_character_flag = { + flag = imaginary_friend_pilgrimage_discount + years = 2 + } + + stress_impact = { + zealous = minor_stress_impact_loss + cynical = medium_stress_impact_gain + } + + ai_chance = { + base = 50 + modifier = { + factor = 0 + has_trait = cynical + } + } + } + + option = { # cynical is baffled + name = bp2_yearly.2030.b + trigger = { has_trait = cynical } + + remove_trait = cynical + add_trait_force_tooltip = zealous + + add_character_flag = { + flag = imaginary_friend_pilgrimage_discount + years = 2 + } + + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } + + option = { # Just pray here + name = bp2_yearly.2030.c + add_piety = medium_piety_gain + + stress_impact = { + eccentric = major_stress_impact_gain + zealous = miniscule_stress_impact_gain + } + + ai_chance = { + base = 50 + modifier = { + factor = 0 + has_trait = eccentric + } + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + } +} + +# Honor your Imaginary Friend at the Holy Site +bp2_yearly.2031 = { + type = activity_event + content_source = dlc_009 + title = bp2_yearly.2031.t + desc = bp2_yearly.2031.desc + theme = friend_relation + override_background = { + trigger = { + NOR = { + faith = { religion = religion:hinduism_religion } + faith = { religion = religion:buddhism_religion } + faith = { religion = religion:jainism_religion } + } + } + reference = temple + } + override_background = { + trigger = { + OR = { + faith = { religion = religion:hinduism_religion } + faith = { religion = religion:buddhism_religion } + faith = { religion = religion:jainism_religion } + } + } + reference = ep2_holy_site_indian + } + + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:imaginary_friend + animation = personality_zealous + hide_info = yes + } + + trigger = { + has_bp2_dlc_trigger = yes + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = zealous + add = 1 + } + modifier = { + has_learning_lifestyle_trait_trigger = yes + add = 1 + } + } + + option = { + name = bp2_yearly.2031.a + # Effects + if = { + limit = { + piety_level < max_piety_level + } + add_piety_level = 1 + } + else = { + add_piety = massive_piety_gain + } + + if = { + limit = { + NOT = { has_trait = lifestyle_mystic } + } + add_trait = lifestyle_mystic + } + else_if = { + limit = { + has_trait_xp = { + trait = lifestyle_mystic + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_mystic + value = 50 + } + } + # Add activity log entry + scope:activity = { + add_activity_log_entry = { + key = imaginary_friend_pilgrimage_log + show_in_conclusion = yes + score = 50 + character = scope:activity.activity_host + } + } + # Add memory + create_character_memory = { type = honored_imaginary_friend_memory } + scope:new_memory = { + set_variable = { + name = location + value = root.location + } + set_variable = { + name = imaginary_friend_name + value = root.var:imaginary_friend_name + } + } + + stress_impact = { + base = major_stress_impact_loss + } + } + + after = { + scope:imaginary_friend = { silent_disappearance_effect = yes } + random_owned_story = { + type = story_cycle_imaginary_friend + end_story = yes + } + if = { + limit = { has_character_modifier = imaginary_friend_modifier } + remove_character_modifier = imaginary_friend_modifier + } + } +} + +## NEUTRAL ENDING +bp2_yearly.2040 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2040.t + desc = { + desc = bp2_yearly.2040.desc + triggered_desc = { + trigger = { exists = scope:lover } + desc = bp2_yearly.2040.desc.lover + } + triggered_desc = { + trigger = { exists = scope:friend } + desc = bp2_yearly.2040.desc.friend + } + } + theme = friend_relation + override_background = { reference = relaxing_room } + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:imaginary_friend + animation = personality_compassionate + hide_info = yes + } + + lower_center_portrait = scope:lover + lower_right_portrait = scope:friend + + trigger = { + has_bp2_dlc_trigger = yes + is_valid_for_imaginary_friend_adult_event_trigger = yes + NOT = { has_character_flag = bp2_yearly_2030 } + OR = { + any_relation = { + type = friend + NOT = { has_relation_best_friend = root } + } + AND = { + root = { num_of_relation_lover < 2 } + any_courtier_or_guest = { + trigger_if = { + limit = { + OR = { + is_married = yes + num_of_relation_lover = 1 + } + } + might_cheat_on_every_partner_trigger = yes + } + NOT = { has_relation_lover = root } + num_of_relation_lover < 2 + is_physically_able_ai_adult = yes + save_temporary_scope_as = temp_lover + matching_gender_and_sexuality_trigger = { + CHARACTER_1 = scope:temp_lover + CHARACTER_2 = root + } + } + } + } + } + + immediate = { + necromance_imaginary_friend_character_effect = yes + add_character_flag = bp2_yearly_2030 + # Find characters to manipulate + # Friend -> best friend + if = { + limit = { + any_relation = { + type = friend + NOT = { has_relation_best_friend = root } + } + } + random_relation = { + type = friend + limit = { + NOT = { has_relation_best_friend = root } + } + save_scope_as = friend + } + random_memory = { + memory_type = became_friends + limit = { + has_memory_participant = scope:friend + } + save_scope_as = target_memory + } + get_period_of_time_word_setup_effect = { + START_DATE = scope:target_memory.memory_creation_date + } + + } + # Lover + random_courtier_or_guest = { + limit = { + trigger_if = { + limit = { + OR = { + is_married = yes + num_of_relation_lover = 1 + } + } + might_cheat_on_every_partner_trigger = yes + } + NOT = { has_relation_lover = root } + num_of_relation_lover < 2 + is_physically_able_ai_adult = yes + save_temporary_scope_as = temp_lover + matching_gender_and_sexuality_trigger = { + CHARACTER_1 = scope:temp_lover + CHARACTER_2 = root + } + } + save_scope_as = lover + } + + } + + option = { + name = bp2_yearly.2040.a + trigger = { exists = scope:lover } + set_relation_lover = { + reason = lover_imaginary_friend + target = scope:lover + } + + ai_chance = { + base = 50 + } + } + + option = { + name = bp2_yearly.2040.b + trigger = { exists = scope:friend } + set_relation_best_friend = { + reason = best_friend_imaginary_friend + target = scope:friend + } + + stress_impact = { + lustful = medium_stress_impact_loss + } + + ai_chance = { + base = 50 + } + } + + after = { + clean_up_period_of_time_word_effect = yes + + scope:imaginary_friend = { silent_disappearance_effect = yes } + random_owned_story = { + type = story_cycle_imaginary_friend + end_story = yes + } + if = { + limit = { has_character_modifier = imaginary_friend_modifier } + remove_character_modifier = imaginary_friend_modifier + } + } +} + +########################################## +# Flavor Events + +scripted_trigger bp2_yearly_2000_pick_child_interlocutor_trigger = { + OR = { + any_sibling = { + is_available_ai_child = yes + age > root.age_minus_3 + age >= 4 + location = root.location + } + location = { + any_character_in_location = { + is_available_ai_child = yes + age > root.age_minus_3 + age >= 4 + OR = { + liege = root + is_courtier_of = root + is_pool_guest_of = root + } + this != root + } + } + } +} + +scripted_effect bp2_yearly_2000_pick_child_interlocutor_effect = { + if = { + limit = { + any_sibling = { + is_available_ai_child = yes + age > root.age_minus_3 + age >= 4 + location = root.location + } + } + random_sibling = { + limit = { + is_available_ai_child = yes + age > root.age_minus_3 + age >= 4 + location = root.location + } + save_scope_as = interlocutor + } + } + else = { + location = { + random_character_in_location = { + limit = { + is_available_ai_child = yes + age > root.age_minus_3 + age >= 4 + OR = { + liege = root + is_courtier_of = root + is_pool_guest_of = root + } + this != root + } + save_scope_as = interlocutor + } + } + } +} + +# Build something with your friend, get a some xp I guess +bp2_yearly.2100 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2100.t + desc = bp2_yearly.2100.desc + theme = friend_relation + override_background = { reference = garden } + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:interlocutor + animation = happiness + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + age >= 5 + age <= 15 + bp2_yearly_2000_pick_child_interlocutor_trigger = yes + OR = { + has_variable = education_diplomacy_variable + has_variable = education_martial_variable + has_variable = education_stewardship_variable + has_variable = education_intrigue_variable + has_variable = education_learning_variable + } + } + + cooldown = { years = 16 } + + immediate = { + # Pick an interlocutor + bp2_yearly_2000_pick_child_interlocutor_effect = yes + # Pick a random second option to show + if = { + limit = { has_variable = education_diplomacy_variable } + add_character_flag = option_a + } + else_if = { + limit = { has_variable = education_martial_variable } + add_character_flag = option_b + } + else_if = { + limit = { has_variable = education_stewardship_variable } + add_character_flag = option_c + } + else_if = { + limit = { has_variable = education_intrigue_variable } + add_character_flag = option_d + } + else_if = { + limit = { has_variable = education_learning_variable } + add_character_flag = option_e + } + random_list = { + 1 = { + trigger = { + NOT = { has_character_flag = option_a } + } + add_character_flag = option_a + } + 1 = { + trigger = { + NOT = { has_character_flag = option_b } + } + add_character_flag = option_b + } + 1 = { + trigger = { + NOT = { has_character_flag = option_c } + } + add_character_flag = option_c + } + 1 = { + trigger = { + NOT = { has_character_flag = option_d } + } + add_character_flag = option_d + } + 1 = { + trigger = { + NOT = { has_character_flag = option_e } + } + add_character_flag = option_e + } + } + random_list = { + 1 = { + trigger = { + NOT = { has_character_flag = option_a } + } + add_character_flag = option_a + } + 1 = { + trigger = { + NOT = { has_character_flag = option_b } + } + add_character_flag = option_b + } + 1 = { + trigger = { + NOT = { has_character_flag = option_c } + } + add_character_flag = option_c + } + 1 = { + trigger = { + NOT = { has_character_flag = option_d } + } + add_character_flag = option_d + } + 1 = { + trigger = { + NOT = { has_character_flag = option_e } + } + add_character_flag = option_e + } + } + } + + option = { # Diplomacy + name = bp2_yearly.2100.a + trigger = { has_character_flag = option_a } + if = { + limit = { has_variable = education_diplomacy_variable } + #Award more points + custom_tooltip = bp2_yearly.2100.a.tt + change_variable = { + name = education_diplomacy_variable + add = 4 + } + } + else = { + add_diplomacy_skill = 1 + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:interlocutor + OPINION = default_friend_opinion + } + } + } + + option = { # Martial + name = bp2_yearly.2100.b + #trigger = { has_character_flag = option_b } + if = { + limit = { has_variable = education_martial_variable } + #Award more points + custom_tooltip = bp2_yearly.2100.b.tt + change_variable = { + name = education_martial_variable + add = 4 + } + } + else = { + add_martial_skill = 1 + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:interlocutor + OPINION = default_friend_opinion + } + } + } + + option = { # Stewardship + name = bp2_yearly.2100.c + trigger = { has_character_flag = option_c } + if = { + limit = { has_variable = education_stewardship_variable } + #Award more points + custom_tooltip = bp2_yearly.2100.c.tt + change_variable = { + name = education_stewardship_variable + add = 4 + } + } + else = { + add_stewardship_skill = 1 + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:interlocutor + OPINION = default_friend_opinion + } + } + } + + option = { # Intrigue + name = bp2_yearly.2100.d + trigger = { has_character_flag = option_d } + if = { + limit = { has_variable = education_intrigue_variable } + #Award more points + custom_tooltip = bp2_yearly.2100.d.tt + change_variable = { + name = education_intrigue_variable + add = 4 + } + } + else = { + add_intrigue_skill = 1 + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:interlocutor + OPINION = default_friend_opinion + } + } + } + + option = { # Learning + name = bp2_yearly.2100.e + trigger = { has_character_flag = option_e } + if = { + limit = { has_variable = education_learning_variable } + #Award more points + custom_tooltip = bp2_yearly.2100.e.tt + change_variable = { + name = education_learning_variable + add = 4 + } + } + else = { + add_learning_skill = 1 + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:interlocutor + OPINION = default_friend_opinion + } + } + } + + after = { + if = { + limit = { has_character_flag = option_a } + remove_character_flag = option_a + } + if = { + limit = { has_character_flag = option_b } + remove_character_flag = option_b + } + if = { + limit = { has_character_flag = option_c } + remove_character_flag = option_c + } + if = { + limit = { has_character_flag = option_d } + remove_character_flag = option_d + } + if = { + limit = { has_character_flag = option_e } + remove_character_flag = option_e + } + } +} + +# Take a trait... or don't... it's up to you +bp2_yearly.2110 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2110.t + desc = bp2_yearly.2110.desc + theme = friend_relation + override_background = { reference = courtyard } + + left_portrait = { + character = root + animation = celebrate_sword + } + right_portrait = { + character = scope:interlocutor + animation = sword_yield_start + } + + cooldown = { years = 20 } + + trigger = { + is_ai = no + has_bp2_dlc_trigger = yes + is_available_child = yes + age >= 6 + number_of_personality_traits < 3 + NOR = { + has_trait = humble + has_trait = arrogant + } + bp2_yearly_2000_pick_child_interlocutor_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + factor = 10 + } + } + + immediate = { + bp2_yearly_2000_pick_child_interlocutor_effect = yes + } + + option = { # Humble + name = bp2_yearly.2110.a + add_trait = humble + + ai_chance = { + base = 30 + } + + stress_impact = { + pensive = minor_stress_impact_loss + rowdy = minor_stress_impact_gain + } + } + + option = { # Arrogant + name = bp2_yearly.2110.b + add_trait = arrogant + + ai_chance = { + base = 30 + } + + stress_impact = { + bossy = medium_stress_impact_loss + rowdy = minor_stress_impact_loss + pensive = minor_stress_impact_gain + } + } + + option = { # Remain Silent + name = bp2_yearly.2110.c + + ai_chance = { + base = 30 + } + } +} + +bp2_yearly.2120 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2120.t + desc = bp2_yearly.2120.desc + theme = friend_relation + override_background = { reference = bp1_kitchen_western } + + left_portrait = { + character = root + animation = toast_goblet + } + right_portrait = { + character = scope:interlocutor + animation = worry + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + is_ai = no + age >= 6 + number_of_personality_traits < 3 + NOR = { + has_trait = temperate + has_trait = gluttonous + } + bp2_yearly_2000_pick_child_interlocutor_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + factor = 10 + } + } + + immediate = { + bp2_yearly_2000_pick_child_interlocutor_effect = yes + } + + option = { # temperate + name = bp2_yearly.2120.a + add_trait = temperate + + ai_chance = { + base = 30 + } + + stress_impact = { + rowdy = minor_stress_impact_gain + pensive = minor_stress_impact_loss + } + } + + option = { # gluttonous + name = bp2_yearly.2120.b + add_trait = gluttonous + + ai_chance = { + base = 30 + } + + stress_impact = { + pensive = minor_stress_impact_gain + } + } + + option = { # No way jose + name = bp2_yearly.2110.c + + ai_chance = { + base = 30 + } + } +} + +bp2_yearly.2130 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2130.t + desc = bp2_yearly.2130.desc + theme = friend_relation + override_background = { reference = alley_day } + + left_portrait = { + character = root + animation = clutching_toy + } + right_portrait = { + character = scope:interlocutor + animation = sadness + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_ai = no + is_ruler = yes + is_available_child = yes + age >= 6 + number_of_personality_traits < 3 + NOR = { + has_trait = generous + has_trait = greedy + } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + factor = 10 + } + } + + immediate = { + set_favorite_toy_effect = yes + if = { + limit = { + any_pool_character = { + province = root.location + age >= root.age_minus_3 + is_available_ai_child = yes + } + } + random_pool_character = { + province = root.location + limit = { + age >= root.age_minus_3 + is_available_ai_child = yes + } + save_scope_as = interlocutor + } + } + else = { + create_character = { + template = child_peasant_character + dynasty = none + location = root.location + culture = root.culture + faith = root.faith + gender = root + save_scope_as = interlocutor + } + } + } + + option = { # generous + name = bp2_yearly.2130.a + flavor = bp2_yearly.2130.a.flavor + add_trait = generous + add_piety = minor_piety_gain + + ai_chance = { + base = 30 + } + + stress_impact = { + charming = minor_stress_impact_loss + rowdy = minor_stress_impact_gain + } + } + + option = { # greedy + name = bp2_yearly.2130.b + add_trait = greedy + + ai_chance = { + base = 30 + } + + stress_impact = { + bossy = minor_stress_impact_loss + } + } + + option = { # No way jose + name = bp2_yearly.2110.c + + ai_chance = { + base = 30 + } + } +} + +bp2_yearly.2140 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2140.t + desc = bp2_yearly.2140.desc + theme = friend_relation + override_background = { reference = corridor_night } + + left_portrait = { + character = root + animation = disbelief + } + right_portrait = { + character = scope:interlocutor + animation = disapproval + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + is_ai = no + age >= 6 + age < 12 + number_of_personality_traits < 3 + NOR = { + has_trait = honest + has_trait = deceitful + } + OR = { + father ?= { + is_alive = yes + is_available_ai_adult = yes + } + mother ?= { + is_alive = yes + is_available_ai_adult = yes + } + any_relation = { + type = guardian + is_alive = yes + is_available_ai_adult = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + factor = 10 + } + } + + immediate = { + set_favorite_treat_effect = yes + if = { + limit = { + father ?= { + is_alive = yes + is_available_ai_adult = yes + } + } + father = { save_scope_as = interlocutor } + } + else_if = { + limit = { + mother ?= { + is_alive = yes + is_available_ai_adult = yes + } + } + mother = { save_scope_as = interlocutor } + } + else = { + random_relation = { + type = guardian + save_scope_as = interlocutor + } + } + } + + option = { # honest + name = bp2_yearly.2140.a + add_trait = honest + + ai_chance = { + base = 30 + } + + stress_impact = { + rowdy = minor_stress_impact_gain + } + } + + option = { # deceitful + name = bp2_yearly.2140.b + add_trait = deceitful + + ai_chance = { + base = 30 + } + + stress_impact = { + charming = minor_stress_impact_loss + } + } + + option = { # No way jose + name = bp2_yearly.2110.c + + ai_chance = { + base = 30 + } + } +} + +bp2_yearly.2150 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2150.t + desc = bp2_yearly.2150.desc + theme = friend_relation + override_background = { reference = study } + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:interlocutor + animation = admiration + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + age >= 10 + NOR = { + has_trait = lifestyle_herbalist + has_trait = lifestyle_gardener + } + employs_court_position = court_physician_court_position + } + + immediate = { + random_court_position_holder = { + type = court_physician_court_position + save_scope_as = interlocutor + } + } + + option = { # herbalist + name = bp2_yearly.2150.a + add_trait = lifestyle_herbalist + + ai_chance = { + base = 30 + } + } + + option = { # gardener + name = bp2_yearly.2150.b + add_trait = lifestyle_gardener + + ai_chance = { + base = 30 + } + } + + option = { # No way jose + name = bp2_yearly.2150.c + + ai_chance = { + base = 30 + } + } +} + +bp2_yearly.2160 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.2160.t + desc = bp2_yearly.2160.desc + theme = friend_relation + override_background = { reference = courtyard } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:interlocutor + animation = severelywounded + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + is_ai = no + age >= 6 + number_of_personality_traits < 3 + NOR = { + has_trait = compassionate + has_trait = sadistic + } + bp2_yearly_2000_pick_child_interlocutor_trigger = yes + OR = { + exists = cp:councillor_marshal + employs_court_position = second_camp_officer + } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + factor = 10 + } + } + + immediate = { + bp2_yearly_2000_pick_child_interlocutor_effect = yes + hidden_effect = { + scope:interlocutor = { + increase_wounds_no_death_effect = { REASON = fight } + } + } + if = { + limit = { + employs_court_position = second_camp_officer + any_court_position_holder = { + type = second_camp_officer + is_available_ai_adult = yes + } + } + random_court_position_holder = { + type = second_camp_officer + limit = { is_available_ai_adult = yes } + save_scope_as = marshal + } + } + else = { + cp:councillor_marshal = { save_scope_as = marshal } + } + } + + option = { # Compassionate + name = bp2_yearly.2160.a + add_trait = compassionate + + ai_chance = { + base = 30 + } + } + + option = { # sadistic + name = bp2_yearly.2160.b + custom_tooltip = bp2_yearly.2160.b.flavor + add_trait = sadistic + + ai_chance = { + base = 30 + } + } + + option = { # No way jose + name = bp2_yearly.2110.c + + ai_chance = { + base = 30 + } + } +} diff --git a/events/dlc/bp2/bp2_yearly_3.txt b/events/dlc/bp2/bp2_yearly_3.txt new file mode 100644 index 00000000..c1152fe9 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_3.txt @@ -0,0 +1,538 @@ +namespace = bp2_yearly + +# bp2_yearly.3000 - Asserting yourself in your studies or loafing + +################################ +# What's a Study Day Worth? # +# by Claudia Baldassi # +# bp2_yearly.3000 # +################################ + +# Asserting yourself in your studies or loafing + +bp2_yearly.3000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.3000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = scope:educator + } + desc = bp2_yearly.3000.desc + } + desc = bp2_yearly.3000.desc_no_educator + } + desc = bp2_yearly.3000.desc_ending + } + theme = education + left_portrait = { + character = root + animation = boredom + } + right_portrait = { + trigger = { exists = scope:educator } + character = scope:educator + animation = personality_rational + } + cooldown = { years = 10 } #Should not happen more than once for the same child + + trigger = { + has_bp2_dlc_trigger = yes + age >= 8 + is_available_child = yes + has_education_focus_trigger = yes + OR = { + exists = warden + any_relation = { + type = guardian + location = root.location + } + exists = liege + AND = { + top_liege = this + employs_court_position = court_tutor_court_position + } + any_parent = { + is_alive = yes + location = root.location + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + if = { + limit = { + is_hostage = yes + location = warden.location + } + warden = { + save_scope_as = educator + } + } + else_if = { + limit = { + any_relation = { + type = guardian + location = root.location + } + } + random_relation = { + type = guardian + limit = { + location = root.location + } + save_scope_as = educator + } + } + else_if = { + limit = { + exists = liege + root.liege = { + employs_court_position = court_tutor_court_position + court_position:court_tutor_court_position = { location = root.location } + } + } + root.liege.court_position:court_tutor_court_position = { + save_scope_as = educator + } + } + else_if = { + limit = { + top_liege = this + employs_court_position = court_tutor_court_position + court_position:court_tutor_court_position = { location = root.location } + } + court_position:court_tutor_court_position = { + save_scope_as = educator + } + } + else_if = { + limit = { + any_parent = { + is_alive = yes + location = root.location + } + } + random_parent = { + limit = { + is_alive = yes + location = root.location + } + save_scope_as = educator + } + } + else_if = { + limit = { exists = liege } + liege = { + save_scope_as = educator + } + } + } + + # Option A: study hard + option = { + name = bp2_yearly.3000.a + if = { + limit = { + has_focus = education_diplomacy + } + add_diplomacy_skill = 1 + } + else_if = { + limit = { + has_focus = education_martial + } + add_martial_skill = 1 + } + else_if = { + limit = { + has_focus = education_stewardship + } + add_stewardship_skill = 1 + } + else_if = { + limit = { + has_focus = education_intrigue + } + add_intrigue_skill = 1 + } + else_if = { + limit = { + has_focus = education_learning + } + add_learning_skill = 1 + } + hidden_effect = { education_point_acquisition_effect = yes } + custom_tooltip = bp2_yearly.3000.a.tt + + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = 100 + } + modifier = { + has_trait = lazy + add = -100 + } + modifier = { + has_trait = curious + add = 100 + } + modifier = { + has_trait = pensive + add = 150 + } + } + } + + # Option B: study a bit + option = { + name = bp2_yearly.3000.b + hidden_effect = { education_point_acquisition_effect = yes } + custom_tooltip = bp2_yearly.3000.a.tt + stress_impact = { + base = minor_stress_impact_gain + diligent = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = 50 + } + modifier = { + has_trait = lazy + add = -50 + } + modifier = { + has_trait = curious + add = 50 + } + modifier = { + has_trait = pensive + add = 75 + } + } + } + + # Option C: play + option = { + name = bp2_yearly.3000.c + add_prowess_skill = 1 + stress_impact = { + base = minor_stress_impact_loss + diligent = major_stress_impact_gain + pensive = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = -100 + } + modifier = { + has_trait = lazy + add = 100 + } + modifier = { + has_trait = pensive + add = -75 + } + modifier = { + has_trait = rowdy + add = 100 + } + } + } +} + +################################ +# SheHe Knows This Room # +# by Claudia Baldassi # +# bp2_yearly.3010 # +################################ + +# Child returns home: This home is unfamiliar to me: parent POV + +bp2_yearly.3010 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.3010.t + desc = bp2_yearly.3010.desc + theme = hostage + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:child + animation = sadness + } + + override_background = { reference = corridor_day } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + is_landless_adventurer = no + any_child = { + age >= 12 + location = root.location + NOT = { has_relation_ward = root } # Your ward grew up here + any_memory = { + memory_type = hostage_returned_hostage + memory_age_years <= 1 + } + any_memory = { + memory_type = hostage_created_hostage + memory_age_years >= 6 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + has_trait = compassionate + } + } + + immediate = { + # for the responding event + save_scope_as = parent + random_child = { + limit = { + any_memory = { + memory_type = hostage_returned_hostage + memory_age_years <= 1 + } + any_memory = { + memory_type = hostage_created_hostage + memory_age_years >= 6 + } + age >= 12 + location = root.location + } + save_scope_as = child + } + } + + # Option A: I wanna help + option = { + name = bp2_yearly.3010.a + scope:child = { + add_character_flag = helpful_parent_flag + add_opinion = { + target = scope:parent + modifier = feel_accepted_opinion + opinion = 20 + } + trigger_event = bp2_yearly.3011 + } + stress_impact = { + callous = medium_stress_impact_gain + fickle = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + content = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + # Option B: he'll manage + option = { + name = bp2_yearly.3010.b + scope:child = { + add_opinion = { + target = root + modifier = ignored_opinion + opinion = -15 + } + scope:child = { trigger_event = bp2_yearly.3011 } + } + stress_impact = { + compassionate = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + family_first = medium_stress_impact_gain + patient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + add = 50 + } + } + } +} + +# Child returns home: This home is unfamiliar to me: child POV + +bp2_yearly.3011 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.3011.t + desc = { + desc = bp2_yearly.3011.desc + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = helpful_parent_flag + } + desc = bp2_yearly.3011.desc_parent + } + desc = bp2_yearly.3011.desc_no_parent + } + } + theme = hostage + left_portrait = { + character = root + animation = sadness + } + right_portrait = { + character = scope:parent + animation = worry + } + + override_background = { reference = corridor_day } + + # Option A: accept you're a stranger now + option = { + name = bp2_yearly.3011.a + if = { + limit = { + has_character_flag = helpful_parent_flag + } + scope:parent = { + send_interface_toast = { + title = bp2_yearly.3010.a.tt + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = bp2_stranger_at_home_modifier + years = 30 + } + } + } + } + } + else = { + add_character_modifier = { + modifier = bp2_stranger_at_home_modifier + years = 30 + } + } + stress_impact = { + gregarious = medium_stress_impact_gain + humble = medium_stress_impact_gain + patient = minor_stress_impact_gain + pensive = medium_stress_impact_loss + bossy = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + } + modifier = { + has_trait = pensive + add = 100 + } + modifier = { + has_trait = bossy + add = 100 + } + } + } + + # Option B: try to integrate again + option = { + name = bp2_yearly.3011.b + if = { + limit = { + has_character_flag = helpful_parent_flag + } + scope:parent = { + send_interface_toast = { + title = bp2_yearly.3010.b.tt + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = bp2_stranger_no_more_modifier + years = 30 + } + } + } + } + } + else = { + add_character_modifier = { + modifier = bp2_stranger_no_more_modifier + years = 30 + } + } + stress_impact = { + stubborn = major_stress_impact_gain + lazy = medium_stress_impact_gain + reclusive = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + wrathful = minor_stress_impact_gain + impatient = minor_stress_impact_gain + charming = medium_stress_impact_loss + curious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_character_flag = helpful_parent_flag + add = 100 + } + modifier = { + has_trait = lazy + add = -50 + } + modifier = { + has_trait = reclusive + add = -50 + } + modifier = { + has_trait = charming + add = 100 + } + modifier = { + has_trait = curious + add = 100 + } + ai_value_modifier = { + ai_energy = -0.5 + } + } + } + + after = { + if = { + limit = { + has_character_flag = helpful_parent_flag + } + remove_character_flag = helpful_parent_flag + } + } +} diff --git a/events/dlc/bp2/bp2_yearly_4.txt b/events/dlc/bp2/bp2_yearly_4.txt new file mode 100644 index 00000000..466d0872 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_4.txt @@ -0,0 +1,2069 @@ +namespace = bp2_yearly + +bp2_yearly.4000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.4000.t + desc = bp2_yearly.4000.desc + + theme = pregnancy + + override_background = { reference = bedchamber } + + left_portrait = { + character = root + animation = newborn + } + + lower_center_portrait = { + character = scope:char_father + } + + lower_right_portrait = { + character = scope:char_mother + } + + trigger = { + has_bp2_dlc_trigger = yes + is_playable_character = yes + is_available_adult = yes + is_physically_able_adult = yes + any_memory = { + memory_type = first_born + } + any_memory = { + count = 2 + memory_type = relative_died + any_memory_participant = { + is_parent_of = root + } + has_variable = childhood_memory + } + any_child = { + count = 1 + } + } + + immediate = { + random_child = { + save_scope_as = first_babby + } + father = { + save_scope_as = char_father + } + mother = { + save_scope_as = char_mother + } + } + + weight_multiplier = { + base = 1 + } + + option = { # I promise, I will not abandon you, my child + name = bp2_yearly.4000.a + trigger = { + NOR = { + has_trait = callous + has_trait = sadistic + has_trait = cynical + } + } + flavor = bp2_yearly.4000.a.flavor + add_character_modifier = { + modifier = parental_conviction + years = 10 + } + stress_impact = { + base = medium_stress_gain + } + + ai_chance = { + base = 0 + ai_value_modifier = { + ai_honor = tiny_chance_impact_positive_ai_value + ai_compassion = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #the world is harsh and cruel, how sad + name = bp2_yearly.4000.b + trigger = { + NOT = { + has_trait = compassionate + } + } + flavor = bp2_yearly.4000.b.flavor + stress_impact = { + base = medium_stress_loss + cynical = minor_stress_loss + callous = minor_stress_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = tiny_chance_impact_negative_ai_value + ai_compassion = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #religious option + name = bp2_yearly.4000.c + + add_piety = medium_piety_gain + stress_impact = { + zealous = medium_stress_loss + patient = minor_stress_loss + cynical = medium_stress_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + } +} + +bp2_yearly.4001 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.4001.t + desc = bp2_yearly.4001.desc + + theme = prison + + override_background = { reference = dungeon } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:imprisoned_murderer + animation = prisondungeon + override_imprisonment_visuals = yes + triggered_outfit = { + remove_default_outfit = no + outfit_tags = { beggar_rags } + } + } + + lower_center_portrait = { + character = scope:murdered_relative + } + + trigger = { + has_bp2_dlc_trigger = yes + any_memory = { + memory_type = relative_died + any_memory_participant = { + exists = this.killer + killer = { + is_imprisoned_by = root + } + } + has_variable = childhood_memory + } + } + + immediate = { + random_memory = { + memory_type = relative_died + limit = { + has_variable = childhood_memory + any_memory_participant = { + killer = { + is_imprisoned_by = root + } + } + } + random_memory_participant = { + save_scope_as = murdered_relative + } + } + + scope:murdered_relative.killer = { + save_scope_as = imprisoned_murderer + } + } + + option = { #haha, kill the prisoner, gain vengeful, gain piety if vengeful is a virtue + name = bp2_yearly.4001.a + execute_prisoner_effect = { + VICTIM = scope:imprisoned_murderer + EXECUTIONER = root + } + if = { + limit = { + NOR = { + has_trait = vengeful + number_of_personality_traits > 3 + } + } + random_list = { + 25 = { + add_trait = vengeful + } + 75 = { + + } + } + } + else_if = { + limit = { + has_trait = vengeful + } + add_character_modifier = { + modifier = delayed_justive_stress + years = 10 + } + } + + if = { + limit = { + root.faith = { + trait_is_virtue = vengeful + } + } + add_character_modifier = { + modifier = delayed_justice_piety + years = 10 + } + } + + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = medium_chance_impact_positive_ai_value + ai_compassion = medium_chance_impact_negative_ai_value + } + } + } + + option = { #show mercy, add compassionate, release the prisoner, gain piety if compassionate is a virtue + name = bp2_yearly.4001.b + + scope:imprisoned_murderer = { release_from_prison = yes } + + if = { + limit = { + NOR = { + has_trait = forgiving + number_of_personality_traits > 3 + } + } + random_list = { + 25 = { + add_trait = forgiving + } + 75 = { + + } + } + } + else_if = { + limit = { + has_trait = forgiving + } + add_character_modifier = { + modifier = delayed_justive_stress + years = 10 + } + } + + if = { + limit = { + root.faith = { + trait_is_virtue = forgiving + } + } + add_character_modifier = { + modifier = delayed_justice_piety + years = 10 + } + } + + + ai_chance = { + base = 0 + ai_value_modifier = { + ai_vengefulness = medium_chance_impact_negative_ai_value + ai_compassion = tiny_chance_impact_positive_ai_value + } + } + + } +} + +bp2_yearly.4002 = { #drunkard + type = character_event + content_source = dlc_009 + title = bp2_yearly.4002.t + desc = bp2_yearly.4002.desc + + theme = healthcare + + override_background = { reference = bp1_wine_cellar } + + left_portrait = { + character = root + animation = drink + } + + lower_center_portrait = { + character = scope:first_aa_relative + } + + lower_right_portrait = { + character = scope:second_aa_relative + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + has_trait = drunkard + any_memory = { + count >= 2 + memory_type = relative_died + has_variable = childhood_memory + any_memory_participant = { + death_reason = death_drinking_passive + } + } + } + + immediate = { + random_memory = { + memory_type = relative_died + limit = { + has_variable = childhood_memory + any_memory_participant = { + death_reason = death_drinking_passive + } + } + random_memory_participant = { + save_scope_as = first_aa_relative + } + } + random_memory = { + memory_type = relative_died + limit = { + has_variable = childhood_memory + any_memory_participant = { + death_reason = death_drinking_passive + this != scope:first_aa_relative + + } + } + random_memory_participant = { + save_scope_as = second_aa_relative + } + } + } + + weight_multiplier = { + base = 1 + } + + option = { #aaah, alcoholism bad + name = bp2_yearly.4002.a + + remove_trait = drunkard + add_character_modifier = { + modifier = drinking_stop + years = 5 + } + stress_impact = { + base = major_stress_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_rationality = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #drink more + name = bp2_yearly.4002.b + + stress_impact = { + base = medium_stress_loss + } + add_character_modifier = { + modifier = drinking_binge + years = 5 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_rationality = tiny_chance_impact_negative_ai_value + } + } + } +} + +bp2_yearly.4003 = { #became a ruler at young age + type = character_event + content_source = dlc_009 + title = bp2_yearly.4003.t + desc = bp2_yearly.4003.desc + + theme = realm + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:child_ruler + animation = worry + } + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + highest_held_title_tier >= tier_duchy + any_held_title = { + count > 1 + title_tier = county + is_landless_type_title = no + } + + any_memory = { + memory_type = ascended_throne_memory + has_variable = childhood_memory + save_temporary_scope_as = throne_memory_temp + root = { + any_child = { + age >= 10 + age = { + value = root.age + subtract = scope:throne_memory_temp.memory_age_years + } + root = { + has_relation_ward = prev + } + is_landed = no + save_temporary_scope_as = child_ruler_temp + } + } + memory_age_years = { + value = root.age + subtract = scope:child_ruler_temp.age + } + } + } + + immediate = { + random_held_title = { + title_tier = county + limit = { + this != root.capital_county + is_landless_type_title = no + } + save_scope_as = giveaway_county + } + random_memory = { + memory_type = ascended_throne_memory + limit = { + has_variable = childhood_memory + save_temporary_scope_as = throne_memory_temp + root = { + any_child = { + age = { + value = root.age + subtract = scope:throne_memory_temp.memory_age_years + } + root = { + has_relation_ward = prev + } + is_landed = no + save_temporary_scope_as = child_ruler_temp + } + } + memory_age_years = { + value = root.age + subtract = scope:child_ruler_temp.age + } + } + save_scope_as = throne_memory + } + random_child = { + limit = { + age >= 10 + age = { + value = root.age + subtract = scope:throne_memory.memory_age_years + } + root = { + has_relation_ward = prev + } + is_landed = no + } + save_scope_as = child_ruler + } + } + + weight_multiplier = { + base = 1 + } + + option = { #nah, child will learn more by my side + name = bp2_yearly.4003.b + scope:child_ruler = { + add_opinion = { + modifier = thankful_opinion + opinion = 20 + target = root + } + stress_impact = { + base = medium_stress_loss + } + } + random_list = { + 5 = { + send_interface_toast = { + title = bp2_yearly.4003.t + left_icon = scope:child_ruler + scope:child_ruler = { + add_stewardship_skill = 2 + } + } + } + 5 = { + send_interface_toast = { + title = bp2_yearly.4003.t + left_icon = scope:child_ruler + scope:child_ruler = { + add_stewardship_skill = 1 + } + } + } + } + stress_impact = { + compassionate = minor_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #yes, give away + name = bp2_yearly.4003.a + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change + add_claim_on_loss = no + } + scope:giveaway_county = { + change_title_holder = { + holder = scope:child_ruler + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + scope:child_ruler = { + add_opinion = { + modifier = abandoned_opinion + opinion = -20 + target = root + } + stress_impact = { + base = minor_stress_gain + } + } + send_interface_toast = { + title = bp2_yearly.4003.t + left_icon = scope:child_ruler + scope:child_ruler = { + add_stewardship_skill = 4 + } + } + stress_impact = { + compassionate = minor_stress_gain + callous = minor_stress_loss + } + + ai_chance = { + base = 0 + } + } + + option = { #can't afford to lose my county! + name = bp2_yearly.4003.c + + add_character_modifier = { + modifier = focused_on_realm + years = 4 + } + + ai_chance = { + base = 200 + ai_value_modifier = { + ai_greed = tiny_chance_impact_positive_ai_value + ai_rationality = tiny_chance_impact_positive_ai_value + } + } + } +} + +bp2_yearly.4010 = { #child parent is at least Illustrious + type = character_event + content_source = dlc_009 + title = bp2_yearly.4010.t + desc = bp2_yearly.4010.desc + + theme = crown + + left_portrait = { + character = root + animation = admiration + } + + right_portrait = { + character = scope:famous_parent + animation = personality_honorable + } + + cooldown = { + years = 50 + } + + #Fired from on_death for parent, which also saves: + #scope:famous_parent + #var:parent_fame_lvl + + trigger = { + NOR = { #double safeguard that only one event chain can happen + has_character_flag = bp2_prestige_piety_chain + government_has_flag = government_is_mandala + } + } + + immediate = { + add_character_flag = bp2_prestige_piety_chain + } + + option = { #humble switch to arrogant + trigger = { + has_trait = humble + } + name = bp2_yearly.4010.a + remove_trait = humble + add_trait = arrogant + + stress_impact = { + base = major_stress_gain + } + + add_character_modifier = { + modifier = famed_parent_lvl_1 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4011 + years = { 2 4 } + } + } + + ai_chance = { #don't want too many AI, stressed, arrogant chars, do we + base = 0 + } + } + + option = { #yeah, you go papa! I will be like you one day! + trigger = { + NOR = { + has_trait = content + has_trait = humble + } + } + name = bp2_yearly.4010.b + + add_character_modifier = { + modifier = famed_parent_lvl_1 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + } + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4011 + years = { 2 4 } + } + } + + } + + option = { #it's fine I guess + trigger = { + NOR = { + has_trait = ambitious + has_trait = arrogant + } + } + name = bp2_yearly.4010.c + add_character_modifier = { + modifier = famed_parent_opt_out_base + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + } + } +} + +bp2_yearly.4011 = { #the parent has been dead for a while + type = character_event + content_source = dlc_009 + title = bp2_yearly.4011.t + desc = bp2_yearly.4011.desc + + theme = crown + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + animation = personality_bold + } + triggered_animation = { + trigger = { + always = yes + } + animation = grief + } + } + + lower_right_portrait = { + character = scope:famous_dead_parent + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_memory = { + memory_type = famed_parent_became_very_famous + any_memory_participant = { + is_alive = no + } + } + has_variable = parent_fame_lvl + has_character_modifier = famed_parent_lvl_1 + } + + immediate = { + random_memory = { + memory_type = famed_parent_became_very_famous + random_memory_participant = { + save_scope_as = famous_dead_parent + } + } + remove_character_modifier = famed_parent_lvl_1 + + } + + on_trigger_fail = { + #If the trigger fails because we were not an available adult we queue the event again. + if = { + limit = { + is_available_adult = yes + } + trigger_event = { + id = bp2_yearly.4011 + days = 180 + } + } + } + + option = { #how sad, time to get out from the shadow + trigger = { + var:parent_fame_lvl > prestige_level + } + name = bp2_yearly.4011.a + add_character_modifier = { + modifier = famed_parent_lvl_2 + } + hidden_effect = { + trigger_event = { + id = bp2_yearly.4012 + years = { 2 3 } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + } + + } + } + + option = { #actually, I am content. opt out from chain + trigger = { + var:parent_fame_lvl > prestige_level + NOR = { + has_trait = arrogant + has_trait = ambitious + } + } + name = bp2_yearly.4011.b + add_character_modifier = { + modifier = famed_parent_opt_out_base + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + } + } + + option = { # I am as good as parent and I am content. opt out from the chain + trigger = { + var:parent_fame_lvl <= prestige_level + NOR = { + has_trait = ambitious + has_trait = arrogant + } + } + name = bp2_yearly.4011.c + add_character_modifier = { + modifier = famed_parent_opt_out_base + years = 10 + } + stress_impact = { + base = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + } + } + + option = { # I am as good as parent but I can be better! + trigger = { + var:parent_fame_lvl <= prestige_level + } + name = bp2_yearly.4011.d + stress_impact = { + base = minor_stress_gain + ambitious = minor_stress_loss + arrogant = minor_stress_loss + } + add_character_modifier = { + modifier = famed_parent_lvl_2 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4012 + years = { 1 2 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + } + } + + } + +} + +bp2_yearly.4012 = { #prestige vibe check + type = character_event + content_source = dlc_009 + title = bp2_yearly.4012.t + desc = bp2_yearly.4012.desc + + theme = crown + + left_portrait = { + character = root + animation = personality_bold + } + + lower_right_portrait = { + character = scope:dead_famous_parent + } + + immediate = { + remove_character_modifier = famed_parent_lvl_2 + } + + option = { #there is still much to do + trigger = { + var:parent_fame_lvl > prestige_level + } + name = bp2_yearly.4012.a + + stress_impact = { + base = minor_stress_gain + ambitious = minor_stress_gain + arrogant = minor_stress_gain + } + + add_character_modifier = { + modifier = famed_parent_lvl_3 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4013 + years = { 2 3 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #ah, why bother + trigger = { + var:parent_fame_lvl > prestige_level + NOR = { + has_trait = ambitious + has_trait = arrogant + } + } + name = bp2_yearly.4012.b + add_character_modifier = { + modifier = famed_parent_opt_out_base + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #I am as good as parent and I am content. opt out from the chain. Ambitious can opt out + trigger = { + var:parent_fame_lvl <= prestige_level + } + name = bp2_yearly.4012.c + + stress_impact = { + base = minor_stress_loss + ambitious = medium_stress_gain + arrogant = medium_stress_gain + } + + add_character_modifier = { + modifier = famed_parent_opt_out_base + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #moaaar prestige + trigger = { + var:parent_fame_lvl <= prestige_level + } + name = bp2_yearly.4012.d + + stress_impact = { + base = minor_stress_gain + ambitious = minor_stress_loss + arrogant = minor_stress_loss + } + + add_character_modifier = { + modifier = famed_parent_lvl_3 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4013 + years = { 1 2 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + } + } + } + +} + +bp2_yearly.4013 = { #conclusion + type = character_event + content_source = dlc_009 + title = bp2_yearly.4013.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + var:parent_fame_lvl > prestige_level + } + desc = bp2_yearly.4013.desc_failure + } + triggered_desc = { + trigger = { + var:parent_fame_lvl <= prestige_level + } + desc = bp2_yearly.4013.desc_success + } + } + } + + theme = crown + + left_portrait = { + character = root + triggered_animation = { + trigger = { + var:parent_fame_lvl <= prestige_level + } + animation = ecstasy + } + triggered_animation = { + trigger = { + var:parent_fame_lvl > prestige_level + } + animation = shame + } + } + + lower_right_portrait = { + character = scope:dead_famous_parent + } + + immediate = { + remove_character_modifier = famed_parent_lvl_3 + } + + option = { #you are kinda failure, even after trying so hard, you get stress + trigger = { + var:parent_fame_lvl > prestige_level + } + name = bp2_yearly.4013.a + stress_impact = { + base = medium_stress_gain + ambitious = medium_stress_gain + arrogant = medium_stress_gain + } + ai_chance = { + base = 100 #if this option shows, it is the only one + } + } + + option = { #you have succeeded, now chill + name = bp2_yearly.4013.b + trigger = { + var:parent_fame_lvl <= prestige_level + } + + stress_impact = { + base = medium_stress_loss + ambitious = major_stress_gain + arrogant = major_stress_gain + } + + add_character_modifier = { + modifier = famed_parent_opt_out_advanced + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + } + modifier = { + factor = 0 + has_trait = ambitious + } + modifier = { + factor = 0 + has_trait = arrogant + } + } + + } + + option = { #you have succeeded, MOAR PRESTIGE + name = bp2_yearly.4013.c + trigger = { + var:parent_fame_lvl <= prestige_level + } + + stress_impact = { + base = medium_stress_gain + ambitious = medium_stress_loss + arrogant = medium_stress_loss + } + + add_character_modifier = { + modifier = famed_parent_conclusion + } + + ai_chance = { + base = 0 + modifier = { + add = 100 + has_trait = ambitious + } + modifier = { + add = 100 + has_trait = arrogant + } + } + + } +} + +bp2_yearly.4020 = { #child parent is at least Devoted Icon + type = character_event + content_source = dlc_009 + title = bp2_yearly.4020.t + desc = bp2_yearly.4020.desc + + theme = faith + + left_portrait = { + character = root + animation = admiration + } + + right_portrait = { + character = scope:pious_parent + animation = personality_zealous + } + + #Fired from on_death which also provides: + #scope:pious_parent + #parent_piety_lvl + + trigger = { + NOR = { #double safeguard that only one event chain can happen + has_character_flag = bp2_prestige_piety_chain + government_has_flag = government_is_mandala + } + } + + immediate = { + add_character_flag = bp2_prestige_piety_chain + } + + option = { #yeah, you go papa! I will be like you one day! + trigger = { + NOR = { + has_trait = content + has_trait = cynical + } + } + name = bp2_yearly.4020.b + + add_character_modifier = { + modifier = pious_parent_lvl_1 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + hidden_effect = { + trigger_event = { + id = bp2_yearly.4021 + years = { 2 4 } + } + } + } + + option = { #it's fine I guess + trigger = { + NOR = { + has_trait = ambitious + has_trait = zealous + } + } + name = bp2_yearly.4020.c + add_character_modifier = { + modifier = pious_parent_opt_out_base + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + } +} + +bp2_yearly.4021 = { #the parent has been dead for a while + type = character_event + content_source = dlc_009 + title = bp2_yearly.4021.t + desc = bp2_yearly.4021.desc + + theme = faith + + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = ambitious + has_trait = zealous + } + } + animation = personality_zealous + } + triggered_animation = { + trigger = { + always = yes + } + animation = grief + } + } + + lower_right_portrait = { + character = scope:pious_dead_parent + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + has_variable = parent_piety_lvl + has_character_modifier = pious_parent_lvl_1 + } + + on_trigger_fail = { + #If it failed because we were not available we queue the event again. + if = { + limit = { + is_available_adult = no + } + trigger_event = { + id = bp2_yearly.4021 + days = 180 + } + } + } + + immediate = { + random_memory = { + memory_type = pious_parent_became_very_pious + random_memory_participant = { + save_scope_as = pious_dead_parent + } + } + remove_character_modifier = pious_parent_lvl_1 + + } + + option = { #how sad, time to get out from the shadow + trigger = { + var:parent_piety_lvl > piety_level + } + name = bp2_yearly.4021.a + add_character_modifier = { + modifier = pious_parent_lvl_2 + } + hidden_effect = { + trigger_event = { + id = bp2_yearly.4022 + years = { 2 3 } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + + } + } + + option = { #actually, I am content. opt out from chain + trigger = { + var:parent_piety_lvl > piety_level + NOR = { + has_trait = ambitious + has_trait = zealous + } + } + name = bp2_yearly.4021.b + add_character_modifier = { + modifier = pious_parent_opt_out_base + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_zeal = tiny_chance_impact_negative_ai_value + } + } + } + + option = { # I am as good as parent and I am content. opt out from the chain + trigger = { + var:parent_piety_lvl <= piety_level + NOR = { + has_trait = ambitious + has_trait = zealous + } + } + name = bp2_yearly.4021.c + + stress_impact = { + base = medium_stress_loss + } + + add_character_modifier = { + modifier = pious_parent_opt_out_base + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_zeal = tiny_chance_impact_negative_ai_value + } + } + } + + option = { # I am as good as parent but I can be better! + trigger = { + var:parent_piety_lvl <= piety_level + } + name = bp2_yearly.4021.d + stress_impact = { + base = minor_stress_gain + ambitious = medium_stress_loss + zealous = medium_stress_loss + } + add_character_modifier = { + modifier = pious_parent_lvl_2 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4022 + years = { 1 2 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + + } + +} + +bp2_yearly.4022 = { #piety vibe check + type = character_event + content_source = dlc_009 + title = bp2_yearly.4022.t + desc = bp2_yearly.4022.desc + + theme = faith + + left_portrait = { + character = root + animation = personality_zealous + } + + lower_right_portrait = { + character = scope:pious_dead_parent + } + + immediate = { + remove_character_modifier = pious_parent_lvl_2 + } + + option = { #there is still much to do + trigger = { + var:parent_piety_lvl > piety_level + } + name = bp2_yearly.4022.a + + stress_impact = { + base = minor_stress_gain + ambitious = minor_stress_gain + zealous = minor_stress_gain + } + + add_character_modifier = { + modifier = pious_parent_lvl_3 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4023 + years = { 2 3 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #ah, why bother + trigger = { + var:parent_piety_lvl > piety_level + NOR = { + has_trait = ambitious + has_trait = zealous + } + } + name = bp2_yearly.4022.b + add_character_modifier = { + modifier = pious_parent_opt_out_base + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_zeal = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #I am as good as parent and I am content. opt out from the chain. Ambitious can opt out + trigger = { + var:parent_piety_lvl <= piety_level + } + name = bp2_yearly.4022.c + + stress_impact = { + base = minor_stress_loss + ambitious = major_stress_gain + zealous = major_stress_gain + } + + add_character_modifier = { + modifier = pious_parent_opt_out_base + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_Zeal = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #moaaar piety + trigger = { + var:parent_piety_lvl <= piety_level + } + name = bp2_yearly.4022.d + + stress_impact = { + base = minor_stress_gain + ambitious = minor_stress_loss + zealous = minor_stress_loss + } + + add_character_modifier = { + modifier = pious_parent_lvl_3 + } + + hidden_effect = { + trigger_event = { + id = bp2_yearly.4023 + years = { 1 2 } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_boldness = tiny_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + } + } + +} + +bp2_yearly.4023 = { #conclusion + type = character_event + content_source = dlc_009 + title = bp2_yearly.4023.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + var:parent_piety_lvl > piety_level + } + desc = bp2_yearly.4023.desc_failure + } + triggered_desc = { + trigger = { + var:parent_piety_lvl <= piety_level + } + desc = bp2_yearly.4023.desc_success + } + } + } + + theme = crown + + left_portrait = { + character = root + triggered_animation = { + trigger = { + var:parent_piety_lvl <= piety_level + } + animation = ecstasy + } + triggered_animation = { + trigger = { + var:parent_piety_lvl > piety_level + } + animation = shame + } + } + + lower_right_portrait = { + character = scope:dead_pious_parent + } + + immediate = { + remove_character_modifier = pious_parent_lvl_3 + } + + option = { #you are kinda failure, even after trying so hard, you get stress + trigger = { + var:parent_piety_lvl > piety_level + } + name = bp2_yearly.4023.a + stress_impact = { + base = medium_stress_gain + ambitious = minor_stress_gain + zealous = minor_stress_gain + } + ai_chance = { + base = 100 #if this option shows, it is the only one + } + } + + option = { #you have succeeded, now chill + name = bp2_yearly.4023.b + trigger = { + var:parent_piety_lvl <= piety_level + } + + stress_impact = { + base = medium_stress_loss + ambitious = medium_stress_gain + zealous = medium_stress_gain + } + + add_character_modifier = { + modifier = pious_parent_opt_out_advanced + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_boldness = tiny_chance_impact_negative_ai_value + ai_zeal = tiny_chance_impact_negative_ai_value + } + modifier = { + factor = 0 + has_trait = ambitious + } + modifier = { + factor = 0 + has_trait = zealous + } + } + + } + + option = { #you have succeeded, MOAR PIETY + name = bp2_yearly.4023.c + trigger = { + var:parent_piety_lvl <= piety_level + } + + stress_impact = { + base = medium_stress_gain + ambitious = medium_stress_loss + zealous = medium_stress_loss + } + + add_character_modifier = { + modifier = pious_parent_conclusion + } + + ai_chance = { + base = 0 + modifier = { + add = 100 + has_trait = ambitious + } + modifier = { + add = 100 + has_trait = zealous + } + } + + } +} + +bp2_yearly.4030 = { #While commanding army in winter province, you are struck with first sunlight memory from childhood + type = character_event + content_source = dlc_009 + title = bp2_yearly.4030.t + desc = bp2_yearly.4030.desc + content_source = dlc_009 + theme = war + + override_background = { reference = ep2_hunt_snowy_forest } + widget = { + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + left_portrait = { + character = root + animation = personality_honorable + } + + right_portrait = { + character = scope:frosty_knight + animation = anger + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + exists = scope:army + is_playable_character = yes #Not for mercenaries + is_in_army = yes + commanding_army ?= scope:army + location ?= { + has_province_modifier = winter_harsh_modifier + trigger_if = { + limit = { exists = county } + county.holder.top_liege != root.top_liege + } + } + any_knight = { + is_in_army = yes + location = root.location + } + } + + immediate = { + location = { + save_scope_as = winter_location + } + random_knight = { + limit = { + is_in_army = yes + location = root.location + } + save_scope_as = frosty_knight + } + } + + option = { #warm yourself with memories + name = bp2_yearly.4030.a + add_character_modifier = { + modifier = memory_of_sunlight_personal + years = 4 + } + + stress_impact = { + base = minor_stress_loss + shy = medium_stress_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = tiny_chance_impact_negative_ai_value + } + } + } + + option = { #speech, speech, speech! + name = bp2_yearly.4030.b + flavor = bp2_yearly.4030.b.flavor + add_character_modifier = { + modifier = memory_of_sunlight_shared + years = 4 + } + + stress_impact = { + shy = minor_stress_gain + brave = minor_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #winter soldier + trigger = { + has_trait = winter_soldier + } + name = bp2_yearly.4030.c + send_interface_toast = { + title = bp2_yearly.4030.c.tt + left_icon = root + random_list = { + 1 = { + add_martial_skill = 1 + } + 1 = { + add_prowess_skill = 2 + } + 1 = { + add_martial_lifestyle_xp = medium_lifestyle_xp + } + } + } + ai_chance = { + base = 400 + } + } +} + +bp2_yearly.4031 = { #you where imprisoned as a child, and guess what? You are imprisoned as an adult. Congratulations! + type = character_event + content_source = dlc_009 + title = bp2_yearly.4031.t + content_source = dlc_009 + desc = { + desc = bp2_yearly.4031.desc_first + first_valid = { + triggered_desc = { + trigger = { + scope:new_imp != scope:old_imp + } + desc = bp2_yearly.4031.desc_base + } + triggered_desc = { + trigger = { + scope:new_imp = scope:old_imp + } + desc = bp2_yearly.4031.desc_same_captor + } + } + desc = bp2_yearly.4031.desc_last + } + + theme = prison + + override_background = { + trigger = { + OR = { + scope:bg_override_char = { has_government = landless_adventurer_government } + is_in_prison_type = dungeon + } + } + reference = dungeon + } + override_background = { + trigger = { + NOR = { + scope:bg_override_char = { has_government = landless_adventurer_government } + is_in_prison_type = dungeon + } + } + reference = relaxing_room + } + + left_portrait = { + character = root + triggered_animation = { + trigger = { is_in_prison_type = house_arrest } + animation = prisonhouse + } + triggered_animation = { + trigger = { is_in_prison_type = dungeon } + animation = prisondungeon + } + override_imprisonment_visuals = yes + } + lower_left_portrait = scope:old_imp + lower_right_portrait = { + character = scope:imprisoner + trigger = { + scope:imprisoner != scope:old_imp + } + } + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + is_imprisoned = yes + any_memory = { + memory_type = imprisoned + has_variable = childhood_memory + } + } + + immediate = { + imprisoner = { + save_scope_as = new_imp + save_scope_as = bg_override_char + } + random_memory = { + memory_type = imprisoned + limit = { + has_variable = childhood_memory + } + random_memory_participant = { + save_scope_as = old_imp + } + } + } + + option = { #use that memory to escape + name = bp2_yearly.4031.a + flavor = bp2_yearly.4031.a.flavor + + add_character_modifier = { + modifier = childhood_prison_escape + years = 10 + } + + custom_tooltip = bp2_yearly.4031.a.ct + + stress_impact = { + brave = minor_stress_loss + stubborn = minor_stress_loss + impatient = minor_stress_loss + arrogant = minor_stress_loss + patient = minor_stress_gain + craven = minor_stress_gain + paranoid = minor_stress_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #use that memory to endure + name = bp2_yearly.4031.b + flavor = bp2_yearly.4031.b.flavor + add_character_modifier = { + modifier = childhood_prison_endure + years = 10 + } + + stress_impact = { + patient = minor_stress_loss + craven = minor_stress_loss + trusting = minor_stress_loss + humble = minor_stress_loss + impatient = minor_stress_gain + brave = minor_stress_gain + stubborn = minor_stress_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + } + } + + } +} + +bp2_yearly.4032 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.4032.t + desc = bp2_yearly.4032.desc + content_source = dlc_009 + theme = hostage + + + left_portrait = { + character = root + animation = grief + } + + right_portrait = { + character = scope:hostage_kiddo + animation = jockey_idle + camera = camera_event_horse_right + } + + #Fired from on_hostage_taken which also saves: + #scope:hostage_kiddo + #scope:childhood_hostage_memory + + immediate = { + add_character_flag = bp2_hostage_blues + var:hostage_mem = { + memory_participant:home_court = { + save_scope_as = tru_papa + } + memory_participant:warden = { + save_scope_as = new_papa + } + } + var:hostage_kid = { + save_scope_as = hostage_kiddo + } + } + + option = { #Dynasty Motto child! + name = bp2_yearly.4032.a + + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + + scope:hostage_kiddo = { + add_opinion = { + target = root + modifier = abandoned_opinion + opinion = -20 + } + } + + stress_impact = { + compassionate = medium_stress_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_negative_ai_value + ai_rationality = tiny_chance_impact_positive_ai_value + } + } + + } + + option = { #You will return, as I did + name = bp2_yearly.4032.b + scope:hostage_kiddo = { + add_character_modifier = { + modifier = generational_hostage + years = 8 + } + } + stress_impact = { + compassionate = medium_stress_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + ai_rationality = tiny_chance_impact_positive_ai_value + } + } + } + + after = { + remove_variable = hostage_mem + remove_variable = hostage_kid + } + +} diff --git a/events/dlc/bp2/bp2_yearly_5.txt b/events/dlc/bp2/bp2_yearly_5.txt new file mode 100644 index 00000000..aa236f16 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_5.txt @@ -0,0 +1,4143 @@ +namespace = bp2_yearly + +################################################################ +# |\__/,| (`\ # +# _.|o o |_ ) ) # +#-----------------------(((---(((------------------------------# +# Special Chains: Playdate 5000-11 and destiny_child.1000-1035 # +# Small Chains: 5000 - 5014 # +# Flavours: 5050 - 5060 # +################################################################ + +################################################## +# # Princes in the Tower +# by Nick Meredith +# #5000-5001 +################################################## + +# You have a chance to imprison the young prince/ss +bp2_yearly.5000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5000.t + desc = bp2_yearly.5000.desc + theme = corruption + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:tower_prince + animation = boredom + } + cooldown = { years = 100 } #Just to ensure it doesn't fire twice for multiple heirs + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available_adult = yes + #You are a diarch + is_diarch = yes + #And a powerful one + liege = { has_diarchy_parameter = diarchy_type_is_entrenched_regency } + #There is an heir to the title you're the diarch of + liege = { + #They're quite young + age < 14 + #and not imprisoned + is_imprisoned = no + #and they're not a player character + is_ai = yes + } + #Just to ensure this doesn't happen too much + #is_ai = no + } + immediate = { + liege = { save_scope_as = tower_prince } + save_scope_value_as = { #For a bit of fuzziness + name = integer + value = { + integer_range = { + min = 1 + max = 5 + } + } + } + } + #Imprison them! + option = { + name = bp2_yearly.5000.a + + if = { + limit = { + any_held_county = { + any_county_province = { + has_building = the_tower_of_london_01 + } + } + } + add_internal_flag = special + custom_tooltip = bp2_yearly.5000.a.flavor + } + + remove_short_term_gold = minor_gold_value + + if = { + limit = { + any_held_county = { + any_county_province = { + has_building = the_tower_of_london_01 + } + } + } + hard_imprison_character_effect = { + TARGET = scope:tower_prince + IMPRISONER = root + } + trigger_event = { + id = bp2_yearly.5001 + days = { 40 80 } + } + } + else = { + random_list = { + 10 = { #You succeed + desc = bp2_yearly.5000.a.success + modifier = { + add = scope:integer + } + modifier = { + add = 5 + OR = { + has_trait = callous + has_trait = sadistic + } + } + modifier = { + add = 5 + intrigue > 15 + } + send_interface_toast = { + title = bp2_yearly.5000.a.success + left_icon = scope:tower_prince + hard_imprison_character_effect = { + TARGET = scope:tower_prince + IMPRISONER = root + } + } + trigger_event = { + id = bp2_yearly.5001 + days = { 40 80 } + } + } + 10 = { #You fail + desc = bp2_yearly.5000.a.failure + modifier = { + add = 5 + OR = { + has_trait = compassionate + has_trait = just + } + } + modifier = { + add = 5 + intrigue < 8 + } + reverse_add_opinion = { + target = scope:tower_prince + modifier = hate_opinion + opinion = -40 + } + send_interface_toast = { + title = bp2_yearly.5000.a.failure + left_icon = scope:tower_prince + show_as_tooltip = { + custom_tooltip = bp2_yearly.5000.a.tt + } + } + hidden_effect = { + scope:tower_prince = { + every_vassal = { + limit = { + root != this + } + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -15 + } + } + } + } + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + content = medium_stress_impact_gain + arbitrary = miniscule_stress_impact_loss + ambitious = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + sadistic = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = content + } + } + } + } + option = { #Leave them be + name = bp2_yearly.5000.b + + add_trait = loyal + + reverse_add_opinion = { + target = scope:tower_prince + modifier = trust_opinion + opinion = 50 + } + + stress_impact = { + craven = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + trusting = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = ambitious + } + } + } + } +} + +# You decide their fate +bp2_yearly.5001 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5001.t + desc = bp2_yearly.5001.desc + theme = dungeon + left_portrait = { + character = root + animation = spymaster + } + right_portrait = { + character = scope:tower_prince + animation = fear + } + trigger = { + #You are a diarch + is_diarch = yes + #Ensure that the prince is still imprisoned + exists = scope:tower_prince + liege = scope:tower_prince + scope:tower_prince = { + is_imprisoned_by = root + } + } + + immediate = { + scope:tower_prince.primary_title = { + save_scope_as = primary_title + } + + save_scope_as = usurper + } + + option = { #Mutilate them + name = bp2_yearly.5001.a + + trigger = { + scope:tower_prince = { + NOT = { + has_trait = incapable + } + } + } + + flavor = bp2_yearly.5001.a.flavor + + add_internal_flag = dangerous + + scope:tower_prince = { + add_trait = incapable + } + + stress_impact = { + paranoid = medium_stress_impact_loss + ambitious = miniscule_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = medium_stress_impact_loss + just = medium_stress_impact_gain + trusting = medium_stress_impact_gain + compassionate = major_stress_impact_gain + content = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = trusting + has_trait = compassionate + has_trait = content + } + } + } + } + + #Seize the realm + option = { + name = bp2_yearly.5001.b + + flavor = bp2_yearly.5001.b.flavor + + add_character_flag = laid_coup_groundwork_flag + + # You had to grease some palms + remove_short_term_gold = medium_gold_value + + show_as_tooltip = { + custom_tooltip = bp2_yearly.5001.b.tt + } + hidden_effect = { + scope:tower_prince = { + every_vassal = { + limit = { + root != this + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + } + } + + custom_tooltip = bp2_yearly.5001.b.bypass + + stress_impact = { + compassionate = miniscule_stress_impact_loss + content = medium_stress_impact_gain + ambitious = minor_stress_impact_loss + sadistic = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + } + } + + #Use them as a political tool + option = { + name = bp2_yearly.5001.c + + update_diarchy_swing_with_perspective_effect = { + SWING = medium_sop_swing_diarch_gain + LIEGE = liege + } + + add_hook = { + target = scope:tower_prince + type = loyalty_hook + } + + scope:tower_prince = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 40 + } + release_from_prison = yes + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + } + } +} + +################################################## +# A winsome foreign hostage +# by Nick Meredith +# #5005-5007 +################################################## + +#Actor +bp2_yearly.5005 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5005.t + desc = bp2_yearly.5005.desc + theme = love + left_portrait = { + character = root + animation = flirtation_left + } + right_portrait = { + character = scope:foreign_hostage + animation = personality_honorable + } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + + #Age checks + is_available_child = yes + + #You can have a crush + num_of_relation_crush = 0 + + #You have actually worked out your sexuality (good going kid, took me like two decades) + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + has_sexuality = homosexual + } + + #There is a fetching foreign hostage whomst you may crush upon + any_warden_hostage = { + save_good_crush_character_trigger_check = yes + location = root.location + } + } + + immediate = { + random_warden_hostage = { + limit = { + save_good_crush_character_trigger_check = yes + } + save_scope_as = foreign_hostage + } + + save_scope_value_as = { #For a bit of fuzziness + name = integer + value = { + integer_range = { + min = 1 + max = 5 + } + } + } + + set_relation_crush = scope:foreign_hostage + save_scope_as = crusher + } + + #Confess my feelings! + option = { + name = bp2_yearly.5005.a + + flavor = bp2_yearly.5005.a.tt + + scope:foreign_hostage = { + trigger_event = { + id = bp2_yearly.5006 + days = { 1 2 } + } + } + + stress_impact = { #Keep these deliberately low: I know kids are dramatic but we don't want one stress-learning French because their crush turned em down + brave = miniscule_stress_impact_loss + rowdy = miniscule_stress_impact_loss + craven = miniscule_stress_impact_gain + pensive = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 1 + } + } + } + + #Can't risk it, best keep this unrequited + option = { + name = bp2_yearly.5005.b + + add_character_modifier = { + modifier = holding_torch_modifier + years = 5 + } + + stress_impact = { #Keep these deliberately low: I know kids are dramatic but we don't want one stress-learning French because their crush turned em down + base = miniscule_stress_impact_gain + brave = miniscule_stress_impact_gain + rowdy = miniscule_stress_impact_gain + craven = miniscule_stress_impact_loss + pensive = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = -1 + } + } + } +} + +# Crush response +bp2_yearly.5006 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5006.t + desc = bp2_yearly.5006.desc + theme = love + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:crusher + animation = worry + } + + immediate = { + #play_music_cue = "mx_cue_touching_moment" + } + + #Reciprocate + option = { + name = bp2_yearly.5006.a + + set_relation_crush = scope:crusher + + reverse_add_opinion = { + target = scope:crusher + modifier = crush_opinion + opinion = 40 + } + + scope:crusher = { + trigger_event = { + id = bp2_yearly.5007 + days = { 3 7 } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 1 + } + } + } + + #Ew, you're icky + option = { + name = bp2_yearly.5006.b + + reverse_add_opinion = { + target = scope:crusher + modifier = disappointed_opinion + opinion = -30 + } + + scope:crusher = { + trigger_event = { + id = bp2_yearly.5008 + days = { 3 7 } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } +} + +# Crush reciprocates +bp2_yearly.5007 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5007.t + desc = bp2_yearly.5007.desc + theme = love + left_portrait = { + character = root + animation = love + } + right_portrait = { + character = scope:foreign_hostage + animation = flirtation + } + artifact = { + target = scope:child_artifact + position = lower_center_portrait + } + + immediate = { + #play_music_cue = "mx_cue_touching_moment" + + if = { + limit = { + any_character_artifact = { + artifact_slot_type = miscellaneous + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:foreign_hostage } + } + } + random_character_artifact = { + limit = { + artifact_slot_type = miscellaneous + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:foreign_hostage } + } + save_scope_as = child_artifact + } + } + } + + #Give them a toy + option = { + name = bp2_yearly.5007.a + + trigger = { + exists = scope:child_artifact + is_ai = no #So you don't have it popping up randomly for human recipients + } + + scope:child_artifact = { + set_owner = { + target = scope:foreign_hostage + history = { + location = root.location + actor = root + recipient = scope:foreign_hostage + type = given + } + } + } + + reverse_add_opinion = { + target = scope:foreign_hostage + modifier = grateful_opinion + opinion = 30 + } + + stress_impact = { + generous = miniscule_stress_impact_loss + charming = miniscule_stress_impact_loss + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } + + #Be happy + option = { + name = bp2_yearly.5007.b + + add_stress = medium_stress_loss #Relief! + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = 1 + } + } + } +} + +# Crush doesn't reciprocate +bp2_yearly.5008 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5008.t + desc = bp2_yearly.5008.desc + theme = love + left_portrait = { + character = root + animation = grief + } + right_portrait = { + character = scope:foreign_hostage + animation = dismissal + } + + immediate = { + #play_music_cue = "mx_cue_negative" + } + + #Maybe they'll come round? + option = { + name = bp2_yearly.5008.a + + add_character_modifier = { + modifier = holding_torch_modifier + years = 5 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } + + #I'll move on + option = { + name = bp2_yearly.5008.b + + remove_relation_crush = scope:foreign_hostage + + add_stress = medium_stress_gain + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = 1 + } + } + } +} + +################################################## +# You promise? +# by Nick Meredith +# #5009 +################################################## + +# Your mutual crush offers to marry you when you're both of age +bp2_yearly.5009 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5009.t + desc = bp2_yearly.5009.desc + theme = love + left_portrait = { + character = root + animation = flirtation_left + } + right_portrait = { + character = scope:marry_crush + animation = love + } + cooldown = { years = 10 } #Theoretically can happen with multiple crushes + + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #You are a child + is_adult = no + #But you're at least old enough to do the whole awkward teenage falling in love thing + age >= 12 + #Someone has a crush on you + any_courtier_or_guest = { + has_relation_crush = root + is_imprisoned = no + is_close_family_of_root_trigger = no + is_ai = yes + is_adult = no + age >= 12 + allowed_to_marry_character_gender_trigger = { CHARACTER = root } + save_temporary_scope_as = crush_to_marry + } + #And it's mutual + has_relation_crush = scope:crush_to_marry + #And you could theoretically marry them + could_marry_character_trigger = { CHARACTER = scope:crush_to_marry } + } + immediate = { + random_courtier_or_guest = { + limit = { + has_relation_crush = root + is_imprisoned = no + is_close_family_of_root_trigger = no + is_ai = yes + is_adult = no + age >= 12 + allowed_to_marry_character_gender_trigger = { CHARACTER = root } + } + save_scope_as = marry_crush + } + } + #Agree + option = { + name = bp2_yearly.5009.a + + add_character_modifier = { + modifier = besotted_modifier + years = 5 + } + + reverse_add_opinion = { + target = scope:marry_crush + modifier = pleased_opinion + opinion = 15 + } + + scope:marry_crush = { + add_character_flag = marry_crush_flag + add_character_modifier = { + modifier = besotted_modifier + years = 5 + } + } + + create_character_memory = { + type = pledged_marriage + participants = { + potential_spouse = scope:marry_crush + } + } + + stress_impact = { + content = miniscule_stress_impact_loss + trusting = miniscule_stress_impact_loss + ambitious = medium_stress_impact_gain + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = ambitious + } + } + } + } + #Refuse + option = { + name = bp2_yearly.5009.b + + reverse_add_opinion = { + target = scope:marry_crush + modifier = disappointed_opinion + opinion = -35 + } + + stress_impact = { + content = medium_stress_impact_gain + trusting = minor_stress_impact_gain + ambitious = miniscule_stress_impact_loss + paranoid = miniscule_stress_impact_loss + } + + ai_chance = { + base = 10 + } + } +} + +################################################## +# I promised! +# by Nick Meredith +# #5010-14 +################################################## + +#Actor +bp2_yearly.5010 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5010.t + desc = bp2_yearly.5010.desc + theme = love + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:marry_crush + animation = happiness + } + + cooldown = { years = 10 } + + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + + #Age and marital status checks + is_available_adult = yes + can_marry_trigger = yes + + #You had someone who was a mutual crush with you + any_courtier_or_guest = { + has_character_flag = marry_crush_flag + is_available_adult = yes + is_married = no + can_marry_trigger = yes + could_marry_character_trigger = { CHARACTER = root } + save_temporary_scope_as = crush_to_marry + } + + #You remember pledging marriage + any_memory = { + memory_type = pledged_marriage + memory_participant:potential_spouse = { + location = root.location + } + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + has_character_flag = marry_crush_flag + is_available_adult = yes + is_married = no + can_marry_trigger = yes + } + save_scope_as = marry_crush + } + } + + #How about it? + option = { + name = bp2_yearly.5010.a + + flavor = bp2_yearly.5010.a.flavor + + custom_tooltip = bp2_yearly.5010.a.tt + + save_scope_as = root_crush #For use later in the chain + + scope:marry_crush = { + trigger_event = { + id = bp2_yearly.5011 + days = { 1 2 } + } + } + + stress_impact = { + patient = minor_stress_impact_gain + content = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 1 + } + } + } + + #What fanciful dreams we had as children, eh? + option = { + name = bp2_yearly.5010.b + + add_character_modifier = { + modifier = reminiscing_modifier + years = 5 + } + + if = { #To ensure it doesn't acquire randomly for players + limit = { + scope:marry_crush = { + is_ai = yes + } + } + scope:marry_crush = { + add_character_modifier = { + modifier = reminiscing_modifier + years = 5 + } + } + } + + stress_impact = { + shy = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + chaste = miniscule_stress_impact_loss + diligent = minor_stress_impact_gain + lustful = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = -0.5 + } + } + } +} + +# Crush response +bp2_yearly.5011 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5011.t + desc = bp2_yearly.5011.desc + theme = love + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:root_crush + animation = flirtation + } + + #Accept + option = { + name = bp2_yearly.5011.a + + if = { #Resolve for non-AIs + limit = { + is_ai = no + } + marry = scope:root_crush + } + + reverse_add_opinion = { + target = scope:root_crush + modifier = love_opinion + opinion = 40 + } + + if = { #Continue chain if AI + limit = { + is_ai = yes + } + scope:root_crush = { + trigger_event = { + id = bp2_yearly.5012 + days = { 1 2 } + } + } + } + + stress_impact = { + shy = minor_stress_impact_gain + lazy = minor_stress_impact_gain + chaste = medium_stress_impact_gain + diligent = miniscule_stress_impact_loss + lustful = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 1 + } + } + } + + #Decline + option = { + name = bp2_yearly.5011.b + + reverse_add_opinion = { + target = scope:root_crush + modifier = disappointed_opinion + opinion = -30 + } + + scope:root_crush = { + trigger_event = { + id = bp2_yearly.5013 + days = { 2 3 } + } + } + + stress_impact = { + shy = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + chaste = miniscule_stress_impact_loss + diligent = minor_stress_impact_gain + lustful = medium_stress_impact_gain + gregarious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } +} + +# They agree +bp2_yearly.5012 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5012.t + desc = bp2_yearly.5012.desc + theme = love + left_portrait = { + character = root + animation = love + } + right_portrait = { + character = scope:marry_crush + animation = love + } + + immediate = { + #play_music_cue = "mx_cue_touching_moment" + } + + #Hooray! + option = { + name = bp2_yearly.5012.a + + marry = scope:marry_crush + + if = { + limit = { + NOT = { + has_relation_lover = scope:marry_crush + } + } + set_relation_lover = { reason = lover_history target = scope:marry_crush } + } + + reverse_add_opinion = { + target = scope:marry_crush + modifier = love_opinion + opinion = 30 + } + + stress_impact = { + base = minor_stress_impact_loss + stubborn = miniscule_stress_impact_loss + fickle = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } + + #On second thoughts... + option = { + name = bp2_yearly.5012.b + + progress_towards_rival_effect = { + REASON = rival_childhood_marriage_vow + CHARACTER = scope:marry_crush + OPINION = -40 + } + + stress_impact = { + stubborn = medium_stress_impact_gain + fickle = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.5 + ai_sociability = -1 + } + } + } +} + +# They disagree +bp2_yearly.5013 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5013.t + desc = bp2_yearly.5013.desc + theme = love + left_portrait = { + character = root + animation = grief + } + right_portrait = { + character = scope:marry_crush + animation = dismissal + } + + immediate = { + #play_music_cue = "mx_cue_negative" + } + + #Well this sucks + option = { + name = bp2_yearly.5013.a + + add_character_modifier = { + modifier = delayed_heartbreak_modifier + years = 5 + } + + stress_impact = { + base = minor_stress_impact_gain + chaste = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + lustful = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.5 + ai_sociability = -0.5 + } + } + } +} + + ### ###### #### FLAVOUR EVENTS ### ##### ### ## + ## ### # __..--''``---....___ _..._ __ ### ## + ### ##_.-' .-#"; ` ``<._ ``.''_ `. # ## # +###_.-' _..--.'_ \ `( ) ) ## ## +# (_..-' ## (< _ ;_..__ ; `' # ### + # ## ## ## `-._,_)' ## # ``--...____..-' ### # ## + # ##### #### ## #### ## ###### ### #### ## ##### + +scripted_trigger bp2_yearly_5050_language_teacher_trigger = { + is_available = yes + location = root.location + age > 18 + root = { + NOT = { knows_language_of_culture = prev.culture } + } +} + +# You learn a language off a guest or courtier +bp2_yearly.5050 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5050.t + desc = bp2_yearly.5050.desc + theme = friendly + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:polyglot + animation = happy_teacher + } + cooldown = { years = 10 } + trigger = { + #DLC check + has_bp2_dlc_trigger = yes + #Standard checks + is_available_child = yes + age >= 6 #Old enough to read + + #There is parent, or a guest, or a courtier, or a councillor, or a hostage who knows a language that aint yours + OR = { + any_warden_hostage = { + is_hostage_of = root + bp2_yearly_5050_language_teacher_trigger = yes + } + any_parent = { + bp2_yearly_5050_language_teacher_trigger = yes + } + any_councillor = { + bp2_yearly_5050_language_teacher_trigger = yes + } + any_courtier_or_guest = { + bp2_yearly_5050_language_teacher_trigger = yes + } + } + } + + immediate = { + if = { + limit = { + any_warden_hostage = { + is_hostage_of = root + bp2_yearly_5050_language_teacher_trigger = yes + } + } + random_warden_hostage = { + limit = { + is_hostage_of = root + bp2_yearly_5050_language_teacher_trigger = yes + } + save_scope_as = polyglot + } + } + else_if = { + limit = { + any_councillor = { + bp2_yearly_5050_language_teacher_trigger = yes + } + } + random_councillor = { + limit = { + bp2_yearly_5050_language_teacher_trigger = yes + } + save_scope_as = polyglot + } + } + else_if = { + limit = { + any_parent = { + bp2_yearly_5050_language_teacher_trigger = yes + } + } + random_parent = { + limit = { + bp2_yearly_5050_language_teacher_trigger = yes + } + save_scope_as = polyglot + } + } + else = { + random_courtier_or_guest = { + limit = { + bp2_yearly_5050_language_teacher_trigger = yes + } + save_scope_as = polyglot + } + } + } + + #You have already learnt more than one language, so you get a bonus to learning speed + option = { + name = bp2_yearly.5050.a + + trigger = { + num_of_known_languages > 1 + } + + start_scheme = { + type = learn_language + target_character = scope:polyglot + } + custom_tooltip = diplomacy_family.2250.b.tt + hidden_effect = { + random_scheme = { + type = learn_language + limit = { + scheme_target_character = scope:polyglot + } + add_scheme_modifier = { + type = extra_success_chance_modifier + } + } + } + + reverse_add_opinion = { + target = scope:polyglot + modifier = impressed_opinion + opinion = 35 + } + + stress_impact = { + diligent = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + content = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_rationality = 0.5 + } + } + } + + option = { #Try and learn it + name = bp2_yearly.5050.b + + trigger = { + NOT = { + num_of_known_languages > 1 + } + } + + start_scheme = { + type = learn_language + target_character = scope:polyglot + } + + reverse_add_opinion = { + target = scope:polyglot + modifier = pleased_opinion + opinion = 20 + } + + stress_impact = { + diligent = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + content = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_rationality = 0.5 + } + } + } + + option = { #Try gather some useful info + name = bp2_yearly.5050.c + + add_learning_lifestyle_xp = minor_lifestyle_experience + + stress_impact = { + diligent = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + content = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_rationality = -0.5 + } + } + } +} + +# Child interacts with baby sibling +bp2_yearly.5051 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5051.t + desc = bp2_yearly.5051.desc + theme = family + override_background = { reference = corridor_day } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:child + animation = peekaboo + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_child = { + age >= 10 #Old enough to hold a kid + age < 16 #Still studying - not an adult + is_available = yes + location = root.location + save_temporary_scope_as = kid + } + any_child = { + age <= 2 #bebe + is_available = yes + location = root.location + this != scope:kid + } + } + + immediate = { + random_child = { + limit = { + age >= 10 + age < 16 + is_available = yes + location = root.location + } + save_scope_as = child + } + random_child = { + limit = { + age <= 2 + is_available = yes + location = root.location + this != scope:child + } + save_scope_as = baby + } + } + + # Encourage them to spend time with their sibling + option = { + name = bp2_yearly.5051.a + + scope:child = { + add_character_modifier = { + modifier = bp2_tight_knit_modifier + years = 25 + } + + add_stress = minor_stress_loss + } + + stress_impact = { + base = minor_stress_impact_loss + compassionate = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + # Get them to spend more time on their studies + option = { + name = bp2_yearly.5051.b + + scope:child = { + add_learning_skill = 1 + + add_stress = minor_stress_gain + } + + stress_impact = { + compassionate = minor_stress_impact_gain + lazy = minor_stress_impact_gain + callous = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } +} + +# Child spends time with their grandparent +bp2_yearly.5052 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5052.t + desc = bp2_yearly.5052.desc + theme = family + override_background = { + trigger = { is_landless_adventurer = no } + reference = bp1_wine_cellar + } + override_background = { + trigger = { has_government = landless_adventurer_government } + reference = bp1_bonfire + } + left_portrait = { + character = scope:grandparent + animation = throne_room_conversation_1 + } + right_portrait = { + character = scope:child + animation = eavesdrop + } + + cooldown = { + years = 10 + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_child = { + age > 3 #Old enough to listen to stories + is_adult = no #...but young enough to not be too enraptured + is_available = yes + location = root.location + } + any_parent = { + is_available = yes + location = root.location + } + } + + immediate = { + random_child = { + limit = { + age > 3 + is_adult = no + is_available = yes + location = root.location + } + weight = { + base = 1 + modifier = { + add = 100 + is_primary_heir_of = root + } + } + save_scope_as = child + } + random_parent = { + limit = { + is_available = yes + location = root.location + } + save_scope_as = grandparent + } + } + + # Barge in and start telling _your_ stories + option = { + name = bp2_yearly.5052.a + + trigger = { + has_trait = arrogant + } + + add_character_modifier = { + modifier = bp2_one_upper_modifier + years = 10 + } + + reverse_add_opinion = { + target = scope:grandparent + modifier = annoyed_opinion + opinion = -30 + } + + stress_impact = { + base = medium_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = medium_stress_impact_gain + callous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = 1 + } + } + } + + # Join and listen in + option = { + name = bp2_yearly.5052.b + + scope:child = { + random = { + chance = 50 + add_learning_skill = 1 + } + } + + add_character_modifier = { + modifier = bp2_listened_elders_modifier + years = 15 + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + callous = minor_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_sociability = 1 + } + } + } + + # Leave them to it + option = { + name = bp2_yearly.5052.c + + scope:child = { + random_list = { + 1 = { + add_diplomacy_skill = 1 + } + 1 = { + add_martial_skill = 1 + } + 1 = { + add_stewardship_skill = 1 + } + 1 = { + add_intrigue_skill = 1 + } + 1 = { + add_learning_skill = 1 + } + } + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -1 + } + } + } +} + +# Host's child gets jealous of ward +bp2_yearly.5053 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5053.t + desc = bp2_yearly.5053.desc + theme = family + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:angry_kid + animation = anger + } + lower_center_portrait = { + character = scope:ward + } + + cooldown = { years = 20 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_child = { + age > 9 + is_available = yes + location = root.location + save_temporary_scope_as = angry_kid_temp + } + any_warden_hostage = { + NOR = { + culture = root.culture + culture = scope:angry_kid_temp.culture + } + age > 8 + is_hostage_of = root + is_available = yes + location = root.location + } + } + + immediate = { + random_child = { + limit = { + age > 9 + is_available = yes + location = root.location + } + save_scope_as = angry_kid + } + random_warden_hostage = { + limit = { + NOR = { + culture = root.culture + culture = scope:angry_kid.culture + } + age > 8 + is_hostage_of = root + is_available = yes + location = root.location + } + save_scope_as = ward + } + } + + # You know me, kiddo, I'd never do that! + option = { + name = bp2_yearly.5053.a + + trigger = { + has_trait = family_first + } + + add_diplomacy_skill = 1 + + scope:angry_kid = { + add_character_modifier = { + modifier = bp2_trusted_parent_modifier + years = 15 + } + } + + reverse_add_opinion = { + target = scope:angry_kid + modifier = relieved_opinion + opinion = 45 + } + + stress_impact = { + base = medium_stress_impact_loss + honest = miniscule_stress_impact_loss + deceitful = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = 0.5 + } + } + } + + # Try to convince them + option = { + name = bp2_yearly.5053.b + + trigger = { + NOT = { + has_trait = family_first + } + } + + duel = { + skill = diplomacy + value = decent_skill_rating + + 50 = { #You succeed + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5053.b.success + send_interface_toast = { + title = bp2_yearly.5053.b.success + left_icon = root + right_icon = scope:angry_kid + + add_diplomacy_skill = 1 + + scope:angry_kid = { + add_character_modifier = { + modifier = bp2_trusted_parent_modifier + years = 15 + } + } + + reverse_add_opinion = { + target = scope:angry_kid + modifier = relieved_opinion + opinion = 25 + } + } + } + + 50 = { #You fail + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5053.b.failure + send_interface_toast = { + title = bp2_yearly.5053.b.failure + left_icon = root + right_icon = scope:angry_kid + + add_character_modifier = { + modifier = bp2_foreign_influences_modifier + years = 15 + } + + reverse_add_opinion = { + target = scope:angry_kid + modifier = suspicious_opinion + opinion = -35 + } + } + } + } + + stress_impact = { + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_sociability = 0.5 + } + } + } + + # Hostage is more of a child to me than you ever have been! + option = { + name = bp2_yearly.5053.c + + add_character_modifier = { + modifier = bp2_culturally_adventurous_modifier + years = 15 + } + + scope:angry_kid = { + add_character_modifier = { + modifier = bp2_parental_heartbreak_modifier + years = 25 + } + } + + reverse_add_opinion = { + target = scope:angry_kid + modifier = emotionally_devastated_opinion + opinion = -50 + } + + stress_impact = { + ambitious = minor_stress_impact_loss + content = medium_stress_impact_gain + sadistic = medium_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = major_stress_impact_gain + just = medium_stress_impact_gain + arbitrary = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_compassion = -1 + } + } + } +} + +# Hostage and child are becoming friends +bp2_yearly.5054 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5054.t + desc = bp2_yearly.5054.desc + theme = hostage + override_background = { reference = relaxing_room } + left_portrait = { + character = scope:child + animation = child_hobby_horse + } + right_portrait = { + character = scope:hostage + animation = clutching_ball + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + NOT = { #For loc purposes + has_trait = blind + } + any_child = { + age > 4 + is_adult = no + is_available = yes + location = root.location + } + any_warden_hostage = { + age > 4 + is_adult = no + is_hostage_of = root + is_available = yes + location = root.location + } + } + + immediate = { + random_child = { + limit = { + age > 4 + is_adult = no + is_available = yes + location = root.location + } + save_scope_as = child + } + random_warden_hostage = { + limit = { + age > 4 + is_adult = no + is_hostage_of = root + is_available = yes + location = root.location + } + save_scope_as = hostage + } + } + + # Encourage the friendship + option = { + name = bp2_yearly.5054.a + + scope:child = { + random_list = { + 1 = { + add_character_modifier = { + modifier = bp2_expanded_horizons_modifier + years = 20 + } + } + 1 = { add_learning_skill = 1 } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + } + set_relation_friend = { reason = friend_hostage_friendship target = scope:hostage } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + trusting = minor_stress_impact_loss + compassionate = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + # Discourage the friendship + option = { + name = bp2_yearly.5054.b + + scope:child = { + add_intrigue_skill = 1 + + add_stress = minor_stress_gain + + reverse_add_opinion = { + target = scope:hostage + modifier = confused_opinion + opinion = -20 + } + + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } + + reverse_add_opinion = { + target = scope:hostage + modifier = confused_opinion + opinion = -20 + } + + stress_impact = { + gregarious = minor_stress_impact_gain + trusting = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + paranoid = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } +} + + + +# Another child challenges you to a duel with wooden swords +bp2_yearly.5100 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5100.t + desc = bp2_yearly.5100.desc + theme = friendly + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = marshal_wooden_sword + } + right_portrait = { + character = scope:challenger + animation = wooden_sword_coup_degrace + } + + cooldown = { + years = 4 + } + + trigger = { + has_bp2_dlc_trigger = yes + NOT = { #It'd be a bit mean honestly + has_trait = blind + } + age >= 6 + is_available_child = yes + any_courtier_or_guest = { + age >= 6 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + age >= 6 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + + weight = { + base = 1 + modifier = { + add = 10 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + } + } + + save_scope_as = challenger + } + } + + # En garde! + option = { + name = bp2_yearly.5100.a + + custom_tooltip = bp2_yearly.5100.a.tt + + add_prowess_skill = 1 + + set_temporary_signature_weapon = { #to be able to use wooden sword animations in the SCE, then return to previous signature weapon + WEAPON_TYPE = wooden_sword + } + scope:challenger = { + set_temporary_signature_weapon = { #to be able to use wooden sword animations in the SCE, then return to previous signature weapon + WEAPON_TYPE = wooden_sword + } + } + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:challenger + SC_ATTACKER = scope:challenger + SC_DEFENDER = root + FATALITY = no + FIXED = no + LOCALE = courtyard + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = single_combat.1006 + } + + stress_impact = { + brave = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + wrathful = miniscule_stress_impact_loss + calm = minor_stress_impact_gain + content = minor_stress_impact_gain + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + # Don't be foolish + option = { + name = bp2_yearly.5100.b + + flavor = bp2_yearly.5100.b.tt + + add_martial_skill = 1 + + reverse_add_opinion = { + target = scope:challenger + modifier = disappointed_opinion + opinion = -20 + } + + stress_impact = { + brave = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + calm = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + craven = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } +} + +# You and another child pretend to ride horses +bp2_yearly.5101 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5101.t + desc = bp2_yearly.5101.desc + theme = friendly + override_background = { reference = study } + left_portrait = { + character = root + animation = child_hobby_horse + } + right_portrait = { + character = scope:councillor + animation = stress + } + lower_center_portrait = { + character = scope:child + } + + cooldown = { + years = 4 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 5 + age <= 15 + is_available_child = yes + any_courtier_or_guest = { + age >= 5 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + any_councillor = { + is_available = yes + location = root.location + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + age >= 5 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + save_scope_as = child + } + random_councillor = { + limit = { + is_available = yes + location = root.location + } + save_scope_as = councillor + } + } + + # How dare! + option = { + name = bp2_yearly.5101.a + + trigger = { + OR = { + has_trait = arrogant + has_trait = stubborn + } + } + + add_character_modifier = { + modifier = bp2_strong_willed_modifier + years = 10 + } + + reverse_add_opinion = { + target = scope:councillor + modifier = angry_opinion + opinion = -30 + } + + stress_impact = { + base = medium_stress_impact_loss + calm = minor_stress_impact_gain + humble = minor_stress_impact_gain + fickle = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } + + # I'll race you outside! + option = { + name = bp2_yearly.5101.b + + random = { + chance = 50 + add_intrigue_skill = 1 + } + + duel = { + skill = prowess + target = scope:child + 50 = { #You win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5101.b.success + send_interface_toast = { + title = bp2_yearly.5101.b.success + left_icon = root + right_icon = scope:child + + add_prowess_skill = 1 + + random = { + chance = 25 + add_trait = athletic + } + } + } + 50 = { #You lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5101.b.failure + send_interface_toast = { + title = bp2_yearly.5101.b.failure + left_icon = root + right_icon = scope:child + + add_stress = minor_stress_gain + } + } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + stubborn = miniscule_stress_impact_loss + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + fickle = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_honor = 0.5 + } + } + } + + # Sorry, councillor, we'll be quiet + option = { + name = bp2_yearly.5101.c + + random = { + chance = 50 + add_diplomacy_skill = 1 + } + + reverse_add_opinion = { + target = scope:councillor + modifier = relieved_opinion + opinion = 25 + } + + stress_impact = { + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + content = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } +} + +# You knock your sibling over by accident +bp2_yearly.5102 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5102.t + desc = bp2_yearly.5102.desc + theme = family + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:sibling + animation = crying + } + lower_center_portrait = { + character = scope:parent + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 4 + is_available_child = yes + any_sibling = { + age >= 4 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + any_parent = { + is_alive = yes + is_available = yes + location = root.location + } + any_courtier = { } + } + + immediate = { + random_sibling = { + limit = { + age >= 4 + age <= root.age_plus_5 + age >= root.age_minus_5 + is_available_child = yes + location = root.location + } + save_scope_as = sibling + } + random_parent = { + limit = { + is_alive = yes + is_available = yes + location = root.location + } + save_scope_as = parent + } + + reverse_add_opinion = { + target = scope:sibling + modifier = hurt_opinion + opinion = -10 + } + } + + # I'll... I'll buy you a toy! + option = { + name = bp2_yearly.5102.a + + trigger = { + OR = { + has_trait = generous + has_trait = craven + has_trait = compassionate + } + } + + remove_short_term_gold = tiny_gold_value + random_courtier = { + save_scope_as = inspiration_owner + } + scope:sibling = { + save_scope_as = statue_owner + create_artifact = { + name = tiny_sculpture_trinket_name + description = tiny_sculpture_trinket_description + type = miscellaneous + visuals = animal_figurine + modifier = artifact_dynasty_opinion_1_modifier + save_scope_as = newly_created_artifact + template = child_toy_template + } + } + + scope:newly_created_artifact = { + set_owner = { + target = scope:sibling + history = { + location = root.location + actor = root + recipient = scope:sibling + type = given + } + } + } + + stress_impact = { + generous = miniscule_stress_impact_loss + craven = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + greedy = minor_stress_impact_gain + brave = minor_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_honor = 1 + } + } + } + + # No no don't tell mum! + option = { + name = bp2_yearly.5102.b + + duel = { + skill = diplomacy + target = scope:sibling + 50 = { #They agree not to tell mum + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5102.b.success + send_interface_toast = { + title = bp2_yearly.5102.b.success + left_icon = root + right_icon = scope:child + + add_stress = minor_stress_loss + + random = { + chance = 33 + add_diplomacy_skill = 1 + } + } + } + 50 = { #You're in trouble now son! + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5102.b.failure + send_interface_toast = { + title = bp2_yearly.5102.b.failure + left_icon = root + right_icon = scope:child + + add_stress = minor_stress_gain + + reverse_add_opinion = { + target = scope:parent + modifier = angry_opinion + opinion = -15 + } + } + } + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + impatient = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 0.5 + } + } + } + + # Oh get over it! + option = { + name = bp2_yearly.5102.c + + if = { + limit = { + NOT = { + number_of_personality_traits < childhood_personality_trait_gain_limit + has_trait = callous + } + } + add_trait = callous + } + + reverse_add_opinion = { + target = scope:sibling + modifier = hurt_opinion + opinion = -25 + } + + reverse_add_opinion = { + target = scope:parent + modifier = angry_opinion + opinion = -15 + } + + stress_impact = { + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + stubborn = miniscule_stress_impact_gain + compassionate = major_stress_impact_gain + fickle = minor_stress_impact_gain + craven = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } +} + +# You are caught stealing sweets +bp2_yearly.5103 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5103.t + desc = bp2_yearly.5103.desc + theme = family + override_background = { reference = bp1_kitchen_western } + left_portrait = { + character = root + animation = crying + } + right_portrait = { + character = scope:parent + animation = go_to_your_room + } + + cooldown = { + years = 5 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 4 + is_available_child = yes + OR = { + any_parent = { + is_alive = yes + is_available = yes + location = root.location + } + any_relation = { + type = guardian + is_alive = yes + is_available = yes + location = root.location + } + } + } + + immediate = { + save_scope_as = child + if = { + limit = { + any_parent = { + is_alive = yes + is_available = yes + location = root.location + } + } + random_parent = { + limit = { + is_alive = yes + is_available = yes + location = root.location + } + save_scope_as = parent + } + } + else = { + random_relation = { + type = guardian + limit = { + is_alive = yes + is_available = yes + location = root.location + } + save_scope_as = parent + } + } + } + + # I will be king/queen! Treat me with respect! + option = { + name = bp2_yearly.5103.a + + trigger = { + OR = { + has_trait = arrogant + has_trait = arbitrary + has_trait = stubborn + } + } + + add_character_modifier = { + modifier = bp2_sweet_treat_modifier + years = 5 + } + + reverse_add_opinion = { + target = scope:parent + modifier = angry_opinion + opinion = -35 + } + + stress_impact = { + base = medium_stress_impact_loss + arrogant = miniscule_stress_impact_loss + greedy = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + humble = minor_stress_impact_gain + just = minor_stress_impact_gain + fickle = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = 0.5 + } + } + } + + # Try and make a run for it with the treat + option = { + name = bp2_yearly.5103.b + + duel = { + skill = prowess + target = scope:parent + 50 = { #You get away + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5103.b.success + send_interface_toast = { + title = bp2_yearly.5103.b.success + left_icon = root + right_icon = scope:parent + + add_stress = miniscule_stress_loss + + add_character_modifier = { + modifier = bp2_sweet_treat_modifier + years = 5 + } + } + } + 50 = { #They catch you + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5103.b.failure + send_interface_toast = { + title = bp2_yearly.5103.b.failure + left_icon = root + right_icon = scope:parent + + add_stress = minor_stress_gain + + random = { + chance = 25 + increase_wounds_no_death_effect = { REASON = beaten } + } + } + } + } + + reverse_add_opinion = { + target = scope:parent + modifier = angry_opinion + opinion = -20 + } + + stress_impact = { + greedy = minor_stress_impact_loss + deceitful = miniscule_stress_impact_loss + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.5 + ai_energy = 1 + } + } + } + + # I'm sorry! + option = { + name = bp2_yearly.5103.c + + random = { + chance = 50 + add_diplomacy_skill = 1 + } + + reverse_add_opinion = { + target = scope:parent + modifier = disappointed_opinion + opinion = -5 + } + + stress_impact = { + greedy = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + temperate = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } +} + +# You find a lonely kid and ask them to play +bp2_yearly.5104 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5104.t + desc = bp2_yearly.5104.desc + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = clutching_toy + } + right_portrait = { + character = scope:child + animation = boredom + } + cooldown = { + years = 3 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 4 + age <= 14 + is_available_child = yes + NOR = { + has_trait = callous + has_trait = sadistic + } + any_courtier_or_guest = { + is_alive = yes + location = root.location + is_available_child = yes + age >= 4 + NOR = { + has_trait = gregarious + any_relation = { type = friend } + } + can_set_relation_friend_trigger = { CHARACTER = root } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.5 + has_trait = pensive + } + modifier = { + add = 5 + OR = { + has_trait = wheezing + has_trait = depressed + has_trait = hunchbacked + has_trait = spindly + has_trait = bleeder + has_trait = physique_bad + has_trait = weak + has_trait = one_legged + has_trait = one_eyed + has_trait = reclusive + } + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + is_alive = yes + is_available_child = yes + location = root.location + age >= 4 + NOR = { + has_trait = gregarious + any_relation = { type = friend } + } + can_set_relation_friend_trigger = { CHARACTER = root } + } + weight = { + base = 1 + modifier = { + add = 1 + has_trait = pensive + } + modifier = { + add = 10 + OR = { + has_trait = wheezing + has_trait = depressed + has_trait = hunchbacked + has_trait = spindly + has_trait = bleeder + has_trait = physique_bad + has_trait = weak + has_trait = one_legged + has_trait = one_eyed + has_trait = reclusive + } + } + } + save_scope_as = child + } + } + + # Sit with them + option = { + name = bp2_yearly.5104.a + + trigger = { + OR = { + has_trait = compassionate + has_trait = calm + has_trait = pensive + } + } + + add_diplomacy_skill = 1 + + set_relation_friend = { + reason = friend_sat_together + target = scope:child + } + + add_character_modifier = { + modifier = bp2_empathetic_modifier + years = 15 + } + + stress_impact = { + base = medium_stress_impact_loss + humble = miniscule_stress_impact_loss + wrathful = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_sociability = 1 + } + } + } + + # Invite them to play + option = { + name = bp2_yearly.5104.b + + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { #They join in + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5104.b.success + send_interface_toast = { + title = bp2_yearly.5104.b.success + left_icon = root + right_icon = scope:child + + progress_towards_friend_effect = { + REASON = friend_invited_to_play + CHARACTER = scope:child + OPINION = default_friend_opinion + } + } + } + 50 = { #They turn you down + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5104.b.failure + send_interface_toast = { + title = bp2_yearly.5104.b.failure + left_icon = root + right_icon = scope:child + } + } + } + + stress_impact = { + stubborn = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + fickle = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + # Leave them to it + option = { + name = bp2_yearly.5104.c + + flavor = bp2_yearly.5104.c.tt + + stress_impact = { + base = miniscule_stress_impact_loss + stubborn = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + impatient = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = -0.5 + } + } + } +} + +# You and another friend have a pretend joust +bp2_yearly.5105 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5105.t + desc = bp2_yearly.5105.desc + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = clutching_toy + } + right_portrait = { + character = scope:child + animation = child_hobby_horse + } + + cooldown = { + years = 4 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 7 + age <= 15 + is_available_child = yes + any_courtier_or_guest = { + is_available_child = yes + location = root.location + age >= 7 + age <= 15 + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + culture = { has_cultural_parameter = can_host_joust_contests } + } + modifier = { + add = 1 + any_courtier_or_guest = { + is_available_child = yes + location = root.location + culture = { has_cultural_parameter = can_host_joust_contests } + age >= 7 + age <= 15 + } + } + } + + immediate = { + play_music_cue = "mx_cue_war_declared" + + random_courtier_or_guest = { + limit = { + culture = { has_cultural_parameter = can_host_joust_contests } + is_alive = yes + is_available_child = yes + location = root.location + age >= 7 + age <= 15 + } + alternative_limit = { + is_alive = yes + is_available_child = yes + location = root.location + age >= 7 + age <= 15 + } + + weight = { + base = 1 + modifier = { + add = 10 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + } + } + + save_scope_as = child + } + } + + # Let's 'ave it then + option = { + name = bp2_yearly.5105.a + + flavor = bp2_yearly.5105.a.tt + + set_variable = { + name = joust_win_tally + value = 0 + } + + scope:child = { + set_variable = { + name = joust_win_tally + value = 0 + } + } + + duel = { + skill = prowess + target = scope:child + 50 = { #You win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5105.a.success + send_interface_toast = { + title = bp2_yearly.5105.a.success + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_loss + + change_variable = { + name = joust_win_tally + add = 1 + } + + random = { + chance = 10 + scope:child = { + increase_wounds_no_death_effect = { REASON = wounds } + } + } + + trigger_event = { + id = bp2_yearly.5106 + } + } + } + 50 = { #You lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5105.a.failure + send_interface_toast = { + title = bp2_yearly.5105.a.failure + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_gain + + scope:child = { + change_variable = { + name = joust_win_tally + add = 1 + } + } + + random = { + chance = 10 + increase_wounds_no_death_effect = { REASON = wounds } + } + + trigger_event = { + id = bp2_yearly.5106 + } + } + } + } + + stress_impact = { + brave = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + content = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_sociability = 0.5 + } + } + } + + # Don't be silly + option = { + name = bp2_yearly.5105.b + + reverse_add_opinion = { + target = scope:child + modifier = disappointed_opinion + opinion = -15 + } + + stress_impact = { + stubborn = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + fickle = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } +} + +# Second round of the joust +bp2_yearly.5106 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5106.t + desc = { + triggered_desc = { + trigger = { + var:joust_win_tally > 0 + } + desc = bp2_yearly.5106.desc.winning + } + triggered_desc = { + trigger = { + NOT = { + var:joust_win_tally > 0 + } + } + desc = bp2_yearly.5106.desc.losing + } + desc = bp2_yearly.5106.ending + } + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = child_hobby_horse + } + right_portrait = { + character = scope:child + animation = child_hobby_horse + } + + # Round two, fight! + option = { + name = bp2_yearly.5106.a + + flavor = bp2_yearly.5106.a.tt + + duel = { + skills = { martial prowess } + target = scope:child + 50 = { #You win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5106.a.success + send_interface_toast = { + title = bp2_yearly.5106.a.success + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_loss + + change_variable = { + name = joust_win_tally + add = 1 + } + + random = { + chance = 10 + scope:child = { + increase_wounds_no_death_effect = { REASON = wounds } + } + } + + add_character_flag = won_second_round + + if = { + limit = { + var:joust_win_tally > 1 + } + trigger_event = bp2_yearly.5108 + } + else = { + trigger_event = bp2_yearly.5107 + } + } + } + 50 = { #You lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5106.a.failure + send_interface_toast = { + title = bp2_yearly.5106.a.failure + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_gain + + scope:child = { + change_variable = { + name = joust_win_tally + add = 1 + } + } + + random = { + chance = 10 + increase_wounds_no_death_effect = { REASON = wounds } + } + + if = { + limit = { + scope:child = { + var:joust_win_tally > 1 + } + } + trigger_event = bp2_yearly.5108 + } + else = { + trigger_event = bp2_yearly.5107 + } + } + } + } + + stress_impact = { + stubborn = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + # Can we stop now? + option = { + name = bp2_yearly.5106.b + + if = { + limit = { + NOT = { + number_of_personality_traits < childhood_personality_trait_gain_limit + has_trait = craven + } + } + random = { + chance = 10 + add_trait = craven + } + } + + reverse_add_opinion = { + target = scope:child + modifier = disappointed_opinion + opinion = -25 + } + + stress_impact = { + stubborn = minor_stress_impact_gain + brave = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + craven = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + } + } +} + +# Third round of the joust +bp2_yearly.5107 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5107.t + desc = { + triggered_desc = { + trigger = { + has_character_flag = won_second_round + } + desc = bp2_yearly.5107.desc.winning + } + triggered_desc = { + trigger = { + NOT = { + has_character_flag = won_second_round + } + } + desc = bp2_yearly.5107.desc.losing + } + desc = bp2_yearly.5107.ending + } + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = child_hobby_horse + } + right_portrait = { + character = scope:child + animation = child_hobby_horse + } + + # Final round, fight! + option = { + name = bp2_yearly.5107.a + + duel = { + skills = { intrigue prowess } + target = scope:child + 50 = { #You win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5107.a.success + send_interface_toast = { + title = bp2_yearly.5107.a.success + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_loss + + change_variable = { + name = joust_win_tally + add = 1 + } + } + } + 50 = { #You lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5107.a.failure + send_interface_toast = { + title = bp2_yearly.5107.a.failure + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_gain + + scope:child = { + change_variable = { + name = joust_win_tally + add = 1 + } + } + } + } + } + + stress_impact = { + stubborn = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + # All right, we both have one win... + option = { + name = bp2_yearly.5107.b + + send_interface_toast = { + title = bp2_yearly.5107.b.tt + left_icon = scope:child + random_list = { + 1 = { + desc = bp2_yearly.5107.b.tt_success + add_prowess_skill = 1 + } + 1 = { + desc = bp2_yearly.5107.b.tt_fail + custom_tooltip = bp2_yearly.5107.b_tt_fail + } + } + } + + reverse_add_opinion = { + target = scope:child + modifier = disappointed_opinion + opinion = -40 + } + + stress_impact = { + stubborn = minor_stress_impact_gain + brave = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + craven = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + } + } + + after = { + trigger_event = bp2_yearly.5108 + } +} + +# Joust resolution +bp2_yearly.5108 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5108.t + desc = { + triggered_desc = { + trigger = { + var:joust_win_tally > 1 + } + desc = bp2_yearly.5108.desc.winning + } + triggered_desc = { + trigger = { + NOT = { + var:joust_win_tally > 1 + } + } + desc = bp2_yearly.5108.desc.losing + } + } + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + triggered_animation = { + trigger = { var:joust_win_tally = 2 } + animation = throne_room_cheer_2 + } + triggered_animation = { + trigger = { + NOT = { var:joust_win_tally = 2 } + } + animation = crying + } + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + NOT = { var:joust_win_tally = 2 } + } + animation = crying + } + triggered_animation = { + trigger = { var:joust_win_tally = 2 } + animation = throne_room_cheer_2 + } + } + + immediate = { + if = { + limit = { + var:joust_win_tally = 2 + } + add_character_modifier = { + modifier = bp2_joust_prodigy_modifier + years = 15 + } + } + else = { + scope:child = { + add_character_modifier = { + modifier = bp2_joust_prodigy_modifier + years = 15 + } + } + } + } + + # Don't worry, I'm sure you'll get better! + option = { + name = bp2_yearly.5108.a + + trigger = { + var:joust_win_tally = 2 + } + + progress_towards_friend_effect = { + REASON = friend_joust_niceties + CHARACTER = scope:child + OPINION = 25 + } + + stress_impact = { + base = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + # Hah! In your FACE! + option = { + name = bp2_yearly.5108.b + + trigger = { + var:joust_win_tally = 2 + } + + progress_towards_rival_effect = { + REASON = rival_joust_antagonised + CHARACTER = scope:child + OPINION = -25 + } + + stress_impact = { + base = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + content = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + sadistic = miniscule_stress_impact_loss + callous = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + # Gracious in defeat + option = { + name = bp2_yearly.5108.c + + trigger = { + NOT = { + var:joust_win_tally = 2 + } + } + + scope:child = { + progress_towards_friend_effect = { + REASON = friend_joust_niceties + CHARACTER = root + OPINION = 25 + } + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + # Screw you, I'll get you next time! + option = { + name = bp2_yearly.5108.d + + trigger = { + NOT = { + var:joust_win_tally = 2 + } + } + + scope:child = { + progress_towards_rival_effect = { + REASON = rival_joust_antagonised + CHARACTER = root + OPINION = -25 + } + } + + stress_impact = { + compassionate = minor_stress_impact_gain + content = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + sadistic = miniscule_stress_impact_loss + callous = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + after = { + scope:child = { + remove_variable = joust_win_tally + } + remove_character_flag = won_second_round + remove_variable = joust_win_tally + } +} + +# You comfort a sad kid +bp2_yearly.5109 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.5109.t + desc = { + desc = bp2_yearly.5109.desc + first_valid = { + triggered_desc = { + trigger = { + scope:parent = { + is_parent_of = root + } + } + desc = bp2_yearly.5109.desc_sibling + } + desc = bp2_yearly.5109.desc_unrelated + } + } + theme = friendly + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:child + animation = crying + } + lower_center_portrait = { + character = scope:parent + } + + cooldown = { + years = 4 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 4 + is_available_child = yes + any_courtier_or_guest = { + is_alive = yes + is_available_child = yes + location = root.location + age >= 4 + age <= 16 + any_parent = { + is_alive = no + even_if_dead = yes + } + can_set_relation_friend_trigger = { CHARACTER = root } + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + is_alive = yes + is_available_child = yes + location = root.location + age >= 4 + age <= 16 + any_parent = { + is_alive = no + even_if_dead = yes + } + can_set_relation_friend_trigger = { CHARACTER = root } + } + save_scope_as = child + } + scope:child = { + random_parent = { + even_if_dead = yes + limit = { + is_alive = no + } + save_scope_as = parent + } + } + } + + # Comfort them with religion + option = { + name = bp2_yearly.5109.a + + trigger = { + AND = { + OR = { + faith.religion = { #Use Abrahamics for an afterlife + is_in_family = rf_abrahamic + } + religion = religion:zoroastrianism_religion #Or Zoroastrianism + } + OR = { #Either you or they are Zealous + has_trait = zealous + scope:child = { + has_trait = zealous + } + } + } + } + + add_learning_skill = 1 + + progress_towards_friend_effect = { + REASON = friend_religious_comfort + CHARACTER = scope:child + OPINION = default_friend_opinion + } + + add_character_modifier = { + modifier = bp2_afterlife_citer_modifier + years = 20 + } + + stress_impact = { + base = minor_stress_impact_loss + zealous = minor_stress_impact_loss + cynical = major_stress_impact_gain + sadistic = medium_stress_impact_gain + callous = medium_stress_impact_gain + } + + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = sadistic + has_trait = callous + has_trait = cynical + } + } + } + + # Comfort them with words + option = { + name = bp2_yearly.5109.b + + duel = { + skill = diplomacy + target = scope:child + 50 = { #They feel better + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.5109.b.success + send_interface_toast = { + title = bp2_yearly.5109.b.success + left_icon = root + right_icon = scope:child + + add_stress = miniscule_stress_loss + + add_diplomacy_skill = 1 + + progress_towards_friend_effect = { + REASON = friend_comforting_words + CHARACTER = scope:child + OPINION = default_friend_opinion + } + } + } + 50 = { #They are inconsolable + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = bp2_yearly.5109.b.failure + send_interface_toast = { + title = bp2_yearly.5109.b.failure + left_icon = root + right_icon = scope:child + + add_stress = medium_stress_gain + } + } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + shy = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.5 + ai_compassion = 1 + } + } + } + + # Leave + option = { + name = bp2_yearly.5109.c + + flavor = bp2_yearly.5109.c.tt + + add_character_modifier = { + modifier = bp2_numbed_to_death_modifier + years = 10 + } + + stress_impact = { + base = miniscule_stress_impact_gain + callous = minor_stress_impact_loss + sadistic = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + } + } +} diff --git a/events/dlc/bp2/bp2_yearly_7.txt b/events/dlc/bp2/bp2_yearly_7.txt new file mode 100644 index 00000000..1083b593 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_7.txt @@ -0,0 +1,6050 @@ +namespace = bp2_yearly + +################################################## +# Wet Nurse Events +# by Arkadiusz Majewski +# 7000 Wet Nurse is sick and can pass it down to a child +# 7001 Spouse is jealous about a Wet Nurse +# 7002 Turns out your relationship is incestous, due to having the same Wet Nurse +# 7003 Wet Nurse informs you about first words of your child +# 7004 Wet Nurse informs you about first steps of your child +# 7005 Wet Nurse informs you about first fallen teeth of your child +# 7006 Wet Nurse informs you about first fallen teeth of your child +# 7007 Hidden event to kick off either positive (7009, 7011) or negative (7008, 7010) paths +# 7008 Neglected child reflects on neglecting parent +# 7009 Cared child reflects on caring parent +# 7010 Neglected child demands something from you +# 7011 Cared child gives you something +# 7012 Child complains about fired Wet Nurse they liked +# 7013 Child grieves over dead Wet Nurse they liked +# 7014 Child and Wet Nurse connect over same faith/culture +# +# Rites of Passage - events outcomes for the decision bp2_decision.0002 +# 7021 duel +# 7022 Duel outcome +# 7023 scarification +# 7024 seclusion +# 7025 seclusion on arrival +# 7026 hair shaving +# 7027 cleansing with water +# 7028 cleansing with fire +# 7029 Completed rite memory follow up event - other tribal child does the rite, you can encourage them or let them back out +# +################################################## +scripted_effect contract_disease_from_wet_nurse_effect = { + if = { + limit = { + scope:wet_nurse ?= { has_trait = bubonic_plague } + can_contract_disease_trigger = { DISEASE = bubonic_plague } + } + contract_disease_effect = { DISEASE = bubonic_plague TREATMENT_EVENT = yes } + } + else_if = { + limit = { + scope:wet_nurse ?= { has_trait = smallpox } + can_contract_disease_trigger = { DISEASE = smallpox } + } + contract_disease_effect = { DISEASE = smallpox TREATMENT_EVENT = yes } + } + else_if = { + limit = { + scope:wet_nurse ?= { has_trait = typhus } + can_contract_disease_trigger = { DISEASE = typhus } + } + contract_disease_effect = { DISEASE = typhus TREATMENT_EVENT = yes } + } + else_if = { + limit = { + scope:wet_nurse ?= { has_trait = pneumonic } + can_contract_disease_trigger = { DISEASE = pneumonic } + } + contract_disease_effect = { DISEASE = pneumonic TREATMENT_EVENT = yes } + } + else_if = { + limit = { + scope:wet_nurse ?= { has_trait = ill } + can_contract_disease_trigger = { DISEASE = ill } + } + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + else = { + add_character_modifier = { + modifier = malnourished_modifier + years = 5 + } + } +} + +bp2_yearly.7000 = { #Wet Nurse is sick and can pass it down to a child + type = character_event + content_source = dlc_009 + title = bp2_yearly.7000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child ?= root} + desc = bp2_yearly.7000.desc_child_liege + } + desc = bp2_yearly.7000.desc + } + } + theme = family + override_background = { + reference = bp2_nursery + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + age < 12 + } + animation = crying + } + triggered_animation = { + trigger = { + age >= 12 + } + animation = worry + } + } + right_portrait = { + character = scope:wet_nurse + triggered_animation = { + trigger = { + root = { age < 12 } + } + animation = sadness + } + triggered_animation = { + trigger = { + root = { age >= 12 } + } + animation = crying + } + } + lower_right_portrait = { + trigger = { NOT = { scope:nursed_child ?= root } } + character = scope:nursed_child + } + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + save_temporary_scope_as = wet_nurse_temp + } + scope:wet_nurse_temp = { + OR = { + health < 3 + has_short_disease_trigger = yes + has_serious_disease_trigger = yes + } + } + OR = { + AND = { + is_available_adult = yes + any_child ?= { + has_relation_wet_nurse = scope:wet_nurse_temp + is_ai = yes + is_landed = no + is_adult = no + location = scope:wet_nurse_temp.location + } + } + AND = { + age >= 3 + is_available_child = yes + is_landed = yes + has_relation_wet_nurse = scope:wet_nurse_temp + location = scope:wet_nurse_temp.location + } + } + } + immediate = { + random_court_position_holder = { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + if = { + limit = { + is_available_adult = yes + } + random_child = { + limit = { + has_relation_wet_nurse = scope:wet_nurse + is_ai = yes + is_landed = no + is_adult = no + location = scope:wet_nurse.location + } + save_scope_as = nursed_child + } + } + else = { + save_scope_as = nursed_child + } + save_court_physician_as_effect = { SCOPE_NAME = court_physician } + if = { + limit = { scope:wet_nurse = { has_short_disease_trigger = yes} } + scope:wet_nurse = { + set_worst_disease_effect = yes + save_scope_as = sick_character + } + } + } + + + # Can't be your fault, you are a good nurse + option = { + name = bp2_yearly.7000.a + flavor = bp2_yearly.7000.a.tt + random_list = { + 15 = { + show_chance = no + desc = bp2_yearly.7000.ill + send_interface_toast = { + title = bp2_yearly.7000.a.tt + left_icon = root + right_icon = scope:nursed_child + scope:nursed_child = { + contract_disease_from_wet_nurse_effect = yes + } + } + } + 75 = { + show_chance = no + desc = bp2_yearly.7000.healthy + send_interface_toast = { + title = bp2_yearly.7000.a.tt + left_icon = root + right_icon = scope:nursed_child + custom_tooltip = bp2_yearly.7000.healthy.tt + } + } + } + scope:wet_nurse = { + add_character_modifier = { + modifier = safe_disease_treatment_success_high_modifier + days = disease_treatment_short_duration + } + } + remove_short_term_gold = minor_gold_value + stress_impact = { + compassionate = medium_stress_impact_loss + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = wrathful + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + # I'm disappointed and gonna fire you + option = { + name = bp2_yearly.7000.b + revoke_court_position = { + recipient = scope:wet_nurse + court_position = wet_nurse_court_position + } + random_list = { + 10 = { + show_chance = no + desc = bp2_yearly.7000.ill + send_interface_toast = { + title = bp2_yearly.7000.b.tt + left_icon = root + right_icon = scope:nursed_child + scope:nursed_child = { + contract_disease_from_wet_nurse_effect = yes + } + } + } + 90 = { + show_chance = no + desc = bp2_yearly.7000.healthy + send_interface_toast = { + title = bp2_yearly.7000.b.tt + left_icon = root + right_icon = scope:nursed_child + custom_tooltip = bp2_yearly.7000.healthy.tt + } + } + } + stress_impact = { + wrathful = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = compassionate + add = -10 + } + } + } + # I'm mad and gonna throw you in prison + option = { + name = { + trigger = { is_adult = no } + text = bp2_yearly.7000.c_child_liege + } + name = { + trigger = { is_adult = yes } + text = bp2_yearly.7000.c + } + rightfully_imprison_character_effect = { + TARGET = scope:wet_nurse + IMPRISONER = root + } + random_list = { + 5 = { + show_chance = no + desc = bp2_yearly.7000.ill + send_interface_toast = { + title = bp2_yearly.7000.b.tt + left_icon = root + right_icon = scope:nursed_child + scope:nursed_child = { + contract_disease_from_wet_nurse_effect = yes + } + } + } + 95 = { + show_chance = no + desc = bp2_yearly.7000.healthy + send_interface_toast = { + title = bp2_yearly.7000.b.tt + left_icon = root + right_icon = scope:nursed_child + custom_tooltip = bp2_yearly.7000.healthy.tt + } + } + } + stress_impact = { + wrathful = medium_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 5 + modifier = { + has_trait = wrathful + add = 10 + } + modifier = { + has_trait = compassionate + add = -5 + } + } + } +} + +bp2_yearly.7001 = { #Spouse is jealous about a Wet Nurse + type = character_event + content_source = dlc_009 + title = bp2_yearly.7001.t + desc = { + desc = bp2_yearly.7001.desc + first_valid = { + triggered_desc = { + trigger = { has_relation_lover = scope:wet_nurse } + desc = bp2_yearly.7001.desc_lover + } + desc = bp2_yearly.7001.desc_no_lover + } + } + theme = family + override_background = { + reference = bp2_nursery + } + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:jealous_spouse + animation = go_to_your_room + } + lower_right_portrait = scope:wet_nurse + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + OR = { + has_trait = beauty_good + has_trait = physique_good + has_trait = strong + has_trait = loyal + has_trait = lustful + } + save_temporary_scope_as = wet_nurse_temp + } + is_attracted_to_gender_of = scope:wet_nurse_temp + any_spouse ?= { + is_available_ai_adult = yes + NOT = { + this = scope:wet_nurse_temp + any_known_secret = { + secret_owner = root + AND = { + secret_type = secret_lover + secret_target = scope:wet_nurse_temp + } + } + } + OR = { + has_trait = fickle + has_trait = vengeful + has_trait = wrathful + has_trait = arbitrary + has_trait = paranoid + } + } + } + immediate = { + random_court_position_holder = { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + random_spouse ?= { + limit = { + is_available_ai_adult = yes + NOT = { + any_known_secret = { + secret_owner = root + AND = { + secret_type = secret_lover + secret_target = scope:wet_nurse_temp + } + } + } + OR = { + has_trait = fickle + has_trait = vengeful + has_trait = wrathful + has_trait = arbitrary + has_trait = paranoid + root = { + any_secret = { + secret_type = secret_lover + secret_target = scope:wet_nurse + } + } + } + } + save_scope_as = jealous_spouse + } + if = { + limit = { + any_secret = { + type = secret_lover + secret_target = scope:wet_nurse + NOT = { + any_secret_knower = { THIS = scope:jealous_spouse } + } + } + } + random_secret = { + type = secret_lover + limit = { + secret_target = scope:wet_nurse + NOT = { + any_secret_knower = { THIS = scope:jealous_spouse } + } + } + save_scope_as = wet_nurse_secret_lover + } + } + } + + option = { #try to convince your spouse it's not a big deal, although she is right + name = bp2_yearly.7001.a + trigger = { + exists = scope:wet_nurse_secret_lover + } + reason = scope:wet_nurse_secret_lover + custom_tooltip = bp2_yearly.7001.a.tt + duel = { + skill = intrigue + target = scope:jealous_spouse + # you comfort your spouse + 65 = { + desc = bp2_yearly.7001.b.spouse_convinced + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + reverse_add_opinion = { + target = scope:jealous_spouse + modifier = relieved_opinion + opinion = 10 + } + reverse_add_opinion = { + target = scope:wet_nurse + modifier = protected_me_opinion + opinion = 10 + } + } + # your spouse is right about your affair + 35 = { + desc = bp2_yearly.7001.b.spouse_not_convinced + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + scope:wet_nurse_secret_lover = { + reveal_to = scope:jealous_spouse + } + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = wrathful + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + + option = { #try to convince your spouse it's not a big deal, because it isn't or she already knows + name = bp2_yearly.7001.b + trigger = { + NOT = { exists = scope:wet_nurse_secret_lover } + } + duel = { + skill = diplomacy + target = scope:jealous_spouse + # you comfort your spouse + 65 = { + desc = bp2_yearly.7001.b.spouse_convinced + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { #you are a known liar + factor = 0 + OR = { + any_secret = { + type = secret_lover + secret_target != scope:jealous_spouse + any_secret_knower = { THIS = scope:jealous_spouse } + } + has_trait = adulterer + } + } + reverse_add_opinion = { + target = scope:jealous_spouse + modifier = relieved_opinion + opinion = 10 + } + } + 35 = { + trigger = { + NOR = { + any_secret = { + type = secret_lover + secret_target != scope:jealous_spouse + any_secret_knower = { THIS = scope:jealous_spouse } + } + has_trait = adulterer + } + } + desc = bp2_yearly.7001.b.spouse_not_convinced + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + reverse_add_opinion = { + target = scope:jealous_spouse + modifier = cheater_opinion + opinion = -30 + } + } + # you're a known liar + 100 = { + trigger = { + OR = { + any_secret = { + type = secret_lover + secret_target != scope:jealous_spouse + any_secret_knower = { THIS = scope:jealous_spouse } + } + has_trait = adulterer + } + } + desc = bp2_yearly.7001.tt + reverse_add_opinion = { + target = scope:jealous_spouse + modifier = cheater_opinion + opinion = -30 + } + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = wrathful + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + # Get rid of the problem, fire the nurse + option = { + name = bp2_yearly.7001.c + revoke_court_position = { + recipient = scope:wet_nurse + court_position = wet_nurse_court_position + } + reverse_add_opinion = { + target = scope:jealous_spouse + modifier = pleased_opinion + opinion = 30 + } + stress_impact = { + wrathful = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = compassionate + add = -10 + } + } + } +} + +bp2_yearly.7002 = { #Turns out your relationship is incestous, due to having the same Wet Nurse + type = character_event + content_source = dlc_009 + title = bp2_yearly.7002.t + desc = bp2_yearly.7002.desc + theme = family + override_background = { + reference = relaxing_room + } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:court_chaplain + animation = worry + } + lower_left_portrait = scope:spouse + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + faith = { + OR = { + has_doctrine = doctrine_consanguinity_restricted + has_doctrine = doctrine_consanguinity_cousins + } + } + any_spouse ?= { + is_ai = yes + NOT = { is_close_family_of = root } + has_same_wet_nurse_trigger = { + SCOPE = this + OTHER_SCOPE = root + } + save_temporary_scope_as = spouse_temp + } + OR = { + cp:councillor_court_chaplain ?= { + NOT = { has_character_flag = had_bp2_yearly_7002 } + is_available_ai_adult = yes + } + any_courtier_or_guest = { + is_clergy = yes + } + } + } + weight_multiplier = { + base = 1 + modifier = { + add = 4 + faith.religion ?= religion:islam_religion + } + modifier = { + add = 4 + scope:court_chaplain ?= { + OR = { + opinion = { + target = root + value <= -50 + } + opinion = { + target = scope:spouse_temp + value <= -50 + } + OR = { + has_relation_rival = root + has_relation_nemesis = root + } + OR = { + has_relation_rival = scope:spouse_temp + has_relation_nemesis = scope:spouse_temp + } + } + } + } + } + immediate = { + random_spouse ?= { + limit = { + is_ai = yes + NOT = { is_close_family_of = root } + has_same_wet_nurse_trigger = { + SCOPE = this + OTHER_SCOPE = root + } + } + save_scope_as = spouse + } + if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { save_scope_as = court_chaplain } + } + else = { + ordered_courtier_or_guest = { + limit = { is_clergy = yes } + order_by = ai_zeal + save_scope_as = court_chaplain + } + } + } + + option = { #I guess it's incest? + name = bp2_yearly.7002.a + scope:spouse = { + add_secret = { + type = secret_incest + } + } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 25 + } + add_secret = { + type = secret_incest + target = scope:spouse + } + progress_towards_rival_effect = { + REASON = rival_accused_of_perversion + CHARACTER = scope:court_chaplain + OPINION = default_rival_opinion + } + random_secret = { + type = secret_incest + reveal_to_without_events_effect = { + CHARACTER = scope:court_chaplain + } + } + create_character_memory = { + type = incestous_marriage_wet_nurse + participants = { + spouse = scope:spouse + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + add = -10 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = cynical + } + add = 10 + } + } + } + + option = { #divorce them + name = bp2_yearly.7002.b + divorce_effect = { + DIVORCER = root + DIVORCEE = scope:spouse + } + reverse_add_opinion = { + target = scope:court_chaplain + modifier = took_my_advice_opinion + opinion = 25 + } + create_character_memory = { + type = incestous_divorce_wet_nurse + participants = { + spouse = scope:spouse + } + } + stress_impact = { + zealous = medium_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = zealous + add = 10 + } + modifier = { + OR = { + has_relation_lover = scope:spouse + has_relation_soulmate = scope:spouse + } + factor = 0 + } + } + } + option = { #pay them off + name = bp2_yearly.7002.c + pay_short_term_gold = { + target = scope:court_chaplain + gold = minor_gold_value + } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 10 + } + reverse_add_opinion = { + target = scope:court_chaplain + modifier = pleased_opinion + opinion = 10 + } + create_character_memory = { + type = incestous_marriage_wet_nurse + participants = { + spouse = scope:spouse + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = greedy + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + after = { + scope:court_chaplain = { + add_character_flag = had_bp2_yearly_7002 + } + } +} + +scripted_effect parental_neglect_effect = { + if = { + limit = { + $RESENTING$ = { + has_relation_nemesis = $RESENTED$ + } + } + send_interface_toast = { + title = bp2_yearly.parental_neglect_effect + left_icon = $RESENTING$ + right_icon = $RESENTED$ + add_opinion = { + target = $RESENTED$ + modifier = hate_opinion + opinion = -50 + } + } + } + else_if = { + limit = { + $RESENTING$ = { + has_relation_rival = $RESENTED$ + } + } + $RESENTING$ = { + set_relation_nemesis = { + target = $RESENTED$ + reason = rival_parent_neglect + } + } + } + else_if = { + limit = { + $RESENTING$ = { + has_relation_potential_rival = $RESENTED$ + } + } + $RESENTING$ = { + set_relation_rival = { + target = $RESENTED$ + reason = rival_parent_neglect + } + } + } + else = { + random = { + chance = 20 + $RESENTING$ = { + set_relation_potential_rival = { + target = $RESENTED$ + reason = rival_parent_neglect + } + } + } + } +} + +bp2_yearly.7003 = { #Wet Nurse informs you about first words of your child + type = character_event + content_source = dlc_009 + title = bp2_yearly.7003.t + desc = { + desc = bp2_yearly.7003.desc + first_valid = { + triggered_desc = { + trigger = { scope:first_word = flag:motto} + desc = bp2_yearly.7003.desc_motto + } + triggered_desc = { + trigger = { scope:first_word = flag:house} + desc = bp2_yearly.7003.desc_house + } + triggered_desc = { + trigger = { scope:first_word = flag:military} + desc = bp2_yearly.7003.desc_military + } + triggered_desc = { + trigger = { scope:first_word = flag:gold} + desc = bp2_yearly.7003.desc_gold + } + triggered_desc = { + trigger = { scope:first_word = flag:secret} + desc = bp2_yearly.7003.desc_secret + } + triggered_desc = { + trigger = { scope:first_word = flag:faith} + desc = bp2_yearly.7003.desc_faith + } + triggered_desc = { + trigger = { scope:first_word = flag:gibberish root = {is_male = yes}} + desc = bp2_yearly.7003.desc_father + } + triggered_desc = { + trigger = { scope:first_word = flag:gibberish root = {is_female = yes}} + desc = bp2_yearly.7003.desc_mother + } + } + } + theme = family + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:nursed_child + animation = clutching_toy + } + lower_right_portrait = scope:wet_nurse + + cooldown = { years = 12 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + is_available_adult = yes + location = root.location + } + any_courtier = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 50 + any_child = { + OR = { + this = root.player_heir + NOT = { + any_sibling = { + age > prev.age + } + } + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + } + + immediate = { + random_court_position_holder ?= { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + random_courtier = { + limit = { + age < 5 + child_not_infant_trigger = yes + this = root.player_heir + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + NOT = { + any_sibling = { + age > prev.age + } + } + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + weight = { + base = 1 + modifier = { + add = 50 + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + save_scope_as = nursed_child + } + scope:nursed_child = { + random_list = { + 0 = { + modifier = { + add = 10 + highest_skill = diplomacy + } + save_scope_value_as = { + name = first_word + value = flag:house + } + } + 0 = { + modifier = { + add = 10 + OR = { + highest_skill_including_prowess = prowess + highest_skill_including_prowess = martial + } + } + save_scope_value_as = { + name = first_word + value = flag:military + } + } + 0 = { + modifier = { + add = 10 + highest_skill = stewardship + } + save_scope_value_as = { + name = first_word + value = flag:gold + } + } + 0 = { + modifier = { + add = 10 + highest_skill = intrigue + } + save_scope_value_as = { + name = first_word + value = flag:secret + } + } + 0 = { + modifier = { + add = 10 + highest_skill = learning + } + save_scope_value_as = { + name = first_word + value = flag:faith + } + } + 5 = { + save_scope_value_as = { + name = first_word + value = flag:gibberish + } + } + 0 = { + modifier = { + add = 100 + has_trait = intellect_good + } + save_scope_value_as = { + name = first_word + value = flag:motto + } + } + } + set_variable = { + name = nursed_child_parent_var + value = root + } + } + } + + option = { #This is lovely! + name = bp2_yearly.7003.a + switch = { + trigger = scope:first_word + flag:house = { + add_prestige = miniscule_prestige_gain + } + flag:military = { + add_prestige = miniscule_prestige_gain + } + flag:gold = { + add_gold = 1 + } + flag:secret = { + add_prestige = miniscule_prestige_gain + } + flag:faith = { + add_piety = miniscule_piety_gain + } + flag:gibberish = { + add_piety = miniscule_piety_gain + } + flag:motto = { + dynasty = { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + } + } + } + scope:nursed_child = { + add_to_variable_list = { + name = praise_reason + target = flag:word + } + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + stress_impact = { + compassionate = medium_stress_impact_loss + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + + option = { #What else they can? + name = bp2_yearly.7003.b + flavor = bp2_yearly.7003.b.tt + scope:nursed_child = { + add_stress = 50 + switch = { + trigger = scope:first_word + flag:house = { + add_diplomacy_skill = 1 + } + flag:military = { + add_martial_skill = 1 + } + flag:gold = { + add_stewardship_skill = 1 + } + flag:secret = { + add_intrigue_skill = 1 + } + flag:faith = { + add_learning_skill = 1 + } + flag:gibberish = { + add_learning_skill = 1 + } + flag:motto = { + add_trait = eccentric + } + } + add_to_variable_list = { + name = praise_reason + target = flag:word + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + content = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = content + add = -10 + } + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = ambitious + add = 10 + } + } + } + + option = { #I don't really care + name = bp2_yearly.7003.c + parental_neglect_effect = { + RESENTING = scope:nursed_child + RESENTED = root + } + scope:nursed_child = { + add_to_variable_list = { + name = neglect_reason + target = flag:word + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = impatient + add = 10 + } + } + } +} + +bp2_yearly.7004 = { #Wet Nurse informs you about first steps of your child + type = character_event + content_source = dlc_009 + title = bp2_yearly.7004.t + desc = bp2_yearly.7004.desc + theme = family + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:nursed_child + animation = throne_room_bow_2 + } + lower_right_portrait = scope:wet_nurse + + cooldown = { years = 12 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + is_available_adult = yes + location = root.location + } + any_courtier = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 50 + any_child = { + OR = { + this = root.player_heir + NOT = { + any_sibling = { + age > prev.age + } + } + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + } + + immediate = { + random_court_position_holder = { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + random_courtier = { + limit = { + age < 5 + child_not_infant_trigger = yes + this = root.player_heir + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + NOT = { + any_sibling = { + age > prev.age + } + } + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + age < 5 + child_not_infant_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + weight = { + base = 1 + modifier = { + add = 50 + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + save_scope_as = nursed_child + } + scope:nursed_child = { + set_variable = { + name = nursed_child_parent_var + value = root + } + } + } + + option = { #This is lovely! + name = bp2_yearly.7004.a + add_prestige = miniscule_prestige_gain + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + scope:nursed_child = { + add_to_variable_list = { + name = praise_reason + target = flag:step + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + option = { #What else they can? + name = bp2_yearly.7004.b + flavor = bp2_yearly.7004.b.tt + scope:nursed_child = { + add_stress = 50 + add_prowess_skill = 1 + add_to_variable_list = { + name = praise_reason + target = flag:step + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + content = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = content + add = -10 + } + modifier = { + has_trait = ambitious + add = 10 + } + } + } + + option = { #I don't really care + name = bp2_yearly.7004.c + parental_neglect_effect = { + RESENTING = scope:nursed_child + RESENTED = root + } + scope:nursed_child = { + add_to_variable_list = { + name = neglect_reason + target = flag:step + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = impatient + add = 10 + } + } + } +} + +bp2_yearly.7005 = { #Wet Nurse informs you about first fallen teeth of your child + type = character_event + content_source = dlc_009 + title = bp2_yearly.7005.t + desc = bp2_yearly.7005.desc + theme = family + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:nursed_child + animation = throne_room_cheer_2 + } + lower_right_portrait = scope:wet_nurse + + cooldown = { years = 12 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + is_available_adult = yes + location = root.location + } + any_courtier = { + child_not_infant_trigger = yes + age <= 8 + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 50 + any_child = { + OR = { + this = root.player_heir + NOT = { + any_sibling = { + age > prev.age + } + } + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + } + + immediate = { + random_court_position_holder ?= { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + random_courtier = { + limit = { + child_not_teen_trigger = yes + this = root.player_heir + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + alternative_limit = { + child_not_teen_trigger = yes + NOT = { + any_sibling = { + age > prev.age + } + } + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + child_not_teen_trigger = yes + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + child_not_teen_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + weight = { + base = 1 + modifier = { + add = 50 + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + save_scope_as = nursed_child + } + hidden_effect = { + scope:nursed_child = { + create_artifact = { + name = child_teeth_memorabilia + description = child_teeth_memorabilia_desc + type = miscellaneous + visuals = pocket_pouch + modifier = artifact_child_opinion_2_modifier + modifier = artifact_monthly_minor_prestige_1_modifier + save_scope_as = child_teeth + } + set_variable = { + name = nursed_child_parent_var + value = root + } + } + scope:child_teeth = { + flag_as_trash_artifact = yes + } + } + } + + option = { #This is lovely! + name = bp2_yearly.7005.a + add_prestige = miniscule_prestige_gain + scope:child_teeth = { + set_owner = scope:nursed_child + } + scope:nursed_child = { + add_to_variable_list = { + name = praise_reason + target = flag:tooth + } + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + stress_impact = { + compassionate = medium_stress_impact_loss + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + option = { #I'll give you some coins + name = bp2_yearly.7005.b + pay_short_term_gold = { + target = scope:nursed_child + gold = tiny_gold_value + } + scope:child_teeth = { + set_owner = root + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + scope:nursed_child = { + add_to_variable_list = { + name = praise_reason + target = flag:tooth + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + content = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = content + add = -10 + } + modifier = { + has_trait = ambitious + add = 10 + } + } + } + + option = { #I don't really care + name = bp2_yearly.7005.c + parental_neglect_effect = { + RESENTING = scope:nursed_child + RESENTED = root + } + scope:child_teeth = { + set_owner = scope:wet_nurse + } + scope:nursed_child = { + add_to_variable_list = { + name = neglect_reason + target = flag:tooth + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = impatient + add = 10 + } + } + } +} + +bp2_yearly.7006 = { #Wet Nurse informs you about first independent dress up of your child + type = character_event + content_source = dlc_009 + title = bp2_yearly.7006.t + desc = bp2_yearly.7006.desc + theme = family + override_background = { reference = bp2_nursery } + left_portrait = { + character = root + outfit_tags = { nightgown } + animation = laugh + } + right_portrait = { + character = scope:nursed_child + outfit_tags = { travel_cloak } + animation = manic + } + lower_right_portrait = scope:wet_nurse + + cooldown = { years = 12 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + any_court_position_holder ?= { + type = wet_nurse_court_position + is_available_adult = yes + location = root.location + } + any_courtier = { + child_not_infant_trigger = yes + age <= 10 + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 50 + any_child = { + OR = { + this = root.player_heir + NOT = { + any_sibling = { + age > prev.age + } + } + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + } + + immediate = { + random_court_position_holder ?= { + type = wet_nurse_court_position + save_scope_as = wet_nurse + } + random_courtier = { + limit = { + child_not_teen_trigger = yes + this = root.player_heir + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + alternative_limit = { + child_not_teen_trigger = yes + NOT = { + any_sibling = { + age > prev.age + } + } + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + child_not_teen_trigger = yes + is_available_ai = yes + location = root.location + is_child_of = root + } + alternative_limit = { + child_not_teen_trigger = yes + is_available_ai = yes + location = root.location + OR = { + is_child_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } + } + weight = { + base = 1 + modifier = { + add = 50 + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + save_scope_as = nursed_child + } + scope:nursed_child = { + set_variable = { + name = nursed_child_parent_var + value = root + } + } + } + + option = { #This is lovely! + name = bp2_yearly.7006.a + add_prestige = miniscule_prestige_gain + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + scope:nursed_child = { + add_to_variable_list = { + name = praise_reason + target = flag:dress + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + option = { #I'll give you a nickname, negative + name = bp2_yearly.7006.b + scope:nursed_child = { + if = { + limit = { + OR = { + has_any_nickname = no + has_bad_nickname = yes + } + } + give_nickname = nick_prince_of_fashion + } + add_to_variable_list = { + name = neglect_reason + target = flag:dress + } + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = grateful_child + } + stress_impact = { + ambitious = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + content = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = content + add = -10 + } + modifier = { + OR = { + has_trait = ambitious + has_trait = callous + has_trait = sadistic + } + add = 10 + } + } + } + + option = { #I don't really care + name = bp2_yearly.7005.c + parental_neglect_effect = { + RESENTING = scope:nursed_child + RESENTED = root + } + scope:nursed_child = { + add_to_variable_list = { + name = neglect_reason + target = flag:dress + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = impatient + add = 10 + } + } + } +} + +bp2_yearly.7007 = { #Hidden event to kick off either positive (7009, 7011) or negative (7008, 7010) paths + hidden = yes + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + any_parent = { + is_alive = yes + } + } + on_trigger_fail = { + if = { + limit = { + OR = { + has_variable = nursed_child_parent_var + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + clear_variable_list = neglect_reason + clear_variable_list = praise_reason + remove_variable = nursed_child_parent_var + } + } + + immediate = { + save_scope_as = nursed_child + if = { + limit = { + any_parent = { + is_alive = yes + scope:nursed_child.var:nursed_child_parent_var ?= this + } + } + random_parent = { + limit = { + is_alive = yes + scope:nursed_child.var:nursed_child_parent_var ?= this + } + save_scope_as = reflecting_parent + } + } + else = { + random_parent = { + limit = { + is_alive = yes + } + save_scope_as = reflecting_parent + } + } + if = { + limit = { + scope:nursed_child = { + has_variable_list = neglect_reason + } + } + scope:nursed_child = { + trigger_event = bp2_yearly.7008 + } + } + else = { + scope:nursed_child = { + trigger_event = bp2_yearly.7009 + } + } + } +} + +scripted_effect take_parent_title_effect = { + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change + add_claim_on_loss = no + } + scope:parent_title = { + change_title_holder = { + holder = scope:nursed_child + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change +} + +bp2_yearly.7008 = { #Neglected child reflects on neglecting parent + type = character_event + content_source = dlc_009 + title = bp2_yearly.7008.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7008.desc + } + desc = bp2_yearly.7008.desc_dead_parent + } + triggered_desc = { + trigger = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:word + } + } + desc = bp2_yearly.7008.desc_word + } + triggered_desc = { + trigger = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:step + } + } + desc = bp2_yearly.7008.desc_step + } + triggered_desc = { + trigger = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:tooth + } + } + desc = bp2_yearly.7008.desc_tooth + } + triggered_desc = { + trigger = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:dress + } + } + desc = bp2_yearly.7008.desc_dress + } + desc = bp2_yearly.7008.desc_end + } + theme = family + override_background = { + reference = courtyard + } + + left_portrait = { + character = scope:nursed_child + animation = anger + } + right_portrait = { + character = scope:reflecting_parent + animation = schadenfreude + } + lower_right_portrait = { + trigger = { NOT = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } } + character = scope:nursed_child.var:nursed_child_parent_var + } + + immediate = { + scope:reflecting_parent = { + if = { + limit = { + any_held_title = { + count > 1 + title_tier = county + is_landless_type_title = no + } + } + random_held_title = { + title_tier = county + limit = { + is_landless_type_title = no + } + save_scope_as = parent_title + } + } + } + } + + option = { #I want your titles + name = bp2_yearly.7008.a + custom_tooltip = bp2_yearly.7008.tt + trigger = { exists = scope:parent_title } + show_as_tooltip = { + random_list = { + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_good + take_parent_title_effect = yes + } + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_bad + scope:nursed_child = { + add_hook = { + target = scope:reflecting_parent + type = loyalty_hook + } + } + } + } + } + scope:reflecting_parent = { + save_scope_value_as = { + name = child_request + value = flag:title + } + trigger_event = bp2_yearly.7010 + } + stress_impact = { + ambitious = medium_stress_impact_gain + content = medium_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + has_trait = ambitious + add = 10 + } + modifier = { + has_trait = compassionate + add = -10 + } + } + } + + option = { #I want gold + name = bp2_yearly.7008.b + custom_tooltip = bp2_yearly.7008.tt + show_as_tooltip = { + random_list = { + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_good + scope:reflecting_parent = { + pay_short_term_gold = { + target = scope:nursed_child + gold = massive_gold_value + } + } + } + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_bad + scope:nursed_child = { + add_hook = { + target = scope:reflecting_parent + type = loyalty_hook + } + } + } + } + } + scope:reflecting_parent = { + save_scope_value_as = { + name = child_request + value = flag:gold + } + trigger_event = bp2_yearly.7010 + } + stress_impact = { + greedy = medium_stress_impact_loss + generous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = generous + add = -10 + } + modifier = { + has_trait = greedy + add = 10 + } + } + } + + option = { #I hate you! + name = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + text = bp2_yearly.7008.c + } + name = { + trigger = { NOT = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } } + text = bp2_yearly.7008.c_dead_parent + } + custom_tooltip = bp2_yearly.7008.tt + trigger = { + OR = { + has_trait = vengeful + has_trait = ambitious + has_trait = arrogant + has_trait = callous + has_trait = impatient + has_trait = stubborn + has_trait = wrathful + } + } + show_as_tooltip = { + random_list = { + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_good + parental_neglect_effect = { + RESENTING = root + RESENTED = scope:reflecting_parent + } + } + 1 = { + show_chance = no + desc = bp2_yearly.7008.a.tt_bad + scope:nursed_child = { + add_hook = { + target = scope:reflecting_parent + type = loyalty_hook + } + } + } + } + } + scope:reflecting_parent = { + save_scope_value_as = { + name = child_request + value = flag:hate + } + trigger_event = bp2_yearly.7010 + } + stress_impact = { + forgiving = minor_stress_impact_gain + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + patient = minor_stress_impact_gain + fickle = minor_stress_impact_gain + calm = minor_stress_impact_gain + vengeful = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + callous = minor_stress_impact_loss + impatient = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + OR = { + has_trait = vengeful + has_trait = ambitious + has_trait = arrogant + has_trait = callous + has_trait = impatient + has_trait = stubborn + has_trait = wrathful + } + add = 10 + } + modifier = { + OR = { + has_trait = forgiving + has_trait = content + has_trait = humble + has_trait = compassionate + has_trait = patient + has_trait = fickle + has_trait = calm + } + add = -10 + } + } + } + + option = { #I forgive you + name = bp2_yearly.7008.d + trigger = { + OR = { + has_trait = forgiving + has_trait = content + has_trait = humble + has_trait = compassionate + has_trait = patient + has_trait = fickle + has_trait = calm + } + } + add_character_modifier = { + modifier = role_model_parent + years = 15 + } + stress_impact = { + vengeful = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + callous = minor_stress_impact_gain + impatient = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + forgiving = minor_stress_impact_loss + content = minor_stress_impact_loss + humble = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + patient = minor_stress_impact_loss + fickle = minor_stress_impact_loss + calm = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + OR = { + has_trait = vengeful + has_trait = ambitious + has_trait = arrogant + has_trait = callous + has_trait = impatient + has_trait = stubborn + has_trait = wrathful + } + add = -10 + } + modifier = { + OR = { + has_trait = forgiving + has_trait = content + has_trait = humble + has_trait = compassionate + has_trait = patient + has_trait = fickle + has_trait = calm + } + add = 10 + } + } + } + + option = { #Like father like son + name = bp2_yearly.7008.e + scope:nursed_child = { + clear_variable_list = neglect_reason + clear_variable_list = praise_reason + add_character_modifier = { + modifier = child_like_parent_modifier + years = 10 + } + } + stress_impact = { + base = major_stress_loss + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + OR = { + has_trait = impatient + has_trait = callous + has_trait = sadistic + has_trait = wrathful + } + add = 10 + } + } + } +} + +bp2_yearly.7009 = { #Cared child reflects on caring parent + type = character_event + content_source = dlc_009 + title = bp2_yearly.7009.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7009.desc + } + desc = bp2_yearly.7009.desc_dead_parent + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:word + } + } + } + desc = bp2_yearly.7009.desc_word + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:step + } + } + } + desc = bp2_yearly.7009.desc_step + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:tooth + } + } + } + desc = bp2_yearly.7009.desc_tooth + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:dress + } + } + } + desc = bp2_yearly.7009.desc_dress + } + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7009.desc_end + } + desc = bp2_yearly.7009.desc_end_dead_parent + } + } + theme = family + override_background = { + reference = garden + } + left_portrait = { + character = scope:nursed_child + animation = happiness + } + right_portrait = { + character = scope:reflecting_parent + animation = personality_content + } + lower_right_portrait = { + trigger = { NOT = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } } + character = scope:nursed_child.var:nursed_child_parent_var + } + + option = { #I love my parent + name = bp2_yearly.7009.a + custom_tooltip = bp2_yearly.7008.tt + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_yearly.7009.a.tt_good + show_chance = no + scope:nursed_child = { + if = { + limit = { NOT = { has_trait = loyal } } + add_trait = loyal + } + else = { + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7010.c.tt + left_icon = scope:reflecting_parent + add_opinion = { + target = scope:nursed_child + modifier = love_opinion + opinion = 50 + } + } + } + } + } + } + 1 = { + desc = bp2_yearly.7009.a.tt_bad + show_chance = no + scope:reflecting_parent = { + add_hook = { + target = scope:nursed_child + type = loyalty_hook + } + } + } + } + } + scope:reflecting_parent = { + save_scope_value_as = { + name = child_request + value = flag:receive_love + } + trigger_event = bp2_yearly.7011 + } + stress_impact = { + compassionate = minor_stress_impact_loss + honest = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = arrogant + add = -10 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = honest + } + add = 10 + } + } + } + + option = { #I'll be as good as them + name = bp2_yearly.7009.b + add_character_modifier = { + modifier = parenting_by_example + years = 15 + } + custom_tooltip = bp2_yearly.7008.tt + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_yearly.7009.a.tt_good + show_chance = no + scope:reflecting_parent = { + add_character_modifier = { + modifier = role_model_parent + years = 15 + } + } + } + 1 = { + desc = bp2_yearly.7009.a.tt_bad + show_chance = no + scope:reflecting_parent = { + add_hook = { + target = scope:nursed_child + type = loyalty_hook + } + } + } + } + } + scope:reflecting_parent = { + save_scope_value_as = { + name = child_request + value = flag:forwarded_love + } + trigger_event = bp2_yearly.7011 + } + stress_impact = { + ambitious = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + lazy = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + OR = { + has_trait = lazy + has_trait = humble + } + add = -10 + } + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + add = 10 + } + } + } + + option = { #Like father like son + name = bp2_yearly.7009.c + if = { + limit = { + scope:nursed_child = { + OR = { + has_variable = nursed_child_parent_var + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + scope:nursed_child = { + clear_variable_list = neglect_reason + clear_variable_list = praise_reason + remove_variable = nursed_child_parent_var + } + } + stress_impact = { + base = major_stress_loss + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + OR = { + has_trait = impatient + has_trait = callous + has_trait = sadistic + has_trait = wrathful + } + add = 10 + } + } + } +} + +bp2_yearly.7010 = { #Neglected child demands something from you + type = character_event + content_source = dlc_009 + title = bp2_yearly.7010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7010.desc + } + desc = bp2_yearly.7010.desc_dead_parent + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:word + } + } + } + desc = bp2_yearly.7010.desc_word + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:step + } + } + } + desc = bp2_yearly.7010.desc_step + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:tooth + } + } + } + desc = bp2_yearly.7010.desc_tooth + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = neglect_reason + target = flag:dress + } + } + } + desc = bp2_yearly.7010.desc_dress + } + desc = bp2_yearly.7010.desc_end + triggered_desc = { + trigger = { + scope:child_request = flag:hate + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7010.desc_hate + } + desc = bp2_yearly.7010.desc_hate_dead_parent + } + } + } + triggered_desc = { + trigger = { + scope:child_request = flag:gold + } + desc = bp2_yearly.7010.desc_gold + } + triggered_desc = { + trigger = { + scope:child_request = flag:title + } + desc = bp2_yearly.7010.desc_title + } + } + theme = family + override_background = { + reference = courtyard + } + left_portrait = { + character = scope:reflecting_parent + animation = war_defender + } + right_portrait = { + character = scope:nursed_child + animation = anger + } + lower_right_portrait = { + trigger = { NOT = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } } + character = scope:nursed_child.var:nursed_child_parent_var + } + + option = { #I'm so sorry + name = bp2_yearly.7010.a + trigger = { NOT = { scope:child_request ?= flag:hate } } + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7010.a.tt + left_icon = scope:reflecting_parent + if = { + limit = { scope:child_request ?= flag:title } + take_parent_title_effect = yes + } + else = { + scope:reflecting_parent = { + pay_short_term_gold = { + target = scope:nursed_child + gold = massive_gold_value + } + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + generous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + OR = { + has_trait = callous + has_trait = greedy + } + add = -10 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = generous + } + add = 10 + } + modifier = { + factor = 0 + AND = { + short_term_gold < massive_gold_value + scope:child_request ?= flag:gold + } + } + } + } + option = { #How about a hook instead? + name = bp2_yearly.7010.b + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7010.b.tt + left_icon = scope:reflecting_parent + if = { + limit = { has_hook = scope:reflecting_parent } + use_hook = scope:reflecting_parent + } + add_hook = { + target = scope:reflecting_parent + type = loyalty_hook + } + } + } + stress_impact = { + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = callous + add = 10 + } + } + } + + option = { #I still don't really care + name = bp2_yearly.7010.c + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7010.c.tt + left_icon = scope:reflecting_parent + parental_neglect_effect = { + RESENTING = scope:nursed_child + RESENTED = root + } + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + OR = { + has_trait = impatient + has_trait = callous + has_trait = sadistic + has_trait = wrathful + } + add = 10 + } + modifier = { #if the child is the player we wan't only one of the above outcomes + scope:nursed_child = { + is_ai = no + } + factor = 0 + } + } + } + after = { + if = { + limit = { + scope:nursed_child = { + OR = { + has_variable_list = neglect_reason + has_variable_list = praise_reason + has_variable = nursed_child_parent_var + } + } + } + scope:nursed_child = { + clear_variable_list = neglect_reason + clear_variable_list = praise_reason + remove_variable = nursed_child_parent_var + } + } + } +} + +bp2_yearly.7011 = { #Cared child gives you something + type = character_event + content_source = dlc_009 + title = bp2_yearly.7011.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } + desc = bp2_yearly.7011.desc + } + desc = bp2_yearly.7011.desc_dead_parent + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:word + } + } + } + desc = bp2_yearly.7011.desc_word + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:step + } + } + } + desc = bp2_yearly.7011.desc_step + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:tooth + } + } + } + desc = bp2_yearly.7011.desc_tooth + } + triggered_desc = { + trigger = { + scope:nursed_child = { + is_target_in_variable_list = { + name = praise_reason + target = flag:dress + } + } + } + desc = bp2_yearly.7011.desc_dress + } + triggered_desc = { + trigger = { + scope:child_request = flag:receive_love + } + desc = bp2_yearly.7011.desc_receive_love + } + triggered_desc = { + trigger = { + scope:child_request = flag:forwarded_love + } + desc = bp2_yearly.7011.desc_forwarded_love + } + } + theme = family + override_background = { + reference = garden + } + left_portrait = { + character = scope:reflecting_parent + animation = love + } + right_portrait = { + character = scope:nursed_child + animation = love + } + lower_right_portrait = { + trigger = { NOT = { scope:nursed_child.var:nursed_child_parent_var ?= scope:reflecting_parent } } + character = scope:nursed_child.var:nursed_child_parent_var + } + + option = { #Thank you + name = bp2_yearly.7011.a + switch = { + trigger = scope:child_request + flag:receive_love = { + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7011.a.tt + left_icon = scope:reflecting_parent + if = { + limit = { NOT = { has_trait = loyal } } + add_trait = loyal + } + else = { + scope:reflecting_parent = { + add_opinion = { + target = scope:nursed_child + modifier = love_opinion + opinion = 50 + } + } + } + } + } + } + flag:forwarded_love = { + scope:reflecting_parent = { + add_character_modifier = { + modifier = role_model_parent + years = 15 + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = callous + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + } + } + option = { #How about a hook instead? + name = bp2_yearly.7011.b + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7011.b.tt + left_icon = scope:reflecting_parent + scope:reflecting_parent = { + if = { + limit = { has_hook = scope:nursed_child } + use_hook = scope:nursed_child + } + add_hook = { + target = scope:nursed_child + type = loyalty_hook + } + } + } + } + stress_impact = { + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = callous + add = 10 + } + } + } + + option = { #I still don't really care + name = bp2_yearly.7011.c + scope:nursed_child = { + send_interface_toast = { + title = bp2_yearly.7011.c.tt + left_icon = scope:reflecting_parent + add_opinion = { + target = scope:reflecting_parent + modifier = disappointed_opinion + opinion = -10 + } + } + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + OR = { + has_trait = impatient + has_trait = callous + has_trait = sadistic + has_trait = wrathful + } + add = 10 + } + modifier = { #if the child is the player we wan't only one of the above outcomes + scope:nursed_child = { + is_ai = no + } + factor = 0 + } + } + } + after = { + if = { + limit = { + scope:nursed_child = { + OR = { + has_variable = nursed_child_parent_var + has_variable_list = neglect_reason + has_variable_list = praise_reason + } + } + } + scope:nursed_child = { + clear_variable_list = neglect_reason + clear_variable_list = praise_reason + remove_variable = nursed_child_parent_var + } + } + } +} + +bp2_yearly.7012 = { #if any child has positive realtion with the fired nurse trigger an event about them complaining + type = character_event + content_source = dlc_009 + title = bp2_yearly.7012.t + desc = bp2_yearly.7012.desc + theme = family + override_background = { + reference = council_chamber + } + + left_portrait = { + character = root + animation = stressed_teacher + } + right_portrait = { + character = scope:nursed_child + animation = crying + } + lower_right_portrait = scope:former_wet_nurse + + cooldown = { years = 1 } + + trigger = { + has_bp2_dlc_trigger = yes + #handled in wet_nurse_title_revoked_effect + #but double check if all relevant characters are still alive + scope:nursed_child = { + is_alive = yes + } + scope:former_wet_nurse = { + is_alive = yes + } + } + + immediate = { + #nursed_child, former_wet_nurse and liege scopes handled in wet_nurse_title_revoked_effect + random_court_position_holder ?= { + type = wet_nurse_court_position + save_scope_as = current_wet_nurse + } + } + + option = { #oops, I'll hire her back + name = bp2_yearly.7012.a + trigger = { + scope:former_wet_nurse = { can_be_employed_as = wet_nurse_court_position } + } + court_position_grant_effect = { + EMPLOYER = root + CANDIDATE = scope:former_wet_nurse + POS = wet_nurse + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = pleased_opinion + opinion = 20 + } + add_character_modifier = { + modifier = under_childs_boot_modifier + years = 5 + } + stress_impact = { + compassionate = minor_stress_impact_loss + fickle = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = -10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = compassionate + } + modifier = { + add = 10 + has_trait = fickle + } + } + } + + option = { #I make rules here, so understand + name = bp2_yearly.7012.b + duel = { + skill = diplomacy + value = decent_skill_rating + 50 = { + desc = bp2_yearly.7012.b_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = comforted_opinion + opinion = 20 + } + add_character_modifier = { + modifier = bp2_good_parent_modifier + years = 5 + } + } + 50 = { + desc = bp2_yearly.7012.b_loss + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + reverse_add_opinion = { + target = scope:nursed_child + modifier = confused_opinion + opinion = -25 + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = -10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = compassionate + } + } + } + + option = { #I make rules here, so shut up + name = bp2_yearly.7012.c + reverse_add_opinion = { + target = scope:nursed_child + modifier = frustrated_opinion + opinion = -10 + } + stress_impact = { + callous = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = 10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = arbitrary + } + modifier = { + add = 10 + has_trait = stubborn + } + modifier = { + add = -10 + has_trait = compassionate + } + } + } +} + +bp2_yearly.7013 = { #child griefs over their dead wet nurse + type = character_event + content_source = dlc_009 + title = bp2_yearly.7013.t + desc = bp2_yearly.7013.desc + theme = family + override_background = { + reference = bp2_nursery + } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:nursed_child + animation = crying + } + lower_right_portrait = scope:former_wet_nurse + + cooldown = { years = 1 } + + trigger = { + has_bp2_dlc_trigger = yes + #handled in on_death_relation_nursed_child + #but double check if all relevant characters are still alive + scope:nursed_child = { + is_alive = yes + } + scope:liege = { + is_alive = yes + } + } + + immediate = { + #scopes assigned in on_death_relation_nursed_child + } + + option = { #I'll get a new wet nurse asap + name = bp2_yearly.7013.a + custom_tooltip = bp2_yearly.7013.a.tt + trigger_event = bp2_decision.0001 + reverse_add_opinion = { + target = scope:nursed_child + modifier = comforted_opinion + opinion = 15 + } + stress_impact = { + compassionate = minor_stress_impact_loss + fickle = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = -10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = compassionate + } + modifier = { + add = 10 + has_trait = fickle + } + } + } + + option = { #help with grief + name = bp2_yearly.7013.b + scope:nursed_child = { + add_character_modifier = { + modifier = parent_helped_grief_modifier + years = 5 + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = -10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = compassionate + } + } + } + + option = { #dead is dead + name = bp2_yearly.7013.c + reverse_add_opinion = { + target = scope:nursed_child + modifier = frustrated_opinion + opinion = -10 + } + stress_impact = { + callous = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = 10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = arbitrary + } + modifier = { + add = 10 + has_trait = stubborn + } + modifier = { + add = -10 + has_trait = compassionate + } + } + } +} + +bp2_yearly.7014 = { # Child and Wet Nurse connect over same faith/culture + type = character_event + content_source = dlc_009 + title = bp2_yearly.7014.t + desc = { + desc = bp2_yearly.7014.desc + first_valid = { + triggered_desc = { + trigger = { + scope:wet_nurse.culture = root.culture + exists = scope:tradition + exists = scope:tradition_2 + } + desc = bp2_yearly.7014.desc_culture + } + triggered_desc = { + trigger = { scope:wet_nurse.culture = root.culture } + desc = bp2_yearly.7014.desc_culture_no_trad + } + triggered_desc = { + trigger = { scope:wet_nurse.faith = root.faith } + desc = bp2_yearly.7014.desc_faith + } + } + } + theme = family + override_background = { + reference = bp2_nursery + } + + left_portrait = { + character = root + animation = crying + } + right_portrait = { + character = scope:wet_nurse + animation = love + } + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + any_relation = { + type = wet_nurse + OR = { + AND = { #search for a nurse that is courtier of your liege and you have the same faith or culture as her, but different than liege + exists = liege + is_courtier_of = liege + OR = { + AND = { + faith = root.faith + faith != liege.faith + } + AND = { + culture = root.culture + culture != liege.culture + } + } + } + AND = { #search for a nurse that is your courtier and you have the same faith or culture as her + is_courtier_of = root + OR = { + faith = root.faith + culture = root.culture + } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + is_hostage = yes + } + } + + immediate = { + random_relation = { + type = wet_nurse + limit = { + OR = { + AND = { #search for a nurse that is courtier of your liege and you have the same faith or culture as her, but different than liege + exists = liege + is_courtier_of = liege + OR = { + AND = { + faith = root.faith + faith != liege.faith + } + AND = { + culture = root.culture + culture != liege.culture + } + } + } + AND = { #search for a nurse that is your courtier and you have the same faith or culture as her + is_courtier_of = root + OR = { + faith = root.faith + culture = root.culture + } + } + } + } + save_scope_as = wet_nurse + } + if = { + limit = { + culture = { + any_culture_tradition = { + exists = this + save_temporary_scope_as = temp_tradition + } + any_culture_tradition = { + exists = this + this != scope:temp_tradition + } + } + } + culture = { #used in loc only + random_tradition = { + save_scope_as = tradition + } + random_tradition = { + limit = { + this != scope:tradition + } + save_scope_as = tradition_2 + } + } + } + } + + option = { #make friends with the wet nurse + name = bp2_yearly.7014.a + if = { + limit = { scope:wet_nurse.faith != root.faith } + progress_towards_friend_effect = { + REASON = friend_matters_of_culture + CHARACTER = scope:wet_nurse + OPINION = default_friend_opinion + } + } + else_if = { + limit = { scope:wet_nurse.culture != root.culture } + progress_towards_friend_effect = { + REASON = friend_matters_of_faith + CHARACTER = scope:wet_nurse + OPINION = default_friend_opinion + } + } + else = { + progress_towards_friend_effect = { + REASON = friend_child_special_attention + CHARACTER = scope:wet_nurse + OPINION = default_friend_opinion + } + } + ai_chance = { + base = 10 + } + } + + option = { #get a cool modifier with culture/faith opinion + name = bp2_yearly.7014.b + if = { + limit = { scope:wet_nurse.faith != root.faith } + add_character_modifier = { + modifier = wet_nurse_cultural_bonding_modifier + years = 10 + } + } + else_if = { + limit = { scope:wet_nurse.culture != root.culture } + add_character_modifier = { + modifier = wet_nurse_faith_bonding_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = wet_nurse_bonding_modifier + years = 10 + } + } + ai_chance = { #AI should take the 1st option more, so that other wet nurse events trigger more often + base = 1 + } + } +} + +scripted_effect clean_rites_flags_success = { + scope:teentribal ?= { + create_character_memory = { + type = completed_rites_of_passage + } + + scope:new_memory = { + set_variable = { + name = rites_of_passage_type + value = scope:teentribal.var:chosen_rite_memory + } + } + remove_variable ?= cleansing_type + remove_variable ?= chosen_rite_memory + remove_character_flag ?= unproven_adult_flag + clear_variable_list ?= possible_rites + } +} + +scripted_effect clean_rites_flags_failure = { + scope:teentribal ?= { + remove_variable ?= cleansing_type + remove_variable ?= chosen_rite_memory + clear_variable_list ?= possible_rites + add_character_flag = unproven_adult_flag #flag to be able to take the decision again + } +} + +scripted_effect passage_rites_effect = { + random_list = { + 9 = { #or lifestyle xp + desc = passage_rites_effect.xp + add_$LIFESTYLE$_lifestyle_xp = major_lifestyle_xp + } + 9 = { #or a skill point + desc = passage_rites_effect.skill + add_$SKILL$_skill = 1 + } + 0 = { #have a chance to gain a personality trait + desc = passage_rites_effect.trait + modifier = { + number_of_personality_traits < personality_trait_standard + NOT = { has_trait = $TRAIT$ } + NOT = { has_trait = $OPPOSITE_TRAIT$ } + add = 2 + } + add_trait = $TRAIT$ + } + } +} + +bp2_yearly.7021 = { #duel + type = character_event + content_source = dlc_009 + title = bp2_yearly.7021.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal = root } + desc = bp2_yearly.7021.desc_root + } + desc = bp2_yearly.7021.desc + } + } + theme = family + override_background = { + reference = ep2_tournament + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + this != scope:teentribal + is_adult = yes + } + animation = marshal + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:axe + age >= 14 + this = scope:teentribal + } + animation = aggressive_axe + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:mace + age >= 14 + this = scope:teentribal + } + animation = aggressive_mace + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:sword + age >= 14 + this = scope:teentribal + } + animation = aggressive_sword + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:dagger + age >= 14 + this = scope:teentribal + } + animation = aggressive_dagger + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:spear + age >= 14 + this = scope:teentribal + } + animation = aggressive_spear + } + triggered_animation = { + trigger = { + var:signature_weapon = flag:hammer + age >= 14 + this = scope:teentribal + } + animation = aggressive_hammer + } + triggered_animation = { + trigger = { + is_adult = no + this != scope:teentribal + } + animation = war_attacker + } + animation = throne_room_one_handed_passive_1 + } + right_portrait = { + trigger = { root != scope:teentribal } + character = scope:teentribal + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:axe + scope:teentribal = { age >= 14 } + } + animation = celebrate_axe + } + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:mace + scope:teentribal = { age >= 14 } + } + animation = celebrate_mace + } + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:sword + scope:teentribal = { age >= 14 } + } + animation = celebrate_sword + } + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:dagger + scope:teentribal = { age >= 14 } + } + animation = celebrate_dagger + } + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:spear + scope:teentribal = { age >= 14 } + } + animation = celebrate_spear + } + triggered_animation = { + trigger = { + scope:teentribal.var:signature_weapon = flag:hammer + scope:teentribal = { age >= 14 } + } + animation = celebrate_hammer + } + animation = throne_room_one_handed_passive_1 + } + lower_left_portrait = { + trigger = { exists = scope:family_duelist } + character = scope:family_duelist + } + lower_center_portrait = { + trigger = { exists = scope:duelist_1 } + character = scope:duelist_1 + } + lower_right_portrait = { + trigger = { exists = scope:duelist_2 } + character = scope:duelist_2 + } + + immediate = { + if = { + limit = { exists = scope:liege } + scope:liege = { + set_signature_weapon_effect = yes + } + } + scope:teentribal = { set_signature_weapon_effect = yes } + if = { #look for a family member + limit = { + any_close_or_extended_family_member = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + } + } + random_close_or_extended_family_member = { + limit = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + } + save_scope_as = family_duelist + } + } + else = { #find other duelist if there is no eligible family member + if = { #first look in your court + limit = { + any_courtier_or_guest ?= { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:family_duelist ?= this + } + } + } + random_courtier_or_guest ?= { + limit = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:family_duelist ?= this + } + } + save_scope_as = duelist_2 + } + } + else_if = { #then look in pool + limit = { + any_pool_character ?= { + province = scope:rite_location + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:family_duelist ?= this + } + } + } + random_pool_character ?= { + province = scope:rite_location + limit = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:family_duelist ?= this + } + } + save_scope_as = duelist_2 + } + } + else = { #create if still nothing + create_character = { + location = scope:rite_location + template = pool_repopulate_prowess + culture = root.culture + faith = root.faith + save_scope_as = duelist_2 + after_creation = { + add_character_flag = created + } + } + } + } + if = { #first look in your court + limit = { + any_courtier_or_guest ?= { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:duelist_2 ?= this + scope:family_duelist ?= this + } + prowess >= average_skill_rating + } + } + random_courtier_or_guest ?= { + limit = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:duelist_2 ?= this + scope:family_duelist ?= this + } + prowess >= average_skill_rating + } + save_scope_as = duelist_1 + } + } + else_if = { #then look in pool + limit = { + any_pool_character ?= { + province = scope:rite_location + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:duelist_2 ?= this + scope:family_duelist ?= this + } + prowess >= average_skill_rating + } + } + random_pool_character ?= { + province = scope:rite_location + limit = { + is_ai = yes + culture = root.culture + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + NOR = { + is_close_or_extended_family_of = root + scope:duelist_2 ?= this + scope:family_duelist ?= this + } + prowess >= average_skill_rating + } + save_scope_as = duelist_1 + } + } + else = { #create if still nothing + create_character = { + location = scope:rite_location + template = pool_repopulate_prowess + culture = root.culture + faith = root.faith + save_scope_as = duelist_1 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { #Challenge a family member + name = bp2_yearly.7021.a + name = { + trigger = { scope:teentribal = root } + text = bp2_yearly.7021.a_root + } + trigger = { exists = scope:family_duelist } + custom_tooltip = bp2_yearly.7021.a.tt + show_as_tooltip = { + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = scope:teentribal + SC_DEFENDER = scope:family_duelist + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = bp2_yearly.7022 + INVALIDATION_EVENT = fp1_tbc.0021 + } + ai_chance = { + base = 1 + } + } + + option = { #Challenge anyone of your culture + name = bp2_yearly.7021.b + name = { + trigger = { scope:teentribal = root } + text = bp2_yearly.7021.b_root + } + custom_tooltip = bp2_yearly.7021.b.tt + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = scope:teentribal + SC_DEFENDER = scope:duelist_1 + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = bp2_yearly.7022 + INVALIDATION_EVENT = fp1_tbc.0021 + } + ai_chance = { + base = 1 + } + } + + option = { #Pick the other challenger of your culture, available only if you don't have an eligible family member + name = bp2_yearly.7021.c + trigger = { exists = scope:duelist_2 } + custom_tooltip = bp2_yearly.7021.c.tt + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = scope:teentribal + SC_DEFENDER = scope:duelist_2 + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = bp2_yearly.7022 + INVALIDATION_EVENT = fp1_tbc.0021 + } + ai_chance = { + base = 1 + } + } + + option = { #I changed my mind + name = bp2_yearly.7021.d + custom_tooltip = bp2_yearly.7021.d.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7022 = { #Duel outcome + type = character_event + content_source = dlc_009 + title = bp2_yearly.7022.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = scope:liege + scope:teentribal = scope:sc_victor + } + desc = bp2_yearly.7022.desc_child_win + } + triggered_desc = { + trigger = { + exists = scope:liege + scope:teentribal = scope:sc_loser + } + desc = bp2_yearly.7022.desc_child_lost + } + triggered_desc = { + trigger = { + scope:teentribal = scope:sc_victor + } + desc = bp2_yearly.7022.desc_root_win + } + triggered_desc = { + trigger = { + scope:teentribal = scope:sc_loser + } + desc = bp2_yearly.7022.desc_root_lost + } + } + } + theme = family + override_background = { + reference = ep2_tournament + } + left_portrait = { + character = scope:sc_victor + triggered_animation = { + trigger = { scope:teentribal = scope:sc_victor } + animation = manic + } + triggered_animation = { + trigger = { scope:teentribal = scope:sc_loser } + animation = personality_honorable + } + } + right_portrait = { + character = scope:sc_loser + triggered_animation = { + trigger = { scope:teentribal = scope:sc_victor } + animation = throne_room_bow_1 + } + triggered_animation = { + trigger = { scope:teentribal = scope:sc_loser } + animation = severelywounded + } + } + + immediate = { + if = { + limit = { + scope:family_duelist ?= { + OR = { + this = scope:sc_victor + this = scope:sc_loser + } + } + } + root.dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + } + + option = { #Good fight + name = bp2_yearly.7022.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal = scope:sc_victor } + desc = bp2_yearly.7022.a_victory + } + desc = bp2_yearly.7022.a_loss + } + } + scope:sc_victor ?= { + if = { + limit = { + this = scope:teentribal + } + send_interface_toast = { + title = bp2_yearly.7022.toast + left_icon = scope:teentribal + passage_rites_effect = { + TRAIT = arrogant + OPPOSITE_TRAIT = humble + LIFESTYLE = martial + SKILL = prowess + } + } + } + } + scope:sc_loser ?= { + if = { + limit = { + this = scope:teentribal + } + send_interface_toast = { + title = bp2_yearly.7022.toast + left_icon = scope:teentribal + passage_rites_effect = { + TRAIT = vengeful + OPPOSITE_TRAIT = forgiving + LIFESTYLE = intrigue + SKILL = intrigue + } + } + } + } + stress_impact = { + vengeful = minor_stress_impact_loss + forgiving = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = forgiving + add = -10 + } + modifier = { + has_trait = vengeful + add = 10 + } + } + } + option = { #Have potential + name = bp2_yearly.7022.b + flavor = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal = scope:sc_victor } + desc = bp2_yearly.7022.b_victory + } + desc = bp2_yearly.7022.b_loss + } + } + scope:teentribal = { + if = { + limit = { + NOT = { has_trait = lifestyle_blademaster } + } + add_trait = lifestyle_blademaster + } + else = { + send_interface_toast = { + title = bp2_yearly.7022.toast + left_icon = scope:teentribal + passage_rites_effect = { + TRAIT = diligent + OPPOSITE_TRAIT = lazy + LIFESTYLE = martial + SKILL = prowess + } + } + } + } + stress_impact = { + diligent = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = lazy + add = -10 + } + modifier = { + has_trait = diligent + add = 10 + } + } + } + option = { #Tasted blood and liked it + name = bp2_yearly.7022.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal = scope:sc_victor } + desc = bp2_yearly.7022.c_victory + } + desc = bp2_yearly.7022.c_loss + } + } + scope:sc_victor = { + if = { + limit = { + this = scope:teentribal + } + send_interface_toast = { + title = bp2_yearly.7022.toast + left_icon = scope:teentribal + passage_rites_effect = { + TRAIT = sadistic + OPPOSITE_TRAIT = compassionate + LIFESTYLE = intrigue + SKILL = intrigue + } + } + } + } + scope:sc_loser ?= { + if = { + limit = { + this = scope:teentribal + } + send_interface_toast = { + title = bp2_yearly.7022.toast + left_icon = scope:teentribal + passage_rites_effect = { + TRAIT = craven + OPPOSITE_TRAIT = brave + LIFESTYLE = stewardship + SKILL = stewardship + } + } + } + } + stress_impact = { + sadistic = minor_stress_impact_loss + craven = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + brave = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = craven + add = 10 + } + modifier = { + has_trait = sadistic + add = 10 + } + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = brave + add = -10 + } + } + } + after = { + if = { + limit = { scope:teentribal = scope:sc_victor } + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + } + } + else = { + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + } + clean_rites_flags_success = yes + scope:duelist_1 ?= { + silent_disappearance_ai_if_created_effect = yes + } + scope:duelist_2 ?= { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +bp2_yearly.7023 = { #scarification + type = character_event + content_source = dlc_009 + title = bp2_yearly.7023.t + desc = bp2_yearly.7023.desc + theme = family + override_background = { + reference = fp1_runestone_circle + } + left_portrait = { + character = scope:teentribal + animation = throne_room_curtsey_1 + remove_default_outfit = no + outfit_tags = { nightgown } + } + right_portrait = { + character = scope:priest + animation = celebrate_dagger + } + + option = { #Scarification + name = bp2_yearly.7023.a + flavor = bp2_yearly.7023.a.tt + send_interface_toast = { + title = bp2_yearly.7023.a + left_icon = scope:teentribal + right_icon = scope:priest + scope:teentribal = { + passage_rites_effect = { + TRAIT = brave + OPPOSITE_TRAIT = craven + LIFESTYLE = martial + SKILL = martial + } + random_list = { + 50 = { + show_chance = no + desc = bp2_yearly.7023.a_nothing + } + 45 = { + show_chance = no + desc = bp2_yearly.7023.a_scarred + add_trait = scarred + } + 5 = { + show_chance = no + desc = bp2_yearly.7023.a_wounded + add_trait = wounded_1 + } + } + self_mutilation_minor_piety_gain_effect = yes + } + } + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + } + clean_rites_flags_success = yes + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = craven + add = -10 + } + modifier = { + has_trait = brave + add = 10 + } + } + } + + option = { #How about a symbolic one instead? + name = bp2_yearly.7023.b + flavor = bp2_yearly.7023.b.tt + scope:teentribal = { + send_interface_toast = { + title = bp2_yearly.7023.b + left_icon = scope:teentribal + right_icon = scope:priest + passage_rites_effect = { + TRAIT = cynical + OPPOSITE_TRAIT = zealous + LIFESTYLE = intrigue + SKILL = intrigue + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + clean_rites_flags_success = yes + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = zealous + add = -10 + } + modifier = { + has_trait = cynical + add = 10 + } + } + } + + option = { #I changed my mind + name = bp2_yearly.7023.c + custom_tooltip = bp2_yearly.7023.c.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7024 = { #seclusion + type = character_event + content_source = dlc_009 + title = bp2_yearly.7024.t + desc = { + desc = bp2_yearly.7024.desc + triggered_desc = { + trigger = { exists = scope:rite_location } + desc = bp2_yearly.7024.desc_capital + } + triggered_desc = { + trigger = { exists = scope:realm_location } + desc = bp2_yearly.7024.desc_realm + } + triggered_desc = { + trigger = { exists = scope:abroad_location } + desc = bp2_yearly.7024.desc_abroad + } + desc = bp2_yearly.7024.desc_end + } + theme = family + override_background = { + reference = terrain_travel + } + left_portrait = { + character = scope:teentribal + animation = throne_room_bow_1 + } + right_portrait = { + character = scope:priest + animation = go_to_your_room + } + + immediate = { + if = { + limit = { + any_realm_province = { + this != root.capital_province + } + } + random_realm_province = { + limit = { + this != root.capital_province + } + weight = { + base = 1 + modifier = { + add = 100 + has_holding = no + } + } + save_scope_as = realm_location + } + } + random_neighboring_top_liege_realm_owner = { + random_realm_province = { + weight = { + base = 1 + modifier = { + add = 100 + has_holding = no + } + } + save_scope_as = abroad_location + } + save_scope_as = foreign_ruler + } + } + + option = { #go abroad + name = bp2_yearly.7024.a + trigger = { exists = scope:abroad_location } + custom_tooltip = bp2_yearly.7024.a.abroad + custom_tooltip = bp2_yearly.7024.a.tt + scope:teentribal = { + scope:abroad_location = { + save_scope_as = seclusion_location + } + start_travel_plan = { + destination = scope:abroad_location + on_travel_planner_cancel_event = bp2_yearly.7024 + on_arrival_event = bp2_yearly.7025 + on_arrival_destinations = all_but_last + } + } + if = { + limit = { exists = scope:liege } + scope:liege = { + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_yearly.7024.win + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_prestige = major_prestige_value + } + } + 1 = { + desc = bp2_yearly.7024.lose + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 30 + } + increase_wounds_no_death_effect = { REASON = wild_animal } + } + } + } + } + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = lazy + add = -10 + } + modifier = { + has_trait = ambitious + add = 10 + } + } + } + + option = { #go nearby + name = bp2_yearly.7024.b + trigger = { exists = scope:realm_location } + custom_tooltip = bp2_yearly.7024.b.realm + custom_tooltip = bp2_yearly.7024.b.tt + scope:teentribal = { + scope:realm_location = { + save_scope_as = seclusion_location + } + start_travel_plan = { + destination = scope:realm_location + on_travel_planner_cancel_event = bp2_yearly.7024 + on_arrival_event = bp2_yearly.7025 + on_arrival_destinations = all_but_last + } + } + if = { + limit = { exists = scope:liege } + scope:liege = { + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_yearly.7024.win + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 20 + } + add_prestige = medium_prestige_value + } + } + 1 = { + desc = bp2_yearly.7024.lose + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + increase_wounds_no_death_effect = { REASON = wild_animal } + } + } + } + } + } + } + stress_impact = { + arbitrary = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = lazy + add = -10 + } + modifier = { + has_trait = arbitrary + add = 10 + } + } + } + + option = { #stay in capital holding + name = bp2_yearly.7024.c + custom_tooltip = bp2_yearly.7024.c.capital + custom_tooltip = bp2_yearly.7024.c.tt + scope:teentribal = { + scope:rite_location = { + save_scope_as = seclusion_location + } + trigger_event = bp2_yearly.7025 + } + if = { + limit = { exists = scope:liege } + scope:liege = { + show_as_tooltip = { + random_list = { + 1 = { + desc = bp2_yearly.7024.win + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_prestige = minor_prestige_value + } + } + 1 = { + desc = bp2_yearly.7024.lose + show_chance = no + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 10 + } + increase_wounds_no_death_effect = { REASON = wild_animal } + } + } + } + } + } + } + stress_impact = { + lazy = minor_stress_impact_loss + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = lazy + add = 10 + } + } + } + + option = { #I changed my mind + name = bp2_yearly.7024.d + custom_tooltip = bp2_yearly.7024.d.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7025 = { #seclusion on arrival + type = character_event + content_source = dlc_009 + title = bp2_yearly.7025.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:abroad_location ?= scope:seclusion_location } + desc = bp2_yearly.7025.desc_abroad + } + triggered_desc = { + trigger = { scope:realm_location ?= scope:seclusion_location } + desc = bp2_yearly.7025.desc_realm + } + desc = bp2_yearly.7025.desc_capital + } + first_valid = { + triggered_desc = { + trigger = { scope:teentribal.martial > scope:teentribal.learning } + desc = bp2_yearly.7025.desc_fight + } + desc = bp2_yearly.7025.desc_outwit + } + } + theme = family + override_background = { + reference = wilderness + } + left_portrait = { + character = scope:teentribal + triggered_animation = { + trigger = { scope:teentribal.martial > scope:teentribal.learning } + animation = hunting_shortbow_aim_arrow_default + } + animation = hunting_carcass_start + outfit_tags = { beggar_rags } + remove_default_outfit = no + } + + immediate = { + scope:teentribal = { + select_local_animal_effect = { TYPE = dangerous } + } + if = { #set scope that should receive the toast notification of the outcome + limit = { exists = scope:liege } + scope:liege = { + save_scope_as = receiver + } + } + else = { + save_scope_as = receiver + } + } + + option = { #try to outsmart the animal + name = bp2_yearly.7025.a + duel = { + skills = { learning intrigue } + value = average_skill_rating + 50 = { #you outsmart the animal + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.7025.a_win + scope:receiver = { + send_interface_toast = { + title = bp2_yearly.7025.tt + left_icon = scope:teentribal + scope:teentribal = { + if = { + limit = { NOT = { has_trait = lifestyle_traveler } } + add_trait = lifestyle_traveler + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = { + value = 0 + if = { + limit = {scope:rite_location ?= scope:seclusion_location } + add = 10 + } + if = { + limit = { scope:realm_location ?= scope:seclusion_location } + add = 20 + } + if = { + limit = { scope:abroad_location ?= scope:seclusion_location } + add = 30 + } + } + } + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_prestige = { + value = 0 + if = { + limit = {scope:rite_location ?= scope:seclusion_location } + add = minor_prestige_value + } + if = { + limit = { scope:realm_location ?= scope:seclusion_location } + add = medium_prestige_value + } + if = { + limit = { scope:abroad_location ?= scope:seclusion_location } + add = major_prestige_value + } + } + } + } + } + } + 50 = { #you are not smarter than a predator animal + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = 10 + scope:abroad_location ?= scope:seclusion_location + } + modifier = { + add = 5 + scope:realm_location ?= scope:seclusion_location + } + desc = bp2_yearly.7025.a_lose + scope:receiver = { + send_interface_toast = { + title = bp2_yearly.7025.tt + left_icon = scope:teentribal + scope:teentribal = { + increase_wounds_no_death_effect = { REASON = wild_animal } + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + craven = minor_stress_impact_loss + callous = minor_stress_impact_gain + brave = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = callous + add = -10 + } + modifier = { + has_trait = brave + add = -10 + } + modifier = { + has_trait = compassionate + add = 10 + } + modifier = { + has_trait = craven + add = 10 + } + } + } + + option = { #try to shoot the animal + name = bp2_yearly.7025.b + duel = { + skills = { prowess martial } + value = average_skill_rating + 50 = { #You knock out the animal + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = bp2_yearly.7025.b_win + scope:receiver = { + send_interface_toast = { + title = bp2_yearly.7025.tt + left_icon = scope:teentribal + scope:teentribal = { + if = { + limit = { + location = { terrain = jungle } + NOT = { has_trait = jungle_stalker } + } + add_trait = jungle_stalker + } + else_if = { + limit = { + location = { terrain = desert } + NOT = { has_trait = desert_warrior } + } + add_trait = desert_warrior + } + else_if = { + limit = { + location = { terrain = drylands } + NOT = { has_trait = desert_warrior } + } + add_trait = desert_warrior + } + else_if = { + limit = { + location = { terrain = desert_mountains } + NOT = { has_trait = desert_warrior } + } + add_trait = desert_warrior + } + else_if = { + limit = { + location = { terrain = oasis } + NOT = { has_trait = desert_warrior } + } + add_trait = desert_warrior + } + else_if = { + limit = { + location = { terrain = mountains } + NOT = { has_trait = rough_terrain_expert } + } + add_trait = rough_terrain_expert + } + else_if = { + limit = { + location = { terrain = wetlands } + NOT = { has_trait = rough_terrain_expert } + } + add_trait = rough_terrain_expert + } + else_if = { + limit = { + location = { terrain = hills } + NOT = { has_trait = rough_terrain_expert } + } + add_trait = rough_terrain_expert + } + else_if = { + limit = { + location = { terrain = farmlands } + NOT = { has_trait = open_terrain_expert } + } + add_trait = open_terrain_expert + } + else_if = { + limit = { + location = { terrain = plains } + NOT = { has_trait = open_terrain_expert } + } + add_trait = open_terrain_expert + } + else_if = { + limit = { + location = { terrain = steppe } + NOT = { has_trait = open_terrain_expert } + } + add_trait = open_terrain_expert + } + else_if = { + limit = { + location = { terrain = forest } + NOT = { has_trait = forest_fighter } + } + add_trait = forest_fighter + } + else_if = { + limit = { + location = { terrain = taiga } + NOT = { has_trait = forest_fighter } + } + add_trait = forest_fighter + } + else_if = { + limit = { + NOT = { has_trait = lifestyle_traveler } + } + add_trait = lifestyle_traveler + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = { + value = 0 + if = { + limit = {scope:rite_location ?= scope:seclusion_location } + add = 10 + } + if = { + limit = { scope:realm_location ?= scope:seclusion_location } + add = 20 + } + if = { + limit = { scope:abroad_location ?= scope:seclusion_location } + add = 30 + } + } + } + } + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + } + } + } + } + 50 = { #you are not stronger than a predator animal + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = 10 + scope:abroad_location ?= scope:seclusion_location + } + modifier = { + add = 5 + scope:realm_location ?= scope:seclusion_location + } + desc = bp2_yearly.7025.b_lose + scope:receiver = { + send_interface_toast = { + title = bp2_yearly.7025.tt + left_icon = scope:teentribal + scope:teentribal = { + increase_wounds_no_death_effect = { REASON = wild_animal } + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + } + } + } + } + stress_impact = { + wrathful = minor_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = compassionate + add = -10 + } + modifier = { + has_trait = callous + add = 10 + } + modifier = { + has_trait = wrathful + add = 10 + } + } + } + + after = { + clean_rites_flags_success = yes + } +} + +bp2_yearly.7026 = { #hair shaving + type = character_event + content_source = dlc_009 + title = bp2_yearly.7026.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:teentribal = root } + desc = bp2_yearly.7026.desc_child + } + desc = bp2_yearly.7026.desc + } + } + theme = family + override_background = { + reference = throne_room + } + left_portrait = { + character = scope:teentribal + animation = throne_room_curtsey_1 + remove_default_outfit = no + outfit_tags = { nightgown } + } + right_portrait = { + character = scope:priest + animation = assassin + } + + option = { #Shave it + name = bp2_yearly.7026.a + flavor = bp2_yearly.7026.a.tt + send_interface_toast = { + title = bp2_yearly.7026.a.toast + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = humble + OPPOSITE_TRAIT = arrogant + LIFESTYLE = diplomacy + SKILL = diplomacy + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_character_modifier = { + modifier = shaven_bald_modifier + years = 3 + } + add_piety = medium_piety_gain + } + clean_rites_flags_success = yes + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = arrogant + add = -10 + } + modifier = { + has_trait = humble + add = 10 + } + } + } + + option = { #Just a bowl-cut please! + name = bp2_yearly.7026.b + flavor = bp2_yearly.7026.b.tt + send_interface_toast = { + title = bp2_yearly.7026.b.toast + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = content + OPPOSITE_TRAIT = ambitious + LIFESTYLE = stewardship + SKILL = stewardship + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + create_artifact = { + name = tribal_hair + description = tribal_hair.desc + type = miscellaneous + visuals = pocket_pouch + modifier = artifact_prowess_1_modifier + modifier = artifact_stress_gain_1_modifier + } + } + clean_rites_flags_success = yes + stress_impact = { + humble = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = ambitious + add = -10 + } + modifier = { + has_trait = content + add = 10 + } + } + } + + option = { #I changed my mind + name = bp2_yearly.7026.c + custom_tooltip = bp2_yearly.7026.c.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7027 = { #cleansing with water + type = character_event + content_source = dlc_009 + title = bp2_yearly.7027.t + desc = bp2_yearly.7027.desc + theme = family + override_background = { + reference = fp1_runestone_circle + } + + left_portrait = { + character = scope:teentribal + animation = throne_room_kneel_2 + remove_default_outfit = no + outfit_tags = { beggar_rags } + } + right_portrait = { + character = scope:priest + animation = toast_goblet + camera = camera_body_left + } + + option = { #Submerge completely in the water + name = bp2_yearly.7027.a + flavor = bp2_yearly.7027.a.tt + if = { + limit = { + scope:teentribal = { num_sinful_traits > 0 } + } + random_list = { + 1 = { + desc = passage_rites_effect.trait + send_interface_toast = { + title = bp2_yearly.7027.tt + left_icon = scope:teentribal + scope:teentribal = { + flip_sinful_trait_effect = yes + } + } + } + 1 = { + desc = passage_rites_effect.xp + send_interface_toast = { + title = bp2_yearly.7027.tt + left_icon = scope:teentribal + scope:teentribal = { + add_learning_lifestyle_xp = major_lifestyle_xp + } + } + } + 1 = { + desc = passage_rites_effect.skill + send_interface_toast = { + title = bp2_yearly.7027.tt + left_icon = scope:teentribal + scope:teentribal = { + add_learning_skill = 1 + } + } + } + } + } + else = { + send_interface_toast = { + title = bp2_yearly.7027.tt + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = zealous + OPPOSITE_TRAIT = cynical + LIFESTYLE = learning + SKILL = learning + } + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_piety = medium_piety_gain + add_stress = minor_stress_gain + } + clean_rites_flags_success = yes + stress_impact = { + patient = minor_stress_impact_loss + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = impatient + add = -10 + } + modifier = { + has_trait = patient + add = 10 + } + } + } + option = { #Pour some water on the head + name = bp2_yearly.7027.b + flavor = bp2_yearly.7027.b.tt + send_interface_toast = { + title = bp2_yearly.7027.tt + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = patient + OPPOSITE_TRAIT = impatient + LIFESTYLE = diplomacy + SKILL = diplomacy + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + clean_rites_flags_success = yes + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = zealous + add = -10 + } + modifier = { + has_trait = cynical + add = 10 + } + } + } + option = { #I changed my mind + name = bp2_yearly.7027.c + custom_tooltip = bp2_yearly.7027.c.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7028 = { #cleansing with fire + type = character_event + content_source = dlc_009 + title = bp2_yearly.7028.t + desc = bp2_yearly.7028.desc + theme = family + override_background = { + reference = bp1_bonfire + } + + left_portrait = { + character = scope:teentribal + animation = manic + } + right_portrait = { + character = scope:priest + animation = throne_room_two_handed_passive_1 + } + + option = { #Run through the fire pit + name = bp2_yearly.7028.a + flavor = bp2_yearly.7028.a.tt + if = { + limit = { + scope:teentribal = { num_sinful_traits > 0 } + } + random_list = { + 1 = { + desc = passage_rites_effect.trait + send_interface_toast = { + title = bp2_yearly.7028.tt + left_icon = scope:teentribal + scope:teentribal = { + flip_sinful_trait_effect = yes + } + } + } + 1 = { + desc = passage_rites_effect.xp + send_interface_toast = { + title = bp2_yearly.7028.tt + left_icon = scope:teentribal + scope:teentribal = { + add_learning_lifestyle_xp = major_lifestyle_xp + } + } + } + 1 = { + desc = passage_rites_effect.skill + send_interface_toast = { + title = bp2_yearly.7028.tt + left_icon = scope:teentribal + scope:teentribal = { + add_learning_skill = 1 + } + } + } + } + } + else = { + send_interface_toast = { + title = bp2_yearly.7028.tt + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = zealous + OPPOSITE_TRAIT = cynical + LIFESTYLE = learning + SKILL = learning + } + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = proven_adult_modifier + years = 10 + } + add_character_modifier = { + modifier = scorched_soles_modifier + years = 5 + } + add_piety = medium_piety_gain + } + clean_rites_flags_success = yes + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + scope:teentribal = { + has_trait = zealous + } + add = -10 + } + modifier = { + scope:teentribal = { + has_trait = cynical + } + add = 10 + } + } + } + + option = { #Put just a single step in the fire pit + name = bp2_yearly.7028.b + flavor = bp2_yearly.7028.b.tt + send_interface_toast = { + title = bp2_yearly.7028.tt + left_icon = scope:teentribal + scope:teentribal = { + passage_rites_effect = { + TRAIT = patient + OPPOSITE_TRAIT = impatient + LIFESTYLE = diplomacy + SKILL = diplomacy + } + } + } + scope:teentribal = { + add_character_modifier = { + modifier = insecure_adult_modifier + years = 10 + } + } + clean_rites_flags_success = yes + stress_impact = { + patient = minor_stress_impact_loss + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + has_trait = impatient + add = -10 + } + modifier = { + has_trait = patient + add = 10 + } + } + } + + option = { #I changed my mind + name = bp2_yearly.7028.c + custom_tooltip = bp2_yearly.7028.c.tt + clean_rites_flags_failure = yes + ai_chance = { #there is no reason for the AI to back out at this point + base = 0 + } + } +} + +bp2_yearly.7029 = { #Completed rite memory follow up event - other tribal child does the rite, you can encourage them or let them back out + type = character_event + content_source = dlc_009 + title = bp2_yearly.7029.t + desc = { + desc = bp2_yearly.7029.desc + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + desc = bp2_yearly.7029.desc_duel + } + flag:scarification_rite_memory = { + desc = bp2_yearly.7029.desc_scarification + } + flag:seclusion_rite_memory = { + desc = bp2_yearly.7029.desc_seclusion + } + flag:shaving_hair_rite_memory = { + desc = bp2_yearly.7029.desc_hair_shaving + } + flag:fire_cleanse_rite_memory = { + desc = bp2_yearly.7029.desc_fire_cleanse + } + flag:water_cleanse_rite_memory = { + desc = bp2_yearly.7029.desc_water_cleanse + } + } + } + theme = family + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:dueling_rite_memory + } + reference = ep2_tournament + } + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:scarification_rite_memory + } + reference = fp1_runestone_circle + } + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:seclusion_rite_memory + } + reference = terrain_travel + } + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:shaving_hair_rite_memory + } + reference = throne_room + } + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:fire_cleanse_rite_memory + } + reference = bp1_bonfire + } + override_background = { + trigger = { + scope:rite_memory.var:rites_of_passage_type = flag:water_cleanse_rite_memory + } + reference = fp1_runestone_circle + } + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:teentribal + animation = crying + } + + cooldown = { years = 5 } + + trigger = { + has_bp2_dlc_trigger = yes + is_landed = yes + government_has_flag = government_is_tribal + any_memory = { + memory_type = completed_rites_of_passage + has_variable = rites_of_passage_type + } + any_courtier_or_guest = { + character_can_rites_of_passage_trigger = yes + is_available_ai = yes + NOR = { + is_close_or_extended_family_of = root + this = root + is_hostage_of = root + } + } + } + + immediate = { + random_memory = { + memory_type = completed_rites_of_passage + limit = { + has_variable = rites_of_passage_type + } + save_scope_as = rite_memory + } + random_courtier_or_guest = { + limit = { + character_can_rites_of_passage_trigger = yes + is_available_ai = yes + NOR = { + is_close_or_extended_family_of = root + this = root + is_hostage_of = root + } + } + save_scope_as = teentribal + } + } + + option = { + name = bp2_yearly.7029.a + flavor = bp2_yearly.7029.a.tt + random_list = { + 10 = { + send_interface_toast = { + title = bp2_yearly.7029.a.teaching + left_icon = scope:teentribal + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + scope:teentribal = { + add_martial_skill = 3 + } + } + flag:scarification_rite_memory = { + scope:teentribal = { + add_intrigue_skill = 3 + } + } + flag:seclusion_rite_memory = { + scope:teentribal = { + add_stewardship_skill = 3 + } + } + flag:shaving_hair_rite_memory = { + scope:teentribal = { + add_diplomacy_skill = 3 + add_character_modifier = { + modifier = shaven_bald_modifier + years = 1 + } + } + } + flag:fire_cleanse_rite_memory = { + scope:teentribal = { + add_learning_skill = 3 + } + } + flag:water_cleanse_rite_memory = { + scope:teentribal = { + add_learning_skill = 3 + } + } + } + } + modifier = { + add = 10 + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + martial >= decent_skill_rating + } + flag:scarification_rite_memory = { + intrigue >= decent_skill_rating + } + flag:seclusion_rite_memory = { + stewardship >= decent_skill_rating + } + flag:shaving_hair_rite_memory = { + diplomacy >= decent_skill_rating + } + flag:fire_cleanse_rite_memory = { + learning >= decent_skill_rating + } + flag:water_cleanse_rite_memory = { + learning >= decent_skill_rating + } + } + } + modifier = { + add = 10 + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + martial >= very_high_skill_rating + } + flag:scarification_rite_memory = { + intrigue >= very_high_skill_rating + } + flag:seclusion_rite_memory = { + stewardship >= very_high_skill_rating + } + flag:shaving_hair_rite_memory = { + diplomacy >= very_high_skill_rating + } + flag:fire_cleanse_rite_memory = { + learning >= very_high_skill_rating + } + flag:water_cleanse_rite_memory = { + learning >= very_high_skill_rating + } + } + } + } + 20 = { + send_interface_toast = { + title = bp2_yearly.7029.a.inspiration + left_icon = scope:teentribal + add_prestige = minor_prestige_gain + } + modifier = { + add = 10 + prestige_level >= 3 + } + modifier = { + add = 10 + prestige_level >= 4 + } + } + } + + if = { + limit = { has_character_modifier = insecure_adult_modifier } + remove_character_modifier = insecure_adult_modifier + } + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = -10 + has_trait = callous + } + modifier = { + add = 10 + has_trait = compassionate + } + } + } + + option = { + name = bp2_yearly.7029.b + flavor = bp2_yearly.7029.b.tt + random_list = { + 20 = { + send_interface_toast = { + title = bp2_yearly.7029.b.success + left_icon = scope:teentribal + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + scope:teentribal = { + add_prowess_skill = 3 + } + } + flag:scarification_rite_memory = { + scope:teentribal = { + add_prowess_skill = 3 + } + } + flag:seclusion_rite_memory = { + scope:teentribal = { + add_prowess_skill = 3 + } + } + flag:shaving_hair_rite_memory = { + scope:teentribal = { + add_character_modifier = { + modifier = tough_and_confident_modifier + years = 10 + } + add_character_modifier = { + modifier = shaven_bald_modifier + years = 1 + } + } + } + flag:fire_cleanse_rite_memory = { + scope:teentribal = { + add_character_modifier = { + modifier = tough_and_confident_modifier + years = 10 + } + } + } + flag:water_cleanse_rite_memory = { + scope:teentribal = { + add_character_modifier = { + modifier = tough_and_confident_modifier + years = 10 + } + } + } + } + } + modifier = { + add = 10 + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + scope:teentribal = { martial >= medium_skill_rating } + } + flag:scarification_rite_memory = { + scope:teentribal = { intrigue >= medium_skill_rating } + } + flag:seclusion_rite_memory = { + scope:teentribal = { stewardship >= medium_skill_rating } + } + flag:shaving_hair_rite_memory = { + scope:teentribal = { diplomacy >= medium_skill_rating } + } + flag:fire_cleanse_rite_memory = { + scope:teentribal = { learning >= medium_skill_rating } + } + flag:water_cleanse_rite_memory = { + scope:teentribal = { learning >= medium_skill_rating } + } + } + } + } + 10 = { + send_interface_toast = { + title = bp2_yearly.7029.b.fail + left_icon = scope:teentribal + scope:teentribal = { + add_character_modifier = { + modifier = backdown_from_rite_modifier + years = 10 + } + } + } + modifier = { + add = 10 + switch = { + trigger = scope:rite_memory.var:rites_of_passage_type + flag:dueling_rite_memory = { + scope:teentribal = { martial < low_skill_rating } + } + flag:scarification_rite_memory = { + scope:teentribal = { intrigue < low_skill_rating } + } + flag:seclusion_rite_memory = { + scope:teentribal = { stewardship < low_skill_rating } + } + flag:shaving_hair_rite_memory = { + scope:teentribal = { diplomacy < low_skill_rating } + } + flag:fire_cleanse_rite_memory = { + scope:teentribal = { learning < low_skill_rating } + } + flag:water_cleanse_rite_memory = { + scope:teentribal = { learning < low_skill_rating } + } + } + } + } + } + stress_impact = { + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = 10 + has_trait = callous + } + modifier = { + add = -10 + has_trait = compassionate + } + } + } +} diff --git a/events/dlc/bp2/bp2_yearly_events_6.txt b/events/dlc/bp2/bp2_yearly_events_6.txt new file mode 100644 index 00000000..64c42056 --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_events_6.txt @@ -0,0 +1,15018 @@ +#Events run from the yearly_pulse on_action +namespace = bp2_yearly + +# List of events in this file: +# +# +# 6000 Not the Italian Way +# 6010 No Man Imprisoned +# 6020 Children Say Such Funny Things +# 6030 Eyes of the Family +# 6040 All We Are Not +# 6050 Stone, Iron, Clay and Wattle +# 6060 Studies in Eternity +# 6070 Where All the World Gazes +# 6080 Bulgarian Blood +# 6090 A Birthright, Renewed +# 6091 A People, Immutable +# 6100 Moldavia, Reborn! +# 6110 Foreign Reforms +# 6120 Where Bonds Are Tested +# 6121 The Forgone Son +# 6122 Not Forgotten +# 6123 The Scion of Peace +# 6130 Captive, Captivated +# 6140 For Amity, Too Young +# 6150 The Assurance Speaks +# 6160 Worst of my Riders +# 6170 A Pact with the Uncivilized +# 6180-6199 Foreign-Raised Reformer feed events +# 6200-6203 Where the Knights Know Peace +# 6204 A Plea From My Blood +# 6205 To Lands of Strife +# 6210-6215 Foreign-Raised Reformer feed events + +##################################### +# Not the Italian Way # +# by Jason Cantalini # +# 60000 # +##################################### + +scripted_trigger bp2_yearly_6000_valid_educator = { + is_available = yes + culture = root.culture + NOR = { + has_trait = cynical + has_trait = calm + has_trait = eccentric + } + OR = { + has_relation_guardian = scope:hosted_child + has_court_position = court_tutor_court_position + AND = { + root.culture = { + has_cultural_pillar = ethos_bellicose + } + OR = { + is_knight_of = root + root.cp:councillor_marshal ?= this + root.cp:councillor_spymaster ?= this + } + } + AND = { + root.culture = { + has_cultural_pillar = ethos_bureaucratic + } + OR = { + root.cp:councillor_steward ?= this + has_court_position = seneschal_court_position + root.cp:councillor_court_chaplain ?= this + } + } + AND = { + root.culture = { + has_cultural_pillar = ethos_communal + } + OR = { + root.cp:councillor_chancellor ?= this + root.cp:councillor_court_chaplain ?= this + has_court_position = court_poet_court_position + } + } + AND = { + root.culture = { + has_cultural_pillar = ethos_courtly + } + OR = { + root.cp:councillor_chancellor ?= this + has_court_position = seneschal_court_position + has_court_position = court_poet_court_position + root.cp:councillor_court_chaplain ?= this + } + } + AND = { + root.culture = { + has_cultural_pillar = ethos_egalitarian + } + OR = { + root.cp:councillor_chancellor ?= this + has_court_position = seneschal_court_position + root.cp:councillor_court_chaplain ?= this + } + } + AND = { + root.culture = { + has_cultural_pillar = ethos_spiritual + } + root.cp:councillor_court_chaplain ?= this + } + + AND = { + root.culture = { + has_cultural_pillar = ethos_stoic + } + OR = { + is_knight_of = root + root.cp:councillor_marshal ?= this + root.cp:councillor_chancellor ?= this + has_court_position = court_poet_court_position + root.cp:councillor_court_chaplain ?= this + } + } + } +} + +scripted_trigger bp2_yearly_6000_good_at_ethos = { + trigger_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_bellicose + } + } + OR = { + martial >= high_skill_rating + ai_boldness >= medium_positive_ai_value + ai_compassion <= high_negative_ai_value + has_trait = rowdy + has_trait = aggressive_attacker + has_trait = reaver + has_trait = adventurer + } + } + trigger_else_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + OR = { + stewardship >= high_skill_rating + ai_greed >= high_positive_ai_value + ai_rationality >= medium_positive_ai_value + has_trait = pensive + has_trait = overseer + has_trait = administrator + has_trait = architect + } + } + trigger_else_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_communal + } + } + OR = { + ai_vengefulness >= medium_positive_ai_value + ai_honor >= high_positive_ai_value + has_trait = charming + has_trait = family_first + } + } + trigger_else_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_courtly + } + } + OR = { + diplomacy >= high_skill_rating + ai_sociability >= medium_positive_ai_value + ai_honor >= high_positive_ai_value + has_trait = charming + has_trait = august + has_trait = lifestyle_poet + } + } + trigger_else_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_egalitarian + } + } + OR = { + diplomacy >= high_skill_rating + ai_sociability >= high_positive_ai_value + ai_compassion >= medium_positive_ai_value + has_trait = curious + has_trait = diplomat + } + } + trigger_else_if = { + limit = { + root.culture = { + has_cultural_pillar = ethos_spiritual + } + } + OR = { + has_trait = zealous + piety_level >= 3 + has_trait = pensive + has_trait = theologian + has_trait = scholar + has_trait = lifestyle_mystic + } + } + trigger_else = { + OR = { + ai_compassion >= high_positive_ai_value + ai_zeal >= medium_positive_ai_value + has_trait = unyielding_defender + has_trait = gallant + has_trait = loyal + } + } +} + +bp2_yearly.6000 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6000.t + override_background = { + reference = relaxing_room + } + desc = { + #Standard intro + desc = bp2_yearly.6000.desc.intro + first_valid = { + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + desc = bp2_yearly.6000.desc.fault.bellicose + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + desc = bp2_yearly.6000.desc.fault.bureaucratic + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_communal + } + } + desc = bp2_yearly.6000.desc.fault.communal + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + desc = bp2_yearly.6000.desc.fault.courtly + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + exists = scope:realm_minority + } + desc = bp2_yearly.6000.desc.fault.egalitarian + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + desc = bp2_yearly.6000.desc.fault.egalitarian_no_culture + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + desc = bp2_yearly.6000.desc.fault.spiritual + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + desc = bp2_yearly.6000.desc.fault.stoic + } + } + desc = bp2_yearly.6000.desc.mid + first_valid = { + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + desc = bp2_yearly.6000.desc.value.bellicose + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + desc = bp2_yearly.6000.desc.value.bureaucratic + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_communal + } + } + desc = bp2_yearly.6000.desc.value.communal + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + desc = bp2_yearly.6000.desc.value.courtly + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + desc = bp2_yearly.6000.desc.value.egalitarian + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + desc = bp2_yearly.6000.desc.value.spiritual + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + desc = bp2_yearly.6000.desc.value.stoic + } + } + desc = bp2_yearly.6000.desc.outro + } + theme = hostage + left_portrait = { + character = scope:tutor + animation = stressed_teacher + } + right_portrait = { + character = scope:hosted_child + animation = boredom + } + lower_right_portrait = { + character = scope:childs_home_liege + } + + cooldown = { + years = 5 + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + #Do you have a same-culture hostage or ward from another court? + OR = { + any_warden_hostage = { + is_imprisoned = no + culture = root.culture + age > 5 + is_adult = no + bp2_yearly_6000_good_at_ethos = no + home_court ?= { + bp2_yearly_6000_good_at_ethos = no + culture = root.culture + NOT = { + has_character_flag = accused_of_bad_cultural_education + } + is_adult = yes + } + } + any_foreign_court_guest = { + is_imprisoned = no + culture = root.culture + age > 5 + is_adult = no + bp2_yearly_6000_good_at_ethos = no + liege ?= { + bp2_yearly_6000_good_at_ethos = no + culture = root.culture + NOT = { + has_character_flag = accused_of_bad_cultural_education + } + is_adult = yes + } + } + } + + #Is there a valid tutor, appropriate for the cultural issue? + any_courtier = { + is_available_adult = yes + culture = root.culture + NOR = { + has_trait = cynical + has_trait = eccentric + has_trait = calm + } + } + + # add character flag on target so they don't get spammed + } + weight_multiplier = { + base = 1 + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 2 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -2 + } + modifier = { + # More likely if root is big on cultural tradition + bp2_yearly_6000_good_at_ethos = yes + add = 3 + } + } + immediate = { + root = { + save_scope_as = childs_host + } + if = { + limit = { + any_warden_hostage = { + is_imprisoned = no + culture = root.culture + age > 5 + is_adult = no + bp2_yearly_6000_good_at_ethos = no + home_court ?= { + bp2_yearly_6000_good_at_ethos = no + culture = root.culture + NOT = { + has_character_flag = accused_of_bad_cultural_education + } + is_adult = yes + } + } + } + random_warden_hostage = { + limit = { + is_imprisoned = no + culture = root.culture + age > 5 + is_adult = no + bp2_yearly_6000_good_at_ethos = no + home_court ?= { + bp2_yearly_6000_good_at_ethos = no + culture = root.culture + NOT = { + has_character_flag = accused_of_bad_cultural_education + } + is_adult = yes + } + } + save_scope_as = hosted_child + home_court = { + save_scope_as = childs_home_liege + } + } + } + else = { + random_foreign_court_guest = { + limit = { + is_imprisoned = no + culture = root.culture + age > 5 + is_adult = no + bp2_yearly_6000_good_at_ethos = no + liege ?= { + bp2_yearly_6000_good_at_ethos = no + culture = root.culture + NOT = { + has_character_flag = accused_of_bad_cultural_education + } + is_adult = yes + } + } + save_scope_as = hosted_child + liege = { + save_scope_as = childs_home_liege + } + } + } + #try to get someone who would be teaching child about ethos + if = { + limit = { + any_courtier = { + bp2_yearly_6000_valid_educator = yes + } + } + random_courtier = { + limit = { + bp2_yearly_6000_valid_educator = yes + } + save_scope_as = tutor + } + } + #try to get anyone who would freak out in an appropriate way + else = { + random_courtier = { + limit = { + is_available_adult = yes + culture = root.culture + NOR = { + has_trait = cynical + has_trait = calm + has_trait = eccentric + } + } + save_scope_as = tutor + } + } + + # try to save a minority culture to refer to + if = { + limit = { + any_culture_global = { + this != root.culture + culture_number_of_counties > 0 + trigger_if = { + limit = { + exists = root.capital_county + root = { + highest_held_title_tier > tier_duchy + } + } + any_culture_county = { + empire = root.capital_county.empire + } + } + trigger_else = { + exists = root.capital_county + any_culture_county = { + kingdom = root.capital_county.kingdom + } + } + } + } + random_culture_global = { + limit = { + this != root.culture + culture_number_of_counties > 0 + trigger_if = { + limit = { + exists = root.capital_county + root = { + highest_held_title_tier > tier_duchy + } + } + any_culture_county = { + empire = root.capital_county.empire + } + } + trigger_else = { + exists = root.capital_county + any_culture_county = { + kingdom = root.capital_county.kingdom + } + } + } + weight = { + base = 1 + modifier = { + add = 2 + NOT = { has_same_culture_heritage = root.culture } + } + modifier = { + add = 2 + NOT = { has_same_culture_language = root.culture } + } + } + save_scope_as = realm_minority + } + } + } + # Everybody needs to hear about this: the kid's liege will change their ways or face shaming + option = { + name = bp2_yearly.6000.a + flavor = bp2_yearly.6000.a.tt + scope:childs_home_liege = { + add_character_flag = { + flag = accused_of_bad_cultural_education + years = 20 + } + } + progress_towards_rival_effect = { + CHARACTER = scope:childs_home_liege + OPINION = -30 + REASON = rival_accused_of_cultural_impropriety + } + scope:childs_home_liege = { + trigger_event = { + id = bp2_yearly.6001 + days = 1 + } + } + custom_tooltip = bp2_yearly.6000.a.response + if = { + limit = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + add_character_modifier = { + modifier = defender_of_bellicose_ways_modifier + years = 10 + } + + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + add_character_modifier = { + modifier = defender_of_bureaucratic_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_communal + } + } + add_character_modifier = { + modifier = defender_of_communal_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + add_character_modifier = { + modifier = defender_of_courtly_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + add_character_modifier = { + modifier = defender_of_egalitarian_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + add_character_modifier = { + modifier = defender_of_spiritual_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + add_character_modifier = { + modifier = defender_of_stoic_ways_modifier + years = 10 + } + } + + stress_impact = { + forgiving = major_stress_impact_gain + eccentric = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + content = minor_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = eccentric + has_trait = arbitrary + } + } + } + } + # step in and address this poor cultural education head on - it's the only hope of raising a real Italian! + option = { + name = bp2_yearly.6000.b + #bellicose education + if = { + limit = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + duel = { + skills = { martial intrigue } + value = decent_skill_rating + 50 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + if = { + limit = { has_lifestyle = martial_lifestyle } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = intrigue_lifestyle } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + scope:hosted_child = { + add_martial_skill = 1 + add_intrigue_skill = 1 + add_diplomacy_skill = -1 + } + } + } + 50 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #bureaucratic education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + duel = { + skills = { martial stewardship } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_martial_skill = 1 + add_stewardship_skill = 1 + add_learning_skill = -1 + } + if = { + limit = { has_lifestyle = martial_lifestyle } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = stewardship_lifestyle } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #communal education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_communal + } + } + duel = { + skills = { stewardship intrigue } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_intrigue_skill = 1 + add_stewardship_skill = 1 + add_prowess_skill = -2 + } + if = { + limit = { has_lifestyle = intrigue_lifestyle } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = stewardship_lifestyle } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #courtly education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + duel = { + skills = { diplomacy learning } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_diplomacy_skill = 1 + add_learning_skill = 1 + add_stewardship_skill = -1 + } + if = { + limit = { has_lifestyle = diplomacy_lifestyle } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = learning_lifestyle } + add_learning_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #egalitarian education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + duel = { + skills = { diplomacy stewardship } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_diplomacy_skill = 1 + add_stewardship_skill = 1 + add_martial_skill = -1 + } + if = { + limit = { has_lifestyle = diplomacy_lifestyle } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = stewardship_lifestyle } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #spiritual education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + duel = { + skills = { learning stewardship } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_learning_skill = 1 + add_stewardship_skill = 1 + add_stress = medium_stress_impact_gain + } + if = { + limit = { has_lifestyle = learning_lifestyle } + add_learning_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = stewardship_lifestyle } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + #stoic education + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + duel = { + skills = { diplomacy martial } + value = decent_skill_rating + 55 = { #It works well + desc = bp2_yearly.6000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + min = -54 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = harder_to_hybridize + has_cultural_parameter = dislikes_marrying_outside_of_culture + } + } + add = 20 + } + modifier = { + culture = { + OR = { + has_cultural_parameter = life_is_a_joke_trait_same_culture_opinion + has_cultural_parameter = cheaper_to_hybridize + } + } + add = -20 + } + + send_interface_toast = { + title = bp2_yearly.6000.b.success + left_icon = root + right_icon = scope:hosted_child + scope:hosted_child = { + add_diplomacy_skill = 1 + add_martial_skill = 1 + add_intrigue_skill = -1 + } + if = { + limit = { has_lifestyle = diplomacy_lifestyle } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_lifestyle = martial_lifestyle } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { has_royal_court = yes has_dlc_feature = royal_court } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + min = -44 + } + send_interface_toast = { + title = bp2_yearly.6000.b.failure + left_icon = root + right_icon = scope:hosted_child + progress_towards_rival_effect = { + CHARACTER = scope:hosted_child + OPINION = -30 + REASON = rival_enforced_cultural_norms + } + } + } + } + } + + if = { + limit = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + content = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + fickle = minor_stress_impact_gain + impatient = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_communal + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + fickle = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + shy = medium_stress_impact_gain + wrathful = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + zealous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + cynical = medium_stress_impact_gain + impatient = minor_stress_impact_gain + fickle = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + stress_impact = { + eccentric = medium_stress_impact_gain + callous = minor_stress_impact_gain + fickle = minor_stress_impact_gain + craven = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_zeal = 1 + } + modifier = { + add = -50 + OR = { + AND = { + culture = { + has_cultural_pillar = ethos_bellicose + } + OR = { + martial < 9 + intrigue < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + OR = { + stewardship < 9 + martial < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_communal + } + OR = { + stewardship < 9 + intrigue < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_courtly + } + OR = { + diplomacy < 9 + learning < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + OR = { + diplomacy < 9 + stewardship < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_spiritual + } + OR = { + learning < 9 + stewardship < 9 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_stoic + } + OR = { + martial < 9 + diplomacy < 9 + } + } + } + } + modifier = { + factor = 0 + + OR = { + has_trait = eccentric + AND = { + culture = { + has_cultural_pillar = ethos_bellicose + } + OR = { + has_trait = craven + has_trait = humble + has_trait = content + martial < 6 + intrigue < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + OR = { + has_trait = arbitrary + has_trait = fickle + has_trait = impatient + stewardship < 6 + martial < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_communal + } + OR = { + has_trait = forgiving + has_trait = arrogant + has_trait = fickle + stewardship < 6 + intrigue < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_courtly + } + OR = { + has_trait = shy + has_trait = wrathful + diplomacy < 6 + learning < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + OR = { + has_trait = sadistic + has_trait = callous + has_trait = paranoid + diplomacy < 6 + stewardship < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_spiritual + } + OR = { + has_trait = cynical + has_trait = impatient + learning < 6 + stewardship < 6 + } + } + AND = { + culture = { + has_cultural_pillar = ethos_stoic + } + OR = { + has_trait = callous + has_trait = fickle + has_trait = craven + martial < 6 + diplomacy < 6 + } + } + } + } + } + } + # IDGAF about being Italian my man + option = { + name = bp2_yearly.6000.c + + progress_towards_friend_effect = { + CHARACTER = scope:hosted_child + OPINION = 20 + REASON = friend_mutual_disinterest_in_tradition + } + scope:tutor = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -20 + } + } + + if = { + limit = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = medium_stress_impact_gain + just = medium_stress_impact_gain + patient = minor_stress_impact_gain + diligent = medium_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_communal + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = major_stress_impact_gain + vengeful = medium_stress_impact_gain + humble = minor_stress_impact_gain + just = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + patient = minor_stress_impact_gain + diligent = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + trusting = medium_stress_impact_gain + generous = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + zealous = medium_stress_impact_gain + loyal = medium_stress_impact_gain + patient = minor_stress_impact_gain + just = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + stress_impact = { + eccentric = miniscule_stress_impact_loss + loyal = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + brave = minor_stress_impact_gain + just = medium_stress_impact_gain + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -1 + ai_energy = -1 + } + modifier = { + factor = 0 + + OR = { + has_trait = loyal + AND = { + culture = { + has_cultural_pillar = ethos_bellicose + } + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + AND = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + OR = { + has_trait = just + has_trait = diligent + } + } + AND = { + culture = { + has_cultural_pillar = ethos_communal + } + OR = { + has_trait = vengeful + has_trait = humble + } + } + AND = { + culture = { + has_cultural_pillar = ethos_courtly + } + has_trait = gregarious + } + AND = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + OR = { + has_trait = compassionate + has_trait = trusting + } + } + AND = { + culture = { + has_cultural_pillar = ethos_spiritual + } + OR = { + has_trait = zealous + has_trait = patient + } + } + AND = { + culture = { + has_cultural_pillar = ethos_stoic + } + OR = { + has_trait = brave + has_trait = just + } + } + } + } + } + } +} + +bp2_yearly.6001 = { + type = letter_event + opening = bp2_yearly.6001.opening + desc = { + desc = bp2_yearly.6001.desc + first_valid = { + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + desc = bp2_yearly.6001.desc.insult.bellicose + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + desc = bp2_yearly.6001.desc.insult_bureaucratic + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_communal + } + } + desc = bp2_yearly.6001.desc.insult.communal + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + desc = bp2_yearly.6001.desc.insult.courtly + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + desc = bp2_yearly.6001.desc.insult.egalitarian + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + desc = bp2_yearly.6001.desc.insult.spiritual + } + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + desc = bp2_yearly.6001.desc.insult.stoic + } + } + desc = bp2_yearly.6001.desc.outro + } + sender = scope:childs_host + + + option = { + name = bp2_yearly.6001.a + flavor = bp2_yearly.6001.a.tt + add_character_modifier = { + modifier = enforcing_cultural_values_modifier + years = 10 + } + stress_impact = { + base = minor_stress_impact_gain + arrogant = major_stress_impact_gain + wrathful = medium_stress_impact_gain + vengeful = major_stress_impact_gain + stubborn = medium_stress_impact_gain + calm = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_rationality = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = wrathful + has_trait = vengeful + has_trait = stubborn + } + } + } + } + option = { + name = bp2_yearly.6001.b + flavor = bp2_yearly.6001.b.tt + if = { + limit = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + add_character_modifier = { + modifier = rejecting_bellicose_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_bureaucratic + } + } + add_character_modifier = { + modifier = rejecting_bureaucratic_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_communal + } + } + add_character_modifier = { + modifier = rejecting_communal_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + add_character_modifier = { + modifier = rejecting_courtly_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + add_character_modifier = { + modifier = rejecting_egalitarian_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + add_character_modifier = { + modifier = rejecting_spiritual_ways_modifier + years = 10 + } + } + else_if = { + limit = { + culture = { + has_cultural_pillar = ethos_stoic + } + } + add_character_modifier = { + modifier = rejecting_stoic_ways_modifier + years = 10 + } + } + + stress_impact = { + paranoid = medium_stress_impact_gain + humble = medium_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + + ai_value_modifier = { + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = humble + } + } + } + } +} + +##################################### +# No Man Imprisoned # +# by Jason Cantalini # +# 6010 # +##################################### + +scripted_trigger 6010_eligible_hostage_trigger = { + home_court ?= { + is_ai = yes + } + is_hostage = yes + opinion = { + target = root + value <= 0 + } + age > 9 + NOR = { + is_in_prison_type = dungeon + has_trait = shy + has_trait = content + has_trait = humble + } +} + +scripted_trigger 6010_eligible_foreign_ward_trigger = { + liege ?= { + is_ai = yes + NOT = { this = root } + } + has_relation_ward = root + opinion = { + target = root + value <= 0 + } + age > 9 + NOR = { + is_in_prison_type = dungeon + is_close_family_of = root + has_trait = shy + has_trait = humble + has_trait = content + } +} + +bp2_yearly.6010 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6010.t + override_background = { + reference = garden + } + desc = { + desc = bp2_yearly.6010.desc + first_valid = { + triggered_desc = { + trigger = { + scope:sad_boi = { + is_adult = yes + } + } + desc = bp2_yearly.6010.adult + } + triggered_desc = { + trigger = { + scope:sad_boi = { + is_adult = no + } + } + desc = bp2_yearly.6010.child + } + } + desc = bp2_yearly.6010.outro + } + theme = hostage + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = greedy + has_trait = avaricious + has_trait = deceitful + has_trait = callous + has_trait = sadistic + has_trait = schemer + has_trait = vengeful + } + NOR = { + has_trait = compassionate + has_trait = generous + has_trait = improvident + } + } + animation = stunned + } + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = generous + has_trait = improvident + } + } + animation = personality_content + } + camera = camera_event_very_left + } + right_portrait = { + character = scope:sad_boi + override_imprisonment_visuals = yes + animation = crying + } + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + #Standard checks + is_available_adult = yes + #Do you have a hostage or ward from another court? + OR = { + any_warden_hostage = { 6010_eligible_hostage_trigger = yes } + any_foreign_court_guest = { 6010_eligible_foreign_ward_trigger = yes } + } + } + immediate = { + play_music_cue = mx_cue_seduction + if = { + limit = { + any_warden_hostage = { 6010_eligible_hostage_trigger = yes } + } + random_warden_hostage = { + limit = { 6010_eligible_hostage_trigger = yes } + save_scope_as = sad_boi + add_character_flag = sad_hostage + home_court = { + save_scope_as = home_court_liege + } + } + } + else = { + random_foreign_court_guest = { + limit = { 6010_eligible_foreign_ward_trigger = yes } + save_scope_as = sad_boi + add_character_flag = sad_ward + liege = { + save_scope_as = home_court_liege + } + } + } + + } + # help him get money sent... and take it yourself + option = { + trigger = { + OR = { + has_trait = greedy + has_trait = avaricious + has_trait = deceitful + has_trait = callous + has_trait = sadistic + has_trait = schemer + has_trait = vengeful + } + NOR = { + has_trait = compassionate + has_trait = generous + has_trait = improvident + } + scope:home_court_liege = { + can_make_expensive_purchase_trigger = { + PRICE = scope:home_court_liege.medium_gold_value + } + is_ai = yes + } + } + + name = bp2_yearly.6010.a + flavor = bp2_yearly.6010.a.tt + + scope:home_court_liege = { + pay_short_term_gold = { + target = root + gold = medium_gold_value + } + add_opinion = { + target = root + opinion = -25 + modifier = angry_opinion + } + } + progress_towards_rival_effect = { + REASON = rival_stole_gifts_from_hostage + CHARACTER = scope:sad_boi + OPINION = -40 + } + + random = { + chance = 50 + scope:sad_boi = { + add_trait = depressed_1 + } + } + + if = { + limit = { + scope:sad_boi = { + is_adult = no + } + } + scope:sad_boi = { + create_character_memory = { + type = host_stole_aid + participants = { + court_owner = root + } + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + honest = major_stress_impact_gain + just = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + loyal = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = honest + has_trait = forgiving + has_trait = just + has_trait = loyal + } + } + } + } + # awww what can I do to make this life better for you??? + option = { + trigger = { + OR = { + has_trait = compassionate + has_trait = generous + has_trait = improvident + } + } + name = bp2_yearly.6010.b + flavor = bp2_yearly.6010.b.tt + + progress_towards_friend_effect = { + REASON = friend_provided_for_hostage + CHARACTER = scope:sad_boi + OPINION = 60 + } + remove_short_term_gold = minor_gold_value + + if = { + limit = { + has_royal_court = yes + has_dlc_feature = royal_court + } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + every_courtier = { + custom = custom.every_courtier + add_opinion = { + target = root + modifier = admiration_opinion + opinion = 10 + } + } + } + + if = { + limit = { + scope:sad_boi = { + is_adult = no + } + } + scope:sad_boi = { + create_character_memory = { + type = cared_for_by_host + participants = { + court_owner = root + } + } + } + } + + #miiight still become a poet + random = { + chance = { + value = 20 + if = { + limit = { + scope:sad_boi = { is_adult = yes } + } + add = 20 + } + if = { + limit = { + scope:sad_boi = { diplomacy > medium_skill_rating } + } + add = 40 + } + if = { + limit = { + scope:sad_boi = { has_focus = education_diplomacy } + } + add = 30 + } + } + scope:sad_boi = { + add_trait = lifestyle_poet + } + } + + #fix depression if he has it + if = { + limit = { + scope:sad_boi = { + has_trait = depressed_1 + } + } + random = { + chance = 20 + scope:sad_boi = { + remove_trait = depressed_1 + } + } + } + + + stress_impact = { + improvident = minor_stress_impact_loss + sadistic = medium_stress_impact_gain + callous = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + just = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = sadistic + has_trait = callous + has_trait = vengeful + has_trait = greedy + has_trait = arrogant + has_trait = just + } + } + } + } + + # the sad boi should face hardships with some dang dignity and strength + option = { + name = bp2_yearly.6010.c + flavor = bp2_yearly.6010.c.tt + + duel = { + skills = { learning diplomacy } + value = mediocre_skill_rating + 70 = { #It works well + desc = bp2_yearly.6010.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + modifier = { + scope:sad_boi = { + OR = { + has_trait = just + has_trait = pensive + has_trait = forgiving + has_trait = trusting + has_trait = loyal + } + } + add = 30 + } + + send_interface_toast = { + title = bp2_yearly.6010.c.success + left_icon = root + right_icon = scope:sad_boi + scope:sad_boi = { + add_opinion = { + target = root + opinion = 25 + modifier = impressed_opinion + } + } + if = { + limit = { + scope:sad_boi = { + is_adult = no + } + } + custom_tooltip = bp2_yearly.6010.c.tt_education + hidden_effect = { + education_point_acquisition_effect = yes + } + } + else = { + scope:sad_boi = { + add_trait = loyal + } + } + stress_impact = { + base = minor_stress_impact_loss + } + + } + } + 30 = { #It doesn't go well + desc = bp2_yearly.6010.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + } + modifier = { + scope:sad_boi = { + OR = { + has_trait = arbitrary + has_trait = bossy + has_trait = arrogant + has_trait = cynical + has_trait = stubborn + has_trait = disloyal + } + } + add = 30 + } + send_interface_toast = { + title = bp2_yearly.6010.c.failure + left_icon = root + right_icon = scope:sad_boi + scope:sad_boi = { + add_opinion = { + target = root + opinion = -25 + modifier = angry_opinion + } + } + scope:sad_boi = { + add_stress = minor_stress_impact_gain + } + scope:sad_boi = { + add_trait = depressed_1 + } + } + } + } + + stress_impact = { + lazy = medium_stress_impact_gain + humble = minor_stress_impact_gain + depressed_genetic = minor_stress_impact_gain + depressed_1 = minor_stress_impact_gain + arbitrary = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_honor = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + diplomacy < 4 + learning < 4 + AND = { + diplomacy < 8 + learning < 8 + } + AND = { + diplomacy < 4 + learning < 14 + } + AND = { + diplomacy < 4 + learning < 14 + } + } + + } + } + } + # This is... surprisingly lovely + option = { + name = bp2_yearly.6010.d + flavor = bp2_yearly.6010.d.tt + + scope:sad_boi = { + add_opinion = { + target = root + opinion = 40 + modifier = grateful_opinion + } + } + + scope:home_court_liege = { + add_opinion = { + target = root + opinion = -10 + modifier = annoyed_opinion + } + } + + if = { + limit = { + scope:home_court_liege = { + can_make_expensive_purchase_trigger = { + PRICE = scope:home_court_liege.minor_gold_value + } + is_ai = yes + } + } + scope:home_court_liege = { + pay_short_term_gold = { + target = scope:sad_boi + gold = minor_gold_value + } + } + } + + + if = { + limit = { + OR = { + scope:sad_boi = { diplomacy > medium_skill_rating } + scope:sad_boi = { has_focus = education_diplomacy } + } + } + scope:sad_boi = { + add_trait = lifestyle_poet + create_character_memory = { + type = became_homesick_poet + participants = { + court_owner = root + } + } + } + } + else = { + random = { + chance = { + value = 20 + if = { + limit = { + scope:sad_boi = { is_adult = yes } + } + add = 30 + } + } + scope:sad_boi = { + add_trait = lifestyle_poet + create_character_memory = { + type = became_homesick_poet + participants = { + court_owner = root + } + } + } + + } + } + + random = { + chance = 10 + scope:sad_boi = { + add_trait = depressed_1 + } + } + + stress_impact = { + lifestyle_poet = minor_stress_impact_loss + depressed_1 = minor_stress_impact_loss + depressed_genetic = minor_stress_impact_loss + vengeful = medium_stress_impact_gain + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + paranoid = minor_stress_impact_gain + just = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = vengeful + has_trait = callous + has_trait = arrogant + has_trait = paranoid + } + } + } + } + after = { + if = { + limit = { + scope:sad_boi = { + has_character_flag = sad_hostage + } + } + } + scope:sad_boi = { + remove_character_flag = sad_hostage + } + if = { + limit = { + scope:sad_boi = { + has_character_flag = sad_ward + } + } + } + scope:sad_boi = { + remove_character_flag = sad_ward + } + } +} + +##################################### +# Children Say Such Funny Things # +# by Jason Cantalini # +# 60020 # +##################################### + +scripted_trigger bp2_yearly_6020_snitch = { + age > 4 + age < root.age + is_adult = no + NOR = { + has_trait = loyal + has_trait = paranoid + has_trait = shrewd + has_trait = shy + } + opinion = { + target = root + value > -50 + } + home_court ?= { + OR = { + has_any_secrets = yes + any_courtier = { + is_close_family_of = liege + has_any_secrets = yes + } + any_spouse = { + has_any_secrets = yes + } + } + } +} + +bp2_yearly.6020 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6020.t + override_background = { + reference = garden + } + desc = { + desc = bp2_yearly.6020.desc + first_valid = { + triggered_desc = { + trigger = { + scope:snitch = { + age <= 10 + } + } + desc = bp2_yearly.6020.child + } + desc = bp2_yearly.6020.youth + } + first_valid = { + triggered_desc = { + trigger = { + scope:snitch.home_court = { + is_close_family_of = scope:snitch + } + } + desc = bp2_yearly.6020.family + } + desc = bp2_yearly.6020.liege + } + } + theme = hostage + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arbitrary + has_trait = callous + has_trait = deceitful + has_trait = sadistic + has_trait = torturer + has_trait = schemer + has_trait = vengeful + } + } + animation = scheme + } + triggered_animation = { + trigger = { + NOR = { + has_trait = arbitrary + has_trait = callous + has_trait = deceitful + has_trait = sadistic + has_trait = torturer + has_trait = schemer + has_trait = vengeful + } + } + animation = throne_room_conversation_4 + } + + } + right_portrait = { + character = scope:snitch + animation = happiness + } + + lower_right_portrait = { + character = scope:snitch.home_court + } + + cooldown = { years = 10 } + + trigger = { + has_bp2_dlc_trigger = yes + #Standard checks + is_available = yes + age > 10 + #Do you have a hostage from another court? + any_warden_hostage = { + bp2_yearly_6020_snitch = yes + } + } + immediate = { + random_warden_hostage = { + limit = { + bp2_yearly_6020_snitch = yes + } + save_scope_as = snitch + } + random_list = { + 10 = { + trigger = { + scope:snitch.home_court = { + has_any_secrets = yes + } + } + scope:snitch.home_court = { + save_scope_as = no_no_doer + } + } + 10 = { + trigger = { + scope:snitch.home_court = { + any_close_family_member = { + has_any_secrets = yes + is_courtier_of = scope:snitch.home_court + } + } + } + scope:snitch.home_court = { + random_close_family_member = { + limit = { + has_any_secrets = yes + is_courtier_of = scope:snitch.home_court + } + save_scope_as = no_no_doer + } + } + } + 10 = { + trigger = { + scope:snitch.home_court = { + any_spouse = { + has_any_secrets = yes + } + } + } + scope:snitch.home_court = { + random_spouse = { + limit = { + has_any_secrets = yes + } + save_scope_as = no_no_doer + } + } + } + } + } + # I MUST KNOW + option = { + name = bp2_yearly.6020.a + if = { + limit = { + has_character_modifier = honorable_warden_modifier + } + add_tyranny = medium_tyranny_gain + } + if = { + limit = { + scope:snitch = { + opinion = { + target = root + value > 90 + } + } + } + show_as_tooltip = { + if = { + limit = { + scope:no_no_doer = { + is_close_family_of = scope:snitch + } + } + custom_tooltip = bp2_yearly.6020.a.secret + } + else = { + custom_tooltip = bp2_yearly.6020.a.non_family_secret + } + scope:snitch = { + add_intrigue_skill = 1 + } + } + hidden_effect = { + send_interface_toast = { + title = bp2_yearly.6020.a.success + left_icon = root + right_icon = scope:snitch + scope:no_no_doer = { + random_secret = { + reveal_to = root + } + } + scope:snitch = { + add_intrigue_skill = 1 + } + } + } + } + else = { + duel = { + skill = intrigue + value = medium_skill_rating + 55 = { #You learn a juicy secret + desc = bp2_yearly.6020.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + modifier = { + scope:snitch = { + opinion = { + target = root + value >= 50 + } + } + add = 35 + } + modifier = { + scope:snitch = { + opinion = { + target = root + value >= 0 + } + } + add = 35 + } + show_as_tooltip = { + if = { + limit = { + scope:no_no_doer = { + is_close_family_of = scope:snitch + } + } + custom_tooltip = bp2_yearly.6020.a.secret + } + else = { + custom_tooltip = bp2_yearly.6020.a.non_family_secret + } + } + hidden_effect = { + send_interface_toast = { + title = bp2_yearly.6020.a.success + left_icon = root + right_icon = scope:snitch + + hidden_effect = { + scope:no_no_doer = { + random_secret = { + reveal_to = root + } + } + } + scope:snitch = { + add_intrigue_skill = 1 + } + } + } + } + 45 = { #The "secret" is just foolish kid stuff + desc = bp2_yearly.6020.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + } + modifier = { + scope:snitch = { + opinion = { + target = root + value <= -30 + } + } + add = 35 + } + modifier = { + scope:snitch = { + opinion = { + target = root + value < 0 + } + } + add = 35 + } + send_interface_toast = { + title = bp2_yearly.6020.a.failure + left_icon = root + right_icon = scope:snitch + custom_tooltip = bp2_yearly.6020.a.no_secret + if = { + limit = { + scope:snitch = { + age > 6 + NOR = { + has_trait = loyal + has_trait = honest + has_trait = just + has_trait = compassionate + has_trait = trusting + has_trait = generous + has_trait = forgiving + has_trait = content + has_trait = humble + } + } + } + scope:snitch = { + add_trait = disloyal + } + } + } + } + } + } + stress_impact = { + just = minor_stress_impact_gain + forgiving = miniscule_stress_impact_gain + honest = minor_stress_impact_gain + trusting = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_vengefulness = 1 + ai_sociability = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = honest + has_character_modifier = honorable_warden_modifier + } + } + } + } + # Teach the kid the value of discrection... might come in handy later + option = { + name = bp2_yearly.6020.b + flavor = bp2_yearly.6020.b.tt + + custom_tooltip = bp2_yearly.6020.b.discretion + scope:snitch = { + create_character_memory = { + type = hostage_taught_discretion + participants = { + hostage_owner = root + } + } + } + if = { + limit = { + scope:snitch.faith = { + trait_is_virtue = honest + } + } + add_piety = miniscule_piety_gain + scope:snitch = { + add_piety = minor_piety_gain + } + } + if = { + limit = { + scope:snitch = { + NOR = { + has_trait = deceitful + has_trait = arbitrary + has_trait = sadistic + } + } + } + scope:snitch = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + } + if = { + limit = { + scope:snitch = { + age > 6 + NOR = { + has_trait = disloyal + has_trait = deceitful + has_trait = arbitrary + has_trait = sadistic + has_trait = callous + has_trait = greedy + has_trait = vengeful + has_trait = ambitious + has_trait = arrogant + } + } + } + random = { + chance = 50 + scope:snitch = { + add_trait = loyal + } + } + } + + stress_impact = { + arbitrary = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + greedy = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = -1 + ai_sociability = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = arbitrary + has_trait = deceitful + has_trait = ambitious + } + } + } + } +} + +##################################### +# Eyes of the Family # +# by Jason Cantalini # +# 6030 # +##################################### + +scripted_trigger bp2_yearly_6030_willing_snitch_trigger = { + opinion = { + target = scope:warden + value <= 50 + } + OR = { + intrigue >= decent_skill_rating + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = arbitrary + has_trait = disloyal + opinion = { + target = scope:warden + value <= -50 + } + } + NOR = { + has_trait = loyal + any_memory = { + memory_type = hostage_taught_discretion + } + } +} + +scripted_trigger bp2_yearly_6030_potential_snitch_trigger = { + is_available = yes + is_imprisoned = no + is_ai = yes + is_courtier_of = root + house = liege.house + age > 11 +} + + +bp2_yearly.6030 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6030.t + override_background = { + reference = ep2_hunt_foggy_forest + } + desc = { + desc = bp2_yearly.6030.desc + first_valid = { + triggered_desc = { + trigger = { + scope:snitch = { + any_memory = { + memory_type = hostage_taught_discretion + } + } + } + desc = bp2_yearly.6030.hostage_reticent + } + triggered_desc = { + trigger = { + scope:snitch = { + NOT = { + any_memory = { + memory_type = hostage_taught_discretion + } + } + } + } + desc = bp2_yearly.6030.hostage_normal + } + } + } + theme = hostage + left_portrait = { + character = root + triggered_animation = { + trigger = { + ai_compassion <= low_negative_ai_value + } + animation = personality_cynical + } + triggered_animation = { + trigger = { + ai_compassion > low_negative_ai_value + } + animation = personality_rational + } + } + right_portrait = { + character = scope:snitch + triggered_animation = { + trigger = { + bp2_yearly_6030_willing_snitch_trigger = yes + } + animation = personality_callous + } + triggered_animation = { + trigger = { + bp2_yearly_6030_willing_snitch_trigger = no + } + animation = personality_coward + } + } + lower_right_portrait = { + character = scope:warden + } + + cooldown = { years = 5 } + + trigger = { + has_bp2_dlc_trigger = yes + exists = scope:warden + exists = scope:hostage + basic_is_valid_for_yearly_events_trigger = yes + NOR = { + has_trait = trusting + has_trait = honest + } + #Do you have a former hostage who just returned with a secret? + scope:hostage = { + bp2_yearly_6030_potential_snitch_trigger = yes + } + #Is their former warden still a living ruler? + scope:warden ?= { + is_alive = yes + is_landed_or_landless_administrative = yes + } + exists = scope:wardens_court_secret + } + immediate = { + scope:hostage = { + save_scope_as = snitch + } + } + # Use your cunning to draw a secret out + option = { + name = bp2_yearly.6030.a + + if = { + limit = { + has_character_modifier = honorable_warden_modifier + } + add_tyranny = medium_tyranny_gain + } + duel = { + skill = intrigue + target = scope:snitch + 55 = { #You MIGHT learn a juicy secret + desc = bp2_yearly.6030.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3 + } + modifier = { + add = 20 + scope:snitch = { + bp2_yearly_6030_willing_snitch_trigger = yes + } + } + show_as_tooltip = { + custom_tooltip = bp2_yearly.6030.maybe_secret + } + hidden_effect = { + send_interface_toast = { + title = bp2_yearly.6030.a.success + left_icon = root + right_icon = scope:snitch + + if = { + limit = { + exists = scope:wardens_court_secret + } + scope:wardens_court_secret = { + reveal_to = root + } + } + else = { + custom_tooltip = bp2_yearly.6030.a.no_secret + } + } + } + } + 45 = { #The hostage is cagy + desc = bp2_yearly.6030.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3 + } + modifier = { + add = 20 + scope:snitch = { + bp2_yearly_6030_willing_snitch_trigger = no + } + } + modifier = { + factor = 4 + scope:snitch = { + any_memory = { + memory_type = hostage_taught_discretion + } + } + } + send_interface_toast = { + title = bp2_yearly.6030.a.failure + left_icon = root + right_icon = scope:snitch + custom_tooltip = bp2_yearly.6030.a.evade + } + } + } + stress_impact = { + honest = medium_stress_impact_gain + just = medium_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_greed = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = just + has_trait = generous + has_character_modifier = honorable_warden_modifier + } + } + } + } + # Offer generous reward in exchange for information + option = { + name = bp2_yearly.6030.b + flavor = bp2_yearly.6030.b.tt + + if = { + limit = { + has_character_modifier = honorable_warden_modifier + } + add_tyranny = medium_tyranny_gain + } + pay_short_term_gold = { + target = scope:snitch + gold = tiny_gold_value + } + + + random_list = { + 60 = { + show_as_tooltip = { + custom_tooltip = bp2_yearly.6030.maybe_secret + custom_tooltip = bp2_yearly.6030.b.rewarded + scope:snitch = { + add_intrigue_skill = 1 + } + } + hidden_effect = { + send_interface_toast = { + title = bp2_yearly.6030.a.success + left_icon = root + right_icon = scope:snitch + + if = { + limit = { + exists = scope:wardens_court_secret + } + scope:wardens_court_secret = { + reveal_to = root + } + } + else = { + custom_tooltip = bp2_yearly.6030.a.no_secret + } + } + scope:snitch = { + set_variable = { + name = family_schemer + value = root + years = 20 + } + } + scope:snitch = { + add_intrigue_skill = 1 + } + } + modifier = { + add = -30 + scope:snitch = { + bp2_yearly_6030_willing_snitch_trigger = no + } + } + modifier = { + add = 25 + scope:snitch = { + OR = { + has_trait = greedy + has_trait = arbitrary + } + } + } + modifier = { + factor = 0.1 + scope:snitch = { + any_memory = { + memory_type = hostage_taught_discretion + } + } + } + } + + 40 = { + send_interface_toast = { + title = bp2_yearly.6030.b.failure + left_icon = root + right_icon = scope:snitch + + custom_tooltip = bp2_yearly.6030.refuse_reward + } + modifier = { + add = -25 + scope:snitch = { + opinion = { + target = root + value > 40 + } + } + } + modifier = { + add = 25 + scope:snitch = { + OR = { + has_trait = just + has_trait = content + } + } + } + } + } + + stress_impact = { + greedy = medium_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = fickle + has_character_modifier = honorable_warden_modifier + } + } + } + } + # Treat the hostage agreement with respect and don't pry + option = { + name = bp2_yearly.6030.c + flavor = bp2_yearly.6030.c.tt + + add_character_modifier = { + modifier = honorable_warden_modifier + years = 20 + } + #above modifier makes it more likely ai will offer and demand hostages from root, but root gets tyranny if they choose option a in future + custom_tooltip = bp2_yearly.6030.c.honor + custom_tooltip = bp2_yearly.6030.c.hostage_secrets + + stress_impact = { + arbitrary = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + greedy = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = arbitrary + has_trait = deceitful + has_trait = greedy + has_trait = ambitious + } + } + } + } +} + +scripted_trigger bp2_yearly_6031_potential_snitch_trigger = { + is_ai = yes + is_courtier_of = scope:home_court + house = liege.house + age > 11 + OR = { + intrigue >= mediocre_skill_rating + has_focus = education_intrigue + has_trait = disloyal + } +} + +#Saves secrets for bp2_yearly.6030 (yes, they're out of order) +# by Jason Cantalini +bp2_yearly.6031 = { + hidden = yes + + trigger = { + has_bp2_dlc_trigger = yes + exists = scope:home_court + OR = { + scope:warden ?= { + has_any_secrets = yes + } + scope:warden ?= { + any_close_family_member = { + has_any_secrets = yes + } + } + scope:warden ?= { + any_spouse = { + has_any_secrets = yes + } + } + } + scope:hostage = { + bp2_yearly_6031_potential_snitch_trigger = yes + } + } + + immediate = { + random_list = { + 10 = { + trigger = { + scope:warden ?= { + has_any_secrets = yes + } + } + scope:warden ?= { + random_secret = { + save_scope_as = wardens_court_secret + } + } + } + 10 = { + trigger = { + scope:warden ?= { + any_close_family_member = { + has_any_secrets = yes + } + } + } + scope:warden ?= { + random_close_family_member = { + random_secret = { + save_scope_as = wardens_court_secret + } + } + } + } + 10 = { + trigger = { + scope:warden ?= { + any_spouse = { + has_any_secrets = yes + } + } + } + scope:warden ?= { + random_spouse = { + random_secret = { + save_scope_as = wardens_court_secret + } + } + } + } + } + scope:home_court = { + trigger_event = { + id = bp2_yearly.6030 + days = { 300 400 } + } + } + } +} + +##################################### +# All We Are Not # +# by Jason Cantalini # +# 6040 # +##################################### + +scripted_trigger bp2_yearly_6040_higher_cultural_era_trigger = { + OR = { + AND = { + NOT = { + root.culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + has_cultural_era_or_later = culture_era_early_medieval + } + AND = { + NOT = { + root.culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + has_cultural_era_or_later = culture_era_high_medieval + } + AND = { + NOT = { + root.culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + has_cultural_era_or_later = culture_era_late_medieval + } + } +} + +scripted_trigger bp2_yearly_6040_equal_or_higher_cultural_era_trigger = { + OR = { + AND = { + root.culture = { has_cultural_era_or_later = culture_era_tribal } + has_cultural_era_or_later = culture_era_tribal + } + AND = { + root.culture = { has_cultural_era_or_later = culture_era_early_medieval } + has_cultural_era_or_later = culture_era_early_medieval + } + AND = { + root.culture = { has_cultural_era_or_later = culture_era_high_medieval } + has_cultural_era_or_later = culture_era_high_medieval + } + AND = { + root.culture = { has_cultural_era_or_later = culture_era_late_medieval } + has_cultural_era_or_later = culture_era_late_medieval + } + } +} + +scripted_trigger bp2_yearly_6040_better_capital_trigger = { + #the culture head of the other culture is more magnificent than root's culture head + OR = { + AND = { + culture_head = { + has_royal_court = yes + } + root.culture.culture_head ?= { + has_royal_court = no + } + } + AND = { + root.culture.culture_head ?= { + has_royal_court = yes + } + culture_head = { + has_royal_court = yes + court_grandeur_current > root.court_grandeur_current + } + } + AND = { + culture_head.capital_province.county = { + county.development_level >= root.capital_province.county.development_level + } + culture_head.capital_province.county = { + county.development_level >= root.culture.culture_head.capital_province.county.development_level + } + } + } +} + +# You consider integrating the ways and advancements of the culture that raised you into your realm +bp2_yearly.6040 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6040.t + desc = { + desc = bp2_yearly.6040.desc + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = hostage_childhood + } + desc = bp2_yearly.6040.hostage + } + desc = bp2_yearly.6040.education + } + desc = bp2_yearly.6040.outro + } + theme = culture_change + override_background = bp2_nursery + left_portrait = { + character = root + animation = chancellor + } + + trigger = { + NOT = { has_government = landless_adventurer_government } + has_bp2_dlc_trigger = yes + is_valid_for_narrow_yearly_events_adult = yes + #you need to be in a position where you can reform your culture and realm at once + culture = capital_province.culture + highest_held_title_tier >= tier_duchy + is_landed = yes + #Learned enough to get the idea + learning >= low_skill_rating + #Didn't say no to this event before + NOT = { has_character_flag = had_event_bp2_yearly_6040 } + #you were raised in a foreign court, as a hostage or ward + OR = { + any_memory = { + OR = { + has_memory_type = childhood_education_guardian + has_memory_type = childhood_education_no_guardian + } + has_variable = education_location + has_variable = education_location_culture + has_variable = education_host_culture + save_temporary_scope_as = ward_memory_temp + + #Check you were educated in a foreign place by foreigners + scope:ward_memory_temp.var:education_location_culture = { + save_temporary_scope_as = education_location_culture + } + scope:ward_memory_temp.var:education_host_culture = { + has_same_culture_heritage = scope:education_location_culture + } + scope:education_location_culture = { + save_temporary_scope_as = foreign_culture + this != root.culture + #culture has a ruler + exists = culture_head + + #figure out if they're more advanced + OR = { + bp2_yearly_6040_higher_cultural_era_trigger = yes + AND = { + root = { + government_has_flag = government_is_tribal + } + culture_head = { + NOT = { + government_has_flag = government_is_tribal + } + } + } + bp2_yearly_6040_better_capital_trigger = yes + } + NOT = { + culture_head = { + government_has_flag = government_is_tribal + } + } + bp2_yearly_6040_equal_or_higher_cultural_era_trigger = yes + + root.culture = { + can_get_innovation_from = scope:foreign_culture + } + } + + scope:ward_memory_temp.var:education_location = { + county.development_level >= root.capital_province.county.development_level + } + } + any_memory = { + memory_type = hostage_returned_hostage + has_variable = hostage_location + has_variable = hostage_location_culture + has_variable = hostage_warden_culture + save_temporary_scope_as = hostage_memory_temp + #Check you were educated in a foreign place by foreigners + scope:hostage_memory_temp.var:hostage_warden_culture = { + has_same_culture_heritage = scope:hostage_memory_temp.var:hostage_location_culture + } + scope:hostage_memory_temp.var:hostage_location_culture = { + save_temporary_scope_as = foreign_culture + this != root.culture + #culture has a ruler + exists = culture_head + + #figure out if they're more advanced + OR = { + bp2_yearly_6040_higher_cultural_era_trigger = yes + AND = { + root = { + government_has_flag = government_is_tribal + } + culture_head = { + NOT = { + government_has_flag = government_is_tribal + } + } + } + bp2_yearly_6040_better_capital_trigger = yes + } + NOT = { + culture_head = { + government_has_flag = government_is_tribal + } + } + bp2_yearly_6040_equal_or_higher_cultural_era_trigger = yes + + root.culture = { + can_get_innovation_from = scope:foreign_culture + } + } + + scope:hostage_memory_temp.var:hostage_location = { + county.development_level >= root.capital_province.county.development_level + } + } + } + } + + weight_multiplier = { + base = 1 + #If you got this event before and chose to delay it for later, this should pretty much ensure you will get the event again + modifier = { + factor = 5 + has_character_flag = delayed_event_bp2_yearly_6040 + } + modifier = { + factor = 2 + culture = { + has_cultural_pillar = ethos_egalitarian + } + } + modifier = { + factor = 0.5 + culture = { + has_cultural_parameter = ai_doesnt_marry_outside_culture + } + } + modifier = { + factor = 0.5 + culture = { + has_cultural_parameter = harder_to_hybridize + } + } + modifier = { + factor = 0.5 + learning < medium_skill_rating + } + modifier = { + factor = 2 + learning > very_high_skill_rating + } + } + + immediate = { + #Either triggered from hostage memory type or ward one; need to save their variables as scopes + if = { + limit = { + any_memory = { + memory_type = hostage_returned_hostage + has_variable = hostage_location + has_variable = hostage_location_culture + } + } + random_memory = { + memory_type = hostage_returned_hostage + limit = { + has_variable = hostage_location + has_variable = hostage_location_culture + } + save_scope_as = foreign_court_memory + var:hostage_location = { + save_scope_as = childhood_location + } + var:hostage_location_culture = { + save_scope_as = advanced_culture + } + var:hostage_realm ?= { + save_scope_as = advanced_realm + } + var:hostage_warden_faith ?= { + save_scope_as = advanced_culture_faith + } + memory_participant:warden ?= { + save_scope_as = foreign_warden + } + } + } + else = { + random_memory = { + limit = { + OR = { + has_memory_type = childhood_education_guardian + has_memory_type = childhood_education_no_guardian + } + has_variable = education_location + has_variable = education_location_culture + } + save_scope_as = foreign_court_memory + var:education_location = { + save_scope_as = childhood_location + } + var:education_location_culture = { + save_scope_as = advanced_culture + } + var:education_realm ?= { + save_scope_as = advanced_realm + } + var:education_host_faith ?= { + save_scope_as = advanced_culture_faith + } + memory_participant:guardian ?= { + save_scope_as = foreign_educator + } + } + } + + + if = { + limit = { + scope:foreign_court_memory = { + has_memory_type = hostage_returned_hostage + has_variable = hostage_location + has_variable = hostage_location_culture + } + } + add_character_flag = hostage_childhood + } + else = { + add_character_flag = education_childhood + } + } + + #There is much we could learn from them + option = { + name = bp2_yearly.6040.a + flavor = bp2_yearly.6040.a.tt + custom_tooltip = bp2_yearly.6040.a.reforms + if = { + limit = { + root = root.culture.culture_head + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_beginning_reforms + } + } + } + custom_tooltip = bp2_yearly.6040.a.warning + + add_prestige = major_prestige_loss + create_story = story_foreign_raised_reformer + #So there isn't a second reform in one lifetime + add_character_flag = had_event_bp2_yearly_6040 + + #save variables for the story + set_variable = { + name = childhood_location + value = scope:childhood_location + } + set_variable = { + name = advanced_culture + value = scope:advanced_culture + } + if = { + limit = { + exists = scope:advanced_realm + } + set_variable = { + name = advanced_realm + value = scope:advanced_realm + } + } + if = { + limit = { + exists = scope:foreign_educator + } + set_variable = { + name = foreign_educator + value = scope:foreign_educator + } + } + if = { + limit = { + exists = scope:advanced_culture_faith + } + set_variable = { + name = advanced_culture_faith + value = scope:advanced_culture_faith + } + } + + hidden_effect_new_object = { + random_owned_story = { + type = story_foreign_raised_reformer + set_variable = { + name = childhood_location + value = scope:childhood_location + } + set_variable = { + name = advanced_culture + value = scope:advanced_culture + } + if = { + limit = { + exists = scope:advanced_realm + } + set_variable = { + name = advanced_realm + value = scope:advanced_realm + } + } + if = { + limit = { + exists = scope:foreign_educator + } + set_variable = { + name = foreign_educator + value = scope:foreign_educator + } + } + if = { + limit = { + exists = scope:advanced_culture_faith + } + set_variable = { + name = advanced_culture_faith + value = scope:advanced_culture_faith + } + } + } + } + + stress_impact = { + profligate = minor_stress_impact_loss + scholar = miniscule_stress_impact_loss + content = medium_stress_impact_gain + lazy = medium_stress_impact_gain + humble = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 20 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = lazy + has_trait = humble + has_trait = paranoid + } + } + } + } + + #NEVER! My people are proud and unique + option = { + name = bp2_yearly.6040.b + flavor = bp2_yearly.6040.b.tt + add_character_flag = had_event_bp2_yearly_6040 + + add_character_modifier = { + modifier = devoted_to_tradition_modifier + years = 25 + } + custom_tooltip = bp2_yearly.6040.b.promote_culture + custom_tooltip = bp2_yearly.6040.b.no_reforms + + if = { + limit = { + has_character_flag = hostage_childhood + } + remove_character_flag = hostage_childhood + } + if = { + limit = { + has_character_flag = education_childhood + } + remove_character_flag = education_childhood + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + zealous = miniscule_stress_impact_loss + eccentric = major_stress_impact_gain + diligent = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_sociability = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = eccentric + has_trait = diligent + has_trait = cynical + } + } + } + } + + #Perhaps... but now is not the right time + option = { + name = bp2_yearly.6040.c + custom_tooltip = bp2_yearly.6040.c.recurring + add_character_flag = delayed_event_bp2_yearly_6040 + + if = { + limit = { + has_character_flag = hostage_childhood + } + remove_character_flag = hostage_childhood + } + if = { + limit = { + has_character_flag = education_childhood + } + remove_character_flag = education_childhood + } + + stress_impact = { + impatient = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = -1 + ai_zeal = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = ambitious + has_trait = fickle + } + } + } + } +} + +##################################### +# Stone, Iron, Clay and Wattle # +# by Jason Cantalini # +# 6050 # +##################################### + +scripted_trigger bp2_yearly_6050_noble_representative = { + is_imprisoned = no + is_available = yes + is_incapable = no + culture = root.culture + age > 14 + NOT = { + government_has_flag = government_is_republic + } +} + +scripted_effect bp2_yearly_6020_pay_powerful_vassals_effect = { + custom_tooltip = bp2_yearly.6020.pay_vassals + hidden_effect = { + remove_treasury_or_gold = minor_treasury_or_gold_value + if = { + limit = { + exists = scope:recipient_1 + } + pay_treasury_or_gold = { + target = scope:recipient_1 + value = minor_treasury_or_gold_value + } + } + if = { + limit = { + exists = scope:recipient_2 + } + pay_treasury_or_gold = { + target = scope:recipient_2 + value = minor_treasury_or_gold_value + } + } + if = { + limit = { + exists = scope:recipient_3 + } + pay_treasury_or_gold = { + target = scope:recipient_3 + value = minor_treasury_or_gold_value + } + } + if = { + limit = { + exists = scope:recipient_4 + } + pay_treasury_or_gold = { + target = scope:recipient_4 + value = minor_treasury_or_gold_value + } + } + if = { + limit = { + exists = scope:recipient_5 + } + pay_treasury_or_gold = { + target = scope:recipient_5 + value = minor_treasury_or_gold_value + } + } + } +} + +# You plan out an ambitious investment in the realm... or its lords +bp2_yearly.6050 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6050.t + desc = bp2_yearly.6050.desc + theme = culture_change + override_background = { + reference = terrain_travel + } + left_portrait = { + character = root + animation = steward + } + + right_portrait = { + character = scope:noble_representative + animation = war_defender + } + + lower_right_portrait = { + character = scope:foreign_architect + } + + lower_left_portrait = { + character = scope:loyal_knight + } + + trigger = { + has_bp2_dlc_trigger = yes + basic_is_valid_for_yearly_events_trigger = yes + + NOT = { capital_province.culture = var:advanced_culture } + #Learned enough to get the idea + NOT = { has_character_flag = had_event_bp2_yearly_6050 } + OR = { + any_vassal = { + bp2_yearly_6050_noble_representative = yes + OR = { + has_vassal_stance = glory_hound + has_vassal_stance = parochial + has_vassal_stance = courtly + has_vassal_stance = barons_and_minor_landholders + } + } + any_courtier = { + bp2_yearly_6050_noble_representative = yes + is_lowborn = no + } + } + + } + + weight_multiplier = { + base = 1 + #If you got this event before and chose to delay it for later, this should pretty much ensure you will get the event again + modifier = { + factor = 2 + var:advanced_culture = { + culture_head.capital_province.county = { + development_level > root.culture.culture_head.capital_province.county.development_level + } + } + } + modifier = { + factor = 2 + var:advanced_culture = { + culture_head.capital_province.county = { + development_level > root.capital_province.county.development_level + } + } + } + modifier = { + factor = 0.5 + var:advanced_culture = { + culture_head.capital_province.county = { + development_level <= root.capital_province.county.development_level + } + } + } + modifier = { + factor = 0.5 + var:advanced_culture = { + culture_head.capital_province.county = { + development_level <= root.culture.culture_head.capital_province.county.development_level + } + } + } + modifier = { + factor = 2 + var:advanced_culture = { + culture_head.capital_province.county = { + development_level > root.capital_province.county.development_level + } + } + } + modifier = { + factor = 1.5 + var:advanced_culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_spiritual + } + } + } + modifier = { + factor = 0.75 + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_spiritual + } + } + } + } + + immediate = { + add_character_flag = had_event_bp2_yearly_6050 + save_scope_as = root_scope + if = { + limit = { + any_vassal = { + bp2_yearly_6050_noble_representative = yes + OR = { + has_vassal_stance = glory_hound + has_vassal_stance = parochial + has_vassal_stance = courtly + has_vassal_stance = barons_and_minor_landholders + } + } + } + random_vassal = { + limit = { + bp2_yearly_6050_noble_representative = yes + OR = { + has_vassal_stance = glory_hound + has_vassal_stance = parochial + has_vassal_stance = courtly + has_vassal_stance = barons_and_minor_landholders + } + is_powerful_vassal = yes + } + alternative_limit = { + bp2_yearly_6050_noble_representative = yes + OR = { + has_vassal_stance = glory_hound + has_vassal_stance = parochial + has_vassal_stance = courtly + has_vassal_stance = barons_and_minor_landholders + } + } + save_scope_as = noble_representative + } + } + else = { + random_courtier = { + limit = { + bp2_yearly_6050_noble_representative = yes + is_lowborn = no + } + save_scope_as = noble_representative + } + } + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + #A little beginning on development work + capital_county = { + change_development_progress_with_overflow = medium_development_progress_gain + } + #Save powerful vassals so you can pay them gold + if = { + limit = { + any_powerful_vassal = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + } + } + } + random_powerful_vassal = { + limit = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + } + } + save_scope_as = recipient_1 + } + } + if = { + limit = { + any_powerful_vassal = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + } + } + } + random_powerful_vassal = { + limit = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + } + } + save_scope_as = recipient_2 + } + } + if = { + limit = { + any_powerful_vassal = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + } + } + } + random_powerful_vassal = { + limit = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + } + } + save_scope_as = recipient_3 + } + } + if = { + limit = { + any_powerful_vassal = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + this = scope:recipient_3 + } + } + } + random_powerful_vassal = { + limit = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + this = scope:recipient_3 + } + } + save_scope_as = recipient_4 + } + } + if = { + limit = { + any_powerful_vassal = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + this = scope:recipient_3 + this = scope:recipient_4 + } + } + } + random_powerful_vassal = { + limit = { + is_ai = yes + NOR = { + is_at_war_with = root + is_imprisoned_by = root + this = scope:recipient_1 + this = scope:recipient_2 + this = scope:recipient_3 + this = scope:recipient_4 + } + } + save_scope_as = recipient_5 + } + } + #save gold value for use in loc + save_scope_value_as = { + name = gold_gift_amount + value = root.minor_gold_value + } + #Create a foreign architect + create_character = { + template = foreign_architect_template + culture = scope:advanced_culture + faith = scope:advanced_culture.culture_head.faith + location = root.location + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + save_scope_as = foreign_architect + } + #Create a noble knight, a fine example of your culture + create_character = { + template = culture_defender_knight_template + culture = root.culture + faith = root.faith + location = root.location + gender_female_chance = root_soldier_female_chance + save_scope_as = loyal_knight + } + } + + #My capital is all that matters! + option = { + name = bp2_yearly.6050.a + flavor = bp2_yearly.6050.a.tt + capital_county = { + change_development_level = 4 + add_county_modifier = { + modifier = massive_construction_efforts_modifier + years = 20 + } + } + #modifier to make it easier to build in the capital + + if = { + limit = { + root = root.culture.culture_head + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_building_familiar_settlements + } + } + } + + add_courtier = scope:foreign_architect + #pisses off nobles majorly + if = { + limit = { + any_targeting_faction = { + exists = yes + NOT = { exists = faction_war } + NOT = { faction_is_type = peasant_faction } + } + } + add_targeting_factions_discontent = 30 + } + every_vassal = { + vassal_stance = courtly + custom = custom.every_courtly_vassal + add_opinion = { + target = root + modifier = hate_opinion + opinion = -50 + } + } + + remove_treasury_or_gold = monumental_treasury_or_gold_value + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new realm traditions in the tradition event + add_character_flag = foreign_realm_reforms + + stress_impact = { + arrogant = miniscule_stress_impact_loss + profligate = minor_stress_impact_loss + humble = massive_stress_impact_gain + content = major_stress_impact_gain + } + ai_chance = { + base = 10 + min = 0 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = humble + } + } + } + } + + #I'm not spending money on the realm - I'm spending tax money on the realm + option = { + name = bp2_yearly.6050.b + flavor = bp2_yearly.6050.b.tt + custom_tooltip = bp2_yearly.6050.every_county_development + hidden_effect = { + every_realm_county = { + limit = { + holder = root + } + change_development_level = 1 + change_county_control = major_county_control_loss + } + } + #modifier to make it easier to build anywhere + add_character_modifier = { + modifier = great_builder_modifier + } + if = { + limit = { + root = root.culture.culture_head + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_building_familiar_settlements + } + } + } + add_courtier = scope:foreign_architect + + custom_tooltip = bp2_yearly.6050.county_control_loss + custom_tooltip = bp2_yearly.6050.county_opinion_modifier + hidden_effect = { + #big county opinion and control loss + every_realm_county = { + limit = { + holder = root + culture != scope:advanced_culture + } + add_county_modifier = { + modifier = unprecedented_taxation_modifier + years = 15 + } + } + } + + #pisses off nobles a bit less than first option + if = { + limit = { + any_targeting_faction = { + exists = yes + NOT = { exists = faction_war } + } + } + add_targeting_factions_discontent = 30 + } + every_vassal = { + vassal_stance = courtly + custom = custom.every_courtly_vassal + add_opinion = { + target = root + modifier = hate_opinion + opinion = -25 + } + } + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + #make it possible to get new realm traditions in the tradition event + add_character_flag = foreign_realm_reforms + + stress_impact = { + greedy = miniscule_stress_impact_loss + generous = major_stress_impact_gain + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + min = 0 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = compassionate + has_trait = just + has_trait = paranoid + } + } + } + } + + #My peoples' leaders matter more than the realm + option = { + name = bp2_yearly.6050.c + flavor = bp2_yearly.6050.c.tt + + add_character_modifier = { + modifier = loyal_realm_nobility_modifier + } + add_legitimacy = minor_legitimacy_gain + add_courtier = scope:loyal_knight + bp2_yearly_6020_pay_powerful_vassals_effect = yes + + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = miniscule_negative_culture_acceptance + desc = cultural_acceptance_turned_away_trade + } + } + + custom_tooltip = bp2_yearly.6050.reaffirmation_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reaffirmation_counter + add = 1 + } + } + + add_character_flag = rejecting_foreign_realm_reforms + + stress_impact = { + loyal = medium_stress_impact_loss + trusting = minor_stress_impact_loss + generous = minor_stress_impact_loss + greedy = major_stress_impact_gain + disloyal = medium_stress_impact_gain + diligent = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + min = 0 + ai_value_modifier = { + ai_greed = -1 + ai_sociability = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = disloyal + has_trait = diligent + has_trait = arrogant + has_trait = stubborn + } + } + } + } + after = { + if = { + limit = { + scope:foreign_architect = { + NOT = { + is_courtier_of = root + } + } + } + scope:foreign_architect = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + scope:loyal_knight = { + NOT = { + is_courtier_of = root + } + } + } + scope:loyal_knight = { + silent_disappearance_effect = yes + } + } + } +} + +##################################### +# Studies in Eternity # +# by Jason Cantalini # +# 6060 # +##################################### + +scripted_trigger bp2_yearly_6060_clergy_representative = { + is_imprisoned = no + is_adult = yes + faith = root.faith +} + +# You question how your people could approach their faith in a new, more learned and organized way +bp2_yearly.6060 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6060.t + desc = { + desc = bp2_yearly.6060.desc + first_valid = { + triggered_desc = { + trigger = { + scope:advanced_culture_faith = root.faith + } + desc = bp2_yearly.6060.same_faith + } + desc = bp2_yearly.6060.different_faith + } + } + + theme = learning_theology_focus + override_background = { + reference = holy_site_generic_scope + } + left_portrait = { + character = root + animation = boredom + } + + right_portrait = { + character = scope:clergy_representative + animation = wedding_priest + } + + lower_right_portrait = { + character = scope:foreign_cleric + } + + lower_left_portrait = { + character = scope:foreign_scholar + } + + trigger = { + has_bp2_dlc_trigger = yes + basic_is_valid_for_yearly_events_trigger = yes + + exists = var:advanced_culture_faith + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + NOT = { has_character_flag = had_event_bp2_yearly_6060 } + OR = { + any_vassal = { + bp2_yearly_6060_clergy_representative = yes + government_has_flag = government_is_theocracy + culture != scope:temp_advanced_culture + } + any_courtier = { + bp2_yearly_6060_clergy_representative = yes + is_clergy = yes + culture != scope:temp_advanced_culture + } + any_pool_character = { + province = root.location + bp2_yearly_6060_clergy_representative = yes + is_clergy = yes + culture != scope:temp_advanced_culture + } + } + #if your faith is organized, the advanced faith must be organized too + OR = { + faith = { + has_doctrine_parameter = unreformed + } + AND = { + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + var:advanced_culture_faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + } + } + + weight_multiplier = { + base = 1 + #If you got this event before and chose to delay it for later, this should pretty much ensure you will get the event again + modifier = { + factor = 1.5 + var:advanced_culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_spiritual + } + } + } + modifier = { + factor = 0.75 + culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_spiritual + } + } + } + } + + immediate = { + capital_province = { + save_scope_as = holy_site_scope + } + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + var:advanced_culture_faith = { + save_scope_as = advanced_culture_faith + } + add_character_flag = had_event_bp2_yearly_6060 + save_scope_as = root_scope + if = { + limit = { + any_powerful_vassal = { + bp2_yearly_6060_clergy_representative = yes + government_has_flag = government_is_theocracy + culture != scope:advanced_culture + } + } + random_powerful_vassal = { + limit = { + bp2_yearly_6060_clergy_representative = yes + government_has_flag = government_is_theocracy + culture != scope:advanced_culture + } + save_scope_as = clergy_representative + } + } + else_if = { + limit = { + any_vassal = { + bp2_yearly_6060_clergy_representative = yes + government_has_flag = government_is_theocracy + culture != scope:advanced_culture + } + } + random_vassal = { + limit = { + bp2_yearly_6060_clergy_representative = yes + government_has_flag = government_is_theocracy + culture != scope:advanced_culture + } + save_scope_as = clergy_representative + } + } + else_if = { + limit = { + any_courtier = { + bp2_yearly_6060_clergy_representative = yes + is_clergy = yes + culture != scope:advanced_culture + } + } + random_courtier = { + limit = { + bp2_yearly_6060_clergy_representative = yes + is_clergy = yes + culture != scope:advanced_culture + } + save_scope_as = clergy_representative + } + } + else = { + random_pool_character = { + province = root.location + limit = { + bp2_yearly_6060_clergy_representative = yes + is_clergy = yes + culture != scope:advanced_culture + } + save_scope_as = clergy_representative + } + } + #Create a foreign cleric + create_character = { + template = foreign_cleric_template + culture = scope:advanced_culture + faith = scope:advanced_culture_faith + location = root.location + gender_female_chance = root_faith_clergy_gender_female_chance + save_scope_as = foreign_cleric + } + if = { + limit = { + scope:advanced_culture_faith = { + has_doctrine_parameter = take_vows_active + } + } + scope:foreign_cleric = { add_trait = devoted } + } + if = { + limit = { + scope:advanced_culture_faith = { + NOT = { has_doctrine_parameter = forbidden_from_pilgrimage } + } + } + scope:foreign_cleric = { add_trait = pilgrim } + } + + #Create a foreign scholar + create_character = { + template = foreign_scholar_template + culture = scope:advanced_culture + faith = scope:advanced_culture.culture_head.faith + location = root.location + gender_female_chance = root_faith_clergy_gender_female_chance + save_scope_as = foreign_scholar + } + } + + #I SHALL LEAD THE WAY WITH A GLORIOUS CONVERSION + option = { + trigger = { + faith != scope:advanced_culture_faith + is_ai = no + } + name = bp2_yearly.6060.a + flavor = bp2_yearly.6060.a.tt + + add_courtier = scope:foreign_cleric + + + scope:advanced_culture_faith = { + change_fervor = { + value = 20 + desc = fervor_gain_reformer_converts + } + } + add_piety = major_piety_gain + #replace piety with same culture opinion modifier...? + + set_character_faith_with_conversion = scope:advanced_culture_faith + if = { + limit = { + scope:advanced_culture_faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new ritual traditions in the tradition event + add_character_flag = foreign_ritual_reforms + + stress_impact = { + loyal = medium_stress_impact_gain + content = minor_stress_impact_gain + craven = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = loyal + has_trait = content + has_trait = craven + has_trait = paranoid + scope:advanced_culture_faith = { + has_doctrine_parameter = unreformed + } + } + } + } + } + + #We should be conducting religion is such a grand and organized manner + option = { + name = bp2_yearly.6060.b + flavor = bp2_yearly.6060.b.tt + + custom_tooltip = bp2_yearly.6060.b.conversion_bonus + add_character_flag = reformer_conversion + + if = { + limit = { + scope:advanced_culture_faith = root.faith + } + add_courtier = scope:foreign_cleric + } + add_character_modifier = { + modifier = adapted_rituals_modifier + } + + if = { + limit = { + capital_county = { + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + } + capital_county = { + random_county_province = { + limit = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + begin_create_holding = { + type = church_holding + refund_cost = { gold = hold_court_holding_cost_half_value } + } + } + } + add_piety = massive_piety_loss + } + else_if = { + limit = { + any_held_title = { + title_tier = county + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + } + random_held_title = { + title_tier = county + limit = { + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + random_county_province = { + limit = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + begin_create_holding = { + type = church_holding + refund_cost = { gold = hold_court_holding_cost_half_value } + } + } + } + add_piety = massive_piety_loss + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new ritual traditions in the tradition event + add_character_flag = foreign_ritual_reforms + + stress_impact = { + theologian = minor_stress_impact_loss + humble = medium_stress_impact_gain + cynical = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + ai_value_modifier = { + ai_greed = 1 + ai_zeal = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = zealous + has_trait = arbitrary + has_trait = eccentric + } + } + } + } + + #It is their studiousness that gives them such access to the mysteries of faith + option = { + name = bp2_yearly.6060.c + flavor = bp2_yearly.6060.c.tt + if = { + limit = { + capital_province = { + has_special_building_slot = no + } + } + capital_province = { + add_special_building_slot = generic_university + } + if = { + limit = { + government_has_flag = government_is_tribal + } + custom_tooltip = bp2_yearly.6060.c.tribal_warning + } + } + else_if = { + limit = { + any_held_county = { + any_county_province = { has_special_building_slot = no } + } + } + ordered_held_county = { + limit = { + any_county_province = { has_special_building_slot = no } + } + order_by = { + value = development_level + multiply = 1 + } + save_scope_as = most_developed_county + } + scope:most_developed_county.title_province = { + add_special_building_slot = generic_university + } + if = { + limit = { + government_has_flag = government_is_tribal + } + custom_tooltip = bp2_yearly.6060.c.tribal_warning + } + } + else = { + add_character_modifier = { + modifier = court_of_scholars_modifier + } + primary_heir ?= { + add_character_modifier = { + modifier = court_of_scholars_modifier + } + } + } + + add_learning_skill = 4 + custom_tooltip = bp2_yearly.6060.c.nerd + hidden_effect = { + add_intrigue_skill = -2 + add_diplomacy_skill = -2 + add_martial_skill = -2 + add_stewardship_skill = -2 + add_prowess_skill = -2 + } + add_courtier = scope:foreign_scholar + + add_legitimacy = minor_legitimacy_loss + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new ritual traditions in the tradition event + add_character_flag = foreign_ritual_reforms + + stress_impact = { + scholar = minor_stress_impact_loss + lazy = major_stress_impact_gain + impatient = medium_stress_impact_gain + content = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = impatient + has_trait = content + has_trait = sadistic + } + } + } + } + + #We are the true believers, now that I think about it + option = { + name = bp2_yearly.6060.d + flavor = bp2_yearly.6060.d.tt + + #same faith bonus modifier + + add_piety = major_piety_gain + + every_vassal = { + limit = { + OR = { + has_vassal_stance = zealot + has_vassal_stance = parochial + } + } + custom = custom.every_zealot_or_parochial_vassal + add_opinion = { + target = root + modifier = admiration_opinion + opinion = 25 + } + } + + faith = { + change_fervor = { + value = 10 + desc = fervor_gain_reformer_champions_faith + } + } + scope:advanced_culture_faith = { + change_fervor = { + value = -10 + desc = fervor_loss_reformer_rejects_faith + } + } + + custom_tooltip = bp2_yearly.6050.reaffirmation_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reaffirmation_counter + add = 1 + } + } + + add_character_flag = rejecting_foreign_ritual_reforms + + stress_impact = { + zealous = minor_stress_impact_loss + fickle = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + diligent = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + ai_value_modifier = { + ai_zeal = 1 + ai_energy = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = fickle + has_trait = ambitious + has_trait = diligent + has_trait = cynical + } + } + } + } + after = { + if = { + limit = { + scope:foreign_cleric ?= { + NOT = { + is_courtier_of = root + } + } + } + scope:foreign_cleric = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + scope:foreign_scholar ?= { + NOT = { + is_courtier_of = root + } + } + } + scope:foreign_scholar = { + silent_disappearance_effect = yes + } + } + } +} + +##################################### +# Where All the World Gazes # +# by Jason Cantalini # +# 6070 # +##################################### + +# You consider pursuing fancy foreign court manners +bp2_yearly.6070 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6070.t + desc = bp2_yearly.6070.desc + + + theme = diplomacy_majesty_focus + override_background = { + reference = throne_room + } + left_portrait = { + character = root + animation = shame + } + + right_portrait = { + character = scope:foreign_official + animation = throne_room_bow_1 + } + + lower_right_portrait = { + character = scope:advanced_court_owner + } + + trigger = { + has_bp2_dlc_trigger = yes + basic_is_valid_for_yearly_events_trigger = yes + exists = var:advanced_culture.culture_head + NOT = { capital_province.culture = var:advanced_culture } + NOT = { has_character_flag = had_event_bp2_yearly_6070 } + } + + weight_multiplier = { + base = 1 + #If you got this event before and chose to delay it for later, this should pretty much ensure you will get the event again + modifier = { + factor = 2 + var:advanced_culture.culture_head = { + has_royal_court = yes + } + OR = { + has_royal_court = no + var:advanced_culture.culture_head = { + court_grandeur_current > root.court_grandeur_current + } + } + } + modifier = { + factor = 0.5 + OR = { + var:advanced_culture.culture_head = { + has_royal_court = no + } + var:advanced_culture.culture_head = { + AND = { + has_royal_court = yes + court_grandeur_current <= root.court_grandeur_current + } + } + } + } + modifier = { + factor = 1.5 + var:advanced_culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_stoic + } + } + } + modifier = { + factor = 0.75 + culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_stoic + } + } + } + } + + immediate = { + add_character_flag = had_event_bp2_yearly_6070 + save_scope_as = root_scope + + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + scope:advanced_culture.culture_head = { + save_scope_as = advanced_court_owner + } + + #Create a foreign visitor + create_character = { + template = foreign_official_template + culture = scope:advanced_culture + faith = scope:advanced_court_owner.faith + location = root.location + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + save_scope_as = foreign_official + } + #He needs gold to confiscate + hidden_effect = { + scope:foreign_official = { + add_gold = root.medium_gold_value + } + } + hidden_effect_new_object = { + scope:foreign_official = { + save_scope_as = owner + #Create fancy regalia + set_artifact_rarity_illustrious = yes + create_artifact = { + name = artifact_admired_culture_regalia + description = placeholder # Will be updated in the post-creation effects + creator = scope:foreign_official + visuals = regalia + type = regalia + template = regalia_template + modifier = artifact_placeholder_modifier + wealth = scope:wealth + quality = scope:quality + save_scope_as = newly_created_artifact_1 + history = { + type = created_before_history + } + } + scope:newly_created_artifact_1 = { + set_artifact_description = artifact_famed_culture_regalia_desc + add_scaled_artifact_modifier_grandeur_small_effect = yes + add_scaled_artifact_modifier_minor_prestige_effect = yes + add_scaled_artifact_modifier_rulership_effect = yes + } + #Create fancy crown + set_artifact_rarity_illustrious = yes + create_artifact = { + name = artifact_admired_culture_crown + description = placeholder # Will be updated in the post-creation effects + creator = scope:foreign_official + visuals = crown + template = crown_wearable_template + type = helmet + modifier = artifact_placeholder_modifier + wealth = scope:wealth + quality = scope:quality + save_scope_as = newly_created_artifact_2 + history = { + type = created_before_history + } + } + scope:newly_created_artifact_2 = { + set_artifact_description = artifact_famed_culture_crown_desc + add_scaled_artifact_modifier_intrigue_effect = yes + add_scaled_artifact_modifier_majesty_effect = yes + } + } + if = { + limit = { + scope:advanced_culture = { + has_cultural_pillar = ethos_bellicose + } + } + set_artifact_rarity_famed = yes + create_artifact_book_effect = { + OWNER = scope:foreign_official + CREATOR = scope:foreign_official + SET_SUBJECT = flag:martial + SET_TOPIC = flag:no + } + } + else_if = { + limit = { + scope:advanced_culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_egalitarian + } + } + } + set_artifact_rarity_famed = yes + create_artifact_book_effect = { + OWNER = scope:foreign_official + CREATOR = scope:foreign_official + SET_SUBJECT = flag:stewardship + SET_TOPIC = flag:no + } + } + else_if = { + limit = { + scope:advanced_culture = { + has_cultural_pillar = ethos_stoic + } + } + set_artifact_rarity_famed = yes + create_artifact_book_effect = { + OWNER = scope:foreign_official + CREATOR = scope:foreign_official + SET_SUBJECT = flag:diplomacy + SET_TOPIC = flag:no + } + } + else_if = { + limit = { + scope:advanced_culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_spiritual + } + } + } + set_artifact_rarity_famed = yes + create_artifact_book_effect = { + OWNER = scope:foreign_official + CREATOR = scope:foreign_official + SET_SUBJECT = flag:learning + SET_TOPIC = flag:no + } + } + else_if = { + limit = { + scope:advanced_culture = { + has_cultural_pillar = ethos_communal + } + } + set_artifact_rarity_famed = yes + create_artifact_book_effect = { + OWNER = scope:foreign_official + CREATOR = scope:foreign_official + SET_SUBJECT = flag:intrigue + SET_TOPIC = flag:no + } + } + scope:newly_created_artifact = { + set_artifact_name = artifact_advanced_culture_treatise + } + } + } + + #Try to actually learn from them instead of just copying them + option = { + trigger = { + OR = { + learning >= high_skill_rating + stewardship >= high_skill_rating + } + culture.culture_head = root + } + name = bp2_yearly.6070.a + flavor = bp2_yearly.6070.a.tt + culture = { + get_random_innovation_from = scope:advanced_culture + } + add_courtier = scope:foreign_official + scope:advanced_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_learning_from_culture + } + } + add_prestige_level = -1 + add_prestige = medium_prestige_loss + + # make it possible to get new maa traditions in the tradition event + add_character_flag = foreign_social_reforms + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + humble = miniscule_stress_impact_loss + arrogant = medium_stress_impact_gain + impatient = medium_stress_impact_gain + greedy = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_rationality = 1 + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = arrogant + has_trait = impatient + has_trait = lazy + } + } + } + } + #The finest foreign fashion! Teach us the fanciest foreign manners + option = { + name = bp2_yearly.6070.b + flavor = bp2_yearly.6070.b.tt + + scope:newly_created_artifact_1 = { + set_owner = { + target = root + history = { + location = root.capital_province + actor = scope:foreign_official + recipient = root + type = purchased + } + } + } + + scope:newly_created_artifact_2 = { + set_owner = { + target = root + history = { + location = root.capital_province + actor = scope:foreign_official + recipient = root + type = purchased + } + } + } + # somebody might want them back + custom_tooltip = bp2_yearly.6070.artifact_warning + hidden_effect = { + random = { + chance = 75 + scope:advanced_court_owner = { + add_personal_artifact_claim = scope:newly_created_artifact_1 + add_personal_artifact_claim = scope:newly_created_artifact_2 + } + } + } + #so they don't get destroyed + add_character_flag = chose_artifacts + + add_courtier = scope:foreign_official + every_vassal = { + limit = { + OR = { + has_vassal_stance = courtly + has_vassal_stance = parochial + } + } + custom = custom.every_parochial_or_courtly_vassal + add_opinion = { + target = root + modifier = hate_opinion + opinion = -25 + } + } + pay_short_term_gold = { + target = scope:foreign_official + gold = monumental_gold_value + } + + + + if = { + limit = { + culture.culture_head = root + } + adopt_cultural_fashion_effect = yes + } + else_if = { # Error suppression + limit = { always = no } + set_variable = { + name = adopted_cultural_style + value = flag:western + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + # make it possible to get new social traditions in the tradition event + add_character_flag = foreign_social_reforms + + stress_impact = { + arrogant = minor_stress_impact_loss + just = medium_stress_impact_gain + humble = medium_stress_impact_gain + honest = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = -1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = humble + has_trait = honest + has_trait = content + } + } + } + } + + #It's language that will change our fortunes + option = { + name = bp2_yearly.6070.c + flavor = bp2_yearly.6070.c.tt + + scope:newly_created_artifact = { + add_artifact_history = { + type = given + actor = scope:foreign_official + recipient = root + } + } + scope:newly_created_artifact = { + set_owner = root + } + #so it doesn't get destroyed + add_character_flag = chose_book + + + scope:advanced_court_owner = { + add_opinion = { + target = root + opinion = 20 + modifier = friendliness_opinion + } + } + + if = { + limit = { + NOT = { + knows_language_of_culture = scope:advanced_culture + } + } + learn_language_of_culture = scope:advanced_culture + } + if = { + limit = { + primary_heir ?= { + age > 5 + opinion = { + target = root + value >= 50 + } + NOT = { + knows_language_of_culture = scope:advanced_culture + } + } + } + primary_heir = { + learn_language_of_culture = scope:advanced_culture + } + } + + #make it super cheap to change court language + custom_tooltip = bp2_yearly.6070.court_language_discount + add_character_flag = foreign_language_reformer + + add_courtier = scope:foreign_official + + pay_short_term_gold = { + target = scope:foreign_official + gold = medium_gold_value + } + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new social traditions in the tradition event + add_character_flag = foreign_social_reforms + + + + if = { + limit = { + NOT = { + scope:advanced_culture = { + has_same_culture_language = root.culture + } + } + } + stress_impact = { + scholar = medium_stress_impact_loss + lifestyle_traveler = medium_stress_impact_loss + intellect_good_3 = medium_stress_impact_loss + diplomat = medium_stress_impact_loss + diligent = minor_stress_impact_loss + base = major_stress_impact_gain + lazy = medium_stress_impact_gain + impatient = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + else = { + stress_impact = { + scholar = miniscule_stress_impact_loss + intellect_good_3 = miniscule_stress_impact_loss + diplomat = miniscule_stress_impact_loss + base = minor_stress_impact_gain + lazy = medium_stress_impact_gain + impatient = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + ai_rationality = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = impatient + has_trait = arrogant + } + } + } + } + + #This desperate imitation is kinda turning my stomach + option = { + name = bp2_yearly.6070.d + flavor = bp2_yearly.6070.d.tt + + scope:foreign_official = { + pay_short_term_gold = { + target = root + gold = root.medium_gold_value + } + } + + rightfully_imprison_character_effect = { + TARGET = scope:foreign_official + IMPRISONER = root + } + + every_vassal = { + vassal_stance = courtly + custom = custom.every_courtly_vassal + add_opinion = { + target = root + modifier = respect_opinion + opinion = 25 + } + } + + custom_tooltip = bp2_yearly.6050.reaffirmation_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reaffirmation_counter + add = 1 + } + } + + add_character_flag = rejecting_foreign_social_reforms + + stress_impact = { + fickle = miniscule_stress_impact_loss + trusting = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = forgiving + has_trait = compassionate + } + } + } + } + after = { + if = { + limit = { + scope:foreign_official ?= { + NOR = { + is_courtier_of = root + is_imprisoned_by = root + } + } + } + scope:foreign_official = { + silent_disappearance_effect = yes + } + } + hidden_effect = { + if = { + limit = { + exists = scope:newly_created_artifact_1 + NOT = { has_character_flag = chose_artifacts } + } + destroy_artifact = scope:newly_created_artifact_1 + } + if = { + limit = { + exists = scope:newly_created_artifact_2 + NOT = { has_character_flag = chose_artifacts } + } + destroy_artifact = scope:newly_created_artifact_2 + } + if = { + limit = { + exists = scope:newly_created_artifact + NOT = { has_character_flag = chose_book } + } + destroy_artifact = scope:newly_created_artifact + } + remove_character_flag ?= chose_artifacts + remove_character_flag ?= chose_book + } + scope:foreign_official = { + silent_disappearance_ai_effect = yes + } + } +} + +##################################### +# Where the Knights Know Peace # +# by Chad Uhl & Jason Cantalini # +# 6200 # +##################################### + +scripted_trigger bp2_yearly_6200_basic_knight = { + is_imprisoned = no + is_incapable = no + NOT = { exists = involved_activity } + opinion = { + target = root + value > -80 + } + highest_held_title_tier < tier_county + is_ai = yes + NOR = { + this = scope:hostage + this = scope:home_court + } +} + +# Fired from the on_war_started_on_action +bp2_yearly.6200 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6200.t + desc = bp2_yearly.6200.desc + theme = hostage + + override_background = { + reference = army_camp + } + + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:hostage + animation = throne_room_bow_2 + } + lower_left_portrait = scope:target_knight + lower_right_portrait = scope:hostage.home_court + + trigger = { + scope:hostage = { + is_alive = yes + } + is_alive = yes + } + + immediate = { + if = { + limit = { + any_knight = { + bp2_yearly_6200_basic_knight = yes + is_commanding_army = no + opinion = { + target = root + value >= 0 + } + } + } + random_knight = { + limit = { + bp2_yearly_6200_basic_knight = yes + is_commanding_army = no + opinion = { + target = root + value >= 0 + } + } + save_scope_as = target_knight + } + } + else_if = { + limit = { + any_knight = { + bp2_yearly_6200_basic_knight = yes + } + } + random_knight = { + limit = { + bp2_yearly_6200_basic_knight = yes + } + save_scope_as = target_knight + } + } + } + + option = { # Send normal + name = bp2_yearly.6200.a + flavor = bp2_yearly.6200.a.tt + scope:hostage = { + start_travel_plan = { + destination = home_court.capital_province + on_arrival_event = bp2_yearly.6201 + } + } + custom_tooltip = bp2_yearly.6200.hostage_travel + custom_tooltip = bp2_yearly.6200.war_positive + custom_tooltip = bp2_yearly.6200.hostage_warning + + stress_impact = { + arrogant = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = stubborn + has_trait = paranoid + } + } + } + } + + option = { # Send with gift + name = bp2_yearly.6200.b + flavor = bp2_yearly.6200.b.tt + scope:hostage = { + start_travel_plan = { + destination = home_court.capital_province + on_arrival_event = bp2_yearly.6201 + } + set_variable = { + name = hostage_aid_request_gold + value = root.major_gold_value + } + } + remove_short_term_gold = major_gold_value + custom_tooltip = bp2_yearly.6200.hostage_travel + custom_tooltip = bp2_yearly.6200.war_very_positive + custom_tooltip = bp2_yearly.6200.hostage_warning + + stress_impact = { + arrogant = medium_stress_impact_gain + greedy = medium_stress_impact_gain + paranoid = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = greedy + has_trait = stubborn + has_trait = paranoid + } + } + } + } + + option = { # Send with knight + name = bp2_yearly.6200.c + flavor = bp2_yearly.6200.c.tt + show_as_unavailable = { + NOT = { + any_knight = { + bp2_yearly_6200_basic_knight = yes + is_commanding_army = no + opinion = { + target = root + value >= 0 + } + } + } + } + custom_tooltip = bp2_yearly.6200.hostage_travel_knight + custom_tooltip = bp2_yearly.6200.hostage_positive + custom_tooltip = bp2_yearly.6200.hostage_warning + custom_tooltip = bp2_yearly.6200.imprison_warning + + scope:hostage = { + start_travel_plan = { + destination = home_court.capital_province + on_arrival_event = bp2_yearly.6201 + } + set_variable = { + name = hostage_aid_request_chaperone + value = scope:target_knight + } + } + scope:target_knight = { + start_travel_plan = { + destination = scope:hostage.home_court.capital_province + } + } + + stress_impact = { + arrogant = minor_stress_impact_gain + trusting = medium_stress_impact_gain + stubborn = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = trusting + has_trait = stubborn + } + } + } + } + + option = { # Don't send + name = bp2_yearly.6200.d + flavor = bp2_yearly.6200.d.tt + + scope:hostage = { + add_opinion = { + target = root + modifier = hurt_opinion + opinion = -15 + } + } + + stress_impact = { + craven = medium_stress_impact_gain + trusting = minor_stress_impact_gain + } + + ai_chance = { + base = 20 + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = trusting + } + } + } + } +} + +# Arrival event where we delay the travel plan and decide what happens +bp2_yearly.6201 = { + hidden = yes + + immediate = { + if = { # Ensure the warden hasn't died in the war + limit = { + warden ?= { + is_alive = yes + is_participant_in_war = scope:war + is_imprisoned = no + } + is_alive = yes + } + if = { + limit = { + home_court = { is_ai = yes } + } + # Decide how the home court owner will respond + random_list = { + 10 = { # Home Court Joins War + trigger = { + home_court = { + NOR = { + liege = scope:attacker + top_liege = scope:attacker + any_vassal = { + this = scope:attacker + this = scope:hostage.warden + } + } + } + } + set_variable = { + name = home_court_response + value = flag:join_war + } + + # Modifiers + modifier = { + add = 10 + home_court = { + OR = { + opinion = { + target = scope:attacker + value < -20 + } + has_relation_rival = scope:attacker + } + } + } + modifier = { + add = 10 + home_court = { + opinion = { + target = scope:defender + value > 20 + } + } + } + modifier = { + add = 20 + home_court = { + OR = { + has_relation_friend = scope:defender + has_relation_best_friend = scope:defender + } + } + } + modifier = { + add = 30 + home_court = { + OR = { + has_relation_nemesis = scope:attacker + has_relation_rival = scope:attacker + } + } + } + modifier = { + factor = 0 + home_court = { is_at_war = yes } + } + modifier = { + add = 30 + has_variable = hostage_aid_request_gold + } + modifier = { + add = 10 + scope:hostage = { + diplomacy > 10 + } + } + } + 40 = { # Home Court Provides Assistance + set_variable = { + name = home_court_response + value = flag:assist + } + modifier = { + add = 10 + scope:hostage = { + diplomacy > 10 + } + } + modifier = { + add = 10 + has_variable = hostage_aid_request_gold + } + } + 50 = { # Home Court Declines + set_variable = { + name = home_court_response + value = flag:decline + } + modifier = { + add = 30 + home_court = { has_relation_friend = scope:attacker } + } + modifier = { + add = 30 + home_court = { + OR = { + liege = scope:attacker + top_liege = scope:attacker + } + } + } + } + } + random_list = { + 40 = { # Home Court keeps Hostage + trigger = { scope:hostage.var:home_court_response = flag:decline } + set_variable = { + name = home_court_hostage_action + value = flag:keep + } + modifier = { + add = -30 + has_variable = hostage_aid_request_chaperone + } + modifier = { + add = 20 + home_court = { + OR = { + has_relation_rival = scope:defender + has_relation_nemesis = scope:defender + } + } + } + } + 60 = { # Home Court does not keep Hostage + set_variable = { + name = home_court_hostage_action + value = flag:dont_keep + } + modifier = { + add = 10 + home_court = { + opinion = { + target = scope:defender + value > 20 + } + } + } + modifier = { + add = 10 + home_court = { + OR = { + has_relation_friend = scope:defender + has_relation_best_friend = scope:defender + } + } + } + } + } + # Fire letter event to warden that the hostage has arrived + warden = { + trigger_event = bp2_yearly.6202 + } + # Delay travel plan + current_travel_plan = { + delay_travel_plan = { days = 20 } + } + #delay knight's travel plan + scope:target_knight ?= { + current_travel_plan = { + delay_travel_plan = { days = 20 } + } + } + # Set up the event telling the warden of the home court decision + warden = { + trigger_event = { id = bp2_yearly.6203 days = 19 } + } + } + else = { # If the home court character is a player, we let them decide how to respond + save_scope_as = target_hostage + # Fire letter event to warden that the hostage has arrived + warden = { + trigger_event = bp2_yearly.6202 + } + # Delay travel plan + current_travel_plan = { + delay_travel_plan = { days = 20 } + } + #delay knight's travel plan + scope:target_knight ?= { + current_travel_plan = { + delay_travel_plan = { days = 20 } + } + } + home_court = { + trigger_event = { id = bp2_yearly.6204 days = 18 } + } + } + } + } +} + +# Letter Event informing the warden that the hostage has arrived +bp2_yearly.6202 = { + type = letter_event + opening = bp2_yearly.6202.t + desc = { + desc = bp2_yearly.6202.opening + random_valid = { + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + scope:hostage.var:home_court_response = flag:assist + scope:hostage.var:home_court_response = flag:join_war + } + } + desc = bp2_yearly.6202.assembled_nobles + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_response = flag:assist + #this is the only one that triggers between players + scope:warden = { is_ai = no } + } + } + desc = bp2_yearly.6202.impatient + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_response = flag:assist + } + } + desc = bp2_yearly.6202.nostalgia + } + } + random_valid = { + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_response = flag:assist + scope:hostage.var:home_court_response = flag:join_war + } + } + desc = bp2_yearly.6202.received_empathy + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + scope:hostage.var:home_court_response = flag:assist + scope:hostage.var:home_court_response = flag:join_war + scope:hostage.var:home_court_response = flag:decline + } + } + desc = bp2_yearly.6202.received_debate + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_response = flag:dont_keep + scope:hostage.var:home_court_response = flag:assist + #this is the only one that triggers between players + scope:warden = { is_ai = no } + } + } + desc = bp2_yearly.6202.received_apathy + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:decline + } + } + desc = bp2_yearly.6202.received_scorn + } + } + random_valid = { + triggered_desc = { + trigger = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:assist + } + desc = bp2_yearly.6202.want_to_return + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + scope:hostage.var:home_court_response = flag:assist + scope:hostage.var:home_court_response = flag:join_war + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_hostage_action = flag:keep + #this is the only one that triggers between players + scope:warden = { is_ai = no } + } + } + desc = bp2_yearly.6202.awaiting + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_response = flag:dont_keep + scope:hostage.var:home_court_response = flag:assist + scope:hostage.var:home_court_response = flag:join_war + } + } + desc = bp2_yearly.6202.want_to_stay + } + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + scope:hostage.var:home_court_response = flag:decline + scope:hostage.var:home_court_response = flag:assist + } + } + desc = bp2_yearly.6202.fears_returning + } + } + } + + + sender = scope:hostage + + trigger = { + is_participant_in_war = scope:war + } + + immediate = { + + } + + option = { + name = bp2_yearly.6202.a + ai_chance = { + base = 10 + } + } +} + + +# Letter Event giving the Warden the Home Court's answer +bp2_yearly.6203 = { + type = letter_event + opening = bp2_yearly.6203.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:hostage.var:home_court_response = flag:join_war + } + desc = bp2_yearly.6203.join_war + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_response = flag:assist + } + desc = bp2_yearly.6203.assist + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_response = flag:decline + exists = scope:home_court_joins_as_attacker + } + desc = bp2_yearly.6203.betray + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_response = flag:decline + } + desc = bp2_yearly.6203.decline + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + exists = scope:target_knight + scope:target_knight = { + is_alive = yes + is_imprisoned = no + liege = root + } + } + desc = bp2_yearly.6203.dont_keep_knight + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_hostage_action = flag:dont_keep + } + desc = bp2_yearly.6203.dont_keep + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_hostage_action = flag:keep + } + desc = bp2_yearly.6203.keep + } + } + } + + sender = scope:hostage + + trigger = { + is_participant_in_war = scope:war + } + + immediate = { + if = { + limit = { + scope:hostage.home_court = { is_ai = yes } + } + switch = { + trigger = scope:hostage.var:home_court_response + flag:join_war = { + play_music_cue = mx_cue_positive_effect + scope:war = { + add_defender = scope:hostage.home_court + } + # Keep money if you sent a gift + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_gold } } + scope:hostage.home_court = { + add_gold = scope:hostage.var:hostage_aid_request_gold + } + } + } + flag:assist = { + play_music_cue = mx_cue_positive_effect + set_variable = { + name = bp2_yearly_6203_army_name_origin + value = scope:hostage + } + # Your armies await + spawn_army = { + name = bp2_yearly_6203_army_name + uses_supply = yes + levies = bp2_yearly_6203_levy_size + men_at_arms = { + type = light_footmen + stacks = bp2_yearly_6203_skirmishers_size + } + # can't spawn units over water. Will be possible on FP3 + location = scope:hostage.home_court.capital_province + war = scope:war + } + } + flag:decline = {} + } + + switch = { + trigger = scope:hostage.var:home_court_hostage_action + flag:keep = { + # Righteously imprison the knight with them if they are + save_scope_as = actor + scope:hostage.home_court = { save_scope_as = recipient } + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_chaperone } } + hidden_effect = { + scope:hostage.var:hostage_aid_request_chaperone = { + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + } + } + imprison_character_effect = { + TARGET = scope:hostage.var:hostage_aid_request_chaperone + IMPRISONER = scope:hostage.home_court + } + } + # End hostageship + bp2_return_hostage_no_travel_effect = { HOSTAGE = scope:hostage } + # Keep money if you sent a gift + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_gold } } + scope:hostage.home_court = { + add_gold = scope:hostage.var:hostage_aid_request_gold + } + } + if = { + limit = { + scope:war = { + defender_war_score <= 60 + } + } + random_list = { + 75 = {} + 25 = { # Home Court joins enemy + scope:war = { add_attacker = scope:hostage.home_court } + play_music_cue = mx_cue_war_declared + root = { save_scope_as = home_court_joins_as_attacker } + } + } + } + } + flag:dont_keep = {} + } + } + else = { # If the home court is a player, we still show the effects of their decision as a tooltip, but we don't run them again + show_as_tooltip = { + switch = { + trigger = scope:hostage.var:home_court_response + flag:join_war = { + play_music_cue = mx_cue_positive_effect + scope:war = { + add_defender = scope:hostage.home_court + } + # Keep money if you sent a gift + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_gold } } + scope:hostage.home_court = { + add_gold = scope:hostage.var:hostage_aid_request_gold + } + } + } + flag:assist = { + play_music_cue = mx_cue_positive_effect + set_variable = { + name = bp2_yearly_6203_army_name_origin + value = scope:hostage + } + # Your armies await + spawn_army = { + name = bp2_yearly_6203_army_name + uses_supply = yes + levies = bp2_yearly_6203_levy_size + men_at_arms = { + type = light_footmen + stacks = bp2_yearly_6203_skirmishers_size + } + # can't spawn units over water. Will be possible on FP3 + location = scope:hostage.home_court.capital_province + war = scope:war + } + } + flag:decline = {} + } + switch = { + trigger = scope:hostage.var:home_court_hostage_action + flag:keep = { + # Righteously imprison the knight with them if they are + save_scope_as = actor + scope:hostage.home_court = { save_scope_as = recipient } + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_chaperone } } + hidden_effect = { + scope:hostage.var:hostage_aid_request_chaperone = { + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + } + } + imprison_character_effect = { + TARGET = scope:hostage.var:hostage_aid_request_chaperone + IMPRISONER = scope:hostage.home_court + } + } + # End hostageship + bp2_return_hostage_no_travel_effect = { HOSTAGE = scope:hostage } + # Keep money if you sent a gift + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_gold } } + scope:hostage.home_court = { + add_gold = scope:hostage.var:hostage_aid_request_gold + } + } + if = { + limit = { + exists = scope:home_court_joins_as_attacker + } + scope:war = { add_attacker = scope:hostage.home_court } + play_music_cue = mx_cue_war_declared + } + } + flag:dont_keep = {} + } + } + } + } + + option = { # Grateful response + name = bp2_yearly.6203.a + flavor = bp2_yearly.6203.a.tt + trigger = { + scope:hostage.var:home_court_response = flag:join_war + } + # progress towards friend + progress_towards_friend_effect = { + REASON = friend_hostage_sent_for_aid + CHARACTER = scope:hostage + OPINION = default_friend_opinion + } + + stress_impact = { + callous = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + shy = minor_stress_impact_gain + arrogant = miniscule_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = paranoid + has_trait = shy + has_trait = arrogant + } + } + } + } + + option = { # Vengeful response + name = bp2_yearly.6203.b + flavor = bp2_yearly.6203.b.tt + trigger = { + scope:hostage.var:home_court_hostage_action = flag:keep + } + # rivalry + progress_towards_rival_effect = { + REASON = rival_disregarded_plea_for_help + CHARACTER = scope:home_court + OPINION = -30 + } + # positive war modifier for vengeance + add_character_modifier = { + modifier = from_victory_vengeance_modifier + years = 10 + } + + stress_impact = { + forgiving = major_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = minor_stress_impact_gain + craven = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = compassionate + has_trait = calm + has_trait = craven + } + } + } + } + + option = { # Acknowledge + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:hostage.var:home_court_response = flag:join_war + scope:hostage.var:home_court_response = flag:assist + } + } + desc = bp2_yearly.6203.c.positive + } + triggered_desc = { + trigger = { + scope:hostage.var:home_court_response = flag:decline + } + desc = bp2_yearly.6203.c.negative + } + } + } + } + if = { + limit = { + scope:hostage.var:home_court_response = flag:join_war + } + add_prestige = medium_prestige_gain + stress_impact = { + trusting = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + } + } + else_if = { + limit = { + scope:hostage.var:home_court_hostage_action = flag:keep + } + stress_impact = { + vengeful = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + just = minor_stress_impact_gain + } + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + OR = { + scope:hostage.var:home_court_hostage_action = flag:keep + has_trait = vengeful + has_trait = sadistic + has_trait = wrathful + has_trait = just + } + } + modifier = { + factor = 0 + OR = { + scope:hostage.var:home_court_response = flag:join_war + has_trait = trusting + has_trait = gregarious + } + } + } + } + + after = { + # Clean up the variables + if = { + limit = { has_variable = bp2_yearly_6203_army_name_origin } + remove_variable = bp2_yearly_6203_army_name_origin + } + scope:hostage = { + if = { + limit = { has_variable = hostage_aid_request_gold } + remove_variable = hostage_aid_request_gold + } + if = { + limit = { has_variable = hostage_aid_request_chaperone } + remove_variable = hostage_aid_request_chaperone + } + if = { + limit = { has_variable = home_court_response } + remove_variable = home_court_response + } + if = { + limit = { has_variable = home_court_hostage_action } + remove_variable = home_court_hostage_action + } + } + } +} + +# Bilateral event for a player character home court where the player gets to decide if they will help out their hostage's warden in the war +bp2_yearly.6204 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6204.t + desc = { + desc = bp2_yearly.6204.desc + first_valid = { + triggered_desc = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_gold + } + } + desc = bp2_yearly.6204.desc_gift + } + triggered_desc = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_chaperone + } + scope:target_knight ?= { + is_alive = yes + is_imprisoned = no + } + } + desc = bp2_yearly.6204.desc_chaperone + } + desc = bp2_yearly.6204.desc_none + } + desc = bp2_yearly.6204.desc_outro + } + theme = hostage + override_background = { reference = courtyard } + + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:hostage + triggered_animation = { + trigger = { + NOT = { + scope:hostage = { + has_variable = hostage_aid_request_chaperone + } + } + } + animation = throne_room_messenger_3 + } + animation = beg + } + lower_center_portrait = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_chaperone + } + } + character = scope:target_knight + } + lower_right_portrait = { + character = scope:warden + } + lower_left_portrait = { + character = scope:attacker + } + + immediate = { + scope:hostage.warden = { + save_scope_as = warden + } + if = { + limit = { + scope:hostage = { + has_variable = hostage_aid_request_gold + } + } + root = { + add_gold = scope:hostage.var:hostage_aid_request_gold + } + } + } + + option = { # Join the War + name = bp2_yearly.6204.a + flavor = bp2_yearly.6204.a.tt + trigger = { + NOR = { + liege = scope:attacker + top_liege = scope:attacker + any_vassal = { + this = scope:attacker + this = scope:warden + } + } + } + scope:hostage = { + set_variable = { + name = home_court_response + value = flag:join_war + } + set_variable = { + name = home_court_hostage_action + value = flag:dont_keep + } + } + scope:war = { + add_defender = root + } + add_character_modifier = { + modifier = a_noble_fight_modifier + years = 5 + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = 30 + modifier = grateful_opinion + } + reverse_add_opinion = { + target = scope:hostage + opinion = 30 + modifier = grateful_opinion + } + + # Fire the event letting the warden know of the decision + # This is also where the actual effects are run + scope:hostage.warden = { + trigger_event = { + id = bp2_yearly.6203 + days = 1 + } + } + stress_impact = { + craven = medium_stress_impact_gain + content = medium_stress_impact_gain + callous = minor_stress_impact_gain + calm = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + } + } + + option = { # Just provide assistance + name = bp2_yearly.6204.b + flavor = bp2_yearly.6204.b.tt + capital_county = { + change_county_control = 15 + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = 20 + modifier = grateful_opinion + } + reverse_add_opinion = { + target = scope:hostage + opinion = 20 + modifier = grateful_opinion + } + scope:hostage = { + set_variable = { + name = home_court_response + value = flag:assist + } + set_variable = { + name = home_court_hostage_action + value = flag:dont_keep + } + warden = { + set_variable = { + name = bp2_yearly_6203_army_name_origin + value = scope:hostage + } + # spawn some armies + spawn_army = { + name = bp2_yearly_6203_army_name + uses_supply = yes + levies = bp2_yearly_6203_levy_size + men_at_arms = { + type = light_footmen + stacks = bp2_yearly_6203_skirmishers_size + } + location = scope:hostage.location + war = scope:war + } + } + } + remove_short_term_gold = medium_gold_value + + # Fire the event letting the warden know of the decision + # This is also where the actual effects are run + scope:hostage.warden = { + trigger_event = bp2_yearly.6203 + } + stress_impact = { + brave = miniscule_stress_impact_gain + just = minor_stress_impact_gain + greedy = medium_stress_impact_gain + } + } + + option = { # Decline + name = bp2_yearly.6204.c + flavor = bp2_yearly.6204.c.tt + scope:hostage = { + set_variable = { + name = home_court_response + value = flag:decline + } + } + add_character_modifier = { + modifier = peace_over_honor_modifier + years = 10 + } + reverse_add_opinion = { + target = scope:hostage + opinion = -30 + modifier = disappointed_opinion + } + if = { + limit = { + scope:hostage = { + has_variable = hostage_aid_request_gold + NOR = { + has_relation_friend = scope:hostage.warden + has_relation_best_friend = scope:hostage.warden + } + } + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = -20 + modifier = disappointed_opinion + } + } + #decide whether to return hostage event + trigger_event = bp2_yearly.6205 + if = { + limit = { + OR = { + has_relation_friend = scope:hostage.warden + has_relation_best_friend = scope:hostage.warden + } + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = -40 + modifier = disappointed_opinion + } + stress_impact = { + base = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + loyal = minor_stress_impact_gain + diligent = miniscule_stress_impact_gain + brave = minor_stress_impact_gain + } + } + else = { + stress_impact = { + content = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + diligent = miniscule_stress_impact_gain + brave = minor_stress_impact_gain + } + } + } +} + +# Oh? I could just take my hostage back +bp2_yearly.6205 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6205.t + desc = { + desc = bp2_yearly.6205.desc + first_valid = { + triggered_desc = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_gold + } + } + desc = bp2_yearly.6205.desc_none + } + triggered_desc = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_chaperone + } + scope:target_knight ?= { + is_alive = yes + is_imprisoned = no + } + } + desc = bp2_yearly.6205.desc_chaperone + } + desc = bp2_yearly.6205.desc_none + } + desc = bp2_yearly.6205.desc_outro + } + theme = hostage + override_background = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + reference = wilderness_desert + } + override_background = { + trigger = { + root.location = { + OR = { + terrain = forest + terrain = taiga + } + NOR = { + geographical_region = world_africa + geographical_region = world_india + geographical_region = world_europe_west_iberia + geographical_region = world_middle_east + } + } + } + reference = ep2_hunt_forest_hut + } + override_background = { + trigger = { + root.location = { + OR = { + terrain = forest + terrain = taiga + } + OR = { + geographical_region = world_africa + geographical_region = world_india + geographical_region = world_europe_west_iberia + geographical_region = world_middle_east + } + } + } + reference = wilderness_forest + } + override_background = { + trigger = { + root.location = { graphical_wilderness_jungle_trigger = yes } + } + reference = wilderness_jungle + } + + override_background = { + trigger = { + root.location = { graphical_wilderness_steppe_trigger = yes } + } + reference = ep2_travel_settlement_steppe + } + override_background = { + trigger = { + root.location = { graphical_wilderness_desert_trigger = yes } + } + reference = ep2_travel_settlement_desert + } + override_background = { + trigger = { + root.location = { graphical_hills_trigger = yes } + } + reference = ep2_travel_settlement_hills + } + override_background = { + trigger = { + root.location = { graphical_wilderness_mountains_trigger = yes } + } + reference = ep2_travel_settlement_mountains + } + override_background = { + trigger = { + root.location = { + OR = { + terrain = farmlands + terrain = plains + terrain = floodplains + } + } + } + reference = ep2_travel_settlement_farm + } + override_background = { + reference = terrain + } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = craven + has_trait = compassionate + has_trait = forgiving + } + } + animation = personality_coward + } + animation = personality_vengeful + } + right_portrait = { + character = scope:hostage + animation = jockey_idle + camera = camera_event_horse_right + } + lower_left_portrait = { + character = scope:attacker + } + lower_right_portrait = { + character = scope:warden + } + lower_center_portrait = { + trigger = { + scope:hostage = { + has_variable = hostage_aid_request_chaperone + } + } + character = scope:target_knight + } + + immediate = { + #saving scopes for return effect + scope:hostage.warden = { save_scope_as = actor } + save_scope_as = recipient + } + + option = { # Keep hostage + name = bp2_yearly.6205.a + scope:hostage = { + set_variable = { + name = home_court_hostage_action + value = flag:keep + } + } + # End hostageship + bp2_return_hostage_no_travel_effect = { HOSTAGE = scope:hostage } + every_close_family_member = { + custom = all_close_family_members + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 15 + } + } + #Imprison the knight with them if they are + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_chaperone } } + imprison_character_effect = { + TARGET = scope:hostage.var:hostage_aid_request_chaperone + IMPRISONER = root + } + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = -30 + modifier = stole_hostage_opinion + } + scope:hostage.warden = { + trigger_event = bp2_yearly.6203 + } + stress_impact = { + paranoid = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + trusting = minor_stress_impact_gain + just = medium_stress_impact_gain + humble = miniscule_stress_impact_gain + honest = miniscule_stress_impact_gain + } + } + + option = { # Keep hostage and join war as attacker + trigger = { + NOR = { + liege = scope:hostage.warden + top_liege = scope:hostage.warden + any_vassal = { + this = scope:hostage.warden + this = scope:attacker + } + } + } + name = bp2_yearly.6205.b + scope:war = { add_attacker = root } + add_character_modifier = { + modifier = aggressive_unpredictable_modifier + years = 10 + } + scope:hostage = { + set_variable = { + name = home_court_hostage_action + value = flag:keep + } + } + # End hostageship + bp2_return_hostage_no_travel_effect = { HOSTAGE = scope:hostage } + #Imprison the knight with them if they are + if = { + limit = { scope:hostage = { has_variable = hostage_aid_request_chaperone } } + imprison_character_effect = { + TARGET = scope:hostage.var:hostage_aid_request_chaperone + IMPRISONER = root + } + } + if = { + limit = { + has_character_modifier = peace_over_honor_modifier + } + remove_character_modifier = peace_over_honor_modifier + } + reverse_add_opinion = { + target = scope:hostage.warden + opinion = -50 + modifier = stole_hostage_opinion + } + root = { save_scope_as = home_court_joins_as_attacker } + scope:warden = { + trigger_event = bp2_yearly.6203 + } + stress_impact = { + vengeful = medium_stress_impact_loss + wrathful = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + fickle = minor_stress_impact_loss + disloyal = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + forgiving = major_stress_impact_gain + just = medium_stress_impact_gain + trusting = minor_stress_impact_gain + content = miniscule_stress_impact_gain + humble = minor_stress_impact_gain + calm = minor_stress_impact_gain + loyal = minor_stress_impact_gain + } + } + + option = { # Don't keep hostage + name = bp2_yearly.6205.c + scope:hostage = { + set_variable = { + name = home_court_hostage_action + value = flag:dont_keep + } + } + every_close_family_member = { + custom = all_close_family_members + add_opinion = { + target = root + modifier = estranged_opinion + opinion = -10 + } + } + scope:hostage.warden = { + trigger_event = bp2_yearly.6203 + } + if = { + limit = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + stress_impact = { + vengeful = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + paranoid = miniscule_stress_impact_gain + } + } + else = { + stress_impact = { + base = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + } + } +} + +##################################### +# Bulgarian Blood # +# by Jason Cantalini # +# 6080 # +##################################### + +scripted_trigger bp2_yearly_6080_vassal = { + is_imprisoned = no + age > 13 + is_at_war = no + opinion = { + target = root + value < 0 + } + is_ai = yes +} + +# You are about to get some sweet foreign mercenary bodyguards... and it's a breaking point for your resentful nobility +bp2_yearly.6080 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6080.t + desc = bp2_yearly.6080.desc + + theme = war + override_background = { + reference = courtyard + } + left_portrait = { + character = root + animation = disbelief + } + + right_portrait = { + character = scope:angry_vassal + animation = anger + } + + lower_right_portrait = { + character = scope:foreign_mercenary_1 + } + + lower_left_portrait = { + character = scope:foreign_mercenary_2 + } + + trigger = { + has_bp2_dlc_trigger = yes + basic_is_valid_for_yearly_events_trigger = yes + + NOT = { has_character_flag = had_event_bp2_yearly_6080 } + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + any_vassal = { + bp2_yearly_6080_vassal = yes + culture != scope:temp_advanced_culture + } + } + + weight_multiplier = { + base = 1 + #If you got this event before and chose to delay it for later, this should pretty much ensure you will get the event again + modifier = { + factor = 2 + culture = { + OR = { + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_stoic + } + } + } + modifier = { + factor = 0.5 + NOT = { + any_targeting_faction = { + faction_power = halved_faction_power_threshold + } + } + } + modifier = { + factor = 1.5 + var:advanced_culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + has_cultural_pillar = ethos_bureaucratic + } + } + } + modifier = { + factor = 0.75 + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_bureaucratic + } + } + } + } + + immediate = { + add_character_flag = had_event_bp2_yearly_6080 + save_scope_as = root_scope + var:advanced_culture = { + save_scope_as = advanced_culture + } + if = { + limit = { + any_powerful_vassal = { + bp2_yearly_6080_vassal = yes + opinion = { + target = root + value <= -40 + } + culture != scope:advanced_culture + } + } + random_powerful_vassal = { + limit = { + bp2_yearly_6080_vassal = yes + opinion = { + target = root + value <= -40 + } + culture != scope:advanced_culture + } + save_scope_as = angry_vassal + } + } + else_if = { + limit = { + any_powerful_vassal = { + bp2_yearly_6080_vassal = yes + culture != scope:advanced_culture + } + } + random_powerful_vassal = { + limit = { + bp2_yearly_6080_vassal = yes + culture != scope:advanced_culture + } + save_scope_as = angry_vassal + } + } + else_if = { + limit = { + any_vassal = { + bp2_yearly_6080_vassal = yes + opinion = { + target = root + value <= -40 + } + culture != scope:advanced_culture + } + } + random_vassal = { + limit = { + bp2_yearly_6080_vassal = yes + opinion = { + target = root + value <= -40 + } + culture != scope:advanced_culture + } + save_scope_as = angry_vassal + } + } + else = { + random_vassal = { + limit = { + bp2_yearly_6080_vassal = yes + culture != scope:advanced_culture + } + save_scope_as = angry_vassal + } + } + + #Create two foreign fighting dudes + create_character = { + template = foreign_mercenary_template + culture = scope:advanced_culture + faith = scope:advanced_culture.culture_head.faith + location = root.location + gender_female_chance = root_soldier_female_chance + save_scope_as = foreign_mercenary_1 + } + scope:foreign_mercenary_1 = { + add_character_flag = wear_armor + } + create_character = { + template = foreign_mercenary_template + culture = scope:advanced_culture + faith = scope:advanced_culture.culture_head.faith + location = root.location + gender_female_chance = root_soldier_female_chance + save_scope_as = foreign_mercenary_2 + } + scope:foreign_mercenary_2 = { + add_character_flag = wear_armor + } + #save a province to resettle them, if any available + #One to build things in + if = { + limit = { + any_held_title = { + title_tier = county + this != root.capital_county + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + } + random_held_title = { + title_tier = county + limit = { + this != root.capital_county + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + save_scope_as = resettlement_county + } + } + #One that things can't be built in + else_if = { + limit = { + any_held_title = { + title_tier = county + this != root.capital_county + } + } + random_held_title = { + title_tier = county + limit = { + this != root.capital_county + } + save_scope_as = resettlement_county + } + } + } + + #Try to find a compromise that still lets you keep these skilled Greeks + option = { + trigger = { + OR = { + diplomacy >= high_skill_rating + intrigue >= high_skill_rating + } + } + name = bp2_yearly.6080.a + flavor = bp2_yearly.6080.a.tt + if = { + limit = { + exists = scope:resettlement_county + scope:resettlement_county = { + any_county_province = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + } + } + scope:resettlement_county = { + random_county_province = { + limit = { + has_holding = no + NOR = { + has_construction_with_flag = temple + has_construction_with_flag = castle + has_construction_with_flag = city + has_construction_with_flag = tribe + } + } + if = { + limit = { + scope:advanced_culture.culture_head ?= { + government_has_flag = government_is_tribal + } + } + begin_create_holding = { + type = tribal_holding + refund_cost = { gold = hold_court_holding_cost_half_value } + } + } + else_if = { + limit = { + scope:advanced_culture = { + has_cultural_pillar = ethos_spiritual + } + } + begin_create_holding = { + type = church_holding + refund_cost = { gold = hold_court_holding_cost_half_value } + } + } + else_if = { + limit = { + scope:advanced_culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_stoic + } + } + } + begin_create_holding = { + type = castle_holding + refund_cost = { gold = hold_court_holding_cost_half_value } + } + } + else = { + begin_create_holding = { + type = city_holding + } + } + } + change_development_level = 1 + set_county_culture = scope:advanced_culture + } + } + else_if = { + limit = { + exists = scope:resettlement_county + } + scope:resettlement_county = { + change_development_level = 2 + change_county_control = major_county_control_gain + set_county_culture = scope:advanced_culture + } + } + else = { + capital_county = { + change_development_level = 1 + } + capital_county = { + change_county_control = major_county_control_gain + } + } + custom_tooltip = bp2_yearly.6080.pop_opinion_modifier + hidden_effect = { + if = { + limit = { + exists = scope:resettlement_county + } + scope:resettlement_county.duchy = { + every_de_jure_county = { + limit = { + NOR = { + culture = scope:advanced_culture + this = scope:resettlement_county + } + holder.top_liege = root + } + add_county_modifier = { + modifier = forcible_resettlement_modifier + years = 10 + } + } + } + } + else = { + capital_county.duchy = { + every_de_jure_county = { + limit = { + NOR = { + culture = scope:advanced_culture + this = root.capital_county + } + holder.top_liege = root + } + add_county_modifier = { + modifier = forcible_resettlement_modifier + years = 10 + } + } + } + } + } + + add_tyranny = medium_tyranny_gain + + # make it possible to get new maa traditions in the tradition event + add_character_flag = foreign_maa_reforms + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + stubborn = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } + + #Try to capture the noble and disrupt the nascent rebellion + option = { + name = bp2_yearly.6080.b + flavor = bp2_yearly.6080.b.tt + + if = { + limit = { + government_has_flag = government_is_tribal + NOT = { has_realm_law = tribal_authority_3 } + } + increase_tribal_authority_effect = yes + } + # Everyone else increases CA. + else_if = { + limit = { + NOT = { government_has_flag = government_is_tribal } + NOT = { has_realm_law = crown_authority_3 } + } + increase_crown_authority_effect = yes + } + else = { + add_dread = major_dread_gain + } + capital_province = { + add_province_modifier = { + modifier = elite_foreign_guard_modifier + } + } + + custom_tooltip = bp2_yearly.6080.add_both_courtiers + hidden_effect = { + add_courtier = scope:foreign_mercenary_1 + add_courtier = scope:foreign_mercenary_2 + } + + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:angry_vassal } + } + scope:angry_vassal = { + set_relation_rival = { + target = root + reason = rival_attacked_dissent + } + } + } + else = { + scope:angry_vassal = { + add_opinion = { + target = root + opinion = -40 + modifier = hate_opinion + } + } + } + + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + duel = { + skills = { martial prowess } + target = scope:angry_vassal + 55 = { #It works well + desc = bp2_yearly.6080.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3 + } + + send_interface_toast = { + title = bp2_yearly.6080.b.success + left_icon = root + right_icon = scope:angry_vassal + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:angry_vassal + IMPRISONER = root + } + every_vassal = { + limit = { + culture != scope:advanced_culture + } + custom = custom.every_non_advanced_culture_vassal + add_opinion = { + target = root + modifier = angry_opinion + opinion = -10 + } + } + } + } + 45 = { #It doesn't go well + desc = bp2_yearly.6080.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3 + min = -40 + } + send_interface_toast = { + title = bp2_yearly.6080.b.failure + left_icon = root + right_icon = scope:angry_vassal + + scope:angry_vassal = { + start_war = { + casus_belli = refused_liege_demand_war + target = root + } + } + if = { + limit = { + any_targeting_faction = { + exists = yes + NOT = { exists = faction_war } + } + } + add_targeting_factions_discontent = major_discontent_gain + } + add_tyranny = massive_tyranny_gain + add_legitimacy = minor_legitimacy_loss + } + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + + # make it possible to get new maa traditions in the tradition event + add_character_flag = foreign_maa_reforms + + stress_impact = { + forgiving = major_stress_impact_gain + calm = medium_stress_impact_gain + patient = medium_stress_impact_gain + trusting = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = calm + has_trait = patient + has_trait = trusting + has_trait = compassionate + } + } + } + } + + #I am unstoppable. I am changing things. + option = { + name = bp2_yearly.6080.c + flavor = bp2_yearly.6080.c.tt + + if = { + limit = { + government_has_flag = government_is_tribal + NOT = { has_realm_law = tribal_authority_3 } + } + increase_tribal_authority_effect = yes + } + # Everyone else increases CA. + else_if = { + limit = { + NOT = { government_has_flag = government_is_tribal } + NOT = { has_realm_law = crown_authority_3 } + } + increase_crown_authority_effect = yes + } + else = { + add_dread = major_dread_gain + } + capital_province = { + add_province_modifier = { + modifier = elite_foreign_guard_modifier + } + } + custom_tooltip = bp2_yearly.6080.add_both_courtiers + hidden_effect = { + add_courtier = scope:foreign_mercenary_1 + add_courtier = scope:foreign_mercenary_2 + } + custom_tooltip = bp2_yearly.6080.hook_removal_vassals + custom_tooltip = bp2_yearly.6080.hook_removal + custom_tooltip = bp2_yearly.6080.truce_removal + hidden_effect = { + every_vassal = { + limit = { + has_hook = root + is_ai = yes + culture != scope:advanced_culture + } + remove_hook = { target = root } + } + every_vassal = { + limit = { + root = { + has_hook = prev + } + culture != scope:advanced_culture + is_ai = yes + } + root = { + remove_hook = { target = prev} + } + } + + every_vassal = { + limit = { + has_truce = root + culture != scope:advanced_culture + is_ai = yes + } + cancel_truce_both_ways = root + } + + every_vassal = { + limit = { + root = { + has_truce = prev + } + culture != scope:advanced_culture + is_ai = yes + } + root = { + cancel_truce_both_ways = prev + } + } + } + add_legitimacy = major_legitimacy_loss + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + # make it possible to get new maa traditions in the tradition event + add_character_flag = foreign_maa_reforms + + stress_impact = { + just = major_stress_impact_gain + fickle = medium_stress_impact_gain + content = medium_stress_impact_gain + craven = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = fickle + has_trait = content + has_trait = craven + has_trait = humble + } + } + } + } + + #I don't want to see violence break out between my people + option = { + name = bp2_yearly.6080.d + flavor = bp2_yearly.6080.d.tt + + add_character_modifier = { + modifier = common_noble_cause_modifier + years = 30 + } + add_prestige = medium_prestige_gain + + custom_tooltip = bp2_yearly.6050.reaffirmation_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reaffirmation_counter + add = 1 + } + } + + add_character_flag = rejecting_foreign_maa_reforms + + stress_impact = { + vengeful = major_stress_impact_gain + sadistic = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = vengeful + has_trait = sadistic + has_trait = arbitrary + has_trait = ambitious + has_trait = wrathful + } + } + } + } + + after = { + if = { + limit = { + NOR = { + scope:foreign_mercenary_1 ?= { + is_courtier_of = root + } + scope:foreign_mercenary_2 ?= { + is_courtier_of = root + } + } + } + scope:foreign_mercenary_1 = { + silent_disappearance_effect = yes + } + scope:foreign_mercenary_2 = { + silent_disappearance_effect = yes + } + } + else = { + scope:foreign_mercenary_1 = { + remove_character_flag = wear_armor + } + scope:foreign_mercenary_2 = { + remove_character_flag = wear_armor + } + } + } +} + +##################################### +# A Birthright, Renewed # +# by Jason Cantalini # +# 6090 # +##################################### + +scripted_trigger bp2_yearly_6090_vassal = { + is_imprisoned = no + age > 13 + is_at_war = no + culture = root.culture +} + +# You've chosen enough reaffirmation options to engender disinterest from the admired culture and the devotion of your people +bp2_yearly.6090 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6090.t + desc = { + desc = bp2_yearly.6090.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:advanced_court_owner + } + desc = bp2_yearly.6090.burn_letters + } + desc = bp2_yearly.6090.burn_else + } + triggered_desc = { + trigger = { + has_character_flag = had_event_bp2_yearly_6070 + } + desc = bp2_yearly.6090.reaffirm_social + } + triggered_desc = { + trigger = { + has_character_flag = had_event_bp2_yearly_6050 + } + desc = bp2_yearly.6090.reaffirm_realm + } + triggered_desc = { + trigger = { + has_character_flag = had_event_bp2_yearly_6060 + } + desc = bp2_yearly.6090.reaffirm_ritual + } + triggered_desc = { + trigger = { + has_character_flag = had_event_bp2_yearly_6080 + } + desc = bp2_yearly.6090.reaffirm_maa + } + desc = bp2_yearly.6090.outro + } + + theme = vassal + override_background = { + reference = bp1_bonfire + } + left_portrait = { + character = root + animation = sword_coup_degrace + } + + right_portrait = { + character = scope:celebrating_noble + animation = throne_room_cheer_2 + } + + lower_right_portrait = { + character = scope:advanced_court_owner + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + add_character_flag = had_event_bp2_yearly_6090 + remove_variable = adopted_cultural_fashion + save_scope_as = root_scope + if = { + limit = { + any_powerful_vassal = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + } + random_powerful_vassal = { + limit = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + save_scope_as = celebrating_noble + } + } + else_if = { + limit = { + any_vassal = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + } + random_vassal = { + limit = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + save_scope_as = celebrating_noble + } + } + else_if = { + limit = { + any_powerful_vassal = { + bp2_yearly_6090_vassal = yes + } + } + random_powerful_vassal = { + limit = { + bp2_yearly_6090_vassal = yes + } + save_scope_as = celebrating_noble + } + } + else_if = { + limit = { + any_vassal = { + bp2_yearly_6090_vassal = yes + } + } + random_vassal = { + limit = { + bp2_yearly_6090_vassal = yes + } + save_scope_as = celebrating_noble + } + } + else_if = { + limit = { + any_courtier = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + } + random_courtier = { + limit = { + bp2_yearly_6090_vassal = yes + opinion = { + target = root + value >= 0 + } + } + save_scope_as = celebrating_noble + } + } + else_if = { + limit = { + any_courtier = { + bp2_yearly_6090_vassal = yes + } + } + random_courtier = { + limit = { + bp2_yearly_6090_vassal = yes + } + save_scope_as = celebrating_noble + } + } + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + scope:advanced_culture.culture_head = { + save_scope_as = advanced_court_owner + } + if = { + limit = { + culture.culture_head = root + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = low_negative_culture_acceptance + desc = cultural_acceptance_loss_rejected_influence + } + } + } + + give_nickname = nick_the_true_culture + create_character_memory = { + type = reaffirmed_cultural_identity + participants = { other_culture_head = scope:advanced_court_owner } + } + } + + #Your culture is still born anew - as united conquerors! + option = { + name = { + trigger = { + culture = { + has_cultural_pillar = ethos_courtly + } + } + text = bp2_yearly.6090.a.virtue + } + name = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_egalitarian + } + } + } + text = bp2_yearly.6090.a.governed + } + name = { + trigger = { + culture = { + has_cultural_pillar = ethos_communal + } + } + text = bp2_yearly.6090.a.kin + } + + name = { + trigger = { + culture = { + has_cultural_pillar = ethos_bellicose + } + } + text = bp2_yearly.6090.a.bow + } + name = { + trigger = { + culture = { + has_cultural_pillar = ethos_spiritual + } + } + text = bp2_yearly.6090.a.zeal + } + name = { + trigger = { + culture = { + NOR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_egalitarian + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_spiritual + } + } + } + text = bp2_yearly.6090.a.strength + } + flavor = bp2_yearly.6090.a.tt + + add_character_modifier = { + modifier = uniter_and_conqueror_modifier + } + if = { + limit = { + has_character_flag = used_lifetime_invasion + } + custom_tooltip = bp2_yearly.6090.tribal_invasion + } + else_if = { + limit = { + NOR = { + government_has_flag = government_is_tribal + faith = { + has_doctrine_parameter = invasion_cb_enabled + } + } + } + custom_tooltip = bp2_yearly.6090.non_tribal_invasion + } + else_if = { + limit = { + NOT = { + has_trait = flexible_leader + } + } + add_trait = flexible_leader + } + else_if = { + limit = { + NOT = { + has_trait = holy_warrior + } + } + add_trait = holy_warrior + } + else_if = { + limit = { + NOT = { + has_trait = aggressive_attacker + } + } + add_trait = aggressive_attacker + } + else_if = { + limit = { + NOT = { + has_trait = organizer + } + } + add_trait = organizer + } + custom_tooltip = bp2_yearly.6090.no_invasion_req + + #unlock invasion cb + if = { + limit = { + has_character_flag = used_lifetime_invasion + } + remove_character_flag = used_lifetime_invasion + } + add_character_flag = bp2_inspired_culture_for_conquest + + if = { + limit = { + highest_held_title_tier >= tier_empire + } + spawn_army = { + name = event_troop_default_name + levies = 4264 + location = root.capital_province + origin = root.capital_province + } + } + else_if = { + limit = { + highest_held_title_tier = tier_kingdom + } + spawn_army = { + name = event_troop_default_name + levies = 3126 + location = root.capital_province + origin = root.capital_province + } + } + else_if = { + limit = { + highest_held_title_tier = tier_duchy + } + spawn_army = { + name = event_troop_default_name + levies = 2123 + location = root.capital_province + origin = root.capital_province + } + } + else = { + spawn_army = { + name = event_troop_default_name + levies = 1067 + location = root.capital_province + origin = root.capital_province + } + } + + add_prestige = medium_prestige_gain + + if = { + limit = { + exists = scope:advanced_court_owner + can_set_relation_rival_trigger = { CHARACTER = scope:advanced_court_owner } + scope:advanced_court_owner = { + is_ai = yes + } + } + set_relation_rival = { + target = scope:advanced_court_owner + reason = rival_rejected_culture_influence + } + } + + if = { + limit = { + culture.culture_head = root + } + trigger_event = { + id = bp2_yearly.6091 + days = { 10 20 } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + greedy = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + content = major_stress_impact_gain + craven = major_stress_impact_gain + humble = major_stress_impact_gain + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = craven + has_trait = humble + has_trait = forgiving + has_trait = compassionate + } + } + } + } + + #Focus on preserving your family and your culture + option = { + name = bp2_yearly.6090.b + flavor = bp2_yearly.6090.b.tt + + add_character_modifier = { + modifier = a_cultures_great_defender_modifier + } + + every_held_title = { + title_tier = county + limit = { + culture = root.culture + } + custom = custom.every_same_culture_held_county + add_county_modifier = { + modifier = inspired_defenders_modifier + years = 30 + } + } + + dynasty = { + add_dynasty_prestige = massive_dynasty_prestige_gain + } + + if = { + limit = { + culture.culture_head = root + } + trigger_event = { + id = bp2_yearly.6091 + days = { 10 20 } + } + } + + stress_impact = { + compassionate = minor_stress_impact_loss + content = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + ambitious = major_stress_impact_gain + greedy = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_energy = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = arrogant + has_trait = greedy + has_trait = vengeful + } + } + } + } + + after = { + random_owned_story = { + type = story_foreign_raised_reformer + end_story = yes + } + } +} + +##################################### +# A People Immutable # +# by Jason Cantalini # +# 6091 # +##################################### + +# Informing you which traditions are now cheaper +bp2_yearly.6091 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6091.t + desc = { + desc = bp2_yearly.6091 + first_valid = { + triggered_desc = { + trigger = { + has_character_modifier = uniter_and_conqueror_modifier + } + desc = bp2_yearly.6091.dominance + } + desc = bp2_yearly.6091.defense + } + } + + theme = vassal + override_background = { + reference = throne_room + } + left_portrait = { + character = root + animation = chaplain + } + + trigger = { + culture.culture_head = root + is_imprisoned = no + is_incapable = no + OR = { + has_character_modifier = uniter_and_conqueror_modifier + has_character_modifier = a_cultures_great_defender_modifier + } + NOT = { has_character_flag = had_event_bp2_yearly_6091 } + } + + immediate = { + add_character_flag = had_event_bp2_yearly_6091 + save_scope_as = root_scope + } + + #Your culture is still born anew - as united conquerors! + option = { + name = bp2_yearly.6091.a + flavor = bp2_yearly.6091.a.tt + + if = { + limit = { + has_character_modifier = uniter_and_conqueror_modifier + } + custom_tooltip = bp2_yearly.6091.aggressive + culture = { + set_variable = aggressive_traditionalist_discount + } + } + + if = { + limit = { + has_character_modifier = a_cultures_great_defender_modifier + } + custom_tooltip = bp2_yearly.6091.defensive + culture = { + set_variable = defensive_traditionalist_discount + } + } + + stress_impact = { + } + + ai_chance = { + base = 10 + } + } +} + +##################################### +# My Bulgarians, Reborn! # +# by Jason Cantalini # +# 6100 # +##################################### + +# You've chosen enough reform options to complete your series of reforms! +bp2_yearly.6100 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6100.t + desc = { + desc = bp2_yearly.6100.desc + triggered_desc = { + trigger = { + has_character_flag = foreign_social_reforms + } + desc = bp2_yearly.6100.reform_court + } + triggered_desc = { + trigger = { + has_character_flag = foreign_maa_reforms + } + desc = bp2_yearly.6100.reform_maa + } + triggered_desc = { + trigger = { + has_character_flag = foreign_ritual_reforms + } + desc = bp2_yearly.6100.reform_faith + } + triggered_desc = { + trigger = { + has_character_flag = foreign_realm_reforms + } + desc = bp2_yearly.6100.reform_realm + } + desc = bp2_yearly.6100.outro + } + + theme = realm + override_background = { + reference = throne_room + } + left_portrait = { + character = root + animation = wedding_happy_cry + } + lower_right_portrait = { + character = scope:advanced_court_owner + } + + trigger = { + NOT = { has_character_flag = had_event_bp2_yearly_6100 } + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + add_character_flag = had_event_bp2_yearly_6100 + save_scope_as = root_scope + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + scope:advanced_culture.culture_head = { + save_scope_as = advanced_court_owner + } + if = { + limit = { + culture.culture_head = root + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = medium_positive_culture_acceptance + desc = cultural_acceptance_gain_completed_reform + } + } + if = { + limit = { + culture = { + can_get_innovation_from = scope:advanced_culture + } + } + hidden_effect = { + culture = { + get_random_innovation_from = scope:advanced_culture + } + } + } + if = { + limit = { + culture = { + can_get_innovation_from = scope:advanced_culture + } + } + custom_tooltip = bp2_yearly.6100.gained_2_innovations + hidden_effect = { + culture = { + get_random_innovation_from = scope:advanced_culture + } + } + } + else = { + custom_tooltip = bp2_yearly.6100.gained_1_innovation + } + } + give_nickname = nick_the_reformer + create_character_memory = { + type = reformed_culture_and_realm + participants = { other_culture_head = scope:advanced_court_owner } + } + } + + #Spend a final investment to make sure your reforms reach your whole culture + option = { + name = bp2_yearly.6100.a + flavor = bp2_yearly.6100.a.tt + + if = { + limit = { + culture.culture_head = root + culture = { + can_get_innovation_from = scope:advanced_culture + } + } + hidden_effect = { + culture = { + get_random_innovation_from = scope:advanced_culture + } + } + if = { + limit = { + culture = { + can_get_innovation_from = scope:advanced_culture + } + } + custom_tooltip = bp2_yearly.6100.2_more_innovations + hidden_effect = { + culture = { + get_random_innovation_from = scope:advanced_culture + } + } + } + else = { + custom_tooltip = bp2_yearly.6100.1_more_innovation + } + remove_treasury_or_gold = massive_treasury_or_gold_value + add_legitimacy = major_legitimacy_loss + } + + every_held_title = { + title_tier = county + limit = { + culture = root.culture + } + custom = custom.every_same_culture_held_county + add_county_modifier = { + modifier = flourishing_settlements_modifier + years = 50 + } + } + + dynasty = { + add_dynasty_prestige = major_dynasty_prestige_gain + } + + add_prestige = monumental_prestige_loss + + + stress_impact = { + content = major_stress_impact_gain + fickle = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = fickle + has_trait = greedy + } + } + } + } + + #You've already done enough + option = { + name = bp2_yearly.6100.b + flavor = bp2_yearly.6100.b.tt + + capital_county = { + add_county_modifier = { + modifier = flourishing_settlements_modifier + years = 50 + } + } + + dynasty = { + add_dynasty_prestige = medium_dynasty_prestige_gain + } + + stress_impact = { + ambitious = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = -1 + ai_zeal = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = stubborn + has_trait = diligent + } + } + } + } + + after = { + random_owned_story = { + type = story_foreign_raised_reformer + end_story = yes + } + } +} + +##################################### +# Foreign Reform # +# by Jason Cantalini # +# 6110 # +##################################### + +# Recurring tradition gain event, changing culture to be like foreign one +bp2_yearly.6110 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6110.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = considering_reform_realm + } + desc = bp2_yearly.6110.realm + } + triggered_desc = { + trigger = { + has_character_flag = considering_reform_maa + } + desc = bp2_yearly.6110.combat + } + triggered_desc = { + trigger = { + has_character_flag = considering_reform_social + } + desc = bp2_yearly.6110.social + } + triggered_desc = { + trigger = { + has_character_flag = considering_reform_ritual + } + desc = bp2_yearly.6110.ritual + } + desc = bp2_yearly.6110.regional + } + } + + theme = diplomacy + override_background = { + trigger = { + has_character_flag = considering_reform_realm + } + reference = relaxing_room + } + override_background = { + trigger = { + has_character_flag = considering_reform_maa + } + reference = courtyard + } + override_background = { + trigger = { + has_character_flag = considering_reform_ritual + } + reference = temple + } + override_background = { + trigger = { + has_character_flag = considering_reform_social + } + reference = market + } + override_background = { + trigger = { + has_character_flag = considering_reform_regional + } + reference = throne_room + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_flag = considering_reform_realm + } + animation = worry + } + triggered_animation = { + trigger = { + has_character_flag = considering_reform_maa + } + animation = throne_room_two_handed_passive_1 + } + triggered_animation = { + trigger = { + has_character_flag = considering_reform_ritual + } + animation = personality_cynical + } + triggered_animation = { + trigger = { + has_character_flag = considering_reform_social + } + animation = stress + } + triggered_animation = { + trigger = { + has_character_flag = considering_reform_regional + } + animation = thinking + } + } + + trigger = { + has_bp2_dlc_trigger = yes + is_landed = yes + is_imprisoned = no + is_incapable = no + is_at_war = no + + culture.culture_head = { + this = root + } + OR = { + NOT = { exists = var:new_traditions } + #Have you gained the max # of traditions (3) from this cycle already? + var:new_traditions < 3 + } + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + + culture = { + free_tradition_slot > 0 + } + + OR = { + AND = { + has_character_flag = foreign_realm_reforms + scope:temp_advanced_culture = { + any_tradition = { + root = { + can_embrace_tradition = { + tradition = prev + } + } + has_tradition_category = realm + NOR = { + root = { + is_target_in_variable_list = { + name = rejected_traditions + target = prev + } + } + root.culture = { + has_cultural_tradition = prev + } + } + } + } + } + AND = { + has_character_flag = foreign_maa_reforms + scope:temp_advanced_culture = { + any_tradition = { + root = { + can_embrace_tradition = prev + } + has_tradition_category = combat + NOR = { + root = { + is_target_in_variable_list = { + name = rejected_traditions + target = prev + } + } + root.culture = { + has_cultural_tradition = prev + } + } + } + } + } + AND = { + has_character_flag = foreign_social_reforms + scope:temp_advanced_culture = { + any_tradition = { + root = { + can_embrace_tradition = { + tradition = prev + } + } + has_tradition_category = societal + NOR = { + root = { + is_target_in_variable_list = { + name = rejected_traditions + target = prev + } + } + root.culture = { + has_cultural_tradition = prev + } + } + } + } + } + AND = { + has_character_flag = foreign_ritual_reforms + scope:temp_advanced_culture = { + any_tradition = { + root = { + can_embrace_tradition = { + tradition = prev + } + } + has_tradition_category = ritual + NOR = { + root = { + is_target_in_variable_list = { + name = rejected_traditions + target = prev + } + } + root.culture = { + has_cultural_tradition = prev + } + } + } + } + } + #Regional traditions aren't triggered by another event, no character flag needed - THEY ARE TOO ICONIC + AND = { + scope:temp_advanced_culture = { + any_tradition = { + root = { + can_embrace_tradition = { + tradition = prev + } + } + has_tradition_category = regional + NOR = { + root = { + is_target_in_variable_list = { + name = rejected_traditions + target = prev + } + } + root.culture = { + has_cultural_tradition = prev + } + } + } + } + } + } + } + + immediate = { + if = { + limit = { + NOT = { exists = var:new_traditions } + } + set_variable = { + name = new_traditions + value = 0 + } + } + save_scope_as = root_scope + var:advanced_culture = { + save_scope_as = advanced_culture + } + var:childhood_location = { + save_scope_as = childhood_location + } + #Save the shiny new traditions + bp2_save_traditions_to_consider_effect = yes + } + + #We do this thing now too + option = { + name = bp2_yearly.6110.a + + culture = { + add_culture_tradition = scope:considered_tradition_1 + } + + add_to_variable_list = { + name = new_traditions + target = scope:considered_tradition_1 + } + scope:advanced_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_adapted_tradition + } + } + + if = { + limit = { + NOR = { + has_character_modifier = introduced_foreign_custom_modifier + has_character_modifier = repeated_foreign_reforms_modifier + has_character_modifier = assault_on_tradition_modifier + } + } + add_character_modifier = { + modifier = introduced_foreign_custom_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = introduced_foreign_custom_modifier + } + remove_character_modifier = introduced_foreign_custom_modifier + add_character_modifier = { + modifier = repeated_foreign_reforms_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = repeated_foreign_reforms_modifier + } + add_character_modifier = { + modifier = assault_on_tradition_modifier + years = 10 + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + base = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + #We do this thing... instead of something we used to do + option = { + trigger = { + exists = scope:considered_tradition_2 + } + name = bp2_yearly.6110.b + + culture = { + add_culture_tradition = scope:considered_tradition_2 + } + + add_to_variable_list = { + name = new_traditions + target = scope:considered_tradition_2 + } + scope:advanced_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_adapted_tradition + } + } + + if = { + limit = { + NOR = { + has_character_modifier = introduced_foreign_custom_modifier + has_character_modifier = repeated_foreign_reforms_modifier + has_character_modifier = assault_on_tradition_modifier + } + } + add_character_modifier = { + modifier = introduced_foreign_custom_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = introduced_foreign_custom_modifier + } + remove_character_modifier = introduced_foreign_custom_modifier + add_character_modifier = { + modifier = repeated_foreign_reforms_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = repeated_foreign_reforms_modifier + } + add_character_modifier = { + modifier = assault_on_tradition_modifier + years = 10 + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + base = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + #We do this thing... instead of some other thing we used to do + option = { + trigger = { + exists = scope:considered_tradition_3 + } + name = bp2_yearly.6110.c + + culture = { + add_culture_tradition = scope:considered_tradition_3 + } + + add_to_variable_list = { + name = new_traditions + target = scope:considered_tradition_3 + } + scope:advanced_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_adapted_tradition + } + } + + if = { + limit = { + NOR = { + has_character_modifier = introduced_foreign_custom_modifier + has_character_modifier = repeated_foreign_reforms_modifier + has_character_modifier = assault_on_tradition_modifier + } + } + add_character_modifier = { + modifier = introduced_foreign_custom_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = introduced_foreign_custom_modifier + } + remove_character_modifier = introduced_foreign_custom_modifier + add_character_modifier = { + modifier = repeated_foreign_reforms_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = repeated_foreign_reforms_modifier + } + add_character_modifier = { + modifier = assault_on_tradition_modifier + years = 10 + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + base = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + #We do this thing... instead of some other thing we used to do + option = { + trigger = { + exists = scope:considered_tradition_4 + } + name = bp2_yearly.6110.d + + culture = { + add_culture_tradition = scope:considered_tradition_4 + } + + add_to_variable_list = { + name = new_traditions + target = scope:considered_tradition_4 + } + scope:advanced_culture = { + change_cultural_acceptance = { + target = root.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_adapted_tradition + } + } + + if = { + limit = { + NOR = { + has_character_modifier = introduced_foreign_custom_modifier + has_character_modifier = repeated_foreign_reforms_modifier + has_character_modifier = assault_on_tradition_modifier + } + } + add_character_modifier = { + modifier = introduced_foreign_custom_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = introduced_foreign_custom_modifier + } + remove_character_modifier = introduced_foreign_custom_modifier + add_character_modifier = { + modifier = repeated_foreign_reforms_modifier + years = 10 + } + } + else_if = { + limit = { + has_character_modifier = repeated_foreign_reforms_modifier + } + add_character_modifier = { + modifier = assault_on_tradition_modifier + years = 10 + } + } + + custom_tooltip = bp2_yearly.6050.reform_path + random_owned_story = { + type = story_foreign_raised_reformer + change_variable = { + name = reform_counter + add = 1 + } + } + + stress_impact = { + base = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + #This is not something we want to start doing + option = { + name = bp2_yearly.6110.e + flavor = bp2_yearly.6110.e.tt + + add_to_variable_list = { + name = rejected_traditions + target = scope:considered_tradition_1 + } + add_to_variable_list = { + name = rejected_traditions + target = scope:considered_tradition_2 + } + add_to_variable_list = { + name = rejected_traditions + target = scope:considered_tradition_3 + } + add_to_variable_list = { + name = rejected_traditions + target = scope:considered_tradition_4 + } + + stress_impact = { + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + } + } + } + + after = { + if = { + limit = { + has_character_flag = considering_reform_realm + } + remove_character_flag = considering_reform_realm + } + if = { + limit = { + has_character_flag = considering_reform_maa + } + remove_character_flag = considering_reform_maa + } + if = { + limit = { + has_character_flag = considering_reform_social + } + remove_character_flag = considering_reform_social + } + if = { + limit = { + has_character_flag = considering_reform_ritual + } + remove_character_flag = considering_reform_ritual + } + if = { + limit = { + has_character_flag = considering_reform_regional + } + remove_character_flag = considering_reform_regional + } + } +} + +##################################### +# Where Bonds Are Tested # +# by Jason Cantalini # +# 6120 # +##################################### + +# Your hostage and his hostage-giver could be reunited... if you allow it +bp2_yearly.6120 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6120.t + desc = bp2_yearly.6120.desc + + theme = hostage + override_background = { + trigger = { + OR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = corridor_day + } + override_background = { + trigger = { + NOR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = terrain_travel + } + left_portrait = { + character = root + animation = personality_dishonorable + } + right_portrait = { + character = scope:hostage + triggered_animation = { + trigger = { + scope:hostage = { age < 10 } + } + animation = clutching_toy + } + animation = personality_compassionate + } + lower_right_portrait = { + character = scope:hostage_giver + } + + cooldown = { + years = 5 + } + + trigger = { + has_bp2_dlc_trigger = yes + is_adult = yes + is_landed_or_landless_administrative = yes + is_imprisoned = no + is_incapable = no + any_warden_hostage = { + age > 3 + age <= 20 + age < root.age + is_incapable = no + is_imprisoned = no + exists = home_court + is_close_or_extended_family_of = home_court + opinion = { + target = home_court + value > -30 + } + home_court = { + age > 12 + is_incapable = no + is_imprisoned = no + NOT = { is_at_war_with = root } + } + location = home_court.location + location = root.location + NOT = { has_character_flag = had_event_bp2_yearly_6120 } + } + NOT = { + location = { + NOT = { is_raided = no } + } + } + } + + immediate = { + save_scope_as = warden + random_warden_hostage = { + limit = { + age > 3 + age <= 20 + is_incapable = no + is_imprisoned = no + exists = home_court + is_close_or_extended_family_of = home_court + opinion = { + target = home_court + value > -30 + } + home_court = { + age > 12 + is_incapable = no + is_imprisoned = no + } + location = home_court.location + location = root.location + NOT = { has_character_flag = had_event_bp2_yearly_6120 } + } + save_scope_as = hostage + home_court ?= { + save_scope_as = hostage_giver + } + } + scope:hostage = { add_character_flag = had_event_bp2_yearly_6120 } + } + #You are a sweetheart and are totally cool with this + option = { + trigger = { + OR = { + OR = { + has_trait = generous + has_trait = compassionate + has_trait = trusting + has_trait = content + has_trait = humble + has_trait = just + } + NOT = { + can_add_hook = { + type = favor_hook + target = scope:hostage_giver + } + } + } + } + name = bp2_yearly.6120.a + flavor = bp2_yearly.6120.a.tt + + add_character_flag = allowing_hostage_reunion + + scope:hostage = { + save_scope_as = right_portrait_character + } + save_scope_as = lower_portrait_character + + scope:hostage = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + scope:hostage_giver = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + + stress_impact = { + sadistic = medium_stress_impact_gain + callous = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = sadistic + has_trait = callous + has_trait = paranoid + } + } + } + } + #You're a jerk and consider letting the relatives meet a favor on your part + option = { + trigger = { + can_add_hook = { + type = favor_hook + target = scope:hostage_giver + } + NOR = { + has_trait = generous + has_trait = compassionate + has_trait = trusting + has_trait = content + has_trait = humble + has_trait = just + } + } + name = bp2_yearly.6120.b + flavor = bp2_yearly.6120.b.tt + + save_scope_as = right_portrait_character + scope:hostage = { + save_scope_as = lower_portrait_character + } + + add_character_flag = hook_for_reunion + + custom_tooltip = bp2_yearly.6120.hook + custom_tooltip = bp2_yearly.6120.hook_acceptance + + scope:hostage_giver = { + add_opinion = { + target = root + opinion = -20 + modifier = angry_opinion + } + } + + stress_impact = { + generous = major_stress_impact_gain + compassionate = medium_stress_impact_gain + content = minor_stress_impact_gain + just = minor_stress_impact_gain + forgiving = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 1 + ai_boldness = 1 + } + modifier = { + factor = 2 + scope:hostage_giver = { + ai_compassion >= low_positive_ai_value + } + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = compassionate + has_trait = content + has_trait = just + has_trait = forgiving + scope:hostage_giver = { + ai_compassion <= low_negative_ai_value + } + } + } + } + } + #You will try to outshine the hostage's relative in the encounter, affirming you've replaced them + option = { + name = bp2_yearly.6120.c + flavor = bp2_yearly.61020.c.tt + + scope:hostage = { + save_scope_as = right_portrait_character + } + save_scope_as = lower_portrait_character + + add_character_flag = intruding_on_reunion + + duel = { + skill = diplomacy + target = scope:hostage_giver + 45 = { #It works well + desc = bp2_yearly.6120.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + + send_interface_toast = { + title = bp2_yearly.6120.c.success + left_icon = root + right_icon = scope:hostage_giver + scope:hostage_giver = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + progress_towards_friend_effect = { + CHARACTER = scope:hostage + OPINION = 30 + REASON = friend_love_more_than_home_court + } + } + } + 55 = { #It doesn't go well + desc = bp2_yearly.6120.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = bp2_yearly.6120.c.failure + left_icon = root + right_icon = scope:hostage_giver + scope:hostage = { + add_opinion = { + target = root + opinion = -20 + modifier = annoyed_opinion + } + } + scope:hostage_giver = { + add_opinion = { + target = root + opinion = -20 + modifier = annoyed_opinion + } + } + } + } + } + + stress_impact = { + shy = major_stress_impact_gain + content = minor_stress_impact_gain + honest = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = 1 + } + modifier = { + factor = 2 + diplomacy >= 15 + } + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = content + has_trait = honest + has_trait = humble + diplomacy < 5 + } + } + modifier = { + factor = 0.5 + diplomacy <= 10 + } + } + } + #Contact with someone who's given you to me is forbidden + option = { + name = bp2_yearly.6120.d + flavor = bp2_yearly.6120.d.tt + + save_scope_as = right_portrait_character + scope:hostage = { + save_scope_as = lower_portrait_character + } + + add_character_flag = forbidding_reunion + + add_dread = minor_dread_gain + scope:hostage = { + add_opinion = { + target = root + opinion = -30 + modifier = angry_opinion + } + add_stress = medium_stress_impact_gain + random = { + chance = 10 + increase_wounds_effect = { REASON = beaten } + } + } + scope:hostage_giver = { + add_opinion = { + target = root + opinion = -30 + modifier = angry_opinion + } + } + + stress_impact = { + trusting = major_stress_impact_gain + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -1 + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = generous + } + } + } + } + after = { + scope:hostage_giver = { + trigger_event = bp2_yearly.6121 + } + } +} + +##################################### +# The Forgone Son # +# by Jason Cantalini # +# 6121 # +##################################### + +#You might be reunited with a hostage you gave away +bp2_yearly.6121 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6121.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:warden = { + has_character_flag = allowing_hostage_reunion + } + } + desc = bp2_yearly.6121.reunion + } + triggered_desc = { + trigger = { + scope:warden = { + has_character_flag = intruding_on_reunion + } + + } + desc = bp2_yearly.6121.intrusion + } + triggered_desc = { + trigger = { + scope:warden = { + has_character_flag = hook_for_reunion + } + } + desc = bp2_yearly.6121.hook + } + triggered_desc = { + trigger = { + scope:warden = { + has_character_flag = forbidding_reunion + } + } + desc = bp2_yearly.6121.forbidden + } + } + } + + theme = hostage + override_background = { + trigger = { + OR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = throne_room + } + override_background = { + trigger = { + NOR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = terrain_travel + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:warden = { + OR = { + has_character_flag = allowing_hostage_reunion + has_character_flag = intruding_on_reunion + } + } + has_trait = compassionate + } + animation = admiration + } + triggered_animation = { + trigger = { + scope:warden = { + OR = { + has_character_flag = allowing_hostage_reunion + has_character_flag = intruding_on_reunion + } + NOT = { has_trait = compassionate } + } + } + animation = personality_content + } + triggered_animation = { + trigger = { + scope:warden = { + OR = { + has_character_flag = hook_for_reunion + has_character_flag = forbidding_reunion + } + } + } + animation = war_attacker + } + } + right_portrait = { + character = scope:right_portrait_character + triggered_animation = { + trigger = { + scope:warden = { + OR = { + has_character_flag = allowing_hostage_reunion + has_character_flag = intruding_on_reunion + } + } + } + animation = wedding_happy_cry + } + triggered_animation = { + trigger = { + scope:warden = { + has_character_flag = hook_for_reunion + } + } + animation = scheme + } + triggered_animation = { + trigger = { + scope:warden = { + has_character_flag = forbidding_reunion + } + } + animation = dismissal + } + } + lower_right_portrait = { + character = scope:lower_portrait_character + } + + trigger = { + has_bp2_dlc_trigger = yes + scope:hostage = { + is_alive = yes + is_hostage_of = scope:warden + } + scope:warden = { + is_alive = yes + } + } + + immediate = { + } + #You're coming with me, kid + option = { + trigger = { + scope:warden = { + has_character_flag = allowing_hostage_reunion + } + OR = { + has_trait = compassionate + has_trait = arbitrary + has_trait = eccentric + has_relation_friend = scope:hostage + } + NOR = { + has_trait = just + has_relation_friend = scope:warden + location.county.holder = scope:warden + location.county.holder.liege = scope:warden + location.county.holder.top_liege = scope:warden + } + } + name = bp2_yearly.6121.a + flavor = bp2_yearly.6121.a.tt + + add_character_flag = rescuing_hostage + trigger_event = bp2_yearly.6122 + + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + + add_prestige = major_prestige_loss + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:warden } + } + set_relation_rival = { + reason = rival_stole_hostage + target = scope:warden + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + } + set_relation_friend = { + reason = friend_defied_warden_for_love + target = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = root + opinion = 40 + modifier = love_opinion + } + } + } + + stress_impact = { + callous = medium_stress_impact_gain + content = minor_stress_impact_gain + craven = medium_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = content + has_trait = craven + has_trait = calm + } + } + } + } + #A big gift to make hostage happy and flex on their warden + option = { + trigger = { + scope:warden = { + OR = { + has_character_flag = allowing_hostage_reunion + has_character_flag = intruding_on_reunion + } + } + } + name = bp2_yearly.6121.b + flavor = bp2_yearly.6121.b.tt + scope:warden = { + trigger_event = bp2_yearly.6123 + } + dynasty = { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + } + scope:hostage = { + add_opinion = { + target = root + opinion = 30 + modifier = love_opinion + } + } + pay_short_term_gold = { + target = scope:hostage + gold = medium_gold_value + } + scope:warden = { + add_opinion = { + target = root + opinion = -20 + modifier = annoyed_opinion + } + } + + stress_impact = { + greedy = major_stress_impact_gain + temperate = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + NOT = { + short_term_gold >= medium_gold_value + } + has_trait = greedy + has_trait = temperate + } + } + } + } + #Just makes me so happy to see the lil guy + option = { + trigger = { + scope:warden = { + OR = { + has_character_flag = allowing_hostage_reunion + has_character_flag = intruding_on_reunion + } + } + } + name = bp2_yearly.6121.c + scope:warden = { + trigger_event = bp2_yearly.6123 + } + + scope:hostage = { + add_opinion = { + target = root + opinion = 15 + modifier = pleased_opinion + } + } + if = { + limit = { + NOR = { + has_trait = sadistic + has_trait = callous + } + } + stress_impact = { + base = medium_stress_impact_loss + generous = minor_stress_impact_gain + } + } + else = { + stress_impact = { + generous = minor_stress_impact_gain + } + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 1 + ai_energy = -1 + } + modifier = { + factor = 0 + has_trait = generous + + } + } + } + #I'll give the hook. It's worth seeing my family member + option = { + trigger = { + scope:warden = { + has_character_flag = hook_for_reunion + } + } + name = bp2_yearly.6121.d + flavor = bp2_yearly.6121.d.tt + + add_character_flag = favor_for_hostage + trigger_event = bp2_yearly.6122 + + scope:hostage = { + add_opinion = { + target = root + opinion = 30 + modifier = love_opinion + } + } + dynasty = { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + } + scope:warden = { + add_hook = { + target = root + type = favor_hook + } + } + + stress_impact = { + paranoid = major_stress_impact_gain + callous = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = callous + has_trait = arbitrary + } + } + } + } + #I'll sneakily see my family member! + option = { + trigger = { + scope:warden = { + OR = { + has_character_flag = hook_for_reunion + has_character_flag = forbidding_reunion + } + } + } + name = bp2_yearly.6121.e + flavor = bp2_yearly.6121.e.tt + + duel = { + skill = intrigue + target = scope:warden + 50 = { #It works well + desc = bp2_yearly.6121.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + + send_interface_toast = { + title = bp2_yearly.6121.e.success + left_icon = root + right_icon = scope:hostage + add_stress = minor_stress_impact_loss + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + } + set_relation_friend = { + reason = friend_defied_warden_for_love + target = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = root + opinion = 40 + modifier = love_opinion + } + } + } + add_character_flag = sneaking_to_hostage + trigger_event = bp2_yearly.6122 + } + } + 50 = { #It doesn't go well + desc = bp2_yearly.6121.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = bp2_yearly.6121.e.failure + left_icon = root + right_icon = scope:hostage + add_prestige = medium_prestige_loss + scope:warden = { + add_opinion = { + target = root + opinion = -20 + modifier = angry_opinion + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = 20 + modifier = love_opinion + } + } + add_character_flag = failed_sneaking_to_hostage + scope:warden = { + trigger_event = bp2_yearly.6123 + } + } + } + } + + stress_impact = { + just = major_stress_impact_gain + honest = major_stress_impact_gain + content = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = -1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = honest + has_trait = content + intrigue <= 5 + } + } + } + } + #I didn't need to see the hostage anyway, who cares... + option = { + trigger = { + scope:warden = { + OR = { + has_character_flag = hook_for_reunion + has_character_flag = forbidding_reunion + } + } + } + name = bp2_yearly.6121.f + flavor = bp2_yearly.6121.f.tt + scope:warden = { + trigger_event = bp2_yearly.6123 + } + + if = { + limit = { + scope:warden = { + has_character_flag = hook_for_reunion + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + } + if = { + limit = { + opinion = { + target = scope:hostage + value >= 0 + } + } + stress_impact = { + sadistic = minor_stress_impact_loss + callous = minor_stress_impact_loss + fickle = minor_stress_impact_loss + base = minor_stress_impact_gain + compassionate = miniscule_stress_impact_gain + loyal = miniscule_stress_impact_gain + } + } + else = { + stress_impact = { + compassionate = minor_stress_impact_gain + forgiving = miniscule_stress_impact_gain + } + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + ai_energy = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = loyal + has_trait = forgiving + } + } + } + } +} + +##################################### +# Not Forgotten # +# by Jason Cantalini # +# 6122 # +##################################### + +#You did something worth following up to see your hostage - or rescue them +bp2_yearly.6122 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6122.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = rescuing_hostage + } + desc = bp2_yearly.6122.rescue + } + triggered_desc = { + trigger = { + has_character_flag = favor_for_hostage + } + desc = bp2_yearly.6121.intrusion + } + triggered_desc = { + trigger = { + has_character_flag = sneaking_to_hostage + } + desc = bp2_yearly.6122.sneaking + } + } + } + + theme = hostage + override_background = { + trigger = { + OR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = corridor_night + } + override_background = { + trigger = { + NOR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = ep2_hunt_foggy_forest + } + left_portrait = { + character = root + animation = personality_forgiving + } + right_portrait = { + character = scope:hostage + animation = ecstasy + } + lower_right_portrait = { + character = scope:warden + } + + trigger = { + has_bp2_dlc_trigger = yes + scope:hostage = { + is_alive = yes + } + scope:warden = { + is_alive = yes + } + } + + #You're coming with me, kid + option = { + trigger = { + OR = { + has_trait = compassionate + has_trait = arbitrary + has_trait = eccentric + has_relation_friend = scope:hostage + } + NOR = { + has_trait = just + has_relation_friend = scope:warden + location.county.holder = scope:warden + location.county.holder.liege = scope:warden + location.county.holder.top_liege = scope:warden + has_character_flag = rescuing_hostage + has_character_flag = favor_for_hostage + + } + } + name = bp2_yearly.6121.a + flavor = bp2_yearly.6121.a.tt + + add_character_flag = rescuing_hostage + scope:warden = { + trigger_event = bp2_yearly.6123 + } + + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + + add_prestige = major_prestige_loss + + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:warden } + } + set_relation_rival = { + reason = rival_stole_hostage + target = scope:warden + } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + } + set_relation_friend = { + reason = friend_defied_warden_for_love + target = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = root + opinion = 40 + modifier = love_opinion + } + } + } + + stress_impact = { + callous = medium_stress_impact_gain + content = minor_stress_impact_gain + craven = medium_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = content + has_trait = craven + has_trait = calm + } + } + } + } + #Just makes me so happy to see the lil guy + option = { + trigger = { + OR = { + has_character_flag = sneaking_to_hostage + has_character_flag = favor_for_hostage + } + } + name = bp2_yearly.6121.c + + scope:warden = { + trigger_event = bp2_yearly.6123 + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -1 + ai_compassion = -1 + } + } + } + #You have rescued the hostage, nothing else to be done... for now + option = { + trigger = { + has_character_flag = rescuing_hostage + } + name = bp2_yearly.6122.c + + scope:warden = { + trigger_event = bp2_yearly.6123 + } + + stress_impact = { + } + + ai_chance = { + base = 10 + } + } +} + +##################################### +# The Scion of Peace # +# by Jason Cantalini # +# 6123 # +##################################### + +#You did something worth following up to see your hostage - or rescue them +bp2_yearly.6123 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6123.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:hostage_giver = { has_character_flag = rescuing_hostage } + } + desc = bp2_yearly.6123.stolen_hostage + } + triggered_desc = { + trigger = { + scope:hostage_giver = { has_character_flag = favor_for_hostage } + } + desc = bp2_yearly.6123.favor_accepted + } + triggered_desc = { + trigger = { + scope:hostage_giver = { + has_character_flag = failed_sneaking_to_hostage + } + } + desc = bp2_yearly.6123.sneaker + } + triggered_desc = { + trigger = { + OR = { + scope:warden = { + OR = { + has_character_flag = forbidding_reunion + has_character_flag = hook_for_reunion + } + } + scope:hostage_giver = { + has_character_flag = sneaking_to_hostage + } + } + } + desc = bp2_yearly.6123.forbidden_desc + } + desc = bp2_yearly.6123.desc + } + } + + theme = hostage + override_background = { + trigger = { + OR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = courtyard + } + override_background = { + trigger = { + NOR = { + location = root.capital_province + location = scope:hostage_giver.capital_province + } + } + reference = ep2_hunt_foggy_forest + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + scope:hostage_giver = { has_character_flag = rescuing_hostage } + scope:hostage_giver = { + has_character_flag = failed_sneaking_to_hostage + } + } + } + animation = anger + } + triggered_animation = { + trigger = { + NOR = { + scope:hostage_giver = { has_character_flag = rescuing_hostage } + scope:hostage_giver = { + has_character_flag = failed_sneaking_to_hostage + } + } + } + animation = personality_honorable + } + } + right_portrait = { + character = scope:hostage_giver + animation = war_defender + } + lower_right_portrait = { + character = scope:hostage + } + + trigger = { + has_bp2_dlc_trigger = yes + scope:hostage = { + is_alive = yes + } + scope:hostage_giver = { + is_alive = yes + } + } + + immediate = { + if = { + limit = { + has_relation_rival = scope:hostage_giver + } + show_as_tooltip = { + set_relation_rival = { + reason = rival_stole_hostage + target = scope:hostage_giver + } + } + } + if = { + limit = { + scope:hostage = { + liege = scope:hostage_giver + } + } + custom_tooltip = bp2_yearly.6123.return_hostage + show_as_tooltip = { + scope:hostage_giver = { + add_prestige = major_prestige_loss + } + } + } + if = { + limit = { + scope:hostage_giver = { has_character_flag = failed_sneaking_to_hostage } + } + show_as_tooltip = { + scope:hostage_giver = { + add_prestige = medium_prestige_loss + } + } + } + if = { + limit = { + scope:hostage_giver = { has_character_flag = favor_for_hostage } + } + show_as_tooltip = { + scope:warden = { + add_hook = { + target = scope:hostage_giver + type = favor_hook + } + } + } + } + } + #You have rescued the hostage, nothing else to be done... for now + option = { + name = bp2_yearly.6123.a + + remove_character_flag ?= forbidding_reunion + remove_character_flag ?= hook_for_reunion + remove_character_flag ?= hook_for_reunion + remove_character_flag ?= intruding_on_reunion + scope:hostage_giver = { + remove_character_flag ?= failed_sneaking_to_hostage + remove_character_flag ?= rescuing_hostage + remove_character_flag ?= sneaking_to_hostage + remove_character_flag ?= favor_for_hostage + } + + if = { + limit = { + scope:hostage_giver = { + OR = { + has_character_flag = rescuing_hostage + has_character_flag = failed_sneaking_to_hostage + } + } + } + stress_impact = { + wrathful = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + just = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + } + + + ai_chance = { + base = 10 + } + } +} + +##################################### +# Captive, Captivated # +# by Jason Cantalini # +# 6130 # +##################################### + +scripted_trigger bp2_yearly_6130_hostage_trigger = { + is_adult = no + age > 5 + is_incapable = no + is_imprisoned = no + save_temporary_scope_as = potential_hostage + root = { + any_close_family_member = { + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:potential_hostage } + OR = { + AND = { + opinion = { + target = scope:potential_hostage + value >= 5 + } + scope:potential_hostage = { + opinion = { + target = prev + value >= 5 + } + } + } + has_relation_friend = scope:potential_hostage + } + } + } +} + +scripted_trigger bp2_yearly_6130_family_trigger = { + NOT = { $HOSTAGE$ = this } + is_ai = yes + age > 5 + is_adult = no + is_incapable = no + is_imprisoned = no +} + +#Your hostage and one of your family members are becoming friends +bp2_yearly.6130 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6130.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:hostage = { + age >= scope:kin.age_plus_5 + } + scope:kin = { + age >= scope:hostage.age_plus_5 + } + } + } + desc = bp2_yearly.6130.desc.different_ages + } + desc = bp2_yearly.6130.desc + } + } + + theme = hostage + override_background = { + reference = study + } + left_portrait = { + character = scope:kin + triggered_animation = { + trigger = { + age >= scope:hostage.age_plus_5 + } + animation = personality_forgiving + } + triggered_animation = { + trigger = { + age < scope:hostage.age_plus_5 + } + animation = laugh + } + } + right_portrait = { + character = scope:hostage + triggered_animation = { + trigger = { + age >= scope:kin.age_plus_5 + } + animation = happy_teacher + } + triggered_animation = { + trigger = { + age < scope:kin.age_plus_5 + } + animation = child_hobby_horse + } + } + + cooldown = { + years = 10 + } + + trigger = { + has_bp2_dlc_trigger = yes + age > 14 + is_incapable = no + is_imprisoned = no + is_landed_or_landless_administrative = yes + is_available = yes + any_warden_hostage = { + bp2_yearly_6130_hostage_trigger = yes + save_temporary_scope_as = hostage_temp + root = { + any_close_family_member = { + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage_temp } + } + } + } + } + + immediate = { + random_warden_hostage = { + limit = { + bp2_yearly_6130_hostage_trigger = yes + save_temporary_scope_as = hostage_temp + root = { + any_close_family_member = { + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage_temp } + } + } + } + save_scope_as = hostage + } + #first try to get a future ruler who is friends with the hostage + random_close_family_member = { + limit = { + is_heir_of = root + has_relation_friend = scope:hostage + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage } + opinion = { + target = scope:hostage + value >= 5 + } + scope:hostage = { + opinion = { + target = prev + value >= 5 + } + } + } + alternative_limit = { + is_heir_of = root + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage } + opinion = { + target = scope:hostage + value >= 5 + } + scope:hostage = { + opinion = { + target = prev + value >= 5 + } + } + } + alternative_limit = { + has_relation_friend = scope:hostage + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage } + opinion = { + target = scope:hostage + value >= 5 + } + scope:hostage = { + opinion = { + target = prev + value >= 5 + } + } + } + alternative_limit = { + bp2_yearly_6130_family_trigger = { HOSTAGE = scope:hostage } + } + save_scope_as = kin + } + } + #You encourage their burgeoning friendship + option = { + name = bp2_yearly.6130.a + flavor = bp2_yearly.6130.a.tt + + scope:kin = { + create_character_memory = { + type = hostage_oath_of_friendship + participants = { friend = scope:hostage } + } + } + scope:hostage = { + create_character_memory = { + type = hostage_oath_of_friendship + participants = { friend = scope:kin } + } + } + custom_tooltip = bp2_yearly.6130.alliance + + scope:hostage = { + add_opinion = { + target = root + opinion = 10 + modifier = grateful_opinion + } + } + + if = { + limit = { + scope:kin = { + has_relation_friend = scope:hostage + } + } + scope:kin = { + set_relation_best_friend = scope:hostage + } + + } + else_if = { + limit = { + scope:kin = { + can_set_relation_friend_trigger = { CHARACTER = scope:hostage } + } + } + scope:kin = { + set_relation_friend = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = scope:kin + opinion = 40 + modifier = friendliness_opinion + } + } + scope:kin = { + add_opinion = { + target = scope:hostage + opinion = 40 + modifier = friendliness_opinion + } + } + } + + + + if = { + limit = { + exists = scope:hostage.home_court + OR = { + has_relation_rival = scope:hostage.home_court + has_relation_nemesis = scope:hostage.home_court + opinion = { + target = scope:hostage.home_court + value <= -90 + } + } + NOT = { + has_trait = forgiving + } + } + stress_impact = { + base = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + wrathful = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + } + } + else = { + stress_impact = { + paranoid = minor_stress_impact_gain + disloyal = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + } + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = -1 + ai_sociability = 1 + } + modifier = { + factor = 0.5 + exists = scope:hostage.home_court + OR = { + has_relation_rival = scope:hostage.home_court + has_relation_nemesis = scope:hostage.home_court + opinion = { + target = scope:hostage.home_court + value <= -90 + } + } + NOT = { + has_trait = forgiving + } + } + modifier = { + factor = 0 + exists = scope:hostage.home_court + OR = { + has_relation_rival = scope:hostage.home_court + has_relation_nemesis = scope:hostage.home_court + opinion = { + target = scope:hostage.home_court + value <= -90 + } + } + NOT = { + has_trait = forgiving + } + OR = { + has_trait = vengeful + has_trait = paranoid + has_trait = wrathful + has_trait = stubborn + } + } + modifier = { + factor = 0 + has_trait = deceitful + + } + } + } + #You think the child should focus on fitting in with your family instead + option = { + name = bp2_yearly.6130.b + flavor = bp2_yearly.6130.b.tt + + scope:kin = { + every_close_family_member = { + custom = all_close_family_members + add_opinion = { + target = scope:kin + modifier = love_opinion + opinion = 20 + } + } + } + custom_tooltip = bp2_yearly.6130.family_opinion + hidden_effect = { + scope:kin = { + every_close_family_member = { + reverse_add_opinion = { + target = scope:kin + modifier = love_opinion + opinion = 30 + } + } + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = -20 + modifier = angry_opinion + } + } + + if = { + limit = { + scope:kin = { + has_relation_friend = scope:hostage + } + } + scope:kin = { + remove_relation_friend = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = scope:kin + opinion = -20 + modifier = angry_opinion + } + } + } + + stress_impact = { + trusting = medium_stress_impact_gain + gregarious = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -1 + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = gregarious + has_trait = ambitious + } + } + } + } +} + +##################################### +# For Amity, Too Young # +# by Jason Cantalini # +# 6140 # +##################################### + +scripted_trigger bp2_yearly_6140_hostage_trigger = { + is_adult = no + age > 5 + is_incapable = no + is_imprisoned = no + save_temporary_scope_as = potential_hostage + root = { + any_close_family_member = { + bp2_yearly_6140_family_trigger = yes + OR = { + NOT = { has_relation_friend = scope:potential_hostage } + has_relation_victim = scope:potential_hostage + } + } + } +} + + +scripted_trigger bp2_yearly_6140_family_trigger = { + is_ai = yes + age > 5 + is_adult = no + is_incapable = no + is_imprisoned = no + NOT = { has_trait = compassionate } +} + +#Your hostage and one of your family members are becoming rivals +bp2_yearly.6140 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6140.t + desc = bp2_yearly.6140.desc + + theme = hostage + override_background = { + trigger = { + NOR = { + faith = { religion = religion:hinduism_religion } + faith = { religion = religion:buddhism_religion } + faith = { religion = religion:jainism_religion } + } + } + reference = temple + } + override_background = { + trigger = { + OR = { + faith = { religion = religion:hinduism_religion } + faith = { religion = religion:buddhism_religion } + faith = { religion = religion:jainism_religion } + } + } + reference = ep2_holy_site_indian + } + left_portrait = { + character = scope:kin + animation = war_attacker + } + right_portrait = { + character = scope:hostage + animation = personality_vengeful + } + + cooldown = { + years = 10 + } + + trigger = { + has_bp2_dlc_trigger = yes + age > 14 + is_incapable = no + is_imprisoned = no + is_landed_or_landless_administrative = yes + is_available = yes + any_warden_hostage = { + exists = home_court + bp2_yearly_6140_hostage_trigger = yes + } + + } + + immediate = { + save_scope_as = root_scope + random_warden_hostage = { + limit = { + bp2_yearly_6140_hostage_trigger = yes + } + save_scope_as = hostage + } + scope:hostage.home_court = { + save_scope_as = home_court + } + #first try to get a future ruler who is bullies with the hostage + random_close_family_member = { + limit = { + is_heir_of = root + has_relation_victim = scope:hostage + bp2_yearly_6140_family_trigger = yes + AND = { + opinion = { + target = scope:hostage + value <= -5 + } + scope:hostage = { + opinion = { + target = prev + value <= -5 + } + } + } + } + alternative_limit = { + is_heir_of = root + bp2_yearly_6140_family_trigger = yes + AND = { + opinion = { + target = scope:hostage + value <= -5 + } + scope:hostage = { + opinion = { + target = prev + value <= -5 + } + } + } + } + alternative_limit = { + has_relation_victim = scope:hostage + bp2_yearly_6140_family_trigger = yes + AND = { + opinion = { + target = scope:hostage + value <= -5 + } + scope:hostage = { + opinion = { + target = prev + value <= -5 + } + } + } + } + alternative_limit = { + bp2_yearly_6140_family_trigger = yes + } + save_scope_as = kin + } + } + #You encourage their burgeoning hatred + option = { + name = bp2_yearly.6140.a + flavor = bp2_yearly.6140.a.tt + + scope:kin = { + add_intrigue_skill = 1 + } + scope:kin = { + add_opinion = { + target = root + opinion = 20 + modifier = love_opinion + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = -20 + modifier = hate_opinion + } + } + + if = { + limit = { + scope:kin = { + can_set_relation_victim_trigger = { CHARACTER = scope:hostage } + } + } + scope:kin = { + set_relation_victim = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = scope:kin + opinion = -40 + modifier = hate_opinion + } + } + scope:kin = { + add_opinion = { + target = scope:hostage + opinion = -40 + modifier = hate_opinion + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + trusting = minor_stress_impact_gain + craven = minor_stress_impact_gain + humble = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = compassionate + has_trait = trusting + has_trait = craven + } + } + } + } + #You try to teach the child about peace instead + option = { + name = bp2_yearly.6140.b + flavor = bp2_yearly.6140.b.tt + + add_piety = minor_piety_gain + + scope:hostage = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + if = { + limit = { + scope:kin = { + has_relation_victim = scope:hostage + } + } + scope:kin = { + remove_relation_victim = scope:hostage + } + } + else = { + scope:hostage = { + add_opinion = { + target = scope:kin + opinion = 30 + modifier = forgiven_opinion + } + } + scope:kin = { + add_opinion = { + target = scope:hostage + opinion = 30 + modifier = forgiven_opinion + } + } + } + + stress_impact = { + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + } + modifier = { + factor = 0 + OR = { + has_trait = sadistic + has_trait = callous + has_trait = arbitrary + has_trait = vengeful + has_trait = wrathful + } + } + } + } +} + +##################################### +# The Assurance Speaks # +# by Jason Cantalini # +# 6150 # +##################################### + +scripted_trigger bp2_yearly_6150_hostage_trigger = { + age > 5 + is_incapable = no + is_imprisoned = no + location = root.location + OR = { + has_trait = shy + has_trait = fickle + has_trait = paranoid + has_trait = depressed_1 + has_trait = depressed_genetic + has_trait = hunchbacked + has_trait = scaly + has_trait = clubfooted + has_trait = albino + has_trait = dwarf + has_trait = beauty_bad_2 + has_trait = beauty_bad_3 + has_trait = pensive + stress_level >= 1 + } + NOR = { + has_trait = gregarious + has_trait = brave + has_trait = diligent + has_trait = arrogant + has_trait = charming + } +} + +#Your antisocial hostage is reticent to be stand by you, as a hostage should during ceremonies and petitions +bp2_yearly.6150 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6150.t + desc = bp2_yearly.6150.desc + + theme = hostage + override_background = { + reference = throne_room + } + left_portrait = { + character = root + animation = personality_content + } + right_portrait = { + character = scope:hostage + animation = personality_coward + } + + cooldown = { + years = 10 + } + + trigger = { + has_bp2_dlc_trigger = yes + age > 10 + is_incapable = no + is_imprisoned = no + is_landed_or_landless_administrative = yes + is_at_war = no + is_available = yes + any_warden_hostage = { + exists = home_court + bp2_yearly_6150_hostage_trigger = yes + } + } + + immediate = { + save_scope_as = root_scope + random_warden_hostage = { + limit = { + bp2_yearly_6150_hostage_trigger = yes + } + save_scope_as = hostage + } + scope:hostage.home_court = { + save_scope_as = home_court + } + } + #You tell the hostage being presented as part of your family will make them feel better + option = { + name = bp2_yearly.6150.a + flavor = bp2_yearly.6150.a.tt + + add_character_modifier = { + modifier = hostages_accepted_into_family_modifier + years = 20 + } + + every_close_family_member = { + custom = all_close_family_members + add_opinion = { + target = scope:hostage + modifier = friendliness_opinion + opinion = 20 + } + } + custom_tooltip = bp2_yearly.6150.family_opinion_hostage + hidden_effect = { + every_close_family_member = { + reverse_add_opinion = { + target = scope:hostage + modifier = friendliness_opinion + opinion = 10 + } + } + } + + stress_impact = { + paranoid = minor_stress_impact_gain + shy = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = shy + } + } + } + } + #You're fine with them spending more time studying with prelates instead + option = { + name = bp2_yearly.6150.b + flavor = bp2_yearly.6150.b.tt + + add_character_modifier = { + modifier = eschews_flaunting_of_hostages_modifier + years = 20 + } + + scope:hostage = { + add_learning_skill = 1 + add_diplomacy_skill = -1 + } + + stress_impact = { + stubborn = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + ambitious = miniscule_stress_impact_gain + gregarious = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = stubborn + has_trait = arrogant + has_trait = ambitious + has_trait = arrogant + } + } + } + } + #Tell them to sit down and shut up + option = { + name = bp2_yearly.6150.c + flavor = bp2_yearly.6150.c.tt + + add_prestige = minor_prestige_gain + + scope:hostage = { + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -20 + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + gregarious = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + } + } + } +} + +##################################### +# Worst of my Riders # +# by Jason Cantalini # +# 6160 # +##################################### + +scripted_trigger bp2_yearly_6160_hostage_trigger = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_adult = no + age > 6 + is_incapable = no + is_imprisoned = no + NOR = { + has_trait = just + has_trait = craven + } + save_temporary_scope_as = potential_hostage + root = { + any_close_family_member = { + bp2_yearly_6160_family_trigger = yes + age <= scope:potential_hostage.age + OR = { + AND = { + opinion = { + target = scope:potential_hostage + value >= -5 + } + scope:potential_hostage = { + opinion = { + target = prev + value >= -5 + } + } + } + has_relation_friend = scope:potential_hostage + } + } + } +} + +scripted_trigger bp2_yearly_6160_family_trigger = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_ai = yes + age > 6 + is_adult = no + is_incapable = no + is_imprisoned = no + NOR = { + has_trait = just + has_trait = craven + } +} + +# your kid and your hostage snuck out of the palace to see your capital and rode a horse into a ditch trying to escape being caught +bp2_yearly.6160 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6160.t + desc = bp2_yearly.6160.desc + content_source = dlc_009 + + theme = hostage + override_background = { + reference = ep2_hunt_foggy_forest + } + left_portrait = { + character = scope:kin + animation = crying + } + right_portrait = { + character = scope:hostage + animation = jockey_loss + camera = camera_event_horse_right + } + + cooldown = { + years = 5 + } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_adult = yes + is_landed_or_landless_administrative = yes + any_warden_hostage = { + bp2_yearly_6160_hostage_trigger = yes + } + } + + immediate = { + random_warden_hostage = { + limit = { + bp2_yearly_6160_hostage_trigger = yes + } + save_scope_as = hostage + } + #first try to get a future ruler who is friends with the hostage + random_close_family_member = { + limit = { + is_heir_of = root + has_relation_friend = scope:hostage + bp2_yearly_6160_family_trigger = yes + age <= scope:hostage.age + } + alternative_limit = { + is_heir_of = root + bp2_yearly_6160_family_trigger = yes + age <= scope:hostage.age + opinion = { + target = scope:hostage + value >= -5 + } + scope:hostage = { + opinion = { + target = prev + value >= -5 + } + } + } + alternative_limit = { + has_relation_friend = scope:hostage + bp2_yearly_6160_hostage_trigger = yes + age <= scope:hostage.age + } + alternative_limit = { + bp2_yearly_6160_family_trigger = yes + age <= scope:hostage.age + AND = { + opinion = { + target = scope:hostage + value >= -5 + } + scope:hostage = { + opinion = { + target = prev + value >= -5 + } + } + } + } + save_scope_as = kin + } + scope:kin = { + increase_wounds_no_death_effect = { REASON = horse_riding_accident } + } + } + #You will work off your debt to the horse's owner, wayward princes + option = { + name = bp2_yearly.6160.a + flavor = bp2_yearly.6160.a.tt + scope:kin = { + add_opinion = { + target = root + opinion = -25 + modifier = angry_opinion + } + add_prestige = minor_prestige_loss + add_character_modifier = { + modifier = labored_with_the_commons_modifier + years = 30 + } + random_list = { + 10 = { + add_trait = strong + modifier = { + add = 10 + OR = { + has_trait = brave + has_trait = rowdy + } + } + modifier = { + add = 10 + has_focus = education_martial + + } + } + 20 = { + trigger = { + OR = { + has_trait = compassionate + has_trait = curious + has_trait = trusting + has_trait = calm + has_focus = education_learning + } + } + add_trait = lifestyle_herbalist + } + 40 = { } + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = -25 + modifier = angry_opinion + } + add_prestige = minor_prestige_loss + add_character_modifier = { + modifier = labored_with_the_commons_modifier + years = 30 + } + random_list = { + 10 = { + add_trait = strong + modifier = { + add = 10 + OR = { + has_trait = brave + has_trait = rowdy + } + } + modifier = { + add = 10 + has_focus = education_martial + + } + } + 20 = { + trigger = { + OR = { + has_trait = compassionate + has_trait = curious + has_trait = trusting + has_trait = calm + has_focus = education_learning + } + } + add_trait = lifestyle_herbalist + } + 40 = { } + } + } + + stress_impact = { + arrogant = medium_stress_impact_gain + forgiving = minor_stress_impact_gain + lazy = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = forgiving + has_trait = lazy + } + } + } + } + #You cast the hostage out + option = { + trigger = { + OR = { + has_trait = vengeful + has_trait = arbitrary + has_trait = loyal + has_trait = paranoid + has_trait = wrathful + } + NOR = { + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + } + } + name = bp2_yearly.6160.b + flavor = bp2_yearly.6160.b.tt + house = { + every_house_member = { + custom = all_house_members + limit = { + this != root + } + add_opinion = { + modifier = respect_opinion + target = root + opinion = 10 + } + } + } + add_dread = miniscule_dread_gain + + bp2_return_hostage_effect = { HOSTAGE = scope:hostage } + + stress_impact = { + forgiving = major_stress_impact_gain + just = minor_stress_impact_gain + trusting = minor_stress_impact_gain + calm = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = forgiving + has_trait = just + has_trait = trusting + has_trait = calm + } + } + + } + } + #You repay the debt + option = { + trigger = { + NOR = { + has_trait = vengeful + has_trait = arbitrary + has_trait = loyal + has_trait = paranoid + has_trait = wrathful + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + } + } + name = bp2_yearly.6160.c + scope:kin = { + add_opinion = { + target = root + opinion = 10 + modifier = grateful_opinion + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = 10 + modifier = grateful_opinion + } + } + remove_short_term_gold = minor_gold_value + + stress_impact = { + greedy = minor_stress_impact_gain + callous = miniscule_stress_impact_gain + sadistic = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = callous + has_trait = sadistic + } + } + + } + } + #I'll just heal it + option = { + trigger = { + OR = { + has_trait = lifestyle_herbalist + has_trait = lifestyle_physician + } + } + name = bp2_yearly.6160.d + + if = { + limit = { + capital_province.county = { + county_control < 100 + } + } + capital_province.county = { + change_county_control = minor_county_control_gain + } + } + else_if = { + limit = { + has_lifestyle = learning_lifestyle + } + add_learning_lifestyle_xp = medium_lifestyle_xp + } + else = { + add_character_modifier = { + modifier = renowned_knowledge_of_horses_modifier + years = 20 + } + } + + stress_impact = { + vengeful = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_vengefulness = -1 + } + modifier = { + factor = 0 + has_trait = vengeful + } + + } + } + #No harm done! + option = { + name = bp2_yearly.6160.e + flavor = bp2_yearly.6160.e.tt + scope:kin = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + scope:hostage = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + + capital_province.county = { + change_county_control = minor_county_control_loss + } + + stress_impact = { + just = medium_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = diligent + } + } + } + } +} + +##################################### +# A Pact with the Uncivilized # +# by Jason Cantalini # +# 6170 # +##################################### + +scripted_trigger bp2_yearly_6170_hostage_trigger = { + age < 30 + NOT = { + has_character_flag = had_event_bp2_yearly_6170 + } + warden.culture = { + NOR = { + this = prev.culture + this = root.culture + } + } + OR = { + #Either root is not tribal and the warden is + AND = { + warden = { + government_has_flag = government_is_tribal + } + root = { + NOT = { + government_has_flag = government_is_tribal + } + } + } + #OR warden culture is in an earlier cultural era + AND = { + NOT = { + warden.culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + root.culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + AND = { + NOT = { + warden.culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + root.culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + AND = { + NOT = { + warden.culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + root.culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + #Or root has more innovations than the warden in the given era and a nicer capital + AND = { + #more innovations + root.culture.num_discovered_innovations > warden.culture.num_discovered_innovations + OR = { + # nicer court + warden = { + has_royal_court = yes + court_grandeur_current < root.court_grandeur_current + } + # is just straight up more important yo + AND = { + root = { + has_royal_court = yes + } + warden = { + has_royal_court = no + } + } + #more developed capital + # Does this need to be a larger value...? + warden.capital_province.county = { + development_level > root.capital_province.county.development_level + } + } + } + } + save_temporary_scope_as = potential_hostage + root = { + OR = { + any_spouse = { + is_parent_of = scope:potential_hostage + bp2_yearly_6170_potential_kin_trigger = yes + } + any_concubine = { + is_parent_of = scope:potential_hostage + bp2_yearly_6170_potential_kin_trigger = yes + } + any_close_family_member = { + age >= 14 + bp2_yearly_6170_potential_kin_trigger = yes + } + any_courtier_or_guest = { + bp2_yearly_6170_potential_kin_trigger = yes + age >= 14 + house = root.house + } + } + } +} + +scripted_trigger bp2_yearly_6170_kin_trigger = { + NOR = { + has_trait = just + has_trait = humble + has_trait = calm + } + is_available = yes + opinion = { + target = scope:hostage + value > -50 + } + culture != scope:warden.culture +} + +scripted_trigger bp2_yearly_6170_potential_kin_trigger = { + NOR = { + has_trait = just + has_trait = humble + has_trait = calm + } + is_available = yes + opinion = { + target = scope:potential_hostage + value > -50 + } + culture != scope:potential_hostage.warden.culture +} + +#A family member is upset you sent kin as hostage to an uncivilized land +bp2_yearly.6170 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly.6170.t + desc = bp2_yearly.6170.desc + content_source = dlc_009 + + theme = hostage + override_background = { + reference = relaxing_room + } + left_portrait = { + character = root + animation = stressed_teacher + } + right_portrait = { + character = scope:kin + animation = rage + } + lower_right_portrait = { + character = scope:hostage + } + lower_left_portrait = { + character = scope:warden + } + + cooldown = { + years = 10 + } + + trigger = { + has_bp2_dlc_trigger = yes + age >= 13 + is_landed_or_landless_administrative = yes + is_available = yes + any_home_court_hostage = { + bp2_yearly_6170_hostage_trigger = yes + } + + } + + immediate = { + save_scope_as = root_scope + random_home_court_hostage = { + limit = { + bp2_yearly_6170_hostage_trigger = yes + } + save_scope_as = hostage + } + + scope:hostage.warden = { + save_scope_as = warden + } + #Save an upset family member, starting with those closest to you/the hostage + if = { + limit = { + any_spouse = { + is_parent_of = scope:hostage + bp2_yearly_6170_kin_trigger = yes + } + } + random_spouse = { + limit = { + is_parent_of = scope:hostage + bp2_yearly_6170_kin_trigger = yes + } + save_scope_as = kin + } + } + else_if = { + limit = { + any_concubine = { + is_parent_of = scope:hostage + bp2_yearly_6170_kin_trigger = yes + } + } + random_concubine = { + limit = { + is_parent_of = scope:hostage + bp2_yearly_6170_kin_trigger = yes + } + save_scope_as = kin + } + } + else_if = { + limit = { + any_close_family_member = { + bp2_yearly_6170_kin_trigger = yes + age >= 14 + } + } + random_close_family_member = { + limit = { + bp2_yearly_6170_kin_trigger = yes + age >= 14 + } + save_scope_as = kin + } + } + else_if = { + limit = { + any_courtier_or_guest = { + bp2_yearly_6170_kin_trigger = yes + age >= 14 + house = root.house + } + } + random_courtier_or_guest = { + limit = { + bp2_yearly_6170_kin_trigger = yes + age >= 14 + house = root.house + } + save_scope_as = kin + } + } + scope:hostage = { + add_character_flag = had_event_bp2_yearly_6170 + } + } + #Fine, they shall represent our glory and sophistication in style + option = { + name = bp2_yearly.6170.a + flavor = bp2_yearly.6170.a.tt + + scope:hostage = { + add_character_modifier = { + modifier = lavish_care_modifier + years = 10 + } + } + if = { + limit = { + has_royal_court = yes + has_dlc_feature = royal_court + } + change_current_court_grandeur = minor_court_grandeur_gain + } + else = { + add_prestige = minor_prestige_gain + } + + remove_short_term_gold = medium_gold_value + stress_impact = { + humble = medium_stress_impact_gain + greedy = minor_stress_impact_gain + temperate = minor_stress_impact_gain + content = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + short_term_gold < medium_gold_value + has_trait = humble + has_trait = greedy + has_trait = temperate + has_trait = content + } + } + } + } + #They serve our family, as do you + option = { + name = bp2_yearly.6170.b + flavor = bp2_yearly.6170.b.tt + + add_character_modifier = { + modifier = united_family_modifier + years = 10 + } + custom_tooltip = bp2_yearly.6170.scheme_bonus + custom_tooltip = bp2_yearly.6170.leave_court_bonus + scope:kin = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -20 + } + } + + + stress_impact = { + arbitrary = minor_stress_impact_gain + cynical = minor_stress_impact_gain + fickle = medium_stress_impact_gain + generous = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = 1 + ai_sociability = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = arbitrary + has_trait = cynical + has_trait = fickle + has_trait = generous + } + } + } + } + + #It will harden him and teach him to be brave + option = { + name = bp2_yearly.6170.c + flavor = bp2_yearly.6170.c.tt + + if = { + limit = { + OR = { + culture = { + culture_head = root + } + scope:warden.culture = { + culture_head = scope:warden + } + } + } + culture = { + change_cultural_acceptance = { + target = scope:warden.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_hostage_exchange + } + } + } + else = { + scope:kin = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + } + + scope:hostage = { + add_character_modifier = { + modifier = trained_by_the_uncivilized_modifier + years = 30 + } + } + + scope:kin = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -20 + } + } + + stress_impact = { + paranoid = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + lazy = minor_stress_impact_gain + gluttonous = miniscule_stress_impact_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = arrogant + has_trait = lazy + } + } + } + } +} + +#Foreign-Raised Reformer feed notification events +# by Jason Cantalini + +#Foreign ruler is pleased you're emulating them +scripted_trigger bp2_yearly_6180_ruler_trigger = { + OR = { + highest_held_title_tier >= tier_duchy + this = culture.culture_head + } + NOT = { + government_has_flag = government_is_mercenary + } + age > 8 + is_imprisoned = no + NOR = { + has_relation_rival = root + has_relation_nemesis = root + is_at_war_with = root + } + is_ai = yes + this != root +} + +bp2_yearly.6180 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + OR = { + has_character_flag = foreign_realm_reforms + has_character_flag = foreign_ritual_reforms + has_character_flag = foreign_social_reforms + has_character_flag = foreign_maa_reforms + AND = { + exists = var:new_traditions + var:new_traditions >= 1 + } + } + any_ruler = { + culture = scope:temp_advanced_culture + bp2_yearly_6180_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + culture = scope:advanced_culture + bp2_yearly_6180_ruler_trigger = yes + } + save_scope_as = pleased_ruler + } + + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6180.notification_high + desc = bp2_yearly.6180_notification_tooltip_high + left_icon = scope:pleased_ruler + reverse_add_opinion = { + target = scope:pleased_ruler + modifier = emulating_culture_opinion + opinion = 25 + } + } + } +} + +#foreign parochials are upset at rejecting realm reforms +scripted_trigger bp2_yearly_6181_ruler_trigger = { + OR = { + trigger_if = { + limit = { top_liege != this } + has_vassal_stance = parochial + } + highest_held_title_tier >= tier_kingdom + this = culture.culture_head + AND = { + is_vassal_of = root + highest_held_title_tier >= tier_county + } + } + NOR = { + government_has_flag = government_is_mercenary + is_at_war_with = root + } + age > 8 + is_imprisoned = no + is_ai = yes + opinion = { + target = root + value >= -95 + } + this != root +} + +bp2_yearly.6181 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = rejecting_foreign_realm_reforms + } + any_ruler = { + culture = scope:temp_advanced_culture + bp2_yearly_6181_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + culture = scope:advanced_culture + bp2_yearly_6181_ruler_trigger = yes + } + save_scope_as = disappointed_ruler + } + + send_interface_message = { + type = event_stewardship_bad_with_text + title = bp2_yearly.6181.notification_high + desc = bp2_yearly.6181_notification_tooltip_high + left_icon = scope:disappointed_ruler + reverse_add_opinion = { + target = scope:disappointed_ruler + modifier = disappointed_opinion + opinion = -25 + } + add_stress = miniscule_stress_gain + } + } +} + +#foreign zealots are upset at rejecting ritual reforms +scripted_trigger bp2_yearly_6182_ruler_trigger = { + OR = { + trigger_if = { + limit = { top_liege != this } + has_vassal_stance = zealot + } + highest_held_title_tier >= tier_kingdom + this = culture.culture_head + AND = { + is_vassal_of = root + highest_held_title_tier >= tier_county + } + } + NOR = { + government_has_flag = government_is_mercenary + is_at_war_with = root + } + age > 8 + is_imprisoned = no + is_ai = yes + opinion = { + target = root + value >= -95 + } + this != root +} + +bp2_yearly.6182 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = rejecting_foreign_ritual_reforms + } + any_ruler = { + culture = scope:temp_advanced_culture + bp2_yearly_6182_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + culture = scope:advanced_culture + bp2_yearly_6182_ruler_trigger = yes + } + save_scope_as = disappointed_ruler + } + + send_interface_message = { + type = event_learning_bad_with_text + title = bp2_yearly.6182.notification_high + desc = bp2_yearly.6182_notification_tooltip_high + left_icon = scope:disappointed_ruler + reverse_add_opinion = { + target = scope:disappointed_ruler + modifier = disappointed_opinion + opinion = -25 + } + add_stress = miniscule_stress_gain + } + } +} + +#foreign courtlies are upset at rejecting social reforms +scripted_trigger bp2_yearly_6183_ruler_trigger = { + OR = { + trigger_if = { + limit = { top_liege != this } + has_vassal_stance = courtly + } + highest_held_title_tier >= tier_kingdom + this = culture.culture_head + AND = { + is_vassal_of = root + highest_held_title_tier >= tier_county + } + } + NOR = { + government_has_flag = government_is_mercenary + is_at_war_with = root + } + age > 8 + is_imprisoned = no + is_ai = yes + opinion = { + target = root + value >= -95 + } + this != root +} + +bp2_yearly.6183 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = rejecting_foreign_social_reforms + } + any_ruler = { + culture = scope:temp_advanced_culture + bp2_yearly_6183_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + culture = scope:advanced_culture + bp2_yearly_6183_ruler_trigger = yes + } + save_scope_as = disappointed_ruler + } + + send_interface_message = { + type = event_diplomacy_bad_with_text + title = bp2_yearly.6183.notification_high + desc = bp2_yearly.6183_notification_tooltip_high + left_icon = scope:disappointed_ruler + reverse_add_opinion = { + target = scope:disappointed_ruler + modifier = disappointed_opinion + opinion = -25 + } + add_stress = miniscule_stress_gain + } + } +} + +#foreign glory hounds are upset at rejecting maa reforms +scripted_trigger bp2_yearly_6184_ruler_trigger = { + OR = { + AND = { + is_vassal_of = root + highest_held_title_tier >= tier_county + } + AND = { + this != top_liege + has_vassal_stance = glory_hound + } + this = culture.culture_head + } + NOR = { + government_has_flag = government_is_mercenary + is_at_war_with = root + } + age > 8 + is_imprisoned = no + is_ai = yes + opinion = { + target = root + value >= -95 + } + this != root +} + +bp2_yearly.6184 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = rejecting_foreign_maa_reforms + } + any_ruler = { + culture = scope:temp_advanced_culture + bp2_yearly_6184_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + culture = scope:advanced_culture + bp2_yearly_6184_ruler_trigger = yes + } + save_scope_as = disappointed_ruler + } + + send_interface_message = { + type = event_martial_bad_with_text + title = bp2_yearly.6184.notification_high + desc = bp2_yearly.6184_notification_tooltip_high + left_icon = scope:disappointed_ruler + reverse_add_opinion = { + target = scope:disappointed_ruler + modifier = disappointed_opinion + opinion = -25 + } + add_stress = miniscule_stress_gain + } + } +} + +#knight attacked and beaten by rampaging mercenaries +scripted_trigger bp2_yearly_6185_knight_trigger = { + is_alive = yes + is_acclaimed = yes + accolade = { + accolade_rank >= 1 + } + is_imprisoned = no + is_incapable = no + NOT = { + exists = involved_activity + } + is_ai = yes +} + +bp2_yearly.6185 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_maa_reforms + } + any_knight = { + bp2_yearly_6185_knight_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_knight = { + limit = { + bp2_yearly_6185_knight_trigger = yes + } + save_scope_as = beaten_knight + } + + send_interface_message = { + type = event_martial_bad_with_text + title = bp2_yearly.6185.notification_high + desc = bp2_yearly.6185_notification_tooltip_high + left_icon = scope:beaten_knight + scope:beaten_knight = { + increase_wounds_effect = { REASON = fight } + accolade = { + add_glory = medium_glory_loss + } + } + } + } +} + +#rumours spread of court's barbarism +bp2_yearly.6186 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_social_reforms + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + send_interface_message = { + type = event_diplomacy_bad_with_text + title = bp2_yearly.6186.notification_high + desc = bp2_yearly.6186_notification_tooltip_high + if = { + limit = { + has_royal_court = yes + has_dlc_feature = royal_court + } + change_current_court_grandeur = medium_court_grandeur_loss + } + else = { + add_prestige = medium_prestige_loss + add_stress = miniscule_stress_gain + } + } + } +} + +#foreign functionaries and scholars attacked by zealots +bp2_yearly.6187 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_ritual_reforms + } + culture.culture_head = root + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + if = { + limit = { + any_vassal = { + vassal_stance = zealot + is_adult = yes + is_available = yes + } + } + random_vassal = { + vassal_stance = zealot + limit = { + is_adult = yes + is_available = yes + } + save_scope_as = zealot_vassal + } + send_interface_message = { + type = event_learning_bad_with_text + title = bp2_yearly.6187.notification_high + desc = bp2_yearly.6187_notification_tooltip_high + left_icon = scope:zealot_vassal + if = { + limit = { + NOT = { + has_character_modifier = dearth_of_intellectuals_modifier + } + } + add_character_modifier = { + modifier = dearth_of_intellectuals_modifier + years = 20 + } + } + else_if = { + limit = { + has_character_modifier = dearth_of_intellectuals_modifier + NOT = { + has_character_modifier = bereft_of_intellectuals_modifier + } + } + remove_character_modifier = dearth_of_intellectuals_modifier + add_character_modifier = { + modifier = bereft_of_intellectuals_modifier + years = 20 + } + } + else = { + add_learning_lifestyle_xp = -200 + add_stress = miniscule_stress_gain + } + } + } + else = { + send_interface_message = { + type = event_learning_bad_with_text + title = bp2_yearly.6187.notification_high + desc = bp2_yearly.6187_no_vassal_notification_tooltip_high + if = { + limit = { + NOT = { + has_character_modifier = dearth_of_intellectuals_modifier + } + } + add_character_modifier = { + modifier = dearth_of_intellectuals_modifier + years = 20 + } + } + else_if = { + limit = { + has_character_modifier = dearth_of_intellectuals_modifier + NOT = { + has_character_modifier = bereft_of_intellectuals_modifier + } + } + remove_character_modifier = dearth_of_intellectuals_modifier + add_character_modifier = { + modifier = bereft_of_intellectuals_modifier + years = 20 + } + } + else = { + add_learning_lifestyle_xp = -200 + add_stress = miniscule_stress_gain + } + } + } + } +} + +scripted_trigger bp2_yearly_6188_county_trigger = { + holder = { + OR = { + this = root + is_ai = yes + } + } +} + +#nobles consolidate local control +bp2_yearly.6188 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_realm_reforms + } + any_realm_county = { + bp2_yearly_6188_county_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + random_realm_county = { + limit = { + bp2_yearly_6188_county_trigger = yes + development_level >= 1 + } + alternative_limit = { + bp2_yearly_6188_county_trigger = yes + } + save_scope_as = isolating_county + } + + + send_interface_message = { + type = event_stewardship_bad_with_text + title = bp2_yearly.6188.notification_high + desc = bp2_yearly.6188_notification_tooltip_high + left_icon = scope:isolating_county + if = { + limit = { + scope:isolating_county = { + development_level >= 1 + } + } + scope:isolating_county = { + change_development_level = -1 + } + } + else = { + scope:isolating_county = { + change_development_progress_with_overflow = -50 + } + } + } + } +} + +scripted_trigger bp2_yearly_6189_province_trigger = { + OR = { + county = { has_county_modifier = great_builder_modifier } + county = { has_county_modifier = massive_construction_efforts_modifier } + has_holding = yes + } +} + +#a series of new buildings collapse +bp2_yearly.6189 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + root = { + has_character_flag = foreign_realm_reforms + } + any_realm_province = { + bp2_yearly_6189_province_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + random_realm_province = { + limit = { + bp2_yearly_6189_province_trigger = yes + } + save_scope_as = affected_province + } + + + send_interface_message = { + type = event_stewardship_bad_with_text + title = bp2_yearly.6189.notification_high + desc = bp2_yearly.6189_notification_tooltip_high + if = { + limit = { + NOT = { + scope:affected_province.county = { + has_county_modifier = grand_buildings_collapsed_modifier + } + } + } + scope:affected_province.county = { + add_county_modifier = { + modifier = grand_buildings_collapsed_modifier + years = 10 + } + } + } + else = { + scope:affected_province.county = { + change_county_control = minor_county_control_loss + } + } + if = { + limit = { + NOT = { + scope:affected_province = { + has_province_modifier = conscripted_warriors_modifier + } + } + } + scope:affected_province = { + add_province_modifier = { + modifier = conscripted_warriors_modifier + years = 5 + } + } + } + } + } +} + +scripted_trigger bp2_yearly_6190_county_trigger = { + holder = root +} + +#priest mob destroys new icons and ritual items +bp2_yearly.6190 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = foreign_ritual_reforms + } + any_realm_county = { + bp2_yearly_6190_county_trigger = yes + culture != scope:temp_advanced_culture + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + random_realm_county = { + limit = { + bp2_yearly_6190_county_trigger = yes + development_level >= 1 + culture != scope:advanced_culture + } + alternative_limit = { + bp2_yearly_6190_county_trigger = yes + culture != scope:advanced_culture + } + save_scope_as = affected_county + } + + + send_interface_message = { + type = event_learning_bad_with_text + title = bp2_yearly.6190.notification_high + desc = bp2_yearly.6190_notification_tooltip_high + left_icon = scope:affected_county + remove_treasury_or_gold = medium_treasury_or_gold_value + } + } +} + +#a related culture is mad at you +scripted_trigger bp2_yearly_6191_culture_trigger = { + has_same_culture_heritage = root.culture + this != root.culture +} + +bp2_yearly.6191 = { + hidden = yes + + trigger = { + root = culture.culture_head + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + culture != scope:temp_advanced_culture + root = { + has_character_flag = foreign_social_reforms + } + any_culture_global = { + NOR = { + this = scope:temp_advanced_culture + has_same_culture_heritage = scope:temp_advanced_culture + } + bp2_yearly_6191_culture_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_culture_global = { + limit = { + NOR = { + this = scope:advanced_culture + has_same_culture_heritage = scope:advanced_culture + } + bp2_yearly_6191_culture_trigger = yes + } + save_scope_as = annoyed_culture + } + + if = { + limit = { + exists = scope:annoyed_culture.culture_head + } + send_interface_message = { + type = event_diplomacy_bad_with_text + title = bp2_yearly.6191.notification_high + desc = bp2_yearly.6191_notification_tooltip_high + left_icon = scope:annoyed_culture.culture_head + culture = { + change_cultural_acceptance = { + target = scope:annoyed_culture + value = medium_cultural_acceptance_loss + desc = cultural_acceptance_diverging_court + } + } + add_stress = miniscule_stress_gain + } + } + else = { + send_interface_message = { + type = event_diplomacy_bad_with_text + title = bp2_yearly.6191.notification_high + desc = bp2_yearly.6191_notification_tooltip_high + culture = { + change_cultural_acceptance = { + target = scope:annoyed_culture + value = medium_cultural_acceptance_loss + desc = cultural_acceptance_diverging_court + } + } + add_stress = miniscule_stress_gain + } + } + } +} + +#Your vassals grow ever-more cynical about loyalty +scripted_trigger bp2_yearly_6192_ruler_trigger = { + age >= 13 + is_incapable = no + is_imprisoned = no + is_ai = yes + opinion = { + target = root + value <= 30 + } + NOR = { + has_trait = loyal + has_trait = trusting + has_trait = humble + } + this != root +} + +bp2_yearly.6192 = { + hidden = yes + + trigger = { + is_landed_or_landless_administrative = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = foreign_maa_reforms + } + any_vassal = { + culture != scope:temp_advanced_culture + bp2_yearly_6192_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_vassal = { + limit = { + NOR = { + culture = scope:advanced_culture + highest_held_title_tier >= tier_county + } + bp2_yearly_6192_ruler_trigger = yes + } + alternative_limit = { + culture != scope:advanced_culture + bp2_yearly_6192_ruler_trigger = yes + } + save_scope_as = vassal + } + + send_interface_message = { + type = event_martial_bad_with_text + title = bp2_yearly.6192.notification_high + desc = bp2_yearly.6192_notification_tooltip_high + left_icon = scope:vassal + scope:vassal = { + add_trait = disloyal + add_opinion = { + target = root + modifier = angry_opinion + opinion = -15 + } + } + } + } +} + +#Your ability to extract taxes increases +scripted_trigger bp2_yearly_6193_ruler_trigger = { + is_imprisoned = no + NOT = { is_at_war_with = root } + is_ai = yes + NOT = { has_relation_friend = root } +} + +bp2_yearly.6193 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = foreign_realm_reforms + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_vassal = { + limit = { + bp2_yearly_6193_ruler_trigger = yes + } + save_scope_as = vassal + } + if = { + limit = { + exists = scope:vassal + scope:vassal = { vassal_contract_obligation_level_can_be_increased = feudal_government_taxes } + } + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6193.notification_high + desc = bp2_yearly.6193_notification_tooltip_high + left_icon = scope:vassal + scope:vassal = { + vassal_contract_increase_obligation_level = feudal_government_taxes + } + } + } + else = { + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6193.notification_high + desc = bp2_yearly.6193_notification_tooltip_high + add_stewardship_skill = 1 + } + } + } +} + +#Your vassals praise you +scripted_trigger bp2_yearly_6194_ruler_trigger = { + is_imprisoned = no + is_incapable = no + age > 11 + NOR = { + is_at_war_with = root + has_relation_rival = root + has_relation_nemesis = root + } + opinion = { + target = root + value >= 0 + } + this != root +} + +bp2_yearly.6194 = { + hidden = yes + + trigger = { + is_landed_or_landless_administrative = yes + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_realm_reforms + } + any_vassal = { + bp2_yearly_6194_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_vassal = { + limit = { + bp2_yearly_6194_ruler_trigger = yes + culture = root.culture + highest_held_title_tier >= tier_county + } + alternative_limit = { + bp2_yearly_6194_ruler_trigger = yes + highest_held_title_tier >= tier_county + } + alternative_limit = { + bp2_yearly_6194_ruler_trigger = yes + } + save_scope_as = vassal + } + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6194.notification_high + desc = bp2_yearly.6194_notification_tooltip_high + left_icon = scope:vassal + add_prestige = minor_prestige_gain + scope:vassal = { + add_opinion = { + target = root + opinion = 15 + modifier = admiration_opinion + } + } + } + } +} + +#You feel the embrace of your faith +bp2_yearly.6195 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = foreign_ritual_reforms + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + send_interface_message = { + type = event_learning_good_with_text + title = bp2_yearly.6195.notification_high + desc = bp2_yearly.6195_notification_tooltip_high + random_list = { + 10 = { + add_piety_experience = major_piety_value + } + 50 = { + add_piety_experience = medium_piety_value + } + 50 = { + add_stress = medium_stress_impact_loss + } + } + } + } +} + +scripted_trigger bp2_yearly_6196_priest_trigger = { + is_alive = yes + is_imprisoned = no + is_incapable = no + faith = root.faith + culture = root.culture +} + +#A priest "finds" a benediction from the divine +bp2_yearly.6196 = { + hidden = yes + + trigger = { + is_landed_or_landless_administrative = yes + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_ritual_reforms + } + OR = { + any_vassal = { + bp2_yearly_6196_priest_trigger = yes + government_has_flag = government_is_theocracy + } + any_courtier_or_guest = { + bp2_yearly_6196_priest_trigger = yes + is_clergy = yes + } + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + if = { + limit = { + any_vassal = { + bp2_yearly_6196_priest_trigger = yes + government_has_flag = government_is_theocracy + } + } + random_vassal = { + limit = { + bp2_yearly_6196_priest_trigger = yes + government_has_flag = government_is_theocracy + } + save_scope_as = priest + } + } + else = { + random_courtier_or_guest = { + limit = { + bp2_yearly_6196_priest_trigger = yes + is_clergy = yes + } + save_scope_as = priest + } + } + send_interface_message = { + type = event_learning_good_with_text + title = bp2_yearly.6196.notification_high + desc = bp2_yearly.6196_notification_tooltip_high + left_icon = scope:priest + add_treasury_or_gold = medium_treasury_or_gold_value + } + } +} + +scripted_trigger bp2_yearly_6197_ruler_trigger = { + is_imprisoned = no + is_incapable = no + is_ai = yes + age > 11 + NOR = { + is_at_war_with = root + has_relation_rival = root + has_relation_nemesis = root + } + opinion = { + target = root + value >= -70 + } + this != root +} + +#Vassal reacts in awe of new court splendour +bp2_yearly.6197 = { + hidden = yes + + trigger = { + is_landed_or_landless_administrative = yes + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + root = { + has_character_flag = foreign_social_reforms + } + any_vassal = { + culture != scope:temp_advanced_culture + bp2_yearly_6197_ruler_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_vassal = { + vassal_stance = courtly + limit = { + bp2_yearly_6197_ruler_trigger = yes + highest_held_title_tier >= tier_county + culture != scope:advanced_culture + } + alternative_limit = { + bp2_yearly_6197_ruler_trigger = yes + highest_held_title_tier >= tier_county + culture != scope:advanced_culture + } + alternative_limit = { + bp2_yearly_6197_ruler_trigger = yes + culture != scope:advanced_culture + } + save_scope_as = vassal + } + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6197.notification_high + desc = bp2_yearly.6197_notification_tooltip_high + left_icon = scope:vassal + if = { + limit = { + has_royal_court = yes + has_dlc_feature = royal_court + } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_prestige = medium_prestige_gain + } + } + } +} + +#Courtiers are grateful you're keeping the power-hungry out +scripted_trigger bp2_yearly_6198_courtier_trigger = { + is_available = yes + is_adult = yes + culture = root.culture + NOR = { + is_close_family_of = root + is_hostage_of = root + } +} + +bp2_yearly.6198 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_social_reforms + } + any_courtier = { + bp2_yearly_6198_courtier_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_courtier = { + limit = { + bp2_yearly_6198_courtier_trigger = yes + } + save_scope_as = courtier + } + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6198.notification_high + desc = bp2_yearly.6198_notification_tooltip_high + left_icon = scope:courtier + random_list = { + 33 = { + dynasty = { add_dynasty_prestige = miniscule_dynasty_prestige_gain } + } + 66 = { + every_courtier = { + limit = { culture != scope:advanced_culture } + custom = custom.every_non_advanced_culture_courtier + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 10 + } + } + } + } + } + } +} + +#Your knight is learning from the advanced culture mercenaries +scripted_trigger bp2_yearly_6199_knight_trigger = { + is_acclaimed = yes + is_imprisoned = no +} + +bp2_yearly.6199 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = foreign_maa_reforms + } + any_knight = { + bp2_yearly_6199_knight_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_knight = { + limit = { + bp2_yearly_6199_knight_trigger = yes + } + save_scope_as = knight + } + send_interface_message = { + type = event_martial_good_with_text + title = bp2_yearly.6199.notification_high + desc = bp2_yearly.6199_notification_tooltip_high + left_icon = scope:knight + + random_list = { + 20 = { + scope:knight.accolade = { add_glory = major_glory_gain } + } + 40 = { + scope:knight.accolade = { add_glory = medium_glory_gain } + } + 40 = { + scope:knight.accolade = { add_glory = minor_glory_gain } + } + } + } + } +} + +#Your culture head/other independent ruler is proud of you +scripted_trigger bp2_yearly_6210_ruler_trigger = { + culture = root.culture + is_adult = yes + is_imprisoned = no + is_incapable = no + NOR = { + is_at_war_with = root + has_relation_rival = root + has_relation_nemesis = root + } + opinion = { + target = root + value >= -75 + } + NOR = { + government_has_flag = government_is_mercenary + this = root + } +} + +bp2_yearly.6210 = { + hidden = yes + + trigger = { + is_landed = yes + exists = var:advanced_culture + root = { + has_character_flag = rejecting_foreign_maa_reforms + } + any_ruler = { + bp2_yearly_6210_ruler_trigger = yes + OR = { + culture.culture_head = this + AND = { + is_vassal_of = root + highest_held_title_tier >= tier_kingdom + } + AND = { + NOT = { is_vassal_of = root } + highest_held_title_tier >= tier_duchy + } + } + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_ruler = { + limit = { + bp2_yearly_6210_ruler_trigger = yes + culture.culture_head = this + } + alternative_limit = { + bp2_yearly_6210_ruler_trigger = yes + is_vassal_of = root + highest_held_title_tier >= tier_kingdom + } + alternative_limit = { + bp2_yearly_6210_ruler_trigger = yes + NOT = { is_vassal_of = root } + } + save_scope_as = ruler + } + send_interface_message = { + type = event_martial_good_with_text + title = bp2_yearly.6210.notification_high + desc = bp2_yearly.6210_notification_tooltip_high + left_icon = scope:ruler + random_list = { + 30 = { + scope:ruler = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 25 + } + } + } + 10 = { + trigger = { + can_add_hook = { + target = scope:ruler + type = favor_hook + } + } + add_hook = { + target = scope:ruler + type = favor_hook + } + } + } + } + } +} + +#a related culture is pleased you're affirming your identity +scripted_trigger bp2_yearly_6211_culture_trigger = { + has_same_culture_heritage = root.culture + this != root.culture +} + +bp2_yearly.6211 = { + hidden = yes + + trigger = { + root = culture.culture_head + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + culture != scope:temp_advanced_culture + root = { + OR = { + has_character_flag = rejecting_foreign_social_reforms + has_character_flag = rejecting_foreign_maa_reforms + has_character_flag = rejecting_foreign_ritual_reforms + has_character_flag = rejecting_foreign_realm_reforms + } + + } + any_culture_global = { + NOR = { + this = scope:temp_advanced_culture + has_same_culture_heritage = scope:temp_advanced_culture + } + bp2_yearly_6211_culture_trigger = yes + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + random_culture_global = { + limit = { + NOR = { + this = scope:advanced_culture + has_same_culture_heritage = scope:advanced_culture + } + bp2_yearly_6211_culture_trigger = yes + } + save_scope_as = pleased_culture + } + + if = { + limit = { + exists = scope:pleased_culture.culture_head + } + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6211.notification_high + desc = bp2_yearly.6211_notification_tooltip_high + left_icon = scope:pleased_culture.culture_head + culture = { + change_cultural_acceptance = { + target = scope:pleased_culture + value = medium_cultural_acceptance_gain + desc = cultural_acceptance_embracing_identity + } + } + } + } + else = { + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6211.notification_high + desc = bp2_yearly.6211_notification_tooltip_high + culture = { + change_cultural_acceptance = { + target = scope:pleased_culture + value = medium_cultural_acceptance_gain + desc = cultural_acceptance_embracing_identity + } + } + } + } + } +} + +#advanced culture are settling in your land +bp2_yearly.6212 = { + hidden = yes + + trigger = { + root = culture.culture_head + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + culture != scope:temp_advanced_culture + any_owned_story = { + type = story_foreign_raised_reformer + exists = var:reaffirmation_counter + var:reaffirmation_counter < 2 + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + if = { + limit = { + exists = scope:advanced_culture.culture_head + } + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6212.notification_high + desc = { + random_valid = { + desc = bp2_yearly.6212_notification_tooltip_high + desc = bp2_yearly.6212_2_notification_tooltip_high + } + } + left_icon = scope:advanced_culture.culture_head + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = medium_cultural_acceptance_gain + desc = cultural_acceptance_reformer_migration + } + } + } + } + else = { + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6212.notification_high + desc = { + random_valid = { + desc = bp2_yearly.6212_notification_tooltip_high + desc = bp2_yearly.6212_2_notification_tooltip_high + } + } + culture = { + change_cultural_acceptance = { + target = scope:advanced_culture + value = medium_cultural_acceptance_gain + desc = cultural_acceptance_reformer_migration + } + } + } + } + } +} + +#tyranny from ruling methods +bp2_yearly.6213 = { + hidden = yes + + trigger = { + root = culture.culture_head + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + any_owned_story = { + type = story_foreign_raised_reformer + exists = var:reaffirmation_counter + var:reaffirmation_counter < 2 + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + send_interface_message = { + type = event_martial_bad_with_text + title = bp2_yearly.6213.notification_high + desc = { + random_valid = { + desc = bp2_yearly.6213_notification_tooltip_high + desc = bp2_yearly.6213_notification_2_tooltip_high + } + } + add_tyranny = minor_tyranny_gain + } + } +} + +scripted_trigger bp2_yearly_6214_county_trigger = { + holder = root + save_temporary_scope_as = county + NOT = { + root = { + any_targeting_faction = { + any_faction_county_member = { + this = scope:county + } + } + } + } +} + +#reforms taking effect on the local level +bp2_yearly.6214 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + any_owned_story = { + type = story_foreign_raised_reformer + exists = var:reaffirmation_counter + var:reaffirmation_counter < 2 + } + any_realm_county = { + bp2_yearly_6214_county_trigger = yes + culture != scope:temp_advanced_culture + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + random_realm_county = { + limit = { + bp2_yearly_6214_county_trigger = yes + culture != scope:advanced_culture + } + save_scope_as = affected_county + } + + send_interface_message = { + type = event_stewardship_good_with_text + title = bp2_yearly.6214.notification_high + desc = { + random_valid = { + #enforcing new trade agreements and circulating new coins + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_egalitarian + } + } + } + desc = bp2_yearly.6214_notification_1_tooltip_high + } + #laying out terms of service and fealty with local warriors + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + } + } + } + desc = bp2_yearly.6214_notification_2_tooltip_high + } + #putting men of refinement and learning in charge + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_spiritual + } + } + } + desc = bp2_yearly.6214_notification_3_tooltip_high + } + } + } + left_icon = scope:affected_county + random_list = { + 50 = { + scope:affected_county = { + change_development_progress_with_overflow = minor_development_progress_gain + } + } + 50 = { + scope:affected_county = { + change_development_progress_with_overflow = minimal_development_progress_gain + } + } + } + } + } +} + +#rumour spreads of improvements +bp2_yearly.6215 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + any_owned_story = { + type = story_foreign_raised_reformer + exists = var:reaffirmation_counter + exists = var:reform_counter + OR = { + var:reaffirmation_counter >= 1 + var:reform_counter >= 1 + } + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + send_interface_message = { + type = event_diplomacy_good_with_text + title = bp2_yearly.6215.notification_high + desc = { + random_valid = { + #enforcing new trade agreements and circulating new coins + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_communal + has_cultural_pillar = ethos_egalitarian + } + } + } + desc = bp2_yearly.6215_notification_1_tooltip_high + } + #laying out terms of service and fealty with local warriors + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + } + } + } + desc = bp2_yearly.6215_notification_2_tooltip_high + } + #putting men of refinement and learning in charge + triggered_desc = { + trigger = { + culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_spiritual + } + } + } + desc = bp2_yearly.6215_notification_3_tooltip_high + } + } + } + random_list = { + 10 = { + add_prestige_experience = medium_prestige_value + } + 50 = { + add_prestige_experience = minor_prestige_value + } + 50 = { + add_prestige_experience = miniscule_prestige_value + } + } + } + } +} + +#legitimacy loss from strange new customs +bp2_yearly.6216 = { + hidden = yes + + trigger = { + exists = var:advanced_culture + var:advanced_culture = { + save_temporary_scope_as = temp_advanced_culture + } + any_owned_story = { + type = story_foreign_raised_reformer + exists = var:reform_counter + var:reform_counter >= 1 + } + } + + immediate = { + var:advanced_culture = { + save_scope_as = advanced_culture + } + + send_interface_message = { + type = event_diplomacy_bad_with_text + title = bp2_yearly.6216.notification_high + desc = { + random_valid = { + desc = bp2_yearly.6216_notification_tooltip_high + desc = bp2_yearly.6216_notification_2_tooltip_high + } + } + add_legitimacy = miniscule_legitimacy_loss + } + } +} diff --git a/events/dlc/bp2/bp2_yearly_extra.txt b/events/dlc/bp2/bp2_yearly_extra.txt new file mode 100644 index 00000000..b818b2bf --- /dev/null +++ b/events/dlc/bp2/bp2_yearly_extra.txt @@ -0,0 +1,206 @@ +namespace = bp2_yearly_extra + +################################ +# My Favorite Councilor # +# by Johan Husén # +# bp2_yearly_extra # +################################ + +# Gaining some skills from your councilor + +bp2_yearly_extra.0001 = { + type = character_event + content_source = dlc_009 + title = bp2_yearly_extra.0001.t + desc = bp2_yearly_extra.0001.desc + theme = education + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:target_councilor + triggered_animation = { + trigger = { + scope:target_councilor = { has_council_position = councillor_court_chaplain } + } + animation = chaplain + } + triggered_animation = { + trigger = { + scope:target_councilor = { has_council_position = councillor_steward } + } + animation = steward + } + triggered_animation = { + trigger = { + scope:target_councilor = { has_council_position = councillor_marshal } + } + animation = marshal + } + triggered_animation = { + trigger = { + scope:target_councilor = { has_council_position = councillor_spymaster } + } + animation = spymaster + } + triggered_animation = { + trigger = { + scope:target_councilor = { has_council_position = councillor_chancellor } + } + animation = chancellor + } + } + cooldown = { years = 15 } + + trigger = { + has_bp2_dlc_trigger = yes + is_available_child = yes + OR = { + AND = { + has_focus = education_diplomacy + exists = cp:councillor_chancellor + } + AND = { + has_focus = education_martial + exists = cp:councillor_marshal + } + AND = { + has_focus = education_stewardship + exists = cp:councillor_steward + } + AND = { + has_focus = education_intrigue + exists = cp:councillor_spymaster + } + AND = { + has_focus = education_learning + exists = cp:councillor_court_chaplain + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + if = { + limit = { + has_focus = education_diplomacy + exists = cp:councillor_chancellor + } + cp:councillor_chancellor = { save_scope_as = target_councilor } + } + else_if = { + limit = { + has_focus = education_martial + exists = cp:councillor_marshal + } + cp:councillor_marshal = { save_scope_as = target_councilor } + } + else_if = { + limit = { + has_focus = education_stewardship + exists = cp:councillor_steward + } + cp:councillor_steward = { save_scope_as = target_councilor } + } + else_if = { + limit = { + has_focus = education_intrigue + exists = cp:councillor_spymaster + } + cp:councillor_spymaster = { save_scope_as = target_councilor } + } + else_if = { + limit = { + has_focus = education_learning + exists = cp:councillor_court_chaplain + } + cp:councillor_court_chaplain = { save_scope_as = target_councilor } + } + } + + # Option A: I want to help out! + option = { + name = bp2_yearly_extra.0001.a + flavor = bp2_yearly_extra.0001.a.tt + + if = { + limit = { has_focus = education_diplomacy } + add_diplomacy_skill = 1 + } + else_if = { + limit = { has_focus = education_martial } + add_martial_skill = 1 + } + else_if = { + limit = { has_focus = education_stewardship } + add_stewardship_skill = 1 + } + else_if = { + limit = { has_focus = education_intrigue } + add_intrigue_skill = 1 + } + else_if = { + limit = { has_focus = education_learning } + add_learning_skill = 1 + } + stress_impact = { + base = miniscule_stress_impact_gain + diligent = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + scope:target_councilor = { + add_opinion = { + target = root + modifier = frustrated_opinion + opinion = -20 + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + factor = 0 + } + } + } + + # Option B: I just like to see them work. + option = { + name = bp2_yearly_extra.0001.b + flavor = bp2_yearly_extra.0001.b.tt + scope:target_councilor = { + add_opinion = { + target = root + modifier = thankful_opinion + opinion = 20 + } + } + stress_impact = { + base = minor_stress_impact_loss + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + factor = 0 + } + modifier = { + has_trait = lazy + add = 50 + } + modifier = { + has_trait = curious + add = 50 + } + modifier = { + has_trait = pensive + add = 50 + } + } + } +} diff --git a/events/dlc/bp2/story_cycles/story_cycle_pet_rock_events.txt b/events/dlc/bp2/story_cycles/story_cycle_pet_rock_events.txt new file mode 100644 index 00000000..6ee2a1c2 --- /dev/null +++ b/events/dlc/bp2/story_cycles/story_cycle_pet_rock_events.txt @@ -0,0 +1,1066 @@ +namespace = pet_rock + +############################################### +# ROCK (0001-0999), by Nick Meredith # +# 88 # +# 88 # +# 88 # +# 8b,dPPYba, ,adPPYba, ,adPPYba, 88 ,d8 # +# 88P' "Y8 a8" "8a a8" "" 88 ,a8" # +# 88 8b d8 8b 8888[ # +# 88 "8a, ,a8" "8a, ,aa 88`"Yba, # +# 88 `"YbbdP"' `"Ybbd8"' 88 `Y8a # +############################################### + +#You find a rock +#by Nick Meredith +pet_rock.0001 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0001.t + desc = pet_rock.0001.desc + theme = pet + left_portrait = { + character = root + animation = ecstasy + } + override_background = { reference = bp2_courtyard } + cooldown = { years = 10 } + + trigger = { + has_trait = eccentric + age > 12 + is_available = yes + } + + option = { + name = pet_rock.0001.a + + trigger = { + has_trait = eccentric #To make it show up + } + + custom_tooltip = pet_rock.0001.a.tt + + start_rock_story_cycle_effect = yes + + ai_chance = { + base = 100 + } + } + + option = { + name = pet_rock.0001.b + + flavor = pet_rock.0001.b.tt + + ai_chance = { + base = 100 + } + } +} + +#Name your rock +#by Nick Meredith +pet_rock.0002 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0002.t + desc = pet_rock.0002.desc + theme = pet + override_background = { reference = bp2_courtyard } + left_portrait = { + character = root + animation = ecstasy + } + + immediate = { + #To give some options to show + assign_name_options_rock_story_cycle_effect = yes + assign_name_options_rock_story_cycle_effect = yes + assign_name_options_rock_story_cycle_effect = yes + play_music_cue = "mx_cue_low_key_positive" + + if = { + limit = { is_ai = yes } + random_list = { + 10 = { + trigger = { has_character_flag = name_cliff } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_cliff + } + } + 10 = { + trigger = { has_character_flag = name_sandy } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_sandy + } + } + 10 = { + trigger = { has_character_flag = name_rocky } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_rocky + } + } + 10 = { + trigger = { has_character_flag = name_crag } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_crag + } + } + 10 = { + trigger = { has_character_flag = name_flint } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_flint + } + } + 10 = { + trigger = { has_character_flag = name_gritty } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_gritty + } + } + 10 = { + trigger = { has_character_flag = name_rubble } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_rubble + } + } + 10 = { + trigger = { has_character_flag = name_tuff } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_tuff + } + } + 10 = { + trigger = { has_character_flag = name_roxanne } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_roxanne + } + } + 10 = { + trigger = { has_character_flag = name_rosetta } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_rosetta + } + } + 10 = { + trigger = { has_character_flag = name_chip } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_chip + } + } + 10 = { + trigger = { has_character_flag = name_fluffy } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_fluffy + } + } + 10 = { + trigger = { has_character_flag = name_sten } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_sten + } + } + 10 = { + trigger = { has_character_flag = name_barney } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_barney + } + } + #Easter Eggs + 1 = { #The Grand Basilisk's wife, no less + trigger = { has_character_flag = name_ariadne } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_ariadne + } + } + 1 = { #If you smelllll + trigger = { has_character_flag = name_dwayne } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_dwayne + } + } + 1 = { #Paying tribute to a real one + trigger = { + has_character_flag = name_potapczyk + has_culture = culture:polish + } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_potapczyk + } + } + 1 = { #Paying tribute to another real one + trigger = { + has_character_flag = name_gemma + has_culture = culture:english + } + set_variable = { + name = story_cycle_rock_name + value = flag:rock_name_gemma + } + } + } + } + } + + widget = { + gui = "event_window_widget_enter_text" + container = "dynamic_birth_name" + controller = { + type = text + data = { + key = story_cycle_rock_name + default = { + localization_key = rock_name_cliff + trigger = { + has_character_flag = name_cliff + } + } + default = { + localization_key = rock_name_sandy + trigger = { + has_character_flag = name_sandy + } + } + default = { + localization_key = rock_name_rocky + trigger = { + has_character_flag = name_rocky + } + } + default = { + localization_key = rock_name_crag + trigger = { + has_character_flag = name_crag + } + } + default = { + localization_key = rock_name_flint + trigger = { + has_character_flag = name_flint + } + } + default = { + localization_key = rock_name_gritty + trigger = { + has_character_flag = name_gritty + } + } + default = { + localization_key = rock_name_rubble + trigger = { + has_character_flag = name_rubble + } + } + default = { + localization_key = rock_name_tuff + trigger = { + has_character_flag = name_tuff + } + } + default = { + localization_key = rock_name_roxanne + trigger = { + has_character_flag = name_roxanne + } + } + default = { + localization_key = rock_name_rosetta + trigger = { + has_character_flag = name_rosetta + } + } + default = { + localization_key = rock_name_chip + trigger = { + has_character_flag = name_chip + } + } + default = { + localization_key = rock_name_fluffy + trigger = { + has_character_flag = name_fluffy + } + } + default = { + localization_key = rock_name_sten + trigger = { + has_character_flag = name_sten + } + } + default = { + localization_key = rock_name_barney + trigger = { + has_character_flag = name_barney + } + } + default = { + localization_key = rock_name_ariadne + trigger = { + has_character_flag = name_ariadne + } + } + default = { + localization_key = rock_name_dwayne + trigger = { + has_character_flag = name_dwayne + } + } + default = { + localization_key = rock_name_potapczyk + trigger = { + has_character_flag = name_potapczyk + } + } + default = { + localization_key = rock_name_gemma + trigger = { + has_character_flag = name_gemma + } + } + } + } + setup_scope = { + root = { save_scope_as = text_target } + } + } + + option = { + name = pet_rock.0002.a + } + + after = { + remove_character_flag = is_naming_rock + remove_character_flag = name_cliff + remove_character_flag = name_sandy + remove_character_flag = name_rocky + remove_character_flag = name_crag + remove_character_flag = name_flint + remove_character_flag = name_gritty + remove_character_flag = name_rubble + remove_character_flag = name_tuff + remove_character_flag = name_roxanne + remove_character_flag = name_rosetta + remove_character_flag = name_chip + remove_character_flag = name_fluffy + remove_character_flag = name_sten + remove_character_flag = name_barney + remove_character_flag = name_ariadne + remove_character_flag = name_dwayne + remove_character_flag = name_potapczyk + remove_character_flag = name_gemma + + if = { + # We entered custom text into the pop up + limit = { NOT = { has_variable = story_cycle_rock_name } } + set_variable = { + name = story_cycle_rock_name + value = flag:custom + } + } + random_owned_story = { + limit = { story_type = story_cycle_pet_rock } + set_variable = { + name = story_cycle_rock_name + value = story_owner.var:story_cycle_rock_name + } + } + } +} + +#Chill with your rock and lose stress +#by Nick Meredith +pet_rock.0100 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0100.t + desc = pet_rock.0100.desc + theme = pet + left_portrait = { + character = root + animation = personality_content + } + override_background = { reference = relaxing_room } + cooldown = { years = 10 } + + trigger = { + is_available_healthy_adult = yes + stress > normal_baseline_stress + } + + option = { + name = pet_rock.0100.a + add_stress = medium_stress_loss + + ai_chance = { + base = 100 + } + } +} + +#Your rock wants a polish +#by Nick Meredith +pet_rock.0101 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0101.t + desc = pet_rock.0101.desc + theme = pet + left_portrait = { + character = root + animation = eyeroll + } + override_background = { reference = relaxing_room } + cooldown = { years = 10 } + + trigger = { + is_available = yes + stress > normal_baseline_stress + } + + option = { + name = pet_rock.0101.a + + remove_short_term_gold = 5 + + add_stress = medium_stress_loss + + ai_chance = { + base = 100 + } + } + + option = { + name = pet_rock.0101.b + + stress_impact = { + base = miniscule_stress_impact_gain + greedy = medium_stress_impact_loss + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } +} + +#Your rock wants a bath +#by Nick Meredith +pet_rock.0102 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0102.t + desc = pet_rock.0102.desc + theme = pet + left_portrait = { + character = root + animation = worry + } + override_background = { reference = relaxing_room } + cooldown = { years = 10 } + + trigger = { + is_available_healthy_adult = yes + stress > normal_baseline_stress + is_landed = yes + } + + option = { + name = pet_rock.0102.a + + add_prestige = miniscule_prestige_loss + + add_stress = medium_stress_loss + + ai_chance = { + base = 100 + } + } + + option = { + name = pet_rock.0102.b + + stress_impact = { + base = miniscule_stress_impact_gain + diligent = medium_stress_impact_loss + lazy = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } +} + +#You sneak your rock some mint +#by Nick Meredith +pet_rock.0103 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0103.t + desc = pet_rock.0103.desc + theme = pet + left_portrait = { + character = root + animation = worry + } + override_background = { reference = feast } + cooldown = { years = 10 } + + trigger = { + is_available = yes + stress > normal_baseline_stress + } + + option = { + name = pet_rock.0103.a + + add_prestige = minor_prestige_loss + + add_character_modifier = { + modifier = sated_stone_modifier + years = 10 + } + + stress_impact = { + base = miniscule_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = diligent + has_trait = ambitious + } + } + } + } + + option = { + name = pet_rock.0103.b + + stress_impact = { + base = miniscule_stress_impact_gain + diligent = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + } + + ai_chance = { + base = 50 + } + } +} + +#You lose your rock +#by Nick Meredith +pet_rock.0104 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0104.t + desc = pet_rock.0104.desc + theme = pet + left_portrait = { + character = root + animation = stress + } + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available = yes + } + + option = { + name = pet_rock.0104.a + + trigger = { + OR = { + has_trait = arbitrary + has_trait = fickle + } + } + + stress_impact = { + base = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { + name = pet_rock.0104.b + + duel = { + skill = intrigue + value = average_skill_rating + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = pet_rock.0104.b.success + send_interface_toast = { + title = pet_rock.0104.b.success + left_icon = root + + add_stress = minor_stress_loss + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = pet_rock.0104.b.failure + send_interface_toast = { + title = pet_rock.0104.b.failure + left_icon = root + + custom_tooltip = pet_rock.0104.b.failure.tt + + add_character_modifier = { + modifier = lost_rock_modifier + years = 15 + } + + random_owned_story = { + type = story_cycle_pet_rock + end_story = yes + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = pet_rock.0104.c + + random_owned_story = { + type = story_cycle_pet_rock + end_story = yes + } + + custom_tooltip = pet_rock.0104.c.tt + + stress_impact = { + base = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + } + } +} + +#You meet another rock owner +#by Nick Meredith +pet_rock.0105 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0105.t + desc = pet_rock.0105.desc + theme = pet + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:other_rock_owner + animation = ecstasy + } + cooldown = { years = 10 } + + trigger = { + is_available = yes + + any_courtier_or_guest = { + location = root.location + has_trait = eccentric + is_ai = yes + owns_story_of_type = story_cycle_pet_rock + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + location = root.location + has_trait = eccentric + is_ai = yes + owns_story_of_type = story_cycle_pet_rock + } + save_scope_as = other_rock_owner + } + } + + option = { + name = pet_rock.0105.a + + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arrogant + } + } + + progress_towards_rival_effect = { + REASON = rival_insulted_rock + CHARACTER = scope:other_rock_owner + OPINION = default_rival_opinion + } + + stress_impact = { + base = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 1 + } + } + } + + option = { + name = pet_rock.0105.b + + progress_towards_friend_effect = { + REASON = friend_rock_playdate + CHARACTER = scope:other_rock_owner + OPINION = default_friend_opinion + } + + stress_impact = { + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + gregarious = minor_stress_impact_loss + shy = medium_stress_impact_gain + compassionate = minor_stress_impact_loss + humble = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + } + } + + option = { + name = pet_rock.0105.c + + reverse_add_opinion = { + modifier = disappointed_opinion + target = scope:other_rock_owner + opinion = -10 + } + + stress_impact = { + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_vengefulness = -1 + } + } + } +} + +#Your rock falls off a desk +#by Nick Meredith +pet_rock.0106 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0106.t + desc = pet_rock.0106.desc + theme = pet + override_background = { reference = study } + left_portrait = { + character = root + animation = laugh + } + + trigger = { + is_available_healthy_adult = yes + is_landed = yes + } + + cooldown = { years = 15 } + + option = { # Add dopey cat modifier + name = pet_rock.0106.a + add_character_modifier = { + modifier = rock_dopey_modifier + years = 10 + } + + ai_chance = { + base = 100 + } + } +} + +#You make your pet rock a little house +#by Nick Meredith +pet_rock.0107 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0107.t + desc = pet_rock.0107.desc + theme = pet + left_portrait = { + character = root + animation = worry + } + override_background = { reference = courtyard } + + cooldown = { years = 10 } + + trigger = { + is_available_healthy_adult = yes + is_landed = yes + } + + # Rocky can stay with me in my bed! + option = { + name = pet_rock.0107.a + + trigger = { + has_trait = compassionate + } + + add_prestige = miniscule_prestige_loss + + add_character_modifier = { + modifier = bp2_bed_rock_modifier + years = 20 + } + + stress_impact = { + base = major_stress_impact_loss + lustful = medium_stress_impact_gain #You're cramping my style, Rocky! + lazy = miniscule_stress_impact_loss + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = -1 + } + } + } + + # I'll try making a little house + option = { + name = pet_rock.0107.b + + duel = { + skills = { learning prowess } + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = pet_rock.0107.b.success + send_interface_toast = { + title = pet_rock.0107.b.success + left_icon = root + + add_prestige = miniscule_prestige_gain + add_stress = medium_stress_loss + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = pet_rock.0107.b.failure + send_interface_toast = { + title = pet_rock.0107.b.failure + left_icon = root + + add_character_modifier = { + modifier = bp2_sore_thumb_modifier + years = 5 + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = 0.5 + } + } + } + + # Maybe he is an outside kinda rock? + option = { + name = pet_rock.0107.c + + stress_impact = { + content = minor_stress_impact_loss + lazy = minor_stress_impact_loss + greedy = miniscule_stress_impact_loss + ambitious = minor_stress_impact_gain + diligent = medium_stress_impact_gain + generous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_rationality = 0.5 + } + } + } +} + +#You have the option to ensconce your rock in your home +#by Nick Meredith +pet_rock.0108 = { + type = character_event + content_source = dlc_009 + title = pet_rock.0108.t + desc = { + desc = pet_rock.0108.desc + first_valid = { + triggered_desc = { + trigger = { has_government = landless_adventurer_government } + desc = pet_rock.0108.adventurer + } + desc = pet_rock.0108.landed + } + } + theme = pet + left_portrait = { + character = root + animation = thinking + } + override_background = { reference = courtyard } + + cooldown = { years = 10 } + + trigger = { + is_available_healthy_adult = yes + is_landed = yes + exists = root.capital_province + location = root.capital_province + } + + immediate = { + root.capital_province = { + save_scope_as = rock_house + } + } + + # I shall enshrine Rocky in my very home! + option = { + name = { + text = pet_rock.0108.a + trigger = { is_landless_adventurer = no } + } + name = { + text = pet_rock.0108.a.adventurer + trigger = { has_government = landless_adventurer_government } + } + + custom_tooltip = pet_rock.0108.a.tt + + scope:rock_house = { + add_province_modifier = { + modifier = bp2_solid_foundations_modifier + years = 30 + } + } + + random_owned_story = { + type = story_cycle_pet_rock + end_story = yes + } + + stress_impact = { + base = miniscule_stress_impact_gain #Sad to not have him with you at all times + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -0.5 + ai_rationality = 1 + } + } + } + + # Rocky can stay with me. + option = { + name = pet_rock.0108.b + + flavor = pet_rock.0108.b.tt + + add_character_modifier = { + modifier = bp2_valued_friendship_modifier + years = 30 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = 0.5 + } + } + } +} diff --git a/events/dlc/bp3/bp3_mapmaking.txt b/events/dlc/bp3/bp3_mapmaking.txt new file mode 100644 index 00000000..a956cfc0 --- /dev/null +++ b/events/dlc/bp3/bp3_mapmaking.txt @@ -0,0 +1,2793 @@ +namespace = mapmaking + +### Map Choice Event +mapmaking.0001 = { + type = character_event + content_source = dlc_015 + title = mapmaking.0001.t + desc = mapmaking.0001.desc + theme = realm + override_background = { reference = study } + + left_portrait = { + character = root + animation = writing + } + + + immediate = { + #We care about: visited capitals of foreign rulers + #Visited vassal capitals + #Visited domain provinces + #Visited points of interest + random_in_list = { + #Capitals are already tracked since they are points of interest + variable = visited_poi + limit = { + this = county.holder.top_liege.capital_province + county.holder.top_liege != root.top_liege + } + save_scope_as = foreign_capital_map_target + kingdom = { + save_scope_as = foreign_kingdom_map_target + } + } + random_in_list = { + #And now we save other types of Point of Interest + variable = visited_poi + limit = { #We prefer foreign points of interest + OR = { + 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 + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_natural_feature + } + empire != root.capital_province.empire + } + alternative_limit = { #We prefer foreign points of interest + OR = { + 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 + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_natural_feature + } + kingdom != root.capital_province.kingdom + } + alternative_limit = { + OR = { + 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 + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_natural_feature + } + duchy != root.capital_province.duchy + } + alternative_limit = { + OR = { + 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 + has_building_with_flag = travel_point_of_interest_diplomatic + has_building_with_flag = travel_point_of_interest_wonder + has_building_with_flag = travel_point_of_interest_natural_feature + } + } + save_scope_as = poi_map_target + } + random_in_list = { + variable = mapmaking_location_list + limit = { + county.holder = root + county != root.capital_province.county #We cannot in good conscience let someone map their own capital county with this decision + } + save_scope_as = visited_own_county + } + random_in_list = { + variable = mapmaking_location_list + limit = { + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + } + save_scope_as = visited_own_vassal + county.holder.primary_title = { + save_scope_as = visited_own_vassal_title + } + } + } + + option = { + name = mapmaking.0001.a + trigger = { + exists = scope:visited_own_county + } #Check for having visited own county + custom_tooltip = mapmaking.0001.a.tt + scope:visited_own_county = { save_scope_as = background_terrain_scope } + trigger_event = { + id = mapmaking.0010 + days = 5 + } + } + option = { + name = mapmaking.0001.b + trigger = { + exists = scope:visited_own_vassal + } #Check for having visited vassal capital county + custom_tooltip = mapmaking.0001.b.tt + scope:visited_own_vassal = { save_scope_as = background_terrain_scope } + trigger_event = { + id = mapmaking.0020 + days = 5 + } + } + option = { + name = mapmaking.0001.c + trigger = { + exists = scope:poi_map_target + trigger_if = { + limit = { exists = scope:visited_own_vassal } + scope:visited_own_vassal != scope:poi_map_target + } + } #Check for having visited special county + custom_tooltip = mapmaking.0001.c.tt + scope:poi_map_target = { save_scope_as = background_terrain_scope } + trigger_event = { + id = mapmaking.0030 + days = 5 + } + } + option = { + name = mapmaking.0001.d + trigger = { + exists = scope:foreign_capital_map_target + trigger_if = { + limit = { exists = scope:poi_map_target } + scope:foreign_capital_map_target != scope:poi_map_target + } + } #Check for having visited foreign capital county + custom_tooltip = mapmaking.0001.d.tt + scope:foreign_capital_map_target = { save_scope_as = background_terrain_scope } + trigger_event = { + id = mapmaking.0040 + days = 5 + } + } +} + +#Choice 1a - Own County +mapmaking.0010 = { + type = character_event + content_source = dlc_015 + title = mapmaking.0010.t + desc = mapmaking.0010.desc + theme = realm + override_background = { + trigger = { + exists = scope:background_market_scope + } + reference = market_scope + } + override_background = { + trigger = { + exists = scope:background_temple_scope + } + reference = temple_scope + } + override_background = { + trigger = { + exists = scope:courtyard_scope + } + reference = courtyard_scope + } + override_background = { + trigger = { + scope:background_terrain_scope = { + has_holding_type = tribal_holding + } + } + reference = market_tribal + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + scope:background_terrain_scope = { + switch = { + trigger = has_holding_type + city_holding = { + save_scope_as = background_market_scope + } + church_holding = { + holder = { + save_scope_as = background_temple_scope + } + } + castle_holding = { + save_scope_as = courtyard_scope + } + } + } + } + + #All options are stronger the more of your provinces you visited. + + option = { + name = mapmaking.0010.a + custom_tooltip = mapmaking.0010.a.tt + #Boosted by Stewardship + save_scope_value_as = { + name = own_domain_bonus + value = flag:growth + } + } + option = { + name = mapmaking.0010.b + custom_tooltip = mapmaking.0010.b.tt + #Boosted by Danger Track xp + save_scope_value_as = { + name = own_domain_bonus + value = flag:defensive + } + } + after = { + trigger_event = { + id = mapmaking.0004 + days = 5 + } + } +} + +#Choice 1b - Vassal Capital County +mapmaking.0020 = { + type = character_event + content_source = dlc_015 + title = mapmaking.0020.t + desc = mapmaking.0020.desc + theme = realm + override_background = { + reference = throne_room_scope + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + scope:background_terrain_scope.county.holder = { + save_scope_as = background_throne_room_scope + } + } + + #All options are stronger the more of your vassal capitals you have visited. + + + option = { + name = mapmaking.0020.a + custom_tooltip = mapmaking.0020.a.tt + save_scope_value_as = { + name = own_vassal_focus + value = flag:dread + } + #Danger XP increases the outcome of this option + } + option = { + name = mapmaking.0020.b + custom_tooltip = mapmaking.0020.b.tt + save_scope_value_as = { + name = own_vassal_focus + value = flag:opinion + } + #Diplomacy increases the outcome of this option + } + option = { + name = mapmaking.0020.c + custom_tooltip = mapmaking.0020.c.tt + save_scope_value_as = { + name = own_vassal_focus + value = flag:intrigue + } + #Intrigue increases the outcome of this option + } + after = { + trigger_event = { + id = mapmaking.0004 + days = 5 + } + } +} + +#Choice 1c - Point of Interest +mapmaking.0030 = { + type = character_event + content_source = dlc_015 + title = mapmaking.0030.t + desc = mapmaking.0030.desc + theme = realm + override_background = { + trigger = { + scope:background_terrain_scope.barony = { + is_holy_site = no + } + NOT = { scope:background_terrain_scope = province:4828 } + } + reference = terrain_scope + } + override_background = { + trigger = { + scope:background_terrain_scope.barony = { + is_holy_site = yes + } + } + reference = holy_site_scope + } + override_background = { + trigger = { + scope:background_terrain_scope = province:4828 #Baghdad + } + reference = ep2_holy_site_mena + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + option = { + name = mapmaking.0030.a + custom_tooltip = mapmaking.0030.a.tt + #Based on traveller danger XP + save_scope_value_as = { + name = poi_focus + value = flag:safety_speed + } + } + option = { + name = mapmaking.0030.b + custom_tooltip = mapmaking.0030.b.tt + #Based on what PoI type + #Better with Traveller XP + save_scope_value_as = { + name = poi_focus + value = flag:location_based + } + } + after = { + trigger_event = { + id = mapmaking.0004 + days = 5 + } + } +} + +#Choice 1d - Foreign Kingdom Capital County +mapmaking.0040 = { + type = character_event + content_source = dlc_015 + title = mapmaking.0040.t + desc = mapmaking.0040.desc + theme = realm + override_background = { + reference = throne_room_scope + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + scope:background_terrain_scope.county.holder = { + save_scope_as = background_throne_room_scope + } + mapmaking_mythical_lie_effect = yes + } + + option = { + name = mapmaking.0040.a + custom_tooltip = mapmaking.0040.a.tt + save_scope_value_as = { + name = kingdom_focus + value = flag:court_life + } + #Better with traveller XP and knowing Language and Court Language + } + option = { + name = mapmaking.0040.b + custom_tooltip = mapmaking.0040.b.tt + save_scope_value_as = { + name = kingdom_focus + value = flag:people_focus + } + #Better with Traveller Danger XP and Knowing Culture's Language + } + option = { + name = mapmaking.0040.c + custom_tooltip = mapmaking.0040.c.tt + trigger = { + has_trait = eccentric + } + save_scope_value_as = { + name = kingdom_focus + value = flag:mythical_creatures + } + #Better with Traveller XP and Levels of Fame + } + after = { + trigger_event = { + id = mapmaking.0004 + days = 5 + } + } +} + +#Choice 3 - Based on the Dangers of the Province itself +mapmaking.0004 = { + type = character_event + content_source = dlc_015 + title = { + first_valid = { + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:fighting + } + desc = mapmaking.0004.fighting.t + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:snow + } + desc = mapmaking.0004.snow.t + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:heat + } + desc = mapmaking.0004.heat.t + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:monsoon + } + desc = mapmaking.0004.monsoon.t + } + desc = mapmaking.0004.t + } + } + desc = { + desc = mapmaking.0004.desc.intro + #Potential Dangers + #May or may not exist, set in immediate + first_valid = { + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:fighting + } + desc = mapmaking.0004.fighting.desc + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:snow + } + desc = mapmaking.0004.snow.desc + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:heat + } + desc = mapmaking.0004.heat.desc + } + triggered_desc = { + trigger = { + scope:potential_danger ?= flag:monsoon + } + desc = mapmaking.0004.monsoon.desc + } + } + #Terrain - Always Present + #What to display is decided in immediate + first_valid = { + triggered_desc = { #Forest + trigger = { + scope:terrain_category = flag:deep_forest + } + desc = mapmaking.0004.terrain_deep_forests.desc + } + triggered_desc = { #Open + trigger = { + scope:terrain_category = flag:open_terrain + } + desc = mapmaking.0004.terrain_open.desc + } + triggered_desc = { #Open + trigger = { + scope:terrain_category = flag:steppes + } + desc = mapmaking.0004.terrain_steppes.desc + } + triggered_desc = { #Farmlands + trigger = { + scope:terrain_category = flag:farmlands + } + desc = mapmaking.0004.terrain_open_farmland.desc + } + triggered_desc = { #Jungle + trigger = { + scope:terrain_category = flag:jungle + } + desc = mapmaking.0004.terrain_jungle.desc + } + triggered_desc = { #Undulating + trigger = { + scope:terrain_category = flag:undulating + } + desc = mapmaking.0004.terrain_undulating.desc + } + triggered_desc = { #Desert + trigger = { + scope:terrain_category = flag:desert + } + desc = mapmaking.0004.terrain_desert.desc + } + triggered_desc = { #Wetlands + trigger = { + scope:terrain_category = flag:wetlands + } + desc = mapmaking.0004.terrain_wetlands.desc + } + desc = mapmaking.0004.desc.generic_fallback #Fallback if we somehow have no terrain + } + } + theme = realm + + override_background = { + trigger = { + scope:potential_danger ?= flag:fighting + } + reference = battlefield + } + override_background = { + trigger = { + scope:terrain_category = flag:farmlands + } + reference = farmland + } + override_background = { + reference = wilderness_scope #Fallback + } + + override_effect_2d = { + trigger = { + scope:potential_danger ?= flag:fighting + } + reference = flies #Fits the battlefield + } + widget = { + is_shown = { + scope:potential_danger ?= flag:cold + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + override_effect_2d = { + trigger = { + scope:potential_danger ?= flag:heat + } + reference = legend_glow #Sun + } + override_effect_2d = { + trigger = { + scope:potential_danger ?= flag:monsoon + } + reference = rain + } + override_effect_2d = { + trigger = { + scope:terrain_category = flag:wetlands + NOT = { exists = scope:potential_danger } + } + reference = fog #Make the Wetland look more menacing + } + + + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + scope:background_terrain_scope = { + save_scope_as = background_wilderness_scope + + #Extra potential dangers depending on location + random_list = { + 1 = { + trigger = { + OR = { + county = { county_control < 50 } + county.holder.top_liege = { + is_at_war = yes + } + county.holder = { + is_at_war = yes + } + } + } + save_scope_value_as = { + name = potential_danger + value = flag:fighting + } + } + 1 = { + trigger = { + OR = { + geographical_region = world_tibet + geographical_region = world_europe_north + geographical_region = world_steppe + terrain = taiga + } + } + save_scope_value_as = { + name = potential_danger + value = flag:cold + } + } + 1 = { + trigger = { + OR = { + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_africa + geographical_region = world_asia_southeast + is_desert_trigger = yes + terrain = jungle + } + } + save_scope_value_as = { + name = potential_danger + value = flag:heat + } + } + 1 = { + trigger = { + OR = { + geographical_region = world_india + geographical_region = world_burma + geographical_region = world_asia_southeast + } + } + save_scope_value_as = { + name = potential_danger + value = flag:monsoon + } + } + } + + #What terrain do we describe? + #This is done here instead of just as triggers in the description because we don't want to replicate the check again when generating the artifact: + if = { + limit = { + scope:background_wilderness_scope = { + OR = { + terrain = taiga + terrain = forest + } + } + } + save_scope_value_as = { + name = terrain_category + value = flag:deep_forest + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + OR = { + graphical_plains_trigger = yes + graphical_drylands_trigger = yes + } + } + } + save_scope_value_as = { + name = terrain_category + value = flag:open_terrain + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + terrain = farmlands + } + } + save_scope_value_as = { + name = terrain_category + value = flag:farmlands + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + graphical_wilderness_jungle_trigger = yes + } + } + save_scope_value_as = { + name = terrain_category + value = flag:jungle + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + OR = { + graphical_hills_trigger = yes + graphical_wilderness_mountains_trigger = yes + } + } + } + save_scope_value_as = { + name = terrain_category + value = flag:undulating + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + graphical_wilderness_desert_trigger = yes + } + } + save_scope_value_as = { + name = terrain_category + value = flag:desert + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + graphical_wilderness_wetlands_trigger = yes + } + } + save_scope_value_as = { + name = terrain_category + value = flag:wetlands + } + } + else_if = { + limit = { + scope:background_wilderness_scope = { + graphical_wilderness_steppe_trigger = yes + } + } + save_scope_value_as = { + name = terrain_category + value = flag:steppes + } + } + } + } + + option = { + name = mapmaking.0004.a #Terrain, this can always be picked + custom_tooltip = mapmaking.0004.a.tt + save_scope_value_as = { + name = danger_type + value = flag:terrain + } + } + option = { + name = mapmaking.0004.b + custom_tooltip = mapmaking.0004.b.tt + trigger = { + scope:potential_danger ?= flag:fighting + } + save_scope_value_as = { + name = danger_type + value = flag:fighting + } + } + option = { + name = mapmaking.0004.c + custom_tooltip = mapmaking.0004.c.tt + trigger = { + scope:potential_danger ?= flag:cold + } + save_scope_value_as = { + name = danger_type + value = flag:cold + } + } + option = { + name = mapmaking.0004.d + custom_tooltip = mapmaking.0004.d.tt + trigger = { + scope:potential_danger ?= flag:heat + } + save_scope_value_as = { + name = danger_type + value = flag:heat + } + } + option = { + name = mapmaking.0004.e + custom_tooltip = mapmaking.0004.e.tt + trigger = { + scope:potential_danger ?= flag:monsoon + } + save_scope_value_as = { + name = danger_type + value = flag:monsoon + } + } + after = { + trigger_event = { + id = mapmaking.1000 + days = 5 + } + } +} + +# Finish Event - What map did we get out of this? +mapmaking.1000 = { + type = character_event + content_source = dlc_015 + title = mapmaking.1000.t + desc = mapmaking.1000.desc + theme = realm + + override_background = { + trigger = { + scope:background_terrain_scope.barony = { + is_holy_site = no + } + NOT = { scope:background_terrain_scope = province:4828 } + } + reference = terrain_scope + } + override_background = { + trigger = { + scope:background_terrain_scope.barony = { + is_holy_site = yes + } + } + reference = holy_site_scope + } + override_background = { + trigger = { + scope:background_terrain_scope = province:4828 #Baghdad + } + reference = ep2_holy_site_mena + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + artifact = { # To display the artifact in the event-window + trigger = { exists = scope:newly_created_artifact } + target = scope:newly_created_artifact + position = lower_right_portrait + } + + immediate = { + save_scope_as = author + #First we make the artifact, then we assign effects and descriptions. + hidden_effect = { + if = { + limit = { + artifacts_use_indian_books_trigger = yes + } + create_artifact = { + name = map_artifact_name + type = journal + creator = root + description = map_artifact_beginning_far_eastern + visuals = indian_book + modifier = character_travel_speed_1 + save_scope_as = newly_created_artifact + wealth = 50 + quality = 50 + } + } + else = { + create_artifact = { + name = map_artifact_name + type = journal + creator = root + description = map_artifact_beginning_western + visuals = book + modifier = character_travel_speed_1 + save_scope_as = newly_created_artifact + wealth = 50 + quality = 50 + } + } + + hidden_effect_new_object = { + + if = { + limit = { + scope:background_terrain_scope.county.holder.top_liege = root.top_liege + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_beginning_internal + } + } + else = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_beginning_external + } + } + + #Dangers of Province: + if = { #Terrain + #Each terrain gives 1 combat modifier and 1 travel danger modifier + limit = { + scope:danger_type = flag:terrain + } + switch = { + trigger = scope:terrain_category + flag:deep_forest = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_forests + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + forest = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_forest_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_forest_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_forest_advantage_3_modifier + } + } + } + } + taiga = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_taiga_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_taiga_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_taiga_advantage_3_modifier + } + } + } + } + } + } + } + flag:open_terrain = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_open + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + drylands = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_drylands_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_drylands_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_drylands_advantage_3_modifier + } + } + } + } + plains = { + scope:newly_created_artifact = { + random_list = { + 65 = { + add_artifact_modifier = artifact_plains_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_plains_advantage_3_modifier + } + } + } + } + } + } + } + flag:farmlands = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_farmlands + + random_list = { + 65 = { + add_artifact_modifier = artifact_farmlands_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_farmlands_advantage_3_modifier + } + } + } + } + flag:jungle = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_jungle + add_artifact_modifier = artifact_jungle_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_jungle_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_jungle_advantage_3_modifier + } + } + } + } + flag:undulating = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_undulating + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + hills = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_hills_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_hills_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_hills_advantage_3_modifier + } + } + } + } + mountains = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_mountains_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_mountains_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_mountains_advantage_3_modifier + } + } + } + } + } + } + } + flag:desert = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_desert + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + desert = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_desert_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_desert_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_desert_advantage_3_modifier + } + } + } + } + desert_mountains = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_desert_mountains_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_desert_mountains_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_desert_mountains_advantage_3_modifier + } + } + } + } + oasis = { #Too rare so we give desert + scope:newly_created_artifact = { + add_artifact_modifier = artifact_desert_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_desert_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_desert_advantage_3_modifier + } + } + } + } + } + } + } + flag:wetlands = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_wetlands + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + floodplains = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_floodplains_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_floodplains_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_floodplains_advantage_3_modifier + } + } + } + } + wetlands = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_wetlands_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_wetlands_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_wetlands_advantage_3_modifier + } + } + } + } + } + } + } + flag:steppes = { + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_steppes + add_artifact_modifier = artifact_steppe_danger_travel_modifier + random_list = { + 65 = { + add_artifact_modifier = artifact_steppe_advantage_2_modifier + } + 35 = { + add_artifact_modifier = artifact_steppe_advantage_3_modifier + } + } + } + } + } + } + if = { #Fighting + limit = { + scope:danger_type = flag:fighting + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_fighting + add_artifact_modifier = artifact_travel_safety_2 + random_list = { + 25 = { add_artifact_modifier = artifact_controlled_province_advantage_3_modifier } + 25 = { add_artifact_modifier = artifact_enemy_hard_casualty_modifier_1_modifier } + 50 = { add_artifact_modifier =character_travel_speed_1 } + } + } + } + if = { #Cold + limit = { + scope:danger_type = flag:cold + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_snowstorms + add_artifact_modifier = artifact_winter_movement_speed + add_artifact_modifier = artifact_winter_advantage + } + } + if = { #Heat + limit = { + scope:danger_type = flag:heat + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_heat + #Multiple Travel Danger Modifiers: + add_artifact_modifier = artifact_jungle_danger_travel_modifier + add_artifact_modifier = artifact_desert_danger_travel_modifier + add_artifact_modifier = artifact_drylands_danger_travel_modifier + add_artifact_modifier = artifact_desert_mountains_danger_travel_modifier + } + } + if = { #Monsoon + limit = { + scope:danger_type = flag:monsoon + + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_monsoons + #Multiple Travel Danger Modifiers: + add_artifact_modifier = artifact_jungle_danger_travel_modifier + add_artifact_modifier = artifact_wetlands_danger_travel_modifier + add_artifact_modifier = artifact_desert_mountains_danger_travel_modifier + } + } + + #End Danger + scope:newly_created_artifact = { + set_artifact_description = map_artifact_danger_type_end + + } + + #Purpose related bonuses + #These max out around what would be assigned to a masterwork artifact in artifact_creation_effects + + #Domain + if = { #Growth + limit = { + scope:own_domain_bonus ?= flag:growth + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_domain + set_artifact_description = map_artifact_domain_purpose_growth + } + random_list = { + 50 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder = root + county != root.capital_province.county + count < 4 + } + } + modifier = { #Lowered by Stewardship + stewardship > 2 + add = { + value = stewardship + multiply = -1 + } + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + drylands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_drylands_development_growth_1 } + } + desert = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_development_growth_1 } + } + desert_mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_mountains_development_growth_1 } + } + mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_mountains_development_growth_1 } + } + hills = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_hills_development_growth_1 } + } + plains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_plains_development_growth_1 } + } + forest = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_forest_development_growth_1 } + } + taiga = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_taiga_development_growth_1 } + } + oasis = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_oasis_development_growth_1 } + } + farmlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_farmlands_development_growth_1 } + } + floodplains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_floodplains_development_growth_1 } + } + wetlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_wetlands_development_growth_1 } + } + } + } + } + 35 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder = root + county != root.capital_province.county + count < 7 + } + } + modifier = { #Upped by Stewardship + stewardship > 2 + add = { + value = stewardship + divide = 2 + } + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + drylands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_drylands_development_growth_2 } + } + desert = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_development_growth_2 } + } + desert_mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_mountains_development_growth_2 } + } + hills = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_hills_development_growth_2 } + } + mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_mountains_development_growth_2 } + } + plains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_plains_development_growth_2 } + } + forest = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_forest_development_growth_2 } + } + taiga = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_taiga_development_growth_2 } + } + oasis = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_oasis_development_growth_2 } + } + farmlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_farmlands_development_growth_2 } + } + floodplains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_floodplains_development_growth_2 } + } + wetlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_wetlands_development_growth_2 } + } + } + } + } + 15 = { + modifier = { #Upped by Stewardship + stewardship > 2 + add = { + value = stewardship + } + } + scope:background_terrain_scope = { + switch = { + trigger = terrain + drylands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_drylands_development_growth_3 } + } + desert = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_development_growth_3 } + } + desert_mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_desert_mountains_development_growth_3 } + } + hills = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_hills_development_growth_3 } + } + mountains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_mountains_development_growth_3 } + } + plains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_plains_development_growth_3 } + } + forest = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_forest_development_growth_3 } + } + taiga = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_taiga_development_growth_3 } + } + oasis = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_oasis_development_growth_3 } + } + farmlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_farmlands_development_growth_3 } + } + floodplains = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_floodplains_development_growth_3 } + } + wetlands = { + scope:newly_created_artifact = { add_artifact_modifier = artifact_wetlands_development_growth_3 } + } + } + } + } + } + } + if = { #Defensive + limit = { + scope:own_domain_bonus ?= flag:defensive + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_domain + set_artifact_description = map_artifact_domain_purpose_defensive + } + random_list = { + 50 = { + trigger={ + any_in_list = { + variable = mapmaking_location_list + county.holder = root + county != root.capital_province.county + count < 4 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 100 + } + add = -10 + } + modifier = { + martial > 5 + add = { + value = martial + multiply = -1 + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_controlled_province_advantage_2_modifier + } + 30 = { + add_artifact_modifier = artifact_men_at_arms_maintenance_2_modifier + } + 20 = { + add_artifact_modifier = artifact_controlled_province_advantage_3_modifier + } + 20 = { + add_artifact_modifier = artifact_men_at_arms_maintenance_3_modifier + } + } + } + } + 35 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder = root + county != root.capital_province.county + count < 7 + } + } + modifier = { #Upped by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = 10 + } + modifier = { + martial > 1 + add = { + value = martial + divide = 2 + } + } + scope:newly_created_artifact = { + random_list = { + 40 = { + add_artifact_modifier = artifact_controlled_province_advantage_4_modifier + } + 40 = { + add_artifact_modifier = artifact_men_at_arms_maintenance_4_modifier + } + 10 = { + add_artifact_modifier = artifact_controlled_province_advantage_5_modifier + } + 10 = { + add_artifact_modifier = artifact_men_at_arms_maintenance_5_modifier + } + } + } + } + 15 = { + modifier = { #Upped by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 75 + } + add = 15 + } + modifier = { + add = { + value = martial + } + } + scope:newly_created_artifact = { + random_list = { + 50 = { + add_artifact_modifier = artifact_controlled_province_advantage_5_modifier + } + 50 = { + add_artifact_modifier = artifact_men_at_arms_maintenance_5_modifier + } + } + } + } + } + } + + #Vassals + if = { #Dread + limit = { + scope:own_vassal_focus ?= flag:dread + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_vassal_dread + set_artifact_description = map_artifact_vassal_purpose_dread + } + + random_list = { + 50 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 100 + } + add = -10 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_dread_gain_mult_1_modifier + } + } + 35 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Upped by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = 10 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_dread_gain_mult_2_modifier + } + } + 15 = { + modifier = { #Upped by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 75 + } + add = 15 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_dread_gain_mult_3_modifier + } + } + } + } + if = { #Opinion + limit = { + scope:own_vassal_focus ?= flag:opinion + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_vassal_opinion + set_artifact_description =map_artifact_vassal_purpose_opinion + } + random_list = { + 50 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Lowered by Diplomacy + diplomacy > 1 + add = { + value = diplomacy + multiply = -1 + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_happy_powerful_vassal_tax_contribution_mult_1_modifier + } + 15 = { + add_artifact_modifier = artifact_happy_powerful_vassal_tax_contribution_mult_2_modifier + } + } + } + } + 35 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Upped by Diplomacy + diplomacy > 2 + add = { + value = diplomacy + divide = 2 + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_happy_powerful_vassal_tax_contribution_mult_3_modifier + } + 30 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_happy_powerful_vassal_add_1_modifier + } + 15 = { + add_artifact_modifier = artifact_happy_powerful_vassal_tax_contribution_mult_4_modifier + } + 15 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_happy_powerful_vassal_add_2_modifier + } + } + } + } + 15 = { + modifier = { #Upped by Diplomacy + diplomacy > 2 + add = { + value = diplomacy + } + } + scope:newly_created_artifact = { + random_list = { + 50 = { + add_artifact_modifier = artifact_happy_powerful_vassal_tax_contribution_mult_4_modifier + } + 50 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_happy_powerful_vassal_add_2_modifier + } + } + } + } + } + } + if = { #Intrigue + limit = { + scope:own_vassal_focus ?= flag:intrigue + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_vassal_intrigue + set_artifact_description =map_artifact_vassal_purpose_intrigue + } + random_list = { + 50 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Lowered by Intrigue + intrigue > 5 + add = { + value = intrigue + multiply = -1 + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_2_modifier + } + 30 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_2_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_3_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_3_modifier + } + } + } + } + 35 = { + trigger = { + any_in_list = { + variable = mapmaking_location_list + county.holder != root + county.holder.liege = root + this = county.holder.capital_province + county.holder = { + is_powerful_vassal_of = root + } + count < 4 + } + } + modifier = { #Upped by Intrigue + intrigue > 2 + add = { + value = intrigue + divide = 2 + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_4_modifier + } + 30 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_4_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_5_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_5_modifier + } + } + } + } + 15 = { + modifier = { #Upped by Intrigue + intrigue > 2 + add = { + value = intrigue + } + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_5_modifier + } + 30 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_5_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_6_modifier + } + 15 = { + add_artifact_modifier = artifact_owned_scheme_secrecy_add_6_modifier + } + } + } + } + } + } + + #Point of Interest + if = { + limit = { + scope:poi_focus ?= flag:safety_speed + } + scope:newly_created_artifact = { + set_artifact_description = map_artifact_poi_travel + } + random_list = { + 50 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 70 + } + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = -10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 40 + } + add = -5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 30 + } + add = -5 + } + scope:newly_created_artifact = { + add_artifact_modifier = character_travel_speed_1 + add_artifact_modifier = artifact_travel_safety_1 + } + } + 35 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 100 + } + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 70 + } + add = -10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = -5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 40 + } + add = -5 + } + scope:newly_created_artifact = { + random_list = { + 50 = { + add_artifact_modifier = character_travel_speed_1 + add_artifact_modifier = artifact_travel_safety_2 + } + 50 = { + add_artifact_modifier = character_travel_speed_2 + add_artifact_modifier = artifact_travel_safety_1 + } + } + } + } + 15 = { + modifier = { #Increased by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 80 + } + add = 10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 65 + } + add = 5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = 5 + } + scope:newly_created_artifact = { + add_artifact_modifier = character_travel_speed_2 + add_artifact_modifier = artifact_travel_safety_2 + } + } + } + } + if = { #PoI Specific Outcome + limit = { + scope:poi_focus ?= flag:location_based + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_poi + set_artifact_description =map_artifact_poi_purpose + } + random_list = { + 50 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 70 + } + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 30 + } + add = -5 + } + #Scripted effect to choose modifier based on poi type + scope:background_terrain_scope = { + switch = { + trigger = has_travel_point_of_interest + poi_capitals = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_1_modifier + } + } + poi_special_buildings_martial = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_martial_lifestyle_xp_1_modifier + } + } + poi_special_buildings_learning = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_learning_lifestyle_xp_1_modifier + } + } + poi_special_buildings_religious = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_piety_1_modifier + } + } + poi_special_buildings_diplomatic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_1_modifier + } + } + poi_grand_city = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_1_modifier + } + } + poi_special_buildings_wonder = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_1_modifier + } + } + poi_special_buildings_economic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_1_modifier + } + } + poi_mausoleum_at_halicarnassus = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_1_modifier + } + } + poi_lighthouse_of_alexandria = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_1_modifier + } + } + poi_natural_feature = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_hunt_lifestyle_xp_gain_mult_modifier + } + } + } + } + } + 35 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 100 + } + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 70 + } + add = -10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + scope:background_terrain_scope = { + switch = { + trigger = has_travel_point_of_interest + poi_capitals = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_2_modifier + } + } + poi_special_buildings_martial = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_martial_lifestyle_xp_2_modifier + } + } + poi_special_buildings_learning = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_learning_lifestyle_xp_2_modifier + } + } + poi_special_buildings_religious = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_piety_2_modifier + } + } + poi_special_buildings_diplomatic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_2_modifier + } + } + poi_grand_city = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_2_modifier + } + } + poi_special_buildings_wonder = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_2_modifier + } + } + poi_special_buildings_economic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_2_modifier + } + } + poi_mausoleum_at_halicarnassus = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_2_modifier + } + } + poi_lighthouse_of_alexandria = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_2_modifier + } + } + poi_natural_feature = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_hunt_lifestyle_xp_gain_mult_modifier + } + } + } + } + } + 15 = { + modifier = { #Increased by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 80 + } + add = 10 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 65 + } + add = 5 + } + modifier = { #Lowered by Travel Danger XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = 5 + } + scope:background_terrain_scope = { + switch = { + trigger = has_travel_point_of_interest + poi_capitals = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_3_modifier + } + } + poi_special_buildings_martial = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_martial_lifestyle_xp_3_modifier + } + } + poi_special_buildings_learning = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_learning_lifestyle_xp_3_modifier + } + } + poi_special_buildings_religious = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_piety_3_modifier + } + } + poi_special_buildings_diplomatic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_diplomacy_lifestyle_xp_3_modifier + } + } + poi_grand_city = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_3_modifier + } + } + poi_special_buildings_wonder = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_3_modifier + } + } + poi_special_buildings_economic = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_3_modifier + } + } + poi_mausoleum_at_halicarnassus = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_3_modifier + } + } + poi_lighthouse_of_alexandria = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_stewardship_lifestyle_xp_3_modifier + } + } + poi_natural_feature = { + scope:newly_created_artifact = { + add_artifact_modifier = artifact_hunt_lifestyle_xp_gain_mult_modifier + } + } + } + } + } + } + } + + #Foreign Kingdom: + if = { #Court Life + limit = { + scope:kingdom_focus ?= flag:court_life + } + scope:newly_created_artifact = { + #Uses fallback name + set_artifact_description = map_artifact_foreign_purpose_court + } + random_list = { + 50 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 70 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 30 + } + add = -5 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + trigger = { + root = { has_royal_court = no } + } + add_artifact_modifier = artifact_monthly_prestige_1_modifier + } + 30 = { + trigger = { + root = { has_royal_court = yes } + } + add_artifact_modifier = artifact_court_grandeur_baseline_add_1_modifier + } + 30 = { + add_artifact_modifier = artifact_courtly_vassal_opinion_2_modifier + } + 15 = { + add_artifact_modifier = artifact_courtly_tax_contribution_mult_2_modifier + } + 15 = { + trigger = { + root = { has_royal_court = no } + } + add_artifact_modifier = artifact_monthly_prestige_2_modifier + } + 15 = { + trigger = { + root = { has_royal_court = yes } + } + add_artifact_modifier = artifact_court_grandeur_baseline_add_2_modifier + } + } + } + } + 35 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 100 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 70 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + modifier = { #Increased by knowing their language + knows_language_of_culture = scope:background_terrain_scope.culture + add = 5 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + trigger = { + root = { + has_royal_court = no + } + } + add_artifact_modifier = artifact_monthly_prestige_2_modifier + } + 30 = { + trigger = { + root = { + has_royal_court = yes + } + } + add_artifact_modifier = artifact_court_grandeur_baseline_add_2_modifier + } + 30 = { + add_artifact_modifier = artifact_courtly_vassal_opinion_3_modifier + } + 15 = { + add_artifact_modifier = artifact_courtly_tax_contribution_mult_3_modifier + } + 15 = { + trigger = { + root = { + has_royal_court = no + } + } + add_artifact_modifier = artifact_monthly_prestige_3_modifier + } + 15 = { + trigger = { + root = { + has_royal_court = yes + } + } + add_artifact_modifier = artifact_court_grandeur_baseline_add_3_modifier + } + } + } + } + 15 = { + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 80 + } + add = 10 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 65 + } + add = 5 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = 5 + } + modifier = { #Increased by knowing their language + knows_language_of_culture = scope:background_terrain_scope.culture + add = 10 + } + modifier = { #Increased by knowing their court language + knows_court_language_of = scope:background_terrain_scope.barony.holder + add = 5 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + trigger = { + root = { has_royal_court = no } + } + add_artifact_modifier = artifact_monthly_prestige_3_modifier + } + 30 = { + trigger = { + root = { has_royal_court = yes } + } + add_artifact_modifier = artifact_court_grandeur_baseline_add_3_modifier + } + 30 = { + add_artifact_modifier = artifact_courtly_vassal_opinion_4_modifier + } + 15 = { + add_artifact_modifier = artifact_courtly_tax_contribution_mult_3_modifier + } + 15 = { + trigger = { + root = { has_royal_court = no } + } + add_artifact_modifier = artifact_monthly_prestige_4_modifier + } + 15 = { + trigger = { + root = { has_royal_court = yes } + } + add_artifact_modifier = artifact_legitimacy_gain_mult_4_modifier + } + } + } + } + } + } + if = { #People and Customs + limit = { + scope:kingdom_focus ?= flag:people_focus + } + scope:newly_created_artifact = { + #Uses Fallback Name + set_artifact_description = map_artifact_foreign_purpose_people + } + random_list = { + 50 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 70 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 40 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 30 + } + add = -5 + } + scope:newly_created_artifact = { + random_list = { + 40 = { + add_artifact_modifier = artifact_independent_ruler_opinion_1_modifier + } + 40 = { + add_artifact_modifier = artifact_learn_language_scheme_phase_duration_add_1_modifier + } + 5 = { + add_artifact_modifier = artifact_diplomacy_1_modifier + } + 15 = { + add_artifact_modifier = artifact_independent_ruler_opinion_2_modifier + } + } + } + } + 35 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value <= 100 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 70 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 40 + } + add = -5 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_independent_ruler_opinion_2_modifier + } + 30 = { + add_artifact_modifier = artifact_learn_language_scheme_phase_duration_add_2_modifier + } + 5 = { + add_artifact_modifier = artifact_diplomacy_2_modifier + } + 15 = { + add_artifact_modifier = artifact_independent_ruler_opinion_3_modifier + } + } + } + } + 15 = { + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 80 + } + add = 10 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 65 + } + add = 5 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + add = 5 + } + modifier = { #Increased by knowing their language + knows_language_of_culture = scope:background_terrain_scope.culture + add = 10 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_independent_ruler_opinion_3_modifier + } + 30 = { + add_artifact_modifier = artifact_diplomacy_3_modifier + } + 20 = { + add_artifact_modifier = artifact_learn_language_scheme_phase_duration_add_2_modifier + } + 20 = { + add_artifact_modifier = artifact_independent_ruler_opinion_4_modifier + } + } + } + } + } + } + if = { #Mythical Beasts + limit = { + scope:kingdom_focus ?= flag:mythical_creatures + } + scope:newly_created_artifact = { + set_artifact_name = map_artifact_name_mythical + set_artifact_description = map_artifact_foreign_purpose_mythical + } + random_list = { + 50 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 70 + } + prestige_level < high_prestige_level + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 30 + } + add = -5 + } + scope:newly_created_artifact = { + random_list = { + 30 = { + add_artifact_modifier = artifact_monthly_prestige_add_1_modifier + } + 30 = { + add_artifact_modifier = artifact_dynasty_opinion_2_modifier + } + 15 = { + add_artifact_modifier = artifact_monthly_prestige_add_2_modifier + } + 15 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_knight_add_1_modifier + } + } + } + } + 35 = { + trigger = { + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value <= 100 + } + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 70 + } + add = -10 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = -5 + } + modifier = { #Lowered by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 40 + } + add = -5 + } + modifier = { #Increased by Fame + prestige_level > 1 + add = { + value = prestige_level + multiply = 2 + } + } + scope:newly_created_artifact = { + random_list = { + 40 = { + add_artifact_modifier = artifact_monthly_prestige_add_2_modifier + } + 40 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_knight_add_1_modifier + } + 20 = { + add_artifact_modifier = artifact_monthly_prestige_add_3_modifier + } + } + } + } + 15 = { + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 80 + } + add = 10 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 65 + } + add = 5 + } + modifier = { #Increased by Travel XP + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + add = 5 + } + modifier = { #Increased by Fame + prestige_level > 1 + add = { + value = prestige_level + multiply = 2 + } + } + scope:newly_created_artifact = { + random_list = { + 60 = { + add_artifact_modifier = artifact_monthly_prestige_add_3_modifier + } + 20 = { + add_artifact_modifier = artifact_monthly_prestige_gain_per_knight_add_2_modifier + } + 20 = { + add_artifact_modifier = artifact_monthly_prestige_add_4_modifier + } + } + } + } + } + + } + } + } + if = { + limit = { + has_any_nickname = no + } + random_list = { + 80 = {} #Nothing Happens + 20 = { + give_nickname = nick_the_mapmaker + } + } + } + } + + option = { + name = mapmaking.1000.a + stress_impact = { + lifestyle_traveler = major_stress_loss #In practice this is base as you will always have this + } + } +} diff --git a/events/dlc/bp3/bp3_roaming_events.txt b/events/dlc/bp3/bp3_roaming_events.txt new file mode 100644 index 00000000..cd6b49a5 --- /dev/null +++ b/events/dlc/bp3/bp3_roaming_events.txt @@ -0,0 +1,2828 @@ +namespace = bp3_roaming + +### Setup Events +# Arrival Event +bp3_roaming.0005 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0005.t + desc = bp3_roaming.0005.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + triggered_animation = { + trigger = { + location = { + roaming_activity_monsoon_trigger = yes + } + } + animation = scheme + } + triggered_animation = { + trigger = { + location = { + roaming_activity_winter_trigger = yes + terrain = mountains + } + } + animation = shiver + } + animation = survey_staff + } + + right_portrait = { + trigger = { + exists = scope:special_guest + } + character = scope:special_guest + triggered_animation = { + trigger = { + location = { + roaming_activity_monsoon_trigger = yes + } + } + animation = scheme + } + triggered_animation = { + trigger = { + location = { + roaming_activity_winter_trigger = yes + terrain = mountains + } + } + animation = shiver + } + animation = happiness + } + + override_effect_2d = { + reference = rain + trigger = { + location = { + roaming_activity_monsoon_trigger = yes + } + } + } + + widgets = { + widget = { + is_shown = { + location = { + roaming_activity_winter_trigger = yes + NOT = { terrain = mountains } + } + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + widget = { + is_shown = { + location = { + roaming_activity_winter_trigger = yes + terrain = mountains + } + } + gui = "event_window_widget_vfx_snowstorm" + container = "foreground_shader_vfx_container" + } + } + + override_effect_2d = { # Fallback, will be chosen if the others weren't + trigger = { + scope:province = { + roaming_activity_monsoon_trigger = no + roaming_activity_winter_trigger = no + } + } + reference = legend_glow + } + + immediate = { + save_scope_as = root_scope + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_impact_loss } + hidden_effect = { + involved_activity = { + add_activity_log_entry = { + key = roaming_start_of_the_journey_key + tags = { activity_log } + character = root + root = { + show_as_tooltip = { + stress_impact = { + base = miniscule_stress_impact_loss + } + } + } + } + } + } + } + + option = { + name = bp3_roaming.0005.a + trigger = { + location = { + OR = { + terrain = forest + terrain = farmlands + terrain = drylands + terrain = oasis + terrain = wetlands + terrain = taiga + terrain = floodplains + } + has_winter_trigger = no + NAND = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_impact_loss } + } + + option = { + name = bp3_roaming.0005.b + trigger = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = plains + terrain = desert_mountains + terrain = desert + terrain = jungle + terrain = steppe + } + has_winter_trigger = no + NAND = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_impact_loss } + } + + option = { + name = bp3_roaming.0005.c + trigger = { + location = { + has_winter_trigger = yes + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_impact_loss } + } + + option = { + name = bp3_roaming.0005.d + trigger = { + location = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + stress_impact = { + base = miniscule_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_impact_loss } + } +} + +# Ending Event +bp3_roaming.0010 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0010.t + desc = bp3_roaming.0010.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = scheme + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + option = { + name = bp3_roaming.0010.a + stress_impact = { + base = roaming_outro_stress_loss_value + athletic = medium_stress_impact_loss + lifestyle_traveler = minor_stress_impact_loss + } + if = { + limit = { + has_trait = depressed_1 + has_character_flag = roaming_very_strong_stress_loss + } + remove_trait = depressed_1 + } + } + + after = { + remove_character_flag = roaming_weak_stress_loss + remove_character_flag = roaming_medium_stress_loss + remove_character_flag = roaming_strong_stress_loss + remove_character_flag = roaming_very_strong_stress_loss + } +} + +### Mid-Activity Events +# The View (Mountains/Hills/Desert Mountains) +bp3_roaming.0050 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0050.t + desc = bp3_roaming.0050.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = survey_staff + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + trigger = { + location = { + OR = { + terrain = mountains + terrain = hills + terrain = desert_mountains + } + } + } + + option = { + name = bp3_roaming.0050.a + roaming_progress_events_reward_effect = { LOG_KEY = breathtaking_view_key } + } +} + +# The Oasis (Oasis/Desert/Drylands) +bp3_roaming.0060 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0060.t + desc = bp3_roaming.0060.desc + theme = roaming_activity + + override_background = { reference = ce1_legendary_oasis } + + left_portrait = { + character = scope:host + animation = survey_staff + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + trigger = { + location = { + OR = { + terrain = oasis + terrain = desert + terrain = drylands + } + } + } + + option = { + name = bp3_roaming.0060.a + roaming_progress_events_reward_effect = { LOG_KEY = the_oasis_key } + } +} + +# The Path's End (Forest/Taiga/Jungle) +bp3_roaming.0070 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0070.t + desc = { + desc = bp3_roaming.0070.desc.intro + first_valid = { + triggered_desc = { + trigger = { + has_government = landless_adventurer_government + } + desc = bp3_roaming.0070.desc.landless + } + desc = bp3_roaming.0070.desc.landed + } + } + theme = roaming_activity + + override_background = { + trigger = { + location = { terrain = jungle } + } + reference = wilderness_jungle + } + + override_background = { + trigger = { + location = { has_winter_trigger = no } + } + reference = wilderness_forest_pine + } + + left_portrait = { + character = scope:host + animation = scheme + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + trigger = { + location = { + OR = { + terrain = forest + terrain = taiga + terrain = jungle + } + } + } + + option = { + name = bp3_roaming.0070.a + roaming_progress_events_reward_effect = { LOG_KEY = paths_end_key } + } +} + +# The Ocean Scent (Fallback for ocean adjacent provinces) +bp3_roaming.0080 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0080.t + desc = bp3_roaming.0080.desc + theme = roaming_activity + + override_background = { reference = bp3_coast } + + left_portrait = { + character = scope:host + animation = survey_staff + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + trigger = { + location = { + is_coastal = yes + } + } + + option = { + name = bp3_roaming.0080.a + roaming_progress_events_reward_effect = { LOG_KEY = ocean_scent_key } + } +} + +# The River at Journey's End (Fallback for terrain that hasn't been covered) +bp3_roaming.0090 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0090.t + desc = bp3_roaming.0090.desc + theme = roaming_activity + + override_background = { reference = ce1_legendary_spring } + + left_portrait = { + character = scope:host + animation = survey_staff + } + + right_portrait = { + character = scope:special_guest + animation = idle + trigger = { + exists = scope:special_guest + } + } + + trigger = { + location = { + is_coastal = no + NOR = { + terrain = mountains + terrain = hills + terrain = desert_mountains + terrain = oasis + terrain = desert + terrain = drylands + terrain = forest + terrain = taiga + terrain = jungle + } + } + } + + option = { + name = bp3_roaming.0090.a + roaming_progress_events_reward_effect = { LOG_KEY = river_journeys_end_key } + } +} + +### Random Events +# Meeting a Stranger +bp3_roaming.0100 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0100.t + desc = { + desc = bp3_roaming.0100.desc + triggered_desc = { + desc = bp3_roaming.0100.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = survey_staff + } + + center_portrait = { + character = scope:special_guest + animation = happiness + } + + right_portrait = { + character = scope:ancient_traveler + animation = scheme + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_mystic_intent + } + factor = 1.5 + } + } + + immediate = { + save_scope_value_as = { + name = trait_xp + value = { integer_range = { min = 3 max = 5 } } + } + create_character = { + location = root.location + gender_female_chance = { + if = { + limit = { root.faith = { has_doctrine = doctrine_gender_male_dominated } } + add = 0 + } + else_if = { + limit = { root.faith = { has_doctrine = doctrine_gender_female_dominated } } + add = 100 + } + else = { + add = 50 + } + } + template = ancient_forest_traveler_character + save_scope_as = ancient_traveler + } + } + + option = { + name = bp3_roaming.0100.a + flavor = bp3_roaming.0100.a.flavor + scope:ancient_traveler = { silent_disappear_ai_if_not_hired = yes } + if = { + limit = { + has_trait = lifestyle_mystic + } + involved_activity = { + add_activity_log_entry = { + key = roaming_pondering_stone_mystic_key + tags = { activity_log } + character = scope:host + root = { + add_trait_xp = { + trait = lifestyle_mystic + value = scope:trait_xp + } + } + } + } + roaming_tally_variable_effect = { TYPE = mystic_xp VALUE = scope:trait_xp } + } + random_list = { + 10 = { + trigger = { NOT = { has_character_modifier = pondering_rulership_modifier } } + roaming_pondering_stone_effect = { TYPE = rulership } + } + 10 = { + trigger = { NOT = { has_character_modifier = pondering_religion_modifier } } + roaming_pondering_stone_effect = { TYPE = religion } + } + 10 = { + trigger = { NOT = { has_character_modifier = pondering_war_modifier } } + roaming_pondering_stone_effect = { TYPE = war } + } + 10 = { + trigger = { NOT = { has_character_modifier = pondering_schemes_modifier } } + roaming_pondering_stone_effect = { TYPE = schemes } + } + 10 = { + trigger = { NOT = { has_character_modifier = pondering_management_modifier } } + roaming_pondering_stone_effect = { TYPE = management } + } + 10 = { + trigger = { NOT = { has_character_modifier = pondering_travel_modifier } } + roaming_pondering_stone_effect = { TYPE = travel } + } + 10 = { + trigger = { NOT = { has_trait = lifestyle_mystic } } + involved_activity = { + add_activity_log_entry = { + key = roaming_pondering_stone_key + tags = { activity_log } + character = scope:host + root = { + add_trait = lifestyle_mystic + set_variable = roaming_tally_mystic + } + } + } + } + } + + stress_impact = { lifestyle_mystic = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = lifestyle_mystic VALUE = minor_stress_impact_loss } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lifestyle_mystic + } + } + } + + option = { + name = bp3_roaming.0100.b + involved_activity = { + add_activity_log_entry = { + key = roaming_resting_stone_key + tags = { activity_log } + character = scope:host + root = { + stress_impact = { + base = minor_stress_impact_loss + athletic = medium_stress_gain + lazy = medium_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = athletic VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = lazy VALUE = medium_stress_impact_loss } + } + } + } + + scope:ancient_traveler = { silent_disappear_ai_if_not_hired = yes } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = athletic + } + } + } + + option = { + name = bp3_roaming.0100.c + flavor = bp3_roaming.0100.c.flavor + duel = { + skill = learning + target = scope:ancient_traveler + 50 = { + desc = bp3_roaming.0100.c.win + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -49 + } + involved_activity = { + add_activity_log_entry = { + key = roaming_old_man_key + tags = { activity_log } + character = scope:host + root = { + send_interface_toast = { + type = event_generic_good + title = bp3_roaming.0100.c.win + left_icon = root + add_learning_lifestyle_xp = 250 + roaming_tally_variable_effect = { + TYPE = learning_lifestyle_xp + VALUE = 250 + } + add_learning_skill = 1 + roaming_tally_variable_effect = { + TYPE = learning_skill + VALUE = 1 + } + } + } + } + } + } + 50 = { + desc = bp3_roaming.0100.c.neutral + compare_modifier = { + value = scope:duel_value + multiplier = -1.5 + min = -49 + } + involved_activity = { + add_activity_log_entry = { + key = roaming_old_man_key + tags = { activity_log } + character = scope:host + root = { + send_interface_toast = { + type = event_generic_neutral + title = bp3_roaming.0100.c.neutral + add_visiting_courtier = scope:ancient_traveler + } + } + } + } + } + 50 = { + desc = bp3_roaming.0100.c.loss + compare_modifier = { + value = scope:duel_value + multiplier = -1 + min = -49 + } + involved_activity = { + add_activity_log_entry = { + key = roaming_old_man_key + tags = { activity_log } + character = scope:host + root = { + send_interface_toast = { + type = event_generic_bad + title = bp3_roaming.0100.c.loss + } + } + } + } + } + } + stress_impact = { + gregarious = minor_stress_impact_loss + shy = medium_stress_gain + } + roaming_tally_stress_impact_effect = { TRAIT = gregarious VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = shy VALUE = medium_stress_gain } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = shy + } + } + } + + option = { + name = bp3_roaming.0100.d + trigger = { + has_trait = lifestyle_poet + } + involved_activity = { + add_activity_log_entry = { + key = roaming_ancient_traveler_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + stress_impact = { + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + modifier = { + factor = 0 + has_trait = honest + } + } + } +} + +# Normal Animal Sighting +bp3_roaming.0110 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0110.t + desc = { + desc = bp3_roaming.0110.desc + triggered_desc = { + trigger = { + exists = scope:special_guest + } + desc = bp3_roaming.0110.desc.companion + } + } + theme = roaming_activity + + override_background = { + trigger = { + location = { + terrain = forest + has_winter_trigger = no + } + } + reference = ep2_hunt_foggy_forest + } + + left_portrait = { + character = scope:host + triggered_animation = { + trigger = { + OR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + animation = personality_bold + } + triggered_animation = { + trigger = { + NOR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + animation = paranoia + } + } + + center_portrait = { + character = scope:special_guest + animation = fear + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_storyteller_intent + } + factor = 1.5 + } + } + + override_effect_2d = { + reference = rain + trigger = { + location = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + + widget = { + is_shown = { + location = { has_winter_trigger = yes } + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + override_effect_2d = { + reference = fog + trigger = { + location = { + has_winter_trigger = no + NAND = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + } + + trigger = { + NOT = { + any_sub_realm_county = { has_county_modifier = hunt_sighting_standard_modifier } + } + } + + immediate = { + location = { save_scope_as = sighting_province } + location.county = { + save_scope_as = sighting_county + hunt_activity_standard_game_effect = { PROVINCE = scope:sighting_province HUNTER = root } + } + } + + option = { + name = bp3_roaming.0110.a + involved_activity = { + add_activity_log_entry = { + key = roaming_animal_sighting_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + scope:sighting_county = { + # Create new sighting + hunt_create_sighting_effect = { + TYPE = standard + ANIMAL = var:animal_type + OWNER = root + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + OR = { + has_trait = lifestyle_hunter + has_trait = athletic + } + } + } + } + + option = { + name = { + text = bp3_roaming.0110.b.weakling + trigger = { + NOR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + } + name = { + text = bp3_roaming.0110.b.hunter + trigger = { + OR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + } + involved_activity = { + add_activity_log_entry = { + key = roaming_animal_sighting_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + stress_impact = { base = medium_stress_impact_loss } + roaming_tally_variable_effect = { TYPE = stress VALUE = medium_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_roaming.0110.c + trigger = { + has_trait = lifestyle_poet + } + involved_activity = { + add_activity_log_entry = { + key = roaming_animal_sighting_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_very_high } + stress_impact = { + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } +} + +# Legendary Animal Sighting +bp3_roaming.0120 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0120.t + desc = { + desc = bp3_roaming.0120.desc + triggered_desc = { + desc = bp3_roaming.0120.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = roaming_activity + + override_background = { + trigger = { + location = { + terrain = forest + has_winter_trigger = no + } + } + reference = ep2_hunt_foggy_forest + } + + left_portrait = { + character = scope:host + triggered_animation = { + trigger = { + OR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + animation = personality_bold + } + triggered_animation = { + trigger = { + NOR = { + scope:sighting_county = { + OR = { + var:animal_type = flag:fox + var:animal_type = flag:hare + } + } + has_trait = lifestyle_hunter + prowess >= 25 + } + } + animation = paranoia + } + } + + center_portrait = { + character = scope:special_guest + animation = fear + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_storyteller_intent + } + factor = 1.5 + } + } + + override_effect_2d = { + reference = rain + trigger = { + location = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + + widget = { + is_shown = { + location = { has_winter_trigger = yes } + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + override_effect_2d = { + reference = fog + trigger = { + location = { + has_winter_trigger = no + NAND = { + tropical_seasons_region_trigger = yes + middle_of_year_season_trigger = yes + } + } + } + } + + trigger = { + NOT = { + any_sub_realm_county = { + has_county_modifier = hunt_sighting_legendary_modifier + } + } + } + + immediate = { + location = { save_scope_as = sighting_province } + location.county = { + save_scope_as = sighting_county + hunt_activity_standard_game_effect = { PROVINCE = scope:sighting_province HUNTER = root } + } + } + + option = { + name = bp3_roaming.0120.a + involved_activity = { + add_activity_log_entry = { + key = roaming_legendary_sighting_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_very_high } + scope:sighting_county = { + # Create new sighting + hunt_create_sighting_effect = { + TYPE = legendary + ANIMAL = var:animal_type + OWNER = root + } + } + } + } + } + start_hunt_mystical_animal_story_cycle_effect = yes + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + OR = { + has_trait = lifestyle_hunter + has_trait = athletic + } + } + } + } + + option = { + name = bp3_roaming.0120.b + involved_activity = { + add_activity_log_entry = { + key = roaming_legendary_sighting_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_very_high } + stress_impact = { base = massive_stress_impact_loss } + roaming_tally_variable_effect = { TYPE = stress VALUE = massive_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + stress > 90 + } + } + } + + option = { + name = bp3_roaming.0120.c + trigger = { + has_trait = lifestyle_poet + } + involved_activity = { + add_activity_log_entry = { + key = roaming_legendary_sighting_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_legendary } + stress_impact = { + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } +} + +# A Battlefield Forgotten +bp3_roaming.0130 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0130.t + desc = { + desc = bp3_roaming.0130.desc + triggered_desc = { + desc = bp3_roaming.0130.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = battle + + left_portrait = { + character = scope:host + animation = worry + } + + center_portrait = { + character = scope:special_guest + animation = fear + } + + override_effect_2d = { + reference = fog + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = roaming_storyteller_intent + factor = 1.5 + } + } + + option = { + name = bp3_roaming.0130.a + involved_activity = { + add_activity_log_entry = { + key = roaming_battlefield_prayer_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + + add_piety = medium_piety_gain + roaming_tally_variable_effect = { TYPE = piety VALUE = medium_piety_gain } + + stress_impact = { + compassionate = minor_stress_impact_loss + zealous = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = compassionate VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + OR = { + has_trait = zealous + has_trait = compassionate + } + } + } + } + + option = { + name = bp3_roaming.0130.b + + involved_activity = { + add_activity_log_entry = { + key = roaming_battlefield_scavenging_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + + add_gold = minor_gold_value + roaming_tally_variable_effect = { TYPE = gold VALUE = minor_gold_value } + + stress_impact = { + greedy = minor_stress_impact_loss + compassionate = minor_stress_gain + generous = medium_stress_gain + } + roaming_tally_stress_impact_effect = { TRAIT = greedy VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = compassionate VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = generous VALUE = medium_stress_gain } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + } + } + } + } + + option = { + name = bp3_roaming.0130.c + trigger = { + has_trait = lifestyle_poet + } + involved_activity = { + add_activity_log_entry = { + key = roaming_battlefield_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_very_high } + + stress_impact = { + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } +} + +# A Night in the Wilds +bp3_roaming.0140 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0140.t + desc = { + desc = bp3_roaming.0140.desc + triggered_desc = { + desc = bp3_roaming.0140.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = roaming_activity + override_background = { reference = ep3_campfire } + + left_portrait = { + character = scope:host + animation = paranoia + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = roaming_mystic_intent + factor = 1.5 + } + } + + immediate = { + save_scope_value_as = { + name = trait_xp + value = { integer_range = { min = 5 max = 8 } } + } + } + + option = { + name = bp3_roaming.0140.a + involved_activity = { + add_activity_log_entry = { + key = roaming_night_scare_key + tags = { activity_log } + character = root + root = { + stress_impact = { + base = miniscule_stress_gain + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_gain } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = content + } + } + } + + option = { + name = bp3_roaming.0140.b + involved_activity = { + random_list = { + 50 = { + desc = bp3_roaming.0140.b.2 + add_activity_log_entry = { + key = roaming_night_sleep_key + tags = { activity_log } + character = root + root = { + send_interface_toast = { + type = event_generic_good + title = bp3_roaming.0140.b.2 + left_icon = root + stress_impact = { + base = minor_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = minor_stress_impact_loss } + } + } + } + } + 50 = { + desc = bp3_roaming.0140.b.1 + add_activity_log_entry = { + key = roaming_night_threat_key + tags = { activity_log } + character = root + root = { + send_interface_toast = { + type = event_generic_bad + title = bp3_roaming.0140.b.1 + left_icon = root + stress_impact = { + base = minor_stress_gain + } + roaming_tally_variable_effect = { TYPE = stress VALUE = minor_stress_gain } + } + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = paranoid + } + } + } + + option = { + name = bp3_roaming.0140.c + trigger = { + has_trait = lifestyle_poet + } + + involved_activity = { + add_activity_log_entry = { + key = roaming_night_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + + stress_impact = { + base = miniscule_stress_gain + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = miniscule_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } + + option = { + name = bp3_roaming.0140.d + + trigger = { + has_trait = lifestyle_mystic + } + + involved_activity = { + add_activity_log_entry = { + key = roaming_night_mystic_key + tags = { activity_log } + character = root + root = { + add_trait_xp = { + trait = lifestyle_mystic + value = scope:trait_xp + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_mystic + } + } + } +} + +# A Quiet Pond +bp3_roaming.0150 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0150.t + desc = { + desc = bp3_roaming.0150.desc + triggered_desc = { + desc = bp3_roaming.0150.desc.no_companion + trigger = { + NOT = { exists = scope:special_guest } + } + } + triggered_desc = { + desc = bp3_roaming.0150.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = roaming_activity + override_background = { + reference = ce1_legendary_oasis + trigger = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + } + } + override_background = { + reference = ce1_legendary_spring + trigger = { + location = { + NOR = { + terrain = desert + terrain = desert_mountains + } + } + } + } + + left_portrait = { + character = scope:host + animation = survey_staff + } + + center_portrait = { + character = scope:special_guest + animation = happiness + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = reduce_stress_intent + factor = 1.5 + } + } + + option = { + name = bp3_roaming.0150.a + + involved_activity = { + add_activity_log_entry = { + key = roaming_quiet_pond_key + tags = { activity_log } + character = root + root = { + stress_impact = { + base = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = lazy VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lazy + } + } + } + + option = { + name = bp3_roaming.0150.b + trigger = { + has_trait = lifestyle_poet + } + + involved_activity = { + add_activity_log_entry = { + key = roaming_quiet_pond_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + + stress_impact = { + honest = medium_stress_gain + deceitful = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } +} + +# The Ruined Building +bp3_roaming.0160 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0160.t + desc = { + desc = bp3_roaming.0160.desc + triggered_desc = { + desc = bp3_roaming.0160.desc.no_companion + trigger = { + NOT = { exists = scope:special_guest } + } + } + triggered_desc = { + desc = bp3_roaming.0160.desc.companion + trigger = { + exists = scope:special_guest + } + } + desc = bp3_roaming.0160.desc.outro + } + theme = roaming_activity + override_background = { + reference = burning_building_west + } + + override_effect_2d = { + reference = smoke + } + + left_portrait = { + character = scope:host + animation = disbelief + } + + center_portrait = { + character = scope:special_guest + animation = fear + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + } + + option = { + name = bp3_roaming.0160.a + involved_activity = { + add_activity_log_entry = { + key = roaming_burning_farm_piety_key + tags = { activity_log } + character = root + root = { + add_piety = medium_piety_gain + roaming_tally_variable_effect = { TYPE = piety VALUE = medium_piety_gain } + + stress_impact = { + compassionate = minor_stress_impact_loss + zealous = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = compassionate VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + } + } + + option = { + name = bp3_roaming.0160.b + involved_activity = { + add_activity_log_entry = { + key = roaming_burning_farm_greedy_key + tags = { activity_log } + character = root + root = { + add_gold = tiny_gold_value + roaming_tally_variable_effect = { TYPE = gold VALUE = tiny_gold_value } + + stress_impact = { + greedy = minor_stress_impact_loss + compassionate = minor_stress_gain + generous = medium_stress_gain + } + roaming_tally_stress_impact_effect = { TRAIT = greedy VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = compassionate VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = generous VALUE = medium_stress_gain } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + } + } + } + } + + option = { + name = bp3_roaming.0160.c + trigger = { + has_trait = lifestyle_poet + } + + involved_activity = { + add_activity_log_entry = { + key = roaming_burning_farm_poet_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 10 + has_trait = lifestyle_poet + } + } + } +} + +# A Quiet Day +bp3_roaming.0170 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0170.t + desc = { + desc = bp3_roaming.0170.desc + triggered_desc = { + desc = bp3_roaming.0170.desc.no_companion + trigger = { + NOT = { exists = scope:special_guest } + } + } + triggered_desc = { + desc = bp3_roaming.0170.desc.companion + trigger = { + exists = scope:special_guest + } + } + } + theme = roaming_activity + + cooldown = { months = 3 } + + left_portrait = { + character = scope:host + animation = happiness + } + + right_portrait = { + character = scope:special_guest + animation = laugh + } + + override_effect_2d = { + reference = legend_glow + } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_befriend_intent + } + factor = 1.5 + } + } + + option = { + name = bp3_roaming.0170.a + roaming_progress_events_reward_effect = { LOG_KEY = roaming_quiet_day_key } + } +} + +# Are we there yet? +bp3_roaming.0180 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0180.t + desc = bp3_roaming.0180.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = happiness + } + + right_portrait = { + character = scope:special_guest + animation = disappointed + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_befriend_intent + } + factor = 1.5 + } + } + + trigger = { + scope:special_guest ?= { + OR = { + age <= 16 + has_trait = lazy + has_trait = impatient + current_weight > 50 + } + } + NOR = { + has_trait = lazy + has_trait = impatient + } + } + + option = { + name = bp3_roaming.0180.a + involved_activity = { + add_activity_log_entry = { + key = roaming_tired_mutterings_lies_key + tags = { activity_log } + character = root + root = { + stress_impact = { + base = minor_stress_impact_loss + honest = medium_stress_gain + deceitful = medium_stress_impact_loss + callous = minor_stress_impact_loss + } + roaming_tally_variable_effect = { TYPE = stress VALUE = medium_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = honest VALUE = medium_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = deceitful VALUE = medium_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = callous VALUE = minor_stress_impact_loss } + } + } + } + random = { + chance = 10 + involved_activity = { + add_activity_log_entry = { + key = roaming_tired_mutterings_athletic_key + tags = { activity_log } + character = root + root = { + send_interface_toast = { + type = event_generic_good + title = bp3_roaming.0180.a_short + left_icon = root + add_trait = athletic + set_variable = roaming_tally_athletic + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = honest + } + } + } + + option = { + name = bp3_roaming.0180.b + involved_activity = { + add_activity_log_entry = { + key = roaming_tired_mutterings_break_key + tags = { activity_log } + character = scope:special_guest + scope:special_guest = { + reverse_add_opinion = { + modifier = friendliness_opinion + target = root + opinion = 15 + } + roaming_tally_variable_effect = { TYPE = opinion VALUE = 15 } + } + root = { + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:special_guest + opinion = 15 + } + roaming_tally_variable_effect = { TYPE = opinion VALUE = 15 } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = sadistic + has_trait = athletic + has_trait = callous + } + } + } + } +} + +# A chance to talk +bp3_roaming.0190 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0190.t + desc = bp3_roaming.0190.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = happiness + } + + right_portrait = { + character = scope:special_guest + animation = laugh + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = roaming_befriend_intent + factor = 1.5 + } + } + + trigger = { + exists = scope:special_guest + } + + immediate = { + random_courtier_or_guest = { + limit = { + NOR = { + this = root + this = scope:special_guest + } + age > 5 + } + save_scope_as = random_courtier + } + } + + option = { + name = bp3_roaming.0190.a + involved_activity = { + add_activity_log_entry = { + key = roaming_chance_to_talk_key + tags = { activity_log } + character = root + scope:special_guest = { + reverse_add_opinion = { + modifier = friendliness_opinion + target = root + opinion = 20 + } + roaming_tally_variable_effect = { TYPE = opinion VALUE = 20 } + } + root = { + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:special_guest + opinion = 20 + } + roaming_tally_variable_effect = { TYPE = opinion VALUE = 20 } + } + } + } + } +} + +# Astronomical Sight +bp3_roaming.0200 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0200.t + desc = bp3_roaming.0200.desc + theme = roaming_activity + + override_background = { + reference = bp1_bonfire + } + + left_portrait = { + character = scope:host + animation = happiness + } + + right_portrait = { + character = scope:special_guest + animation = admiration + } + + cooldown = { years = 1 } + + option = { + name = bp3_roaming.0200.a + involved_activity = { + add_activity_log_entry = { + key = roaming_nightsky_canvas_key + tags = { activity_log } + character = root + scope:host = { + stress_impact = { + base = medium_stress_impact_loss + zealous = medium_stress_impact_loss + } + add_wanderer_lifestyle_xp = 500 + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = medium_stress_impact_loss } + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_very_high } + } + } + } + } +} + +# The Birds Overhead +bp3_roaming.0210 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0210.t + desc = bp3_roaming.0210.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = survey_staff + } + + right_portrait = { + character = scope:special_guest + animation = happiness + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_befriend_intent + has_activity_intent = roaming_storyteller_intent + } + factor = 1.5 + } + } + + option = { + name = bp3_roaming.0210.a + roaming_progress_events_reward_effect = { LOG_KEY = the_birds_overhead_key } + } +} + +# The Forgotten Village +bp3_roaming.0220 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0220.t + desc = bp3_roaming.0220.desc + theme = roaming_activity + + override_background = { reference = market_tribal } + + left_portrait = { + character = scope:host + animation = shock + } + + right_portrait = { + character = scope:peasant_character + hide_info = yes + animation = dismissal + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = roaming_mystic_intent + } + } + + immediate = { + create_character = { + template = peasant_character + faith = scope:province.faith + culture = scope:province.culture + gender = root + location = scope:province + save_scope_as = peasant_character + } + } + + option = { + name = { + trigger = { + is_landless_adventurer = no + } + text = bp3_roaming.0220.a + } + name = { + trigger = { + has_government = landless_adventurer_government + } + text = bp3_roaming.0220.a.landless + } + involved_activity = { + add_activity_log_entry = { + key = the_forgotten_village_key + tags = { activity_log } + character = root + root = { + roaming_gold_reward_APA_effect = { REWARD = tiny_gold_value } + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_gain + } + roaming_tally_stress_impact_effect = { TRAIT = greedy VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = generous VALUE = minor_stress_gain } + if = { + limit = { + has_government = landless_adventurer_government + NOT = { has_trait = gallowsbait } + } + add_trait = gallowsbait + } + else_if = { + limit = { + has_government = landless_adventurer_government + has_trait = gallowsbait + } + add_trait_xp = { + trait = gallowsbait + track = thief + value = 5 + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = greedy + } + modifier = { + factor = 0 + has_trait = generous + } + } + } + + option = { + name = bp3_roaming.0220.b + involved_activity = { + add_activity_log_entry = { + key = the_forgotten_village_key + tags = { activity_log } + character = root + root = { + scope:province = { + add_province_modifier = { + modifier = roaming_forgotten_village_modifier + years = 10 + } + } + stress_impact = { + lifestyle_mystic = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + } + roaming_tally_stress_impact_effect = { TRAIT = lifestyle_mystic VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = gregarious VALUE = minor_stress_impact_loss } + } + } + } + + random = { + chance = roaming_mystic_chance_value + involved_activity = { + add_activity_log_entry = { + key = the_forgotten_village_mystic_key + tags = { activity_log } + character = root + root = { + send_interface_message = { + type = event_generic_good + title = bp3_roaming.0220.b.mystic + + roaming_mystic_xp_APA_effect = { REWARD = 3 } + if = { + limit = { + NOT = { has_trait = lifestyle_mystic } + } + add_trait = lifestyle_mystic + } + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + OR = { + has_trait = gregarious + has_trait = lifestyle_mystic + } + } + } + } + + option = { + name = bp3_roaming.0220.c + involved_activity = { + add_activity_log_entry = { + key = the_forgotten_village_key + tags = { activity_log } + character = root + root = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + stress_impact = { lifestyle_poet = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = lifestyle_poet VALUE = minor_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lifestyle_poet + } + } + } + + after = { + scope:peasant_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +# The Hermit +bp3_roaming.0230 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0230.t + desc = bp3_roaming.0230.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = boredom + } + + right_portrait = { + character = scope:hermit_character + animation = debating + } + + cooldown = { months = 3 } + + trigger = { + scope:province.religion = { + any_faith = { + this != root.faith + num_county_followers < 3 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 1.5 + has_activity_intent = roaming_mystic_intent + } + } + + immediate = { + scope:province.religion = { + random_faith = { + limit = { + this != root.faith + num_county_followers < 3 + } + save_scope_as = hermit_faith + } + } + create_character = { + template = peasant_character + faith = scope:hermit_faith + culture = scope:province.culture + gender = root + location = scope:province + save_scope_as = hermit_character + after_creation = { + add_trait = eccentric + add_character_flag = roaming_character + } + } + } + + option = { + name = bp3_roaming.0230.a + + involved_activity = { + add_activity_log_entry = { + key = the_hermit_key + tags = { activity_log } + character = root + root = { + add_character_modifier = { + modifier = roaming_the_hermit_modifier + years = 10 + } + stress_impact = { zealous = major_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = major_stress_gain } + } + } + } + + random = { + chance = roaming_mystic_chance_value + involved_activity = { + add_activity_log_entry = { + key = the_hermit_learning_key + tags = { activity_log } + character = root + root = { + send_interface_message = { + type = event_generic_good + title = bp3_roaming.0230.a.hermit + + roaming_mystic_xp_APA_effect = { REWARD = 3 } + if = { + limit = { + NOT = { has_trait = lifestyle_mystic } + } + add_trait = lifestyle_mystic + } + } + } + } + } + } + + scope:hermit_character = { + silent_disappear_ai_if_not_hired = yes + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lifestyle_mystic + } + modifier = { + factor = 0 + has_trait = zealous + } + } + } + + option = { + name = bp3_roaming.0230.b + trigger = { + NOR = { + any_secret = { type = secret_crypto_religionist } + exists = secret_faith + scope:hermit_faith = faith + } + } + + involved_activity = { + add_activity_log_entry = { + key = the_hermit_key + tags = { activity_log } + character = root + root = { + custom_tooltip = bp3_roaming.0230.b.tooltip + make_character_crypto_religionist_effect = { CRYPTO_RELIGION = scope:hermit_faith } + stress_impact = { zealous = major_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = major_stress_gain } + } + } + } + + scope:hermit_character = { + silent_disappear_ai_if_not_hired = yes + } + + ai_chance = { + base = 0 + modifier = { + add = 100 + OR = { + has_trait = lunatic + has_trait = eccentric + } + } + } + } + + option = { + name = bp3_roaming.0230.c + + involved_activity = { + add_activity_log_entry = { + key = the_hermit_key + tags = { activity_log } + character = root + root = { + add_piety = medium_piety_gain + roaming_tally_variable_effect = { TYPE = piety VALUE = medium_piety_gain } + + scope:hermit_character = { + death = { + death_reason = death_murder + killer = root + } + } + + stress_impact = { zealous = medium_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = medium_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = zealous + } + } + } +} + +# A Night to Remember +bp3_roaming.0240 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0240.t + desc = bp3_roaming.0240.desc + theme = roaming_activity + + override_background = { reference = ep3_campfire } + + left_portrait = { + character = scope:host + animation = stunned + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = roaming_storyteller_intent + has_activity_intent = roaming_mystic_intent + } + factor = 1.5 + } + } + + trigger = { + scope:province = { + NOT = { has_province_modifier = wayfarer_astronomical_phenomenon } + } + } + + option = { + name = bp3_roaming.0240.a + involved_activity = { + add_activity_log_entry = { + key = a_night_to_remember_key + tags = { activity_log } + character = root + root = { + if = { + limit = { + has_trait = lifestyle_mystic + has_activity_intent = roaming_mystic_intent + } + } + else = { + roaming_fame_reward_event_effect = { VALUE = roaming_reward_fame_medium } + } + stress_impact = { base = minor_stress_impact_loss } + roaming_tally_variable_effect = { TYPE = stress VALUE = minor_stress_impact_loss } + } + } + } + } +} + +# A Small Grave +bp3_roaming.0250 = { + type = activity_event + content_source = dlc_015 + title = bp3_roaming.0250.t + desc = bp3_roaming.0250.desc + theme = roaming_activity + + left_portrait = { + character = scope:host + animation = prayer + } + + cooldown = { months = 3 } + + weight_multiplier = { + base = 1 + } + + immediate = { + save_scope_value_as = { + name = randomized_chance + value = { integer_range = { min = 1 max = 20 } } + } + } + + option = { + name = bp3_roaming.0250.a + involved_activity = { + add_activity_log_entry = { + key = a_small_grave_key + tags = { activity_log } + character = root + root = { + add_piety = medium_piety_gain + roaming_tally_variable_effect = { TYPE = piety VALUE = medium_piety_gain } + stress_impact = { zealous = medium_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = medium_stress_impact_loss } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = zealous + } + } + } + + option = { + name = bp3_roaming.0250.b + add_piety = medium_piety_loss + roaming_tally_variable_effect = { TYPE = piety VALUE = medium_piety_loss } + show_as_tooltip = { + random_list = { + 1 = { + desc = no_treasure + show_chance = no + } + 1 = { + desc = small_treasure + show_chance = no + add_gold = tiny_gold_value + } + 1 = { + desc = medium_treasure + show_chance = no + add_gold = minor_gold_value + } + 1 = { + desc = large_treasure + show_chance = no + add_gold = medium_gold_value + custom_tooltip = bp3_roaming.0250.artifact + } + } + stress_impact = { greedy = medium_stress_impact_loss } + } + hidden_effect_new_object = { + involved_activity = { + add_activity_log_entry = { + key = a_small_grave_key + tags = { activity_log } + character = root + root = { + if = { + limit = { + scope:randomized_chance > 18 + } + hidden_effect = { + create_character = { + template = merchant_template + faith = scope:province.faith + culture = scope:province.culture + gender = root + location = scope:province + save_scope_as = blacksmith_character + } + scope:blacksmith_character = { + random_list = { + 1 = { + create_artifact_weapon_effect = { + OWNER = scope:blacksmith_character + CREATOR = scope:blacksmith_character + SET_WEAPON_TYPE = flag:no + } + } + 1 = { + create_artifact_armor_effect = { + OWNER = scope:blacksmith_character + CREATOR = scope:blacksmith_character + SET_ARMOR_TYPE = flag:no + } + } + 1 = { + create_artifact_brooch_effect = { + OWNER = scope:blacksmith_character + SMITH = scope:blacksmith_character + } + } + } + } + } + send_interface_message = { + type = event_generic_good + title = large_treasure + + scope:newly_created_artifact ?= { + set_owner = { + target = root + history = { + actor = root + recipient = root + location = scope:province + type = discovered + } + } + } + add_gold = medium_gold_value + } + } + else_if = { + limit = { + scope:randomized_chance > 13 + } + send_interface_message = { + type = event_generic_good + title = medium_treasure + + add_gold = minor_gold_value + } + } + else_if = { + limit = { + scope:randomized_chance > 7 + } + send_interface_message = { + type = event_generic_good + title = small_treasure + + add_gold = tiny_gold_value + } + } + else = { + send_interface_message = { + type = event_generic_good + title = no_treasure + } + } + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_gain + zealous = minor_stress_gain + } + roaming_tally_stress_impact_effect = { TRAIT = greedy VALUE = minor_stress_impact_loss } + roaming_tally_stress_impact_effect = { TRAIT = generous VALUE = minor_stress_gain } + roaming_tally_stress_impact_effect = { TRAIT = zealous VALUE = minor_stress_gain } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = greedy + } + modifier = { + factor = 0 + OR = { + has_trait = zealous + has_trait = generous + } + } + } + } + + after = { + scope:blacksmith_character ?= { + silent_disappear_ai_if_not_hired = yes + } + } +} diff --git a/events/dlc/bp3/bp3_survey_events.txt b/events/dlc/bp3/bp3_survey_events.txt new file mode 100644 index 00000000..a0cb139c --- /dev/null +++ b/events/dlc/bp3/bp3_survey_events.txt @@ -0,0 +1,4487 @@ +namespace = bp3_survey + +### Setup Events +# Arrival Event +bp3_survey.0005 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.0005.t + desc = { + first_valid = { + triggered_desc = { + trigger = { root != root } + desc = bp3_survey.0005.desc.holder + } + desc = bp3_survey.0005.desc.no_holder + } + } + theme = survey_activity + + override_background = { + reference = study + } + + left_portrait = { + character = scope:host + triggered_animation = { + trigger = { + government_allows = merit + } + animation = holding_scrolls + } + animation = pondering + camera = camera_event_group_talking_left_left + } + + right_portrait = { + trigger = { scope:host != scope:county_holder } + character = scope:county_holder + animation = obsequious_bow + } + + immediate = { + if = { + limit = { + location.county.holder != root + } + location.county.holder = { + save_scope_as = county_holder + save_opinion_value_as = { + name = county_holder_opinion + target = root + } + trigger_event = bp3_survey.0050 + } + } + else = { save_scope_as = county_holder } + } + + option = { + name = bp3_survey.0005.a + trigger = { + location.county = { + any_neighboring_county = { + exists = holder + holder.top_liege != root.location.county.holder.top_liege + } + } + } + custom_tooltip = bp3_survey.0005.a.tt + set_variable = inspection_activity_border_focus + } + + option = { + name = bp3_survey.0005.b + custom_tooltip = bp3_survey.0005.b.tt + set_variable = inspection_activity_bureaucracy_focus + } + + option = { + name = bp3_survey.0005.c + custom_tooltip = bp3_survey.0005.c.tt + set_variable = inspection_activity_domain_focus + } +} + +# Ending Event +bp3_survey.0010 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.0010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = scope:success + has_variable = inspection_activity_border_focus + } + desc = bp3_survey.0010.desc.border.success + } + triggered_desc = { + trigger = { + has_variable = inspection_activity_border_focus + } + desc = bp3_survey.0010.desc.border.failure + } + triggered_desc = { + trigger = { + exists = scope:success + has_variable = inspection_activity_bureaucracy_focus + } + desc = bp3_survey.0010.desc.bureaucracy.success + } + triggered_desc = { + trigger = { + has_variable = inspection_activity_bureaucracy_focus + } + desc = bp3_survey.0010.desc.bureaucracy.failure + } + triggered_desc = { + trigger = { + exists = scope:success + has_variable = inspection_activity_domain_focus + } + desc = bp3_survey.0010.desc.people.success + } + triggered_desc = { + trigger = { + has_variable = inspection_activity_domain_focus + } + desc = bp3_survey.0010.desc.people.failure + } + } + } + theme = survey_activity + + override_background = { + reference = study + } + + left_portrait = { + character = scope:host + triggered_animation = { + trigger = { + exists = scope:success + government_allows = merit + } + animation = toast_goblet + } + triggered_animation = { + trigger = { + exists = scope:success + } + animation = toast + } + triggered_animation = { + trigger = { + NOT = { exists = scope:success } + } + animation = disapproval + } + } + + right_portrait = { + character = scope:county_holder + triggered_animation = { + trigger = { + exists = scope:success + } + animation = drink + } + triggered_animation = { + trigger = { + NOT = { exists = scope:success } + } + animation = disappointed + } + } + + immediate = { + location = { save_scope_as = inspection_province } + location.county = { save_scope_as = inspection_location } + random = { # Check if Activity was a success or not + chance = root.involved_activity.var:inspection_success_chance + + save_scope_value_as = { + name = success + value = yes + } + } + scope:inspection_location.holder = { # Save the holder, if not liege, for Opinion check and for animation + if = { + limit = { + this != root + } + save_scope_as = county_holder + } + } + if = { # Save data needed for Claims/Vassal Acceptance, if you have the border focus + limit = { + has_variable = inspection_activity_border_focus + } + scope:inspection_location = { + random_neighboring_county = { + limit = { + holder = { + NOR = { + is_vassal_or_below_of = root + this = root + } + } + holder.top_liege = root.location.county.holder.top_liege + } + save_scope_as = claim_location + } + every_neighboring_county = { + limit = { + holder.top_liege != root.top_liege + holder.top_liege.highest_held_title_tier < root.highest_held_title_tier + } + holder = { add_to_list = independent_rulers } + } + } + } + } + + option = { + name = bp3_survey.0010.a + trigger = { + exists = scope:success + } + add_legitimacy_effect = { LEGITIMACY = minor_legitimacy_gain } + inspection_survey_intent_development = { VALUE = 15 } + if = { # If you have a Border Focus (Claims/Acceptance) + limit = { + has_variable = inspection_activity_border_focus + } + ### Claims + if = { # Focused on Claims + limit = { + has_variable = inspection_activity_border_claim_focus + } + scope:inspection_location = { + every_neighboring_county = { + limit = { + holder.top_liege != root.top_liege + OR = { + NOT = { root = { has_claim_on = prev } } + NOT = { root = { has_claim_on = prev.duchy } } + } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_claim_key + show_in_conclusion = yes + character = root + prev = { + inspection_claim_effects = { + ACTOR = root + TARGET = prev + TYPE = pressed + } + inspection_claim_effects = { + ACTOR = root + TARGET = prev.duchy + TYPE = pressed + } + } + } + } + } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_expansionist_mindset_key + show_in_conclusion = yes + character = root + root = { + add_character_modifier = { + modifier = inspection_reward_focused_claims_modifier + years = 15 + } + } + } + } + } + else_if = { # Not focused on Claims + limit = { exists = scope:claim_location } + scope:claim_location.duchy = { + if = { + limit = { + NOT = { + root = { has_claim_on = prev } + } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_claim_key + show_in_conclusion = yes + character = root + prev = { + inspection_claim_effects = { + ACTOR = root + TARGET = prev + TYPE = unpressed + } + } + } + } + } + } + } + ### Vassal Acceptance + if = { # Focused on Vassal Acceptance + limit = { + has_variable = inspection_activity_border_vassal_focus + any_in_list = { + list = independent_rulers + count > 0 + } + } + every_in_list = { + list = independent_rulers + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_acceptance_key + show_in_conclusion = yes + character = root + prev = { custom_tooltip = bp3_survey.0010.acceptance.success } + } + } + add_to_variable_list = { + name = inspection_reward + target = root + years = 15 + } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_impressed_neighbors_key + show_in_conclusion = yes + character = root + root = { + add_character_modifier = { + modifier = inspection_reward_focused_vassal_acceptance + years = 15 + } + } + } + } + } + else_if = { # Not focused on Vassal Acceptance + limit = { + any_in_list = { + list = independent_rulers + count > 0 + } + } + random_in_list = { + list = independent_rulers + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_acceptance_key + show_in_conclusion = yes + character = root + prev = { custom_tooltip = bp3_survey.0010.acceptance.success } + } + } + add_to_variable_list = { + name = inspection_reward + target = root + years = 15 + } + } + } + } + else_if = { # If you have Bureaucracy Focus (Tax/Development/Control) + limit = { + has_variable = inspection_activity_bureaucracy_focus + } + if = { # Focused on Taxes + limit = { + has_variable = inspection_activity_bureaucracy_tax_focus + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_tax_key + show_in_conclusion = yes + character = root + scope:inspection_province = { + add_province_modifier = { + modifier = inspection_reward_focused_tax_modifier + years = 15 + } + } + root = { add_treasury_or_gold = medium_treasury_or_gold_value } + } + } + inspection_survey_local_message_province_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_focused_tax_modifier + YEARS = 15 + } + } + else = { # Not focused on Taxes + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_tax_key + show_in_conclusion = yes + character = root + scope:inspection_province = { + add_province_modifier = { + modifier = inspection_reward_average_tax_modifier + years = 15 + } + } + } + } + inspection_survey_local_message_province_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_average_tax_modifier + YEARS = 15 + } + } + if = { # Focused on Development + limit = { + has_variable = inspection_activity_bureaucracy_development_focus + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_development_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_focused_development_modifier + years = 15 + } + change_development_progress_with_overflow = 50 + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_focused_development_modifier + YEARS = 15 + } + } + else = { # Not focused on Development + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_development_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + change_development_progress_with_overflow = 25 + } + } + } + } + if = { # Focused on Control + limit = { + has_variable = inspection_activity_bureaucracy_control_focus + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_control_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_focused_control_modifier + years = 15 + } + change_county_control = 10 + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_focused_control_modifier + YEARS = 15 + } + } + else_if = { # Not focused on Control + limit = { + scope:inspection_location.county_control < 100 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_control_key + show_in_conclusion = yes + character = root + scope:inspection_location = { change_county_control = 5 } + } + } + } + } + else_if = { # If you have People Focus (Levy/Opinion/Popular Opinion) + limit = { + has_variable = inspection_activity_domain_focus + } + if = { # Focused on Levies + limit = { + has_variable = inspection_activity_domain_levy_focus + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_levy_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_focused_levy_modifier + years = 15 + } + } + root = { + spawn_army = { + name = local_militia_name_default + levies = inspection_levy_reward_value + location = scope:inspection_location.title_province + inheritable = no + war_keep_on_attacker_victory = yes + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_focused_levy_modifier + YEARS = 15 + } + } + else = { # Not focused on Levies + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_levy_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_average_levy_modifier + years = 15 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_reward_average_levy_modifier + YEARS = 15 + } + } + if = { # Focused on Opinion + limit = { + has_variable = inspection_activity_domain_opinion_focus + } + if = { + limit = { + exists = root + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_opinion_key + show_in_conclusion = yes + character = root + root = { + add_opinion = { + modifier = friendliness_opinion + target = root + opinion = 20 + } + } + root = { + add_character_modifier = { + modifier = inspection_reward_focused_opinion_modifier + years = 15 + } + } + } + } + } + else = { + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_opinion_key + show_in_conclusion = yes + character = root + root = { + add_character_modifier = { + modifier = inspection_reward_focused_opinion_modifier + years = 15 + } + } + } + } + } + } + else_if = { # Not focused on Opinion + limit = { + exists = root + exists = scope:county_holder + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_opinion_key + show_in_conclusion = yes + character = root + root = { + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:county_holder + opinion = 10 + } + } + } + } + } + if = { # Focused on Popular Opinion + limit = { + has_variable = inspection_activity_domain_popular_focus + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_popular_opinion_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_focused_popular_opinion_modifier + years = 15 + } + } + root = { + add_character_modifier = { + modifier = inspection_reward_focused_popular_opinion_character_modifier + years = 15 + } + } + } + } + } + else = { # Not focused on Popular Opinion + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_popular_opinion_key + show_in_conclusion = yes + character = root + scope:inspection_location = { + add_county_modifier = { + modifier = inspection_reward_average_popular_opinion_modifier + years = 15 + } + } + } + } + } + } + + # As an admin governor, gain some governor trait XP + if = { + limit = { is_governor = yes } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_governor_experience_key + show_in_conclusion = yes + character = root + root = { increase_governance_effect = { VALUE = 10 } } + } + } + } + + # If you have Merit we give Merit + if = { + limit = { government_allows = merit } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_merit_key + show_in_conclusion = yes + character = root + root = { + change_merit = { + value = major_merit_gain + house ?= { + if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_5 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_5_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_4 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_4_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_3 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_3_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_2 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_2_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_1 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_1_value + } + } + } + } + } + } + } + } + + # If you have the governance aspiration, you gain some gold and a higher salary + if = { + limit = { + house ?= { has_house_aspiration_parameter = inspection_activity_increases_salary } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_salary_key + show_in_conclusion = yes + character = root + root = { + add_gold = medium_gold_value + add_character_modifier = { + modifier = tgp_aspiration_great_salary_modifier + years = 15 + } + hidden_effect = { + if = { + limit = { + has_character_modifier = tgp_aspiration_modest_salary_modifier + } + remove_character_modifier = tgp_aspiration_modest_salary_modifier + } + } + } + } + } + } + + if = { #Devotion for tenet + limit = { + faith = { has_doctrine_parameter = inspection_gives_devotion } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_success_piety_key + show_in_conclusion = yes + character = root + root = { + add_piety_experience = medium_piety_value + } + } + } + } + + hidden_effect = { + scope:province = { + remove_province_modifier = inspection_second_try_modifier + remove_province_modifier = inspection_third_try_modifier + remove_province_modifier = inspection_fourth_try_modifier + } + } + } + + option = { + name = bp3_survey.0010.b + trigger = { + NOT = { exists = scope:success } + } + add_legitimacy_effect = { LEGITIMACY = miniscule_legitimacy_gain } + scope:province = { + if = { + limit = { + root = { is_ai = no } + NOT = { + has_province_modifier = inspection_fourth_try_modifier + } + } + if = { + limit = { + has_province_modifier = inspection_third_try_modifier + NOT = { has_province_modifier = inspection_fourth_try_modifier } + } + add_province_modifier = inspection_fourth_try_modifier + hidden_effect = { + remove_province_modifier = inspection_third_try_modifier + } + } + else_if = { + limit = { + has_province_modifier = inspection_second_try_modifier + NOT = { has_province_modifier = inspection_third_try_modifier } + } + add_province_modifier = inspection_third_try_modifier + hidden_effect = { + remove_province_modifier = inspection_second_try_modifier + } + } + else_if = { + limit = { + NOT = { has_province_modifier = inspection_second_try_modifier } + } + add_province_modifier = inspection_second_try_modifier + } + } + } + + if = { + limit = { + faith = { has_doctrine_parameter = inspection_gives_devotion } #Devotion for tenet + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_failure_devotion_key + show_in_conclusion = yes + character = root + root = { + add_piety_experience = minor_piety_value + } + } + } + } + + # If you have Merit we give Merit - but you gain less than if you were successful + if = { + limit = { government_allows = merit } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_failure_merit_key + show_in_conclusion = yes + character = root + root = { + change_merit = { + value = minor_merit_gain + house ?= { + if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_5 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_5_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_4 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_4_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_3 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_3_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_2 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_2_value + } + } + else_if = { + limit = { has_house_aspiration_parameter = inspection_activity_merit_bonus_1 } + multiply = { + value = 1 + add = inspection_activity_merit_bonus_1_value + } + } + } + } + } + } + } + } + + # If you have the governance aspiration, you gain some gold and a higher salary - but less than if you were successful + if = { + limit = { + house ?= { has_house_aspiration_parameter = inspection_activity_increases_salary } + } + scope:activity = { + add_activity_log_entry = { + key = inspection_conclusion_failure_salary_key + show_in_conclusion = yes + character = root + root = { + add_gold = minor_gold_value + add_character_modifier = { + modifier = tgp_aspiration_modest_salary_modifier + years = 15 + } + hidden_effect = { + if = { + limit = { + has_character_modifier = tgp_aspiration_great_salary_modifier + } + remove_character_modifier = tgp_aspiration_great_salary_modifier + } + } + } + } + } + } + } +} + +### Mid Events +# Border Focus +bp3_survey.0020 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.0020.t + desc = { + desc = bp3_survey.0020.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:neighboring_lord + } + desc = bp3_survey.0020.desc_weak_neighbor + } + desc = bp3_survey.0020.desc_no_neighbor + } + } + theme = survey_activity + + override_background = { + reference = terrain_activity + } + + left_portrait = { + character = scope:host + animation = survey + } + + right_portrait = { + character = scope:neighboring_lord + animation = worry + } + + trigger = { + has_variable = inspection_activity_border_focus + } + + immediate = { + scope:province.county = { + random_neighboring_county = { + limit = { + holder.top_liege != prev.holder.top_liege + } + weight = { + base = 1 + modifier = { + factor = 100 + holder.top_liege = { + highest_held_title_tier < root.highest_held_title_tier + } + } + } + save_scope_as = neighboring_county + if = { + limit = { + holder.top_liege = { + highest_held_title_tier < root.highest_held_title_tier + } + } + holder = { save_scope_as = neighboring_lord } + } + } + } + } + + option = { + name = bp3_survey.0020.a + trigger = { + exists = scope:neighboring_lord + } + skill = diplomacy + custom_tooltip = bp3_survey.0020.a.tt + set_variable = inspection_activity_border_vassal_focus + duel = { + skill = diplomacy + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + custom_tooltip = bp3_survey.0020.acceptance.great_success + } + } + } + scope:neighboring_lord = { + add_to_variable_list = { + name = inspection_bonus + target = root + years = 5 + } + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + custom_tooltip = bp3_survey.0020.acceptance.success + } + } + } + scope:neighboring_lord = { + add_to_variable_list = { + name = lesser_inspection_bonus + target = root + years = 5 + } + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_fail_key + show_in_conclusion = yes + character = root + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + + option = { + name = bp3_survey.0020.b + skill = intrigue + custom_tooltip = bp3_survey.0020.b.tt + set_variable = inspection_activity_border_claim_focus + duel = { + skill = intrigue + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_key + show_in_conclusion = yes + character = root + inspection_success_chance_change_effect = { CHANGE = increase_medium } + root = { + inspection_survey_intent_development = { VALUE = 10 } + add_pressed_claim = scope:neighboring_county + } + } + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_key + show_in_conclusion = yes + character = root + inspection_success_chance_change_effect = { CHANGE = increase_minor } + root = { + inspection_survey_intent_development = { VALUE = 5 } + add_unpressed_claim = scope:neighboring_county + } + } + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_border_fail_key + show_in_conclusion = yes + character = root + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } +} + +# Bureaucracy Focus +bp3_survey.0030 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.0030.t + desc = bp3_survey.0030.desc + theme = survey_activity + + override_background = { + reference = study + } + + left_portrait = { + character = scope:host + animation = writing + } + + trigger = { + has_variable = inspection_activity_bureaucracy_focus + } + + option = { + name = bp3_survey.0030.a + skill = stewardship + custom_tooltip = bp3_survey.0030.a.tt + set_variable = inspection_activity_bureaucracy_tax_focus + duel = { + skill = stewardship + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_tax_great_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_tax_great_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_tax_average_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_tax_average_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + option = { + name = bp3_survey.0030.b + skill = learning + custom_tooltip = bp3_survey.0030.b.tt + set_variable = inspection_activity_bureaucracy_development_focus + duel = { + skill = learning + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_development_great_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_development_great_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = + increase_minor } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_development_average_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_development_average_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + option = { + name = bp3_survey.0030.c + trigger = { + scope:province.county = { + county_control < 100 + } + } + skill = martial + custom_tooltip = bp3_survey.0030.c.tt + set_variable = inspection_activity_bureaucracy_control_focus + duel = { + skill = martial + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_control_great_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_control_great_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_control_average_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_control_average_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + option = { + name = bp3_survey.0030.d + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_domain_selfish_key + show_in_conclusion = yes + character = root + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + root = { add_gold = minor_gold_value } + } + } + } +} + +# Domain Focus +bp3_survey.0040 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.0040.t + desc = { + desc = bp3_survey.0040.desc + triggered_desc = { + trigger = { + exists = scope:county_holder + } + desc = bp3_survey.0040.mid + } + desc = bp3_survey.0040.outro + } + theme = survey_activity + + override_background = { + reference = market + } + + center_portrait = { + character = scope:county_holder + animation = boredom + } + + left_portrait = { + character = scope:host + animation = debating + } + + right_portrait = { + character = scope:peasant + animation = thinking + hide_info = yes + } + + override_effect_2d = { + reference = legend_glow + } + + trigger = { + has_variable = inspection_activity_domain_focus + } + + immediate = { + if = { + limit = { + scope:province.province_owner != root + } + scope:province.province_owner = { + save_scope_as = county_holder + } + } + create_character = { + location = scope:province + template = generic_peasant_character + save_scope_as = peasant + } + } + + option = { + name = bp3_survey.0040.a + skill = martial + custom_tooltip = bp3_survey.0040.a.tt + set_variable = inspection_activity_domain_levy_focus + duel = { + skill = martial + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_levy_great_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_levy_great_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_levy_average_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_levy_average_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + option = { + name = bp3_survey.0040.b + trigger = { + exists = scope:county_holder + } + skill = diplomacy + custom_tooltip = bp3_survey.0040.b.tt + set_variable = inspection_activity_domain_opinion_focus + duel = { + skill = diplomacy + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + root = { + add_opinion = { + modifier = compliment_opinion + target = root + opinion = 20 + } + } + } + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + } + root = { + add_opinion = { + modifier = compliment_opinion + target = root + opinion = 10 + } + } + } + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + option = { + name = bp3_survey.0040.c + skill = stewardship + custom_tooltip = bp3_survey.0040.c.tt + set_variable = inspection_activity_domain_popular_focus + duel = { + skill = stewardship + value = 8 + 20 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -19 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 10 } + inspection_success_chance_change_effect = { CHANGE = increase_medium } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_opinion_great_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_opinion_great_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -39 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_key + show_in_conclusion = yes + character = root + root = { + inspection_survey_intent_development = { VALUE = 5 } + inspection_success_chance_change_effect = { CHANGE = increase_minor } + } + scope:province.county = { + add_county_modifier = { + modifier = inspection_mid_activity_opinion_average_modifier + years = 10 + } + } + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_mid_activity_opinion_average_modifier + YEARS = 10 + } + } + 40 = { + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + scope:activity = { + add_activity_log_entry = { + key = inspection_mid_people_fail_key + show_in_conclusion = yes + character = root + root = { + inspection_success_chance_change_effect = { CHANGE = decrease_minor } + } + } + } + } + } + } + + after = { + scope:peasant = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +### Vassal Event +bp3_survey.0050 = { + type = character_event + content_source = dlc_015 + title = bp3_survey.0050.t + desc = bp3_survey.0050.desc + theme = survey_activity + + override_background = { + reference = study + } + + left_portrait = { + character = scope:host + animation = thinking + } + + right_portrait = { + character = root + animation = obsequious_bow + } + + immediate = { + + } + + option = { + name = bp3_survey.0050.a + custom_tooltip = "bp3_survey.0050.a.tt" + } +} + +### Random Events ### +# Empty Lands +bp3_survey.1000 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1000.t + desc = { + triggered_desc = { + trigger = { + exists = scope:guest_1 + } + desc = bp3_survey.1000.desc + } + triggered_desc = { + trigger = { + NOT = { exists = scope:guest_1 } + } + desc = bp3_survey.1000.desc_lonely + } + desc = bp3_survey.1000.desc_continuation + triggered_desc = { + trigger = { + has_variable = inspection_activity_border_focus + } + desc = bp3_survey.1000.desc_border + } + triggered_desc = { + trigger = { + has_variable = inspection_activity_bureaucracy_focus + } + desc = bp3_survey.1000.desc_bureaucracy + } + triggered_desc = { + trigger = { + has_variable = inspection_activity_domain_focus + } + desc = bp3_survey.1000.desc_domain + } + } + theme = survey_activity + + override_background = { + reference = terrain_scope + } + + cooldown = { years = 1 } + + left_portrait = { + character = root + animation = survey + } + + right_portrait = { + character = scope:guest_1 + animation = thinking + } + + trigger = { + scope:province.county = { + any_county_province = { + has_holding = no + NOR = { + has_province_modifier = inspection_empty_lands_border_modifier + has_province_modifier = inspection_empty_lands_domain_modifier + } + } + } + } + + immediate = { + inspection_survey_intent_county_modifier = { MODIFIER = inspection_survey_new_goods_modifier } + scope:province.county = { + random_county_province = { + limit = { + has_holding = no + } + save_scope_as = empty_province + save_scope_as = background_terrain_scope + } + } + scope:activity = { + random_attending_character = { + limit = { + this != root + } + weight = { + base = 1 + modifier = { + factor = 20 + OR = { + is_close_family_of = root + is_spouse_of = root + } + } + } + save_scope_as = guest_1 + } + } + } + + option = { + name = bp3_survey.1000.a + remove_treasury_or_gold = inspection_minor_gold + scope:empty_province = { + add_province_modifier = inspection_empty_lands_border_modifier + } + inspection_survey_local_message_permanent_province_modifier = { + TYPE = message_good + MODIFIER = inspection_empty_lands_border_modifier + } + + # Success Chance changes + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + + stress_impact = { + greedy = minor_stress_gain + overseer = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 10 + has_variable = inspection_activity_border_focus + } + modifier = { + factor = 5 + has_trait = overseer + } + } + } + + option = { + name = bp3_survey.1000.b + remove_treasury_or_gold = tiny_treasury_or_gold_value + scope:empty_province = { + add_province_modifier = inspection_empty_lands_domain_modifier + } + inspection_survey_local_message_permanent_province_modifier = { + TYPE = message_good + MODIFIER = inspection_empty_lands_domain_modifier + } + + # Success Chance changes + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_medium + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = bureaucracy + CHANGE = decrease_minor + } + + stress_impact = { + greedy = minor_stress_gain + administrator = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 10 + has_variable = inspection_activity_bureaucracy_focus + } + modifier = { + factor = 5 + has_trait = administrator + } + } + } + + option = { + name = bp3_survey.1000.c + add_prestige = minor_prestige_gain + scope:empty_province = { + add_province_modifier = { + modifier = inspection_empty_lands_populace_modifier + years = 5 + } + } + inspection_survey_local_message_province_modifier = { + TYPE = message_good + MODIFIER = inspection_empty_lands_populace_modifier + YEARS = 5 + } + + # Success Chance changes + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = decrease_minor + } + + stress_impact = { + gregarious = minor_stress_impact_loss + reclusive = medium_stress_gain + shy = medium_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = reclusive + has_trait = shy + } + } + modifier = { + factor = 10 + has_variable = inspection_activity_domain_focus + } + modifier = { + factor = 5 + has_trait = gregarious + } + } + } +} + +# Bandits in +bp3_survey.1010 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1010.t + desc = bp3_survey.1010.desc + theme = survey_activity + + override_background = { + reference = alley_day + } + + cooldown = { years = 1 } + + left_portrait = { + character = root + animation = go_to_your_room + } + + center_portrait = { + character = scope:peasant_character + animation = fear + hide_info = yes + } + + right_portrait = { + character = scope:bandit_character + animation = celebrate_sword + hide_info = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 3 + scope:province.county = { + county_control < 80 + } + } + } + + immediate = { + inspection_survey_intent_control = { VALUE = 5 } + create_character = { + template = mercenary + location = scope:province + gender = root + culture = scope:province.culture + faith = scope:province.faith + save_scope_as = bandit_character + } + create_character = { + template = peasant_character + location = scope:province + gender = female + culture = scope:province.culture + faith = scope:province.faith + save_scope_as = peasant_character + } + } + + option = { + name = bp3_survey.1010.a + duel = { + skill = martial + value = 12 + 50 = { + inspection_activity_options_positive_modifier = yes + desc = bp3_survey.1010.a.win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_message = { + type = event_generic_good + title = bp3_survey.1010.a.win_short + + add_prestige = medium_prestige_gain + scope:province.county = { + if = { + limit = { + has_county_modifier = inspection_bandits_in_x_border_negative_modifier + } + remove_county_modifier = inspection_bandits_in_x_border_negative_modifier + } + add_county_modifier = { + modifier = inspection_bandits_in_x_border_positive_modifier + years = 10 + } + } + # Success chance + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + } + + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_bandits_in_x_border_positive_modifier + YEARS = 10 + } + } + 50 = { + inspection_activity_options_negative_modifier = yes + desc = bp3_survey.1010.a.lose_short + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1010.a.lose + + scope:province.county = { + add_county_modifier = { + modifier = inspection_bandits_in_x_border_negative_modifier + years = 10 + } + } + # Success chance + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + } + + inspection_survey_local_message_county_modifier = { + TYPE = message_bad + MODIFIER = inspection_bandits_in_x_border_negative_modifier + YEARS = 10 + } + } + } + + stress_impact = { + craven = minor_stress_gain + brave = minor_stress_impact_loss + diligent = minor_stress_impact_loss + overseer = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = craven + } + modifier = { + factor = 10 + has_variable = inspection_activity_border_focus + } + modifier = { + factor = 5 + OR = { + has_trait = overseer + has_trait = diligent + has_trait = brave + } + } + } + } + + option = { + name = bp3_survey.1010.b + flavor = bp3_survey.1010.b.flavor + remove_short_term_gold = inspection_medium_gold + scope:province.county = { + add_county_modifier = { + modifier = inspection_bandits_in_x_domain_modifier + years = 10 + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message + MODIFIER = inspection_bandits_in_x_domain_modifier + YEARS = 10 + } + + # Success chance + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_medium + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = bureaucracy + CHANGE = decrease_minor + } + + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + compassionate = medium_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = compassionate + } + modifier = { + factor = 10 + has_variable = inspection_activity_bureaucracy_focus + } + modifier = { + factor = 5 + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + + option = { + name = bp3_survey.1010.c + duel = { + skill = prowess + value = 18 + 50 = { + desc = bp3_survey.1010.c.win + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_message = { + type = event_generic_good + title = bp3_survey.1010.c.win_short + + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = inspection_bandits_in_x_populace_modifier + years = 10 + } + # Success chance + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_minor + } + } + } + 50 = { + desc = bp3_survey.1010.c.lose + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1010.c.lose + + increase_wounds_no_death_effect = { REASON = fight } + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + } + } + } + + stress_impact = { + craven = minor_stress_gain + brave = minor_stress_impact_loss + compassionate = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = craven + } + modifier = { + factor = 10 + has_variable = inspection_activity_domain_focus + } + modifier = { + factor = 5 + OR = { + has_trait = brave + has_trait = compassionate + } + } + } + } + + option = { + name = bp3_survey.1010.d + flavor = bp3_survey.1010.d.flavor + add_prestige = minor_prestige_loss + + # Success chance + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + + stress_impact = { + craven = minor_stress_impact_loss + brave = minor_stress_gain + compassionate = medium_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = brave + has_trait = compassionate + } + } + modifier = { + factor = 5 + has_trait = craven + } + } + } + + after = { + scope:bandit_character = { + silent_disappear_ai_if_not_hired = yes + } + scope:peasant_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +# Old Roads of +bp3_survey.1020 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1020.t + desc = bp3_survey.1020.desc + theme = survey_activity + + override_background = { + reference = terrain_scope + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = throne_room_two_handed_passive_1 + } + + center_portrait = { + character = root + animation = survey + } + + trigger = { + scope:province.county = { + NOR = { + has_county_modifier = governance_excellent_new_road_modifier + has_county_modifier = governance_good_new_road_modifier + has_county_modifier = governance_standard_new_road_modifier + has_county_modifier = governance_poor_new_road_modifier + } + } + } + + immediate = { + inspection_survey_intent_development = { VALUE = 5 } + scope:province = { save_scope_as = background_terrain_scope } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + } + + option = { + name = bp3_survey.1020.a + scope:province.county = { + add_county_modifier = { + modifier = inspection_old_roads_of_x_border_modifier + years = 10 + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_good + MODIFIER = inspection_old_roads_of_x_border_modifier + YEARS = 10 + } + + remove_treasury_or_gold = inspection_minor_gold + # Success chance + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + + stress_impact = { + greedy = minor_stress_gain + generous = minor_stress_impact_loss + profligate = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 5 + OR = { + has_trait = generous + has_trait = profligate + } + } + } + } + + option = { + name = bp3_survey.1020.b + scope:province.county = { + add_county_modifier = { + modifier = inspection_old_roads_of_x_populace_modifier + years = 10 + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message + MODIFIER = inspection_old_roads_of_x_populace_modifier + YEARS = 10 + } + + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_medium + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_survey.1020.c + scope:province.county = { + add_county_modifier = { + modifier = inspection_old_roads_of_x_domain_modifier + years = 10 + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message + MODIFIER = inspection_old_roads_of_x_domain_modifier + YEARS = 10 + } + + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = decrease_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = decrease_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_medium + } + + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_survey.1020.d + scope:province.county = { + add_county_modifier = { + modifier = inspection_old_roads_negative_modifier + years = 10 + } + } + inspection_survey_local_message_county_modifier = { + TYPE = message_bad + MODIFIER = inspection_old_roads_negative_modifier + YEARS = 10 + } + + # Success chance + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + + stress_impact = { + generous = minor_stress_gain + profligate = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = profligate + } + } + } + } + + after = { + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +scripted_effect bp3_survey_1030_character_effect = { + create_character = { + template = merchant_template + faith = scope:city_province.faith + culture = scope:city_province.culture + gender = root + location = scope:city_province + save_scope_as = merchant_$VALUE$ + after_creation = { + if = { + limit = { + scope:city_province = { + has_variable = fighting_guilds_option_$VALUE$ + var:fighting_guilds_option_$VALUE$ = { + OR = { + this = 12 + this = 14 + this = 15 + } + } + } + } + add_trait = giant + } + } + } +} + +# Fighting Guilds +bp3_survey.1030 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1030.t + desc = bp3_survey.1030.desc + theme = survey_activity + + override_background = { + reference = market + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:merchant_1 + animation = disapproval + hide_info = yes + } + + center_portrait = { + character = root + animation = debating + } + + right_portrait = { + character = scope:merchant_2 + animation = rage + hide_info = yes + } + + trigger = { + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + scope:province.county = { + any_county_province = { + has_holding_type = city_holding + NOR = { + has_province_modifier = inspection_fighting_guilds_innkeepers_guild_modifier + has_province_modifier = inspection_fighting_guilds_artists_guild_modifier + } + free_building_slots >= 1 + } + } + } + + immediate = { + inspection_survey_intent_county_modifier = { MODIFIER = inspection_learning_intent_local_guilds_modifier } + scope:province.county = { + random_county_province = { + limit = { + has_holding_type = city_holding + NOR = { + has_province_modifier = inspection_fighting_guilds_innkeepers_guild_modifier + has_province_modifier = inspection_fighting_guilds_artists_guild_modifier + } + free_building_slots >= 1 + } + weight = { + base = 1 + modifier = { + factor = 10 + free_building_slots >= 2 + } + } + save_scope_as = city_province + } + } + inspection_fighting_guilds_effect = { VALUE = 1 } + inspection_fighting_guilds_effect = { VALUE = 2 } + bp3_survey_1030_character_effect = { VALUE = 1 } + bp3_survey_1030_character_effect = { VALUE = 2 } + } + + option = { + name = bp3_survey.1030.a + trigger = { + scope:city_province = { + free_building_slots >= 2 + } + } + duel = { + skills = { diplomacy stewardship } + value = 25 + 50 = { + desc = bp3_survey.1030.a.win + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_message = { + type = event_generic_good + title = bp3_survey.1030.a.win + + add_prestige = medium_prestige_gain + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 1 } + inspection_fighting_guilds_setup_reward_effect = { VALUE = 2 } + } + # Success chance + inspection_success_chance_change_effect = { + CHANGE = increase_medium + } + } + + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_good + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 1 } + inspection_fighting_guilds_setup_reward_effect = { VALUE = 2 } + } + } + } + } + } + } + } + 50 = { + desc = bp3_survey.1030.a.loss + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1030.a.loss_short + + # Success chance + inspection_success_chance_change_effect = { + CHANGE = decrease_medium + } + } + } + } + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_survey.1030.b + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 1 } + } + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_good + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 1 } + } + } + } + } + } + } + + # Success chance + inspection_success_chance_change_effect = { + CHANGE = increase_minor + } + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_survey.1030.c + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 2 } + } + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_good + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:city_province = { + inspection_fighting_guilds_setup_reward_effect = { VALUE = 2 } + } + } + } + } + } + } + + # Success chance + inspection_success_chance_change_effect = { + CHANGE = increase_minor + } + ai_chance = { + base = 100 + } + } + + option = { + name = bp3_survey.1030.d + add_gold = medium_gold_value + # Success chance + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_gain + profligate = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = profligate + } + } + modifier = { + factor = 5 + has_trait = greedy + } + } + } + + after = { + scope:merchant_1 = { + silent_disappear_ai_if_not_hired = yes + } + scope:merchant_2 = { + silent_disappear_ai_if_not_hired = yes + } + remove_variable = fighting_guilds_option_1 + remove_variable = fighting_guilds_option_2 + } +} + +# The Fire Spreading +bp3_survey.1040 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1040.t + desc = bp3_survey.1040.desc + theme = survey_activity + + override_background = { + reference = burning_building + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = throne_room_two_handed_passive_1 + } + + center_portrait = { + character = root + animation = fear + } + + right_portrait = { + character = scope:merchant_character + hide_info = yes + animation = crying + } + + lower_right_portrait = { + character = scope:county_owner + } + + override_effect_2d = { + reference = smoke + } + + immediate = { + inspection_survey_intent_development = { VALUE = 5 } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + create_character = { + template = merchant_template + faith = scope:province.faith + culture = scope:province.culture + gender = root + location = scope:province + save_scope_as = merchant_character + } + scope:province = { + destroy_random_building_variable_effect = yes + if = { + limit = { + province_owner != root + } + province_owner = { + save_scope_as = county_owner + } + } + } + } + + option = { + name = bp3_survey.1040.a + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + duel = { + skill = prowess + value = 14 + 50 = { + desc = bp3_survey.1040.a.win + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + send_interface_message = { + type = event_generic_good + title = bp3_survey.1040.a.win + + add_prestige = medium_prestige_gain + inspection_success_chance_change_effect = { + CHANGE = increase_medium + } + add_character_modifier = { + modifier = inspection_selfless_ruler_modifier + years = 10 + } + } + } + 45 = { + desc = bp3_survey.1040.a.loss + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -34 + } + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_bad + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:province = { destroy_random_building_effect = yes } + } + } + } + } + } + + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1040.a.loss + + increase_wounds_no_death_effect = { REASON = burned } + scope:province = { destroy_random_building_effect = yes } + } + } + 5 = { + desc = bp3_survey.1040.a.death + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -4 + } + death = { + death_reason = death_burned + } + } + } + stress_impact = { + brave = minor_stress_impact_loss + compassionate = medium_stress_impact_loss + craven = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = craven + } + modifier = { + factor = 5 + OR = { + has_trait = brave + has_trait = compassionate + } + } + } + } + + option = { + name = bp3_survey.1040.b + remove_treasury_or_gold = inspection_medium_gold + scope:province.county = { + add_county_modifier = { + modifier = inspection_fire_spreading_modifier + years = 10 + } + } + inspection_success_chance_change_focus_effect = { + FOCUS = bureaucracy + CHANGE = increase_minor + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + random = { + chance = 25 + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_bad + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:province = { destroy_random_building_effect = yes } + } + } + } + } + } + scope:province = { destroy_random_building_effect = yes } + } + stress_impact = { + generous = minor_stress_impact_loss + greedy = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 5 + has_trait = generous + } + } + } + + option = { + name = bp3_survey.1040.c + trigger = { + exists = scope:county_owner + NOR = { + scope:county_owner = root + scope:county_owner = { is_ai = yes } + } + OR = { + has_trait = callous + has_trait = sadistic + AND = { + has_relation_rival = scope:province.province_owner + has_trait = vengeful + } + } + } + duel = { + skill = intrigue + value = 15 + 50 = { + desc = bp3_survey.1040.c.win + inspection_activity_options_positive_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_message = { + type = event_generic_good + title = bp3_survey.1040.c.win + + scope:county_owner = { + add_opinion = { + modifier = respect_opinion + target = root + opinion = 25 + } + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + } + } + 50 = { + desc = bp3_survey.1040.c.loss + inspection_activity_options_negative_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1040.c.loss + + scope:county_owner = { + add_opinion = { + modifier = hate_opinion + target = root + opinion = -50 + } + } + inspection_success_chance_change_effect = { + CHANGE = decrease_medium + } + } + } + } + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_bad + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:province = { + destroy_random_building_effect = yes + county = { change_development_level = -2 } + } + } + } + } + } + } + scope:province = { + destroy_random_building_effect = yes + county = { change_development_level = -2 } + } + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + compassionate = major_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = compassionate + } + modifier = { + factor = 5 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = vengeful + } + } + } + } + + option = { + name = bp3_survey.1040.d + random = { + chance = 50 + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_bad + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:province = { + destroy_random_building_effect = yes + county = { change_development_level = -1 } + } + } + } + } + } + } + send_interface_message = { + type = event_generic_bad + title = bp3_survey.1040.destroyed_building + + scope:province = { + destroy_random_building_effect = yes + county = { change_development_level = -1 } + } + } + } + inspection_success_chance_change_effect = { + CHANGE = decrease_medium + } + stress_impact = { + compassionate = medium_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = compassionate + } + } + } + + after = { + scope:merchant_character = { + silent_disappear_ai_if_not_hired = yes + } + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +# Expanding the Town Walls +bp3_survey.1050 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1050.t + desc = bp3_survey.1050.desc + theme = survey_activity + + override_background = { + reference = market + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = disapproval + } + + center_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:merchant_character + hide_info = yes + animation = debating + } + + immediate = { + inspection_survey_intent_county_modifier = { MODIFIER = inspection_learning_intent_building_modifier } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + create_character = { + template = merchant_template + faith = scope:province.faith + culture = scope:province.culture + gender = root + location = scope:province + save_scope_as = merchant_character + } + } + + option = { + name = bp3_survey.1050.a + remove_treasury_or_gold = { + value = { + value = minor_treasury_or_gold_value + min = 50 + } + multiply = inspection_activity_option_multiplier + } + scope:province = { + add_province_modifier = { + modifier = inspection_expanding_walls_new_modifier + years = 10 + } + } + inspection_survey_local_message_province_modifier = { + TYPE = message_good + MODIFIER = inspection_expanding_walls_new_modifier + YEARS = 10 + } + + inspection_success_chance_change_effect = { + CHANGE = increase_minor + } + + stress_impact = { + greedy = minor_stress_gain + generous = minor_stress_impact_loss + profligate = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 5 + OR = { + has_trait = generous + has_trait = profligate + } + } + } + } + + option = { + name = bp3_survey.1050.b + remove_treasury_or_gold = { + value = { + value = minor_treasury_or_gold_value + min = 50 + } + multiply = inspection_activity_option_multiplier + } + scope:province = { + add_province_modifier = { + modifier = inspection_expanding_walls_old_modifier + years = 10 + } + } + inspection_survey_local_message_province_modifier = { + TYPE = message_good + MODIFIER = inspection_expanding_walls_old_modifier + YEARS = 10 + } + + inspection_success_chance_change_effect = { + CHANGE = increase_minor + } + + stress_impact = { + greedy = minor_stress_gain + generous = minor_stress_impact_loss + profligate = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = greedy + } + modifier = { + factor = 5 + OR = { + has_trait = generous + has_trait = profligate + } + } + } + } + + option = { + name = bp3_survey.1050.c + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_gain + profligate = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = profligate + } + } + modifier = { + factor = 5 + has_trait = greedy + } + } + } + + after = { + scope:merchant_character = { + silent_disappear_ai_if_not_hired = yes + } + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +# Mine Your Own Business +bp3_survey.1060 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1060.t + desc = { + desc = bp3_survey.1060.desc + first_valid = { + triggered_desc = { + trigger = { + scope:mine_type = 1 + } + desc = bp3_survey.1060.desc.copper + } + triggered_desc = { + trigger = { + scope:mine_type = 2 + } + desc = bp3_survey.1060.desc.silver + } + triggered_desc = { + trigger = { + scope:mine_type = 3 + } + desc = bp3_survey.1060.desc.gold + } + } + } + theme = survey_activity + + override_background = { + reference = fp3_cave + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = throne_room_two_handed_passive_1 + } + + center_portrait = { + character = root + animation = survey + } + + right_portrait = { + character = scope:guest_1 + animation = ecstasy + } + + trigger = { + scope:province = { has_special_building_slot = no } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 10 + scope:province = { + OR = { + later_historical_gold_mine_trigger = yes + later_historical_silver_mine_trigger = yes + later_historical_copper_mine_trigger = yes + } + } + } + } + + immediate = { + inspection_survey_intent_province_modifier = { MODIFIER = inspection_learning_intent_flourishing_metal_trade_modifier } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + + scope:activity = { + random_attending_character = { + limit = { + this != root + } + weight = { + base = 1 + modifier = { + factor = 20 + OR = { + is_close_family_of = root + is_spouse_of = root + } + } + } + save_scope_as = guest_1 + } + } + + random_list = { + 60 = { + trigger = { + scope:province = { + NOR = { + later_historical_gold_mine_trigger = yes + later_historical_silver_mine_trigger = yes + } + } + } + save_scope_value_as = { + name = mine_type + value = 1 + } + } + 35 = { + trigger = { + scope:province = { + NOR = { + later_historical_gold_mine_trigger = yes + later_historical_copper_mine_trigger = yes + } + } + } + save_scope_value_as = { + name = mine_type + value = 2 + } + } + 5 = { + trigger = { + scope:province = { + NOR = { + later_historical_silver_mine_trigger = yes + later_historical_copper_mine_trigger = yes + } + } + } + save_scope_value_as = { + name = mine_type + value = 3 + } + } + } + } + + option = { + name = bp3_survey.1060.a + scope:province = { + switch = { + trigger = scope:mine_type + 3 = { + hidden_effect = { add_special_building_slot = generic_gold_mines_01 } + add_special_building = generic_gold_mines_01 + } + 2 = { + hidden_effect = { add_special_building_slot = generic_silver_mines_01 } + add_special_building = generic_silver_mines_01 + } + 1 = { + hidden_effect = { add_special_building_slot = generic_copper_mines_01 } + add_special_building = generic_copper_mines_01 + } + } + } + hidden_effect = { + if = { + limit = { + scope:province.county.holder != scope:host + } + scope:province.county.holder = { + send_interface_message = { + type = send_interface_message_good + title = bp3_survey_liege_intervention + + show_as_tooltip = { + scope:province = { + switch = { + trigger = scope:mine_type + 3 = { + hidden_effect = { add_special_building_slot = generic_gold_mines_01 } + add_special_building = generic_gold_mines_01 + } + 2 = { + hidden_effect = { add_special_building_slot = generic_silver_mines_01 } + add_special_building = generic_silver_mines_01 + } + 1 = { + hidden_effect = { add_special_building_slot = generic_copper_mines_01 } + add_special_building = generic_copper_mines_01 + } + } + } + } + } + } + } + } + + inspection_success_chance_change_effect = { + CHANGE = increase_medium + } + } + + after = { + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +# Regular Irregularities +bp3_survey.1070 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1070.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:county_owner } + } + desc = bp3_survey.1070.desc.intro.personal + } + triggered_desc = { + trigger = { + exists = scope:county_owner + } + desc = bp3_survey.1070.desc.intro.vassal + } + } + desc = bp3_survey.1070.desc + } + theme = survey_activity + + override_background = { + reference = study + } + + cooldown = { years = 1 } + + left_portrait = { + character = root + animation = reading + } + + right_portrait = { + character = scope:county_owner + animation = shame + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + scope:province.province_owner != root + scope:province.province_owner.stewardship < 10 + } + } + + immediate = { + inspection_survey_intent_control = { VALUE = 5 } + if = { + limit = { + scope:province.province_owner != root + } + scope:province.province_owner = { save_scope_as = county_owner } + } + } + + option = { + name = bp3_survey.1070.a + flavor = bp3_survey.1070.a.flavor + + scope:county_owner ?= { + add_opinion = { + modifier = frustrated_opinion + target = root + opinion = -10 + } + } + add_dread = 10 + add_treasury_or_gold = minor_treasury_or_gold_value + add_character_modifier = { + modifier = inspection_regular_irregularities_modifier + years = 10 + } + + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + + stress_impact = { + just = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + has_trait = just + } + } + } + + option = { + name = bp3_survey.1070.b + flavor = bp3_survey.1070.b.flavor + add_treasury_or_gold = minor_treasury_or_gold_value + add_character_modifier = { + modifier = inspection_regular_irregularities_local_modifier + years = 5 + } + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + + stress_impact = { + greedy = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + just = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = just + } + modifier = { + factor = 5 + OR = { + has_trait = arbitrary + has_trait = greedy + } + } + } + } + + option = { + name = bp3_survey.1070.c + flavor = bp3_survey.1070.c.flavor + + scope:county_owner ?= { + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 10 + } + } + + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + + stress_impact = { + greedy = minor_stress_gain + wrathful = minor_stress_gain + just = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = wrathful + has_trait = greedy + has_trait = just + } + } + } + } +} + +scripted_trigger place_worth_visiting_modifier_trigger = { + NOR = { + has_province_modifier = inspection_proteted_poi_levy_modifier + has_province_modifier = inspection_protected_holy_site_levy_modifier + has_province_modifier = inspection_protected_holy_poi_levy_modifier + has_province_modifier = inspection_protected_poi_gold_modifier + has_province_modifier = inspection_protected_holy_site_gold_modifier + has_province_modifier = inspection_protected_holy_poi_gold_modifier + } +} + +# A Place Worth Visiting +bp3_survey.1080 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1080.t + desc = { + desc = bp3_survey.1080.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:holy_poi_location + } + desc = bp3_survey.1080.desc.holy_poi + } + triggered_desc = { + trigger = { + exists = scope:poi_location + } + desc = bp3_survey.1080.desc.poi + } + triggered_desc = { + trigger = { + exists = scope:holy_site_location + } + desc = bp3_survey.1080.desc.holy_site + } + } + desc = bp3_survey.1080.desc.outro + } + theme = survey_activity + + override_background = { + reference = market + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = throne_room_two_handed_passive_1 + } + + center_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:traveler_character + hide_info = yes + animation = debating + } + + trigger = { + scope:province.county = { + any_county_province = { + OR = { + barony = { is_holy_site_of = root.faith } + has_special_building = yes + } + place_worth_visiting_modifier_trigger = yes + } + } + } + + immediate = { + inspection_survey_intent_control = { VALUE = 5 } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + create_character = { + template = travel_leader_court_position_template + faith = root.faith + culture = root.culture + gender = root + location = scope:province + save_scope_as = traveler_character + } + scope:province.county = { + random_county_province = { + limit = { + OR = { + any_journey_point_of_interest_trigger = yes + AND = { + barony = { is_holy_site_of = root.faith } + barony.title_province = scope:province.county.title_province + } + } + place_worth_visiting_modifier_trigger = yes + } + alternative_limit = { + OR = { + any_journey_point_of_interest_trigger = yes + barony = { is_holy_site_of = root.faith } + } + place_worth_visiting_modifier_trigger = yes + } + weight = { + base = 1 + modifier = { + factor = 100 + barony = { is_holy_site_of = root.faith } + } + } + if = { + limit = { + any_journey_point_of_interest_trigger = yes + barony = { is_holy_site_of = root.faith } + } + save_scope_as = holy_poi_location + } + else_if = { + limit = { + any_journey_point_of_interest_trigger = yes + } + save_scope_as = poi_location + } + else_if = { + limit = { + barony = { is_holy_site_of = root.faith } + } + save_scope_as = holy_site_location + } + save_scope_as = location_province + } + } + } + + option = { + name = bp3_survey.1080.a + remove_treasury_or_gold = inspection_minor_gold + scope:poi_location ?= { + add_province_modifier = { + modifier = inspection_protected_poi_gold_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message_good + MODIFIER = inspection_protected_poi_gold_modifier + YEARS = 25 + } + } + scope:holy_site_location ?= { + add_province_modifier = { + modifier = inspection_protected_holy_site_gold_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message_good + MODIFIER = inspection_protected_holy_site_gold_modifier + YEARS = 25 + } + } + scope:holy_poi_location ?= { + add_province_modifier = { + modifier = inspection_protected_holy_poi_gold_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message_good + MODIFIER = inspection_protected_holy_poi_gold_modifier + YEARS = 25 + } + } + + inspection_success_chance_change_effect = { + CHANGE = increase_medium + } + + stress_impact = { + compassionate = minor_stress_impact_loss + diligent = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + OR = { + has_trait = compassionate + has_trait = diligent + } + } + } + } + + option = { + name = bp3_survey.1080.b + scope:poi_location ?= { + add_province_modifier = { + modifier = inspection_proteted_poi_levy_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message + MODIFIER = inspection_proteted_poi_levy_modifier + YEARS = 25 + } + } + scope:holy_site_location ?= { + add_province_modifier = { + modifier = inspection_protected_holy_site_levy_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message + MODIFIER = inspection_protected_holy_site_levy_modifier + YEARS = 25 + } + } + scope:holy_poi_location ?= { + add_province_modifier = { + modifier = inspection_protected_holy_poi_levy_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message + MODIFIER = inspection_protected_holy_poi_levy_modifier + YEARS = 25 + } + } + + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + + stress_impact = { + arrogant = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + has_trait = arrogant + } + } + } + + option = { + name = bp3_survey.1080.c + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + + stress_impact = { + compassionate = minor_stress_gain + diligent = minor_stress_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = diligent + } + } + } + } + + after = { + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + scope:traveler_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +scripted_trigger bp3_survey_1090_terrain_trigger = { + OR = { + has_holding = no + terrain = hills + terrain = mountains + terrain = steppe + terrain = forest + terrain = desert_mountains + terrain = desert + terrain = drylands + } +} + +# The Hidden Hinterlands +bp3_survey.1090 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1090.t + desc = bp3_survey.1090.desc + theme = survey_activity + + override_background = { + trigger = { + scope:poaching_province = { + OR = { + terrain = forest + terrain = hills + terrain = mountains + } + } + } + reference = ep2_hunt_poachers_camp + } + + override_background = { + reference = wilderness + } + + cooldown = { years = 1 } + + left_portrait = { + character = scope:soldier_character + hide_info = yes + animation = throne_room_two_handed_passive_1 + } + + center_portrait = { + character = root + animation = survey + } + + right_portrait = { + character = scope:hunter_character + hide_info = yes + animation = hunting_carcass_start + } + + trigger = { + scope:province.county = { + any_county_province = { + bp3_survey_1090_terrain_trigger = yes + NOR = { + has_province_modifier = inspection_hidden_hinterlands_recruit_modifier + has_province_modifier = inspection_hidden_hinterlands_hunters_modifier + } + } + } + } + + immediate = { + inspection_survey_intent_control = { VALUE = 5 } + create_character = { + template = soldier_friend_character + culture = root.culture + faith = root.faith + gender = root + location = scope:province + save_scope_as = soldier_character + + after_creation = { + add_character_flag = { + flag = need_military_outfit + } + } + } + create_character = { + template = hunter_template + faith = root.faith + culture = root.culture + gender = root + location = scope:province + save_scope_as = hunter_character + } + scope:province.county = { + random_county_province = { + limit = { + bp3_survey_1090_terrain_trigger = yes + } + save_scope_as = poaching_province + } + } + } + + option = { + name = bp3_survey.1090.a + remove_treasury_or_gold = inspection_minor_gold + scope:poaching_province = { + add_province_modifier = { + modifier = inspection_hidden_hinterlands_recruit_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message_good + MODIFIER = inspection_hidden_hinterlands_recruit_modifier + YEARS = 25 + } + } + + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = increase_medium + } + + stress_impact = { + diligent = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + OR = { + has_trait = diligent + has_trait = wrathful + } + } + } + } + + option = { + name = bp3_survey.1090.b + scope:poaching_province = { + add_province_modifier = { + modifier = inspection_hidden_hinterlands_hunters_modifier + years = 25 + } + inspection_survey_local_message_specific_location_province_modifier = { + TYPE = message + MODIFIER = inspection_hidden_hinterlands_hunters_modifier + YEARS = 25 + } + } + + inspection_success_chance_change_focus_effect = { + FOCUS = border + CHANGE = decrease_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = border + CHANGE = increase_minor + } + + stress_impact = { + lifestyle_hunter = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + has_trait = lifestyle_hunter + } + } + } + + option = { + name = bp3_survey.1090.c + + inspection_success_chance_change_focus_effect = { + FOCUS = domain + CHANGE = increase_minor + } + inspection_success_chance_change_not_focus_effect = { + FOCUS = domain + CHANGE = decrease_minor + } + + stress_impact = { + content = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 5 + has_trait = content + } + } + } + + after = { + scope:soldier_character = { + silent_disappear_ai_if_not_hired = yes + } + scope:hunter_character = { + silent_disappear_ai_if_not_hired = yes + } + } +} + +### Progression Events ### +bp3_survey.1200 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1200.t + desc = bp3_survey.1200.desc + theme = survey_activity + + override_background = { reference = study } + + left_portrait = { + character = root + animation = writing + } + + cooldown = { years = 1 } + + option = { + name = bp3_survey.1200.a + inspection_success_chance_change_effect = { + CHANGE = increase_medium + } + } +} + +bp3_survey.1210 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1210.t + desc = bp3_survey.1210.desc + theme = survey_activity + + override_background = { reference = study } + + left_portrait = { + character = root + animation = writing + } + + cooldown = { years = 1 } + + option = { + name = bp3_survey.1210.a + inspection_success_chance_change_effect = { + CHANGE = increase_minor + } + } +} + +bp3_survey.1220 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1220.t + desc = bp3_survey.1220.desc + theme = survey_activity + + override_background = { reference = study } + + left_portrait = { + character = root + animation = disapproval + } + + cooldown = { years = 1 } + + option = { + name = bp3_survey.1220.a + inspection_success_chance_change_effect = { + CHANGE = decrease_minor + } + } +} + +bp3_survey.1230 = { + type = activity_event + content_source = dlc_015 + title = bp3_survey.1230.t + desc = bp3_survey.1230.desc + theme = survey_activity + + override_background = { reference = study } + + left_portrait = { + character = root + animation = rage + } + + cooldown = { years = 1 } + + option = { + name = bp3_survey.1230.a + inspection_success_chance_change_effect = { + CHANGE = decrease_medium + } + } +} diff --git a/events/dlc/ce1/epidemic_events_2.txt b/events/dlc/ce1/epidemic_events_2.txt new file mode 100644 index 00000000..76c36da6 --- /dev/null +++ b/events/dlc/ce1/epidemic_events_2.txt @@ -0,0 +1,951 @@ +namespace = epidemic_events + +epidemic_events.2001 = { #defender trying to status quo the vassal war cuz he's sick + type = character_event + title = epidemic_events.2001.t + desc = epidemic_events.2001.desc + theme = plague + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:pleading_vassal + animation = beg + } + lower_right_portrait = { + character = scope:attacking_vassal + } + override_background = { + reference = army_camp + } + override_effect_2d = { + reference = fog + } + cooldown = { years = 30 } + + trigger = { + is_available_adult = yes + any_vassal = { + is_ai = yes + is_at_war = yes + any_character_war = { + primary_attacker = { + is_vassal_of = root + is_ai = yes + } + is_defender = prev + attacker_war_score > 30 + } + realm_has_any_epidemic = { SIZE = 3 INTENSITY = minor } + current_gold_value > minor_gold_value + } + } + + immediate = { + random_vassal = { + limit = { + is_ai = yes + is_at_war = yes + any_character_war = { + primary_attacker = { + is_vassal_of = root + is_ai = yes + } + is_defender = prev + attacker_war_score > 30 + } + realm_has_any_epidemic = { SIZE = 2 INTENSITY = minor } + current_gold_value > minor_gold_value + } + save_scope_as = pleading_vassal + get_random_realm_epidemic = { INTENSITY = minor } + random_character_war = { + limit = { + primary_attacker = { + is_vassal_of = root + is_ai = yes + } + is_defender = prev + attacker_war_score > 30 + } + save_scope_as = vassal_war + } + } + scope:vassal_war = { + primary_attacker = { + save_scope_as = attacking_vassal + } + } + set_variable = { + name = gold_transfer_value + value = scope:pleading_vassal.current_gold_value + } + scope:pleading_vassal = { + pay_short_term_gold = { + target = root + gold = current_gold_value + } + hidden_effect = { + if = { + limit = { + NOT = { has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait } + } + random = { + chance = 25 + infect_with_epidemic = scope:epidemic_scope + } + } + } + } + } + + option = { #send a royal order for white peace + name = epidemic_events.2001.c + + duel = { + skill = diplomacy + target = scope:attacking_vassal + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = epidemic_events.2001.c.success + left_icon = scope:pleading_vassal + right_icon = scope:attacking_vassal + scope:vassal_war = { + end_war = white_peace + } + add_legitimacy_effect = { LEGITIMACY = minor_legitimacy_gain } + scope:pleading_vassal = { + add_opinion = { + modifier = thankful_opinion + opinion = 30 + target = root + } + } + } + } + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = epidemic_events.2001.c.failure + left_icon = scope:pleading_vassal + right_icon = scope:attacking_vassal + scope:pleading_vassal = { + add_opinion = { + modifier = disappointed_opinion + opinion = -25 + target = root + } + } + custom_tooltip = epidemic_events.2001.danger + } + hidden_effect = { + random = { + chance = 10 + trigger_event = { + months = 4 + id = epidemic_events.2002 + } + } + } + } + } + + stress_impact = { + greedy = medium_stress_gain + compassionate = medium_stress_loss + just = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = low_chance_impact_positive_ai_value + ai_rationality = low_chance_impact_positive_ai_value + } + } + } + + option = { #imprison the other guy from traveling to you during a pandemic and wash whatever he touched + name = epidemic_events.2001.b + flavor = epidemic_events.2001.b.desc + + imprison = { + target = scope:pleading_vassal + type = dungeon + } + + scope:pleading_vassal = { + add_opinion = { + modifier = angry_opinion + opinion = -40 + target = root + } + } + custom_tooltip = epidemic_events.2001.danger + hidden_effect = { + random = { + chance = 10 + trigger_event = { + months = 4 + id = epidemic_events.2002 + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = low_chance_impact_positive_ai_value + ai_rationality = low_chance_impact_positive_ai_value + } + } + + stress_impact = { + compassionate = medium_stress_gain + just = medium_stress_gain + paranoid = major_stress_loss + } + } + + option = { #pay money to end war + name = epidemic_events.2001.a + + scope:vassal_war = { + end_war = white_peace + } + pay_treasury_or_gold = { + target = scope:attacking_vassal + value = { + value = root.var:gold_transfer_value + multiply = 0.5 + } + } + + scope:pleading_vassal = { + add_opinion = { + modifier = thankful_opinion + opinion = 30 + target = root + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = low_chance_impact_negative_ai_value + ai_compassion = low_chance_impact_positive_ai_value + } + } + + stress_impact = { + greedy = medium_stress_gain + compassionate = medium_stress_loss + } + + + } + + after = { + hidden_effect = { + if = { + limit = { + scope:pleading_vassal = { + has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait + is_imprisoned = no + } + } + random_list = { + 60 = { + random_courtier = { + limit = { + NOT = { has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait } + } + save_scope_as = infected_courtier + } + send_interface_toast = { + title = epidemic_events.2001.epidemic_spread.t + left_icon = scope:pleading_vassal + right_icon = scope:infected_courtier + scope:infected_courtier = { + infect_with_epidemic = scope:epidemic_scope + } + } + } + 20 = { + if = { + limit = { + NOT = { has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait } + } + } + random_courtier = { + limit = { + NOT = { has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait } + } + save_scope_as = first_infected_courtier + } + random_courtier = { + limit = { + NOT = { + has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait + scope:first_infected_courtier = this + } + } + save_scope_as = second_infected_courtier + } + send_interface_toast = { + title = epidemic_events.2001.epidemic_spread.t + left_icon = scope:second_infected_courtier + right_icon = scope:first_infected_courtier + scope:first_infected_courtier = { + infect_with_epidemic = scope:epidemic_scope + } + scope:second_infected_courtier = { + infect_with_epidemic = scope:epidemic_scope + } + } + } + } + } + } + } +} + +epidemic_events.2002 = { + type = character_event + title = epidemic_events.2002.t + desc = epidemic_events.2002.desc + theme = plague + + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:attacking_vassal + lower_right_portrait = scope:pleading_vassal + + trigger = { + exists = scope:epidemic_scope + exists = scope:vassal_war + is_ai = no + } + + override_background = { + reference = battlefield + } + override_effect_2d = { + reference = fog + } + + immediate = { + if = { + limit = { + scope:epidemic_scope = { + outbreak_intensity = minor + } + } + scope:epidemic_scope = { + set_epidemic_outbreak_intensity = major + } + } + else = { + scope:epidemic_scope = { + set_epidemic_outbreak_intensity = apocalyptic + } + } + add_legitimacy = miniscule_legitimacy_loss + } + + option = { + name = epidemic_events.2002.a + stress_impact = { + base = minor_stress_gain + } + } + +} + +epidemic_events.2003 = { #maa are dying from war + type = character_event + title = epidemic_events.2003.t + desc = epidemic_events.2003.desc + theme = plague + + left_portrait = { + character = root + animation = stress + } + + right_portrait = { + character = scope:marshal + animation = marshal_shield + } + + override_background = { + reference = army_camp + } + + override_effect_2d = { + reference = flies + } + + cooldown = { years = 8 } + + trigger = { + is_available_adult = yes + any_held_county = { + any_county_province = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + save_temporary_scope_as = first_county + } + any_held_county = { + this != scope:first_county + any_county_province = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + } + + exists = cp:councillor_marshal + } + immediate = { + random_held_county = { + limit = { + any_county_province = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + } + random_county_province = { + limit = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + save_scope_as = first_epidemic_province + random_province_epidemic = { + save_scope_as = epidemic_scope + } + } + save_scope_as = first_epidemic_county + } + random_held_county = { + limit = { + this != scope:first_epidemic_county + any_county_province = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + } + random_county_province = { + limit = { + has_stationed_regiment = yes + any_province_epidemic = { + intensity >= minor + } + } + save_scope_as = second_epidemic_province + } + } + cp:councillor_marshal = { save_scope_as = marshal } + } + + option = { #pay more to get more recruits + name = epidemic_events.2003.a + + every_maa_regiment = { + change_maa_troops_count = { + value = { + value = this.maa_current_troops_count + multiply = -0.25 + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = low_chance_impact_negative_ai_value + ai_rationality = low_chance_impact_positive_ai_value + } + } + + stress_impact = { + greedy = medium_stress_gain + ambitious = medium_stress_loss + } + } + + option = { #dont care, press peasants as maa + name = epidemic_events.2003.b + + scope:first_epidemic_province = { + add_province_modifier = { + modifier = epidemic_pressed_levies + years = 5 + } + } + + scope:second_epidemic_province = { + add_province_modifier = { + modifier = epidemic_pressed_levies + years = 5 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = low_chance_impact_positive_ai_value + ai_compassion = low_chance_impact_negative_ai_value + ai_rationality = low_chance_impact_positive_ai_value + } + } + + stress_impact = { + just = medium_stress_gain + } + } + + option = { #close the barracks! + name = epidemic_events.2003.c + + scope:first_epidemic_province = { + add_province_modifier = { + modifier = epidemic_closed_barracks + years = 5 + } + } + + scope:second_epidemic_province = { + add_province_modifier = { + modifier = epidemic_closed_barracks + years = 5 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = low_chance_impact_positive_ai_value + ai_rationality = low_chance_impact_positive_ai_value + } + } + + stress_impact = { + paranoid = medium_stress_loss + } + } +} + +epidemic_events.2004 = { #Medicinal Jar creation event + hidden = yes + + trigger = { + is_available_adult = yes + court_position:court_physician_court_position ?= { + is_available_ai_adult = yes + culture != root.culture + NOT = { + has_character_flag = physician_medicinal_jar + } + } + realm_has_any_nearby_epidemic = { SIZE = 4 INTENSITY = minor } + } + + cooldown = { years = 160 } + + immediate = { + court_position:court_physician_court_position = { + save_scope_as = physician + } + scope:physician = { + create_artifact = { + name = medicine_jar + description = medicine_jar_desc + type = miscellaneous + visuals = glazed_jar + modifier = artifact_epidemic_resistance_1_modifier + modifier = artifact_learning_lifestyle_xp_2_modifier + save_scope_as = medicine_jar + quality = 50 + } + add_character_flag = physician_medicinal_jar + } + + if = { + limit = { + scope:physician = { + can_equip_artifact = scope:medicine_jar + } + } + scope:medicine_jar = { + equip_artifact_to_owner = yes + } + get_random_nearby_realm_epidemic = { INTENSITY = minor } + trigger_event = { + days = { 3 7 } + id = epidemic_events.2005 + } + } + } + +} + +epidemic_events.2005 = { #Glass jar artifact + type = character_event + title = epidemic_events.2005.t + desc = epidemic_events.2005.desc + theme = plague + + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:physician + animation = physician + } + + artifact = { + target = scope:medicine_jar + position = lower_center_portrait + } + + override_background = { + reference = physicians_study + } + + trigger = { + scope:physician = { is_alive = yes } + } + + option = { #politely ask the physisican to part with the jar + name = epidemic_events.2005.a + duel = { + skill = diplomacy + target = scope:physician + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = epidemic_events.2005.a.success + left_icon = scope:physician + scope:medicine_jar = { + set_owner = root + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = epidemic_events.2005.a.failure + left_icon = scope:physician + scope:medicine_jar = { + add_artifact_modifier = artifact_physician_aptitude_1_modifier + } + } + } + } + + stress_impact = { + craven = minor_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = low_chance_impact_negative_ai_value + } + } + + + } + + option = { #violently grab the jar from physician + name = epidemic_events.2005.b + + scope:physician = { + add_opinion = { + modifier = fp3_stole_from_me + opinion = -25 + target = root + } + progress_towards_rival_effect = { + REASON = rival_stole_artifact + CHARACTER = root + OPINION = 0 + } + } + + scope:medicine_jar = { + set_owner = root + } + + stress_impact = { + temperate = medium_stress_gain + just = medium_stress_gain + paranoid = medium_stress_loss + wrathful = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = low_chance_impact_positive_ai_value + ai_energy = low_chance_impact_positive_ai_value + ai_rationality = low_chance_impact_negative_ai_value + } + } + } + + option = { #let phycisian keep his precious jar + name = epidemic_events.2005.c + scope:medicine_jar = { + add_artifact_modifier = artifact_physician_aptitude_1_modifier + } + + stress_impact = { + temperate = medium_stress_loss + just = medium_stress_loss + trusting = medium_stress_loss + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = low_chance_impact_positive_ai_value + ai_rationality = low_chance_impact_positive_ai_value + ai_greed = low_chance_impact_negative_ai_value + } + } + } + +} + +epidemic_events.2006 = { #Dancing plague + type = character_event + title = epidemic_events.2006.t + desc = epidemic_events.2006.desc + theme = plague + override_background = courtyard + override_effect_2d = { reference = flies } + + left_portrait = { + character = root + animation = stress + } + + right_portrait = { + character = scope:dance_victim + animation = dancing_plague + } + + trigger = { + is_available_adult = yes + OR = { + is_ai = no + this = top_liege + } + capital_province = { + any_province_epidemic = { + #epidemic_type = epidemic_type:ergotism + intensity < apocalyptic + } + } + NOT = { + has_character_flag = had_event_dancing_plague + } + } + + weight_multiplier = { + base = 1 + modifier = { #Since a big outbreak occurred in Aachen 1374 + add = 9 + capital_province = { + county = title:c_aachen + } + current_date >= 1370.1.1 + current_date <= 1380.1.1 + } + modifier = { #Since an outbreak occurred in Erfurt 1247 + add = 9 + capital_province = { + duchy = title:d_thuringia + } + current_date >= 1240.1.1 + current_date <= 1250.1.1 + } + modifier = { #Since an outbreak occurred in Kolbigk 1021 + add = 9 + capital_province = { + geographical_region = ghw_region_saxony + } + current_date >= 1020.1.1 + current_date <= 1030.1.1 + + } + modifier = { #Since it historically occurred in Europe + add = 1 + capital_province = { + geographical_region = world_europe + } + } + + } + + immediate = { + capital_province = { + random_province_epidemic = { + limit = { + epidemic_type = epidemic_type:ergotism + outbreak_intensity < apocalyptic + } + save_scope_as = dancing_plague + } + } + create_character = { + template = servant_character + dynasty = none + location = root.capital_province + save_scope_as = dance_victim + } + hidden_effect = { + scope:dance_victim = { + add_trait = ergotism + } + } + + scope:dancing_plague = { + set_epidemic_outbreak_intensity = apocalyptic + } + + add_character_flag = had_event_dancing_plague + } + + option = { #let's join the paaartey + trigger = { + has_trait = eccentric + } + name = epidemic_events.2006.a + add_character_modifier = { + modifier = ce1_gone_dancing + years = 2 + } + + hidden_effect = { + random = { + chance = 10 + trigger_event = { id = health.1017 days = { 5 15 } } #You contract ergotism + } + } + + stress_impact = { + eccentric = medium_stress_loss + } + + ai_chance = { + base = 100 + } + + } + + option = { #slay the demon! + trigger = { + has_trait = zealous + } + name = epidemic_events.2006.d + add_piety = minor_piety_gain + + scope:dance_victim = { + death = { + death_reason = death_murder + killer = root + } + } + + stress_impact = { + zealous = medium_stress_loss + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = low_chance_impact_negative_ai_value + ai_zeal = low_chance_impact_positive_ai_value + } + } + } + + option = { #eh, every dance stops eventually, right? + name = epidemic_events.2006.b + + capital_county = { + add_county_modifier = { + modifier = dance_plague_modifier + years = 4 + } + } + + stress_impact = { + compassionate = minor_stress_gain + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = low_chance_impact_negative_ai_value + } + } + } + + option = { #tie them down! allieviate their pains somehow + name = epidemic_events.2006.c + + hidden_effect = { + random = { + chance = 10 + trigger_event = { id = health.1017 days = { 5 15 } } #You contract ergotism + } + } + + stress_impact = { + lustful = medium_stress_loss + compassionate = medium_stress_loss + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = low_chance_impact_positive_ai_value + } + } + } +} diff --git a/events/dlc/ce1/legend_events.txt b/events/dlc/ce1/legend_events.txt new file mode 100644 index 00000000..f937478c --- /dev/null +++ b/events/dlc/ce1/legend_events.txt @@ -0,0 +1,880 @@ +namespace = legend_events + +############################ +## Legend Spawn Events +## 0001-1000 +## by James Beaumont +############################ + +# legend_events.0001 - Chronicler gives you a legend seed +# legend_events.0010 - Chronicler convinces someone to promote your legend +# legend_events.0020 - Hold Court presentation of a legend seed + +# Chronicler gives you a legend seed :D +legend_events.0001 = { + type = character_event + title = legend_events.0001.t + desc = { + desc = legend_events.0001.desc.intro + first_valid = { + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:slew_dragon + } + desc = legend_events.0001.desc.mid.slew_dragon + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:ancestral_saint + } + desc = legend_events.0001.desc.mid.ancestral_saint + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:old_godly_descent + } + desc = legend_events.0001.desc.mid.old_godly_descent + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:raised_by_animals + } + desc = legend_events.0001.desc.mid.raised_by_animals + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:auspicious_stars + } + desc = legend_events.0001.desc.mid.auspicious_stars + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:virgin_birth + } + desc = legend_events.0001.desc.mid.virgin_birth + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:spoke_to_angels + } + desc = legend_events.0001.desc.mid.spoke_to_angels + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:fought_the_devil + } + desc = legend_events.0001.desc.mid.fought_the_devil + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:exotic_backstory + } + desc = legend_events.0001.desc.mid.exotic_backstory + } + triggered_desc = { + trigger = { + var:legend_seed_to_give = flag:ancient_people + } + desc = legend_events.0001.desc.mid.ancient_people + } + } + desc = legend_events.0001.desc.outro + } + theme = legend + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:chronicler + animation = chancellor + } + lower_center_portrait = { + trigger = { + exists = scope:legend_character + } + character = scope:legend_character + } + + # The Court Chronicler needs to be alive + trigger = { + scope:chronicler = { + is_alive = yes + } + } + + immediate = { + random_list = { # Determine the seed to hand out + 10 = { # Ancestor killed a dragon + trigger = { + any_ancestor = { + even_if_dead = yes + is_adult = yes + is_alive = no + } + NOT = { has_game_rule = historical_legends_only } + } + random_ancestor = { + even_if_dead = yes + limit = { + is_adult = yes + is_alive = no + } + weight = { + base = 1 + modifier = { + add = prowess + } + modifier = { + add = martial + } + } + save_scope_as = legend_character + } + set_variable = { + name = legend_seed_to_give + value = flag:slew_dragon + } + } + 10 = { # Ancestor was/should be a saint + trigger = { + any_ancestor = { + even_if_dead = yes + is_adult = yes + is_alive = no + } + NOT = { has_game_rule = historical_legends_only } + } + random_ancestor = { + even_if_dead = yes + limit = { + is_adult = yes + is_alive = no + } + weight = { + base = 1 + modifier = { + add = learning + } + modifier = { + factor = 3 + OR = { + num_virtuous_traits = { + target = root.faith + value >= 1 + } + has_trait = saint + } + } + modifier = { + factor = 0.1 + OR = { + num_sinful_traits = { + target = root.faith + value >= 1 + } + has_trait = excommunicated + } + } + } + save_scope_as = legend_character + } + set_variable = { + name = legend_seed_to_give + value = flag:ancestral_saint + } + } + 10 = { # I am descended from an old God + trigger = { + NOT = { religion = { is_in_family = rf_pagan } } + any_ancestor = { + even_if_dead = yes + is_alive = no + religion = { is_in_family = rf_pagan } + } + NOT = { has_game_rule = historical_legends_only } + } + random_ancestor = { + even_if_dead = yes + limit = { + religion = { is_in_family = rf_pagan } + is_alive = no + } + weight = { + base = 1 + modifier = { + add = learning + } + modifier = { + factor = 3 + OR = { + num_virtuous_traits = { + target = root.faith + value >= 1 + } + has_trait = saint + } + } + modifier = { + factor = 0.1 + OR = { + num_sinful_traits = { + target = root.faith + value >= 1 + } + has_trait = excommunicated + } + } + } + save_scope_as = legend_character + } + set_variable = { + name = legend_seed_to_give + value = flag:old_godly_descent + } + } + 10 = { # I was raised by dangerous animals + trigger = { + NOT = { has_game_rule = historical_legends_only } + } + select_local_animal_effect = { TYPE = dangerous } + set_variable = { + name = legend_seed_to_give + value = flag:raised_by_animals + } + } + 10 = { # Born under auspicious stars + trigger = { + NOT = { has_game_rule = historical_legends_only } + } + set_variable = { + name = legend_seed_to_give + value = flag:auspicious_stars + } + } + 10 = { # Virgin birth + trigger = { + has_any_bastard_trait_trigger = yes + NOT = { has_game_rule = historical_legends_only } + } + set_variable = { + name = legend_seed_to_give + value = flag:virgin_birth + } + } + 10 = { # Spoke to an angel + trigger = { + religion_has_angels_trigger = yes + NOT = { has_game_rule = historical_legends_only } + } + set_variable = { + name = legend_seed_to_give + value = flag:spoke_to_angels + } + } + 10 = { # Fought a demon + trigger = { + NOT = { has_game_rule = historical_legends_only } + } + set_variable = { + name = legend_seed_to_give + value = flag:fought_the_devil + } + } + 10 = { # Exotic backstory + get_appropriate_exotic_location = yes + set_variable = { + name = legend_seed_to_give + value = flag:exotic_backstory + } + } + 10 = { # Ancient people + trigger = { + # The ancient cultures we have for now aren't appropriate for these regions + root.culture = { + NOR = { + culture_overlaps_geographical_region = world_burma + culture_overlaps_geographical_region = custom_arakan_mountains + culture_overlaps_geographical_region = world_tibet + } + } + } + get_appropriate_ancient_people = yes + set_variable = { + name = legend_seed_to_give + value = flag:ancient_people + } + } + } + } + + option = { # Wowie zowie, really? + name = legend_events.0001.a + if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:slew_dragon + } + create_legend_seed = { + type = heroic + quality = famed + chronicle = beast_slayer + properties = { + beast = flag:dragon + location = root.location + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:ancestral_saint + } + create_legend_seed = { + type = holy + quality = famed + chronicle = saintly_deed + properties = { + ancestor = scope:legend_character + religion = root.religion + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:old_godly_descent + } + generate_religion_descent_effect = { + RELIGION = scope:legend_character.religion + GOD = high_god + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:raised_by_animals + } + create_legend_seed = { + type = heroic + quality = famed + chronicle = raised_by_animals + properties = { + beast = var:animal_type + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:auspicious_stars + } + create_legend_seed = { + type = holy + quality = famed + chronicle = sacred_birth + properties = { + reason = flag:auspicious + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:virgin_birth + } + create_legend_seed = { + type = holy + quality = famed + chronicle = sacred_birth + properties = { + reason = flag:virgin + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:spoke_to_angels + } + create_legend_seed = { + type = holy + quality = famed + chronicle = divine_intervention + properties = { + god = flag:the_angels + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:fought_the_devil + } + create_legend_seed = { + type = holy + quality = famed + chronicle = fought_devil + properties = { + faith = root.faith + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:exotic_backstory + } + create_legend_seed = { + type = heroic + quality = famed + chronicle = exotic_backstory + properties = { + location = scope:exotic_location + } + } + } + else_if = { + limit = { + exists = var:legend_seed_to_give + var:legend_seed_to_give = flag:ancient_people + } + create_legend_seed = { + type = legitimizing + quality = famed + chronicle = ancient_people + properties = { + culture = scope:ancient_culture + title = root.primary_title + original_region = var:original_region + } + } + } + ai_chance = { + base = 100 + } + } + + option = { # I don't want this legend + name = legend_events.0001.b + ai_chance = { + base = 0 + } + } +} + +# Chronicler convinces someone to promote your legend +legend_events.0010 = { + type = character_event + title = legend_events.0010.t + desc = legend_events.0010.desc + theme = legend + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:chronicler + animation = chancellor + } + lower_center_portrait = scope:potential_promoter + + trigger = { + OR = { + scope:chronicler ?= { + is_alive = yes + has_court_position = chronicler_court_position + employer = root + } + employs_court_position = chronicler_court_position + } + OR = { + # Vassals + any_vassal_or_below = { + # No barons + highest_held_title_tier >= tier_county + # Not promoting their own legend + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + # Neighbourinos + any_neighboring_and_across_water_top_liege_realm_owner = { + # Not promoting their own legend + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + } + } + + immediate = { + if = { + limit = { + NOT = { + scope:chronicler ?= { + is_alive = yes + has_court_position = chronicler_court_position + employer = root + } + } + } + court_position:chronicler_court_position ?= { save_scope_as = chronicler } + } + random_list = { + # Vassals + 75 = { + trigger = { + any_vassal_or_below = { + highest_held_title_tier >= tier_county + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + } + random_vassal_or_below = { + limit = { + highest_held_title_tier >= tier_county + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + save_scope_as = potential_promoter + } + } + # Neighbourinos + 25 = { + trigger = { + any_neighboring_and_across_water_top_liege_realm_owner = { + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + } + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + promoted_legend.legend_owner != root + promoted_legend != scope:liege.promoted_legend + is_ai = yes + } + save_scope_as = potential_promoter + } + } + } + + } + + option = { # Diplo duel option + name = legend_events.0010.a + duel = { + skill = diplomacy + target = scope:potential_promoter + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { # Reluctant to drop their existing legend + scope:potential_promoter = { exists = promoted_legend } + factor = 0.5 + } + min = 10 + send_interface_toast = { + title = legend_events.0010.a.success + right_icon = scope:potential_promoter + scope:potential_promoter = { + set_promoted_legend = root.promoted_legend + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { # Reluctant to drop their existing legend + scope:potential_promoter = { exists = promoted_legend } + factor = 2 + } + min = 10 + send_interface_toast = { + title = legend_events.0010.a.failure + right_icon = scope:potential_promoter + add_prestige = minor_prestige_loss + } + } + } + ai_chance = { + base = 100 + modifier = { # I'd have better odds with option B + intrigue > diplomacy + factor = 0 + } + } + } + + option = { # Lie + name = legend_events.0010.b + duel = { + skill = intrigue + target = scope:potential_promoter + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { # Reluctant to drop their existing legend + scope:potential_promoter = { exists = promoted_legend } + factor = 0.5 + } + min = 10 + send_interface_toast = { + title = legend_events.0010.a.success + right_icon = scope:potential_promoter + scope:potential_promoter = { + set_promoted_legend = root.promoted_legend + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { # Reluctant to drop their existing legend + scope:potential_promoter = { exists = promoted_legend } + factor = 2 + } + min = 10 + send_interface_toast = { + title = legend_events.0010.a.failure + right_icon = scope:potential_promoter + add_prestige = minor_prestige_loss + } + } + } + stress_impact = { + honest = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { # I'd have better odds with option A + intrigue < diplomacy + factor = 0 + } + } + } + + option = { # Nah not interested, go away. + name = legend_events.0010.c + ai_chance = { + base = 0 + } + } +} + + +legend_events.0020 = { #hold court presentation of a potential seed + type = court_event + title = legend_events.0020.t + desc = legend_events.0020.desc + + theme = legend + court_scene = { + button_position_character = scope:seed_presenter + court_event_force_open = yes + show_timeout_info = no + should_pause_time = yes + roles = { + scope:seed_presenter = { + group = petitioners_group + animation = personality_rational + } + } + } + + widget = { + gui = "event_window_widget_event_chain_progress" + container = "custom_widgets_container" + controller = event_chain_progress + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + court_grandeur_current_level > court_grandeur_minimum_expected_level + } + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic } + } + + trigger = { + any_pool_guest = { + count >= 1 + is_available_adult = yes + has_court_event_flag = no + culture != root.culture + opinion = { + target = root + value >= high_positive_opinion + } + } + NOR = { + has_personal_legend_seed = heroic + has_personal_legend_seed = holy + has_personal_legend_seed = legitimizing + } + } + + immediate = { + random_pool_guest = { + limit = { + is_available_adult = yes + has_court_event_flag = no + culture != root.culture + opinion = { + target = root + value >= high_positive_opinion + } + } + save_scope_as = seed_presenter + court_event_character_flag_effect = yes + } + + hold_court_queue_next_event_effect = yes + } + + option = { #yes, it is my about my dynasty and I shall prove it! + name = legend_events.0020.a + legend_seed_great_deed_dynasty_effect = yes + culture = { + change_cultural_acceptance = { + target = scope:seed_presenter.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_hold_court_event_outcome + } + } + stress_impact = { + ambitious = minor_stress_loss + } + ai_chance = { #we want AI to have seeds + base = 100 + } + } + + option = { #yes, it is about me ruling the title and I shall prove it! + name = legend_events.0020.b + legend_seed_great_deed_title_effect = { + TITLE = root.primary_title + } + culture = { + change_cultural_acceptance = { + target = scope:seed_presenter.culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_hold_court_event_outcome + } + } + stress_impact = { + ambitious = minor_stress_loss + } + ai_chance = { #we want AI to have seeds + base = 100 + } + } + + option = { #no, I don't need to humor your culture fairy tales + name = legend_events.0020.c + add_prestige = medium_prestige_gain + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + culture = { + change_cultural_acceptance = { + target = scope:seed_presenter.culture + value = low_negative_culture_acceptance + desc = cultural_acceptance_gain_hold_court_event_outcome + } + } + + stress_impact = { + ambitious = minor_stress_gain + compassionate = minor_stress_gain + callous = medium_stress_loss + sadistic = medium_stress_loss + } + ai_chance = { #we want AI to have seeds + base = 0 + } + } + + after = { + scope:seed_presenter = { + clear_court_event_participation = yes + } + # Finish up the chain if relevant. + hold_court_queue_post_event_effect = yes + } +} + +legend_events.1000 = { + type = letter_event + opening = { desc = legend_events.1000.t } + desc = legend_events.1000.desc + sender = scope:legend_owner + + immediate = { + scope:legend = { + legend_owner = { save_scope_as = legend_owner } + } + } + + option = { #I did a silly + name = legend_events.1000.a + pay_short_term_gold = { + target = scope:legend_owner + gold = medium_gold_value + } + stress_impact = { + deceitful = major_stress_impact_loss + honest = medium_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { #If you have really high Intrigue you get away with paying just half + name = legend_events.1000.b + trigger = { + intrigue >= very_high_skill_rating + } + #trait = deceitful + pay_short_term_gold = { + target = scope:legend_owner + gold = { + value = medium_gold_value + multiply = 0.5 + } + } + stress_impact = { + deceitful = massive_stress_impact_loss + honest = major_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + after = { + remove_variable = accepted_promote_legend_var + } +} diff --git a/events/dlc/ce1/legend_spread_events_veronica.txt b/events/dlc/ce1/legend_spread_events_veronica.txt new file mode 100644 index 00000000..169f2d18 --- /dev/null +++ b/events/dlc/ce1/legend_spread_events_veronica.txt @@ -0,0 +1,3067 @@ +namespace = legend_spread_events +namespace = legend_debug + +############################ +## Legend Events +## 0001-1000 +## by Veronica Pazos +############################ + +# legend_spread_events.0001 - Are you the true descendant of x? +# legend_spread_events.0010 - Did you really kill that monster? +# legend_spread_events.0020 - Someone in your court doubts you! Oh no! +# legend_spread_events.0030 - Grab a recent memory - add that to your legend +# legend_spread_events.0040 - Did you do this because of a begging peasant? +# legend_spread_events.0050 - Did you do this to honor a lady/lord? +# legend_spread_events.0060 - Rumours about a powerful vassal mocking your legend +# legend_spread_events.0070 - Someone arrives at your court impressed by your legend +# legend_spread_events.0080 - People are going on a pilgrimage to the location of your legend + +##### DEBUG ###### +legend_debug.0001 = { + orphan = yes + type = character_event + theme = legend + desc = legend_debug.0001.desc + + option = { + create_legend_seed = { + type = heroic + quality = famed + chronicle = debug_legend + properties = { + beast = flag:bear + location = root.location + ancestor = character:159835 + ancestor_flag = flag:ramses + antagonist = flag:vercingetorix + culture = root.culture + title = title:k_england + god = flag:germanic_high_god_name + original_region = geographical_region:world_middle_east_jerusalem + } + } + } + + option = { + add_character_modifier = legend_spread_debug_modifier + } +} + +# Do you wanna send children to praise your legend? +legend_spread_events.0001 = { + + type = character_event + title = legend_spread_events.0001.t + desc = legend_spread_events.0001.desc + theme = legend + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:chronicler + animation = chancellor + } + lower_center_portrait = { + character = scope:ancestor + } + lower_left_portrait = { + trigger = { + exists = scope:my_child + primary_title.tier = tier_county + } + character = scope:my_child + } + cooldown = { years = 5 } + override_background = { reference = study } + + trigger = { + is_available_adult = yes + promoted_legend ?= { + legend_owner = root + exists = legend_property:ancestor + } + any_courtier = { #there's someone to tell you about this + this != root + is_available_ai_adult = yes + } + } + + immediate = { + grab_appropriate_chronicler_effect = yes + save_scope_as = root_scope #save scope for loc + promoted_legend = { + save_scope_as = legend + legend_property:ancestor = { save_scope_as = ancestor } + } + if = { + limit = { + any_child = { + is_alive = yes + age <= 12 + NOT = { is_primary_heir_of = root } + } + } + random_child = { + limit = { + is_alive = yes + age <= 12 + NOT = { is_primary_heir_of = root } + } + save_scope_as = my_child + } + } + } + + option = { #I am indeed + name = legend_spread_events.0001.a + duel = { + skills = { diplomacy intrigue } + value = high_skill_rating + 50 = { #you convince people + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = legend_spread_events.0001.a.tt.success + send_interface_toast = { + title = legend_spread_events.0001.a.tt.success + left_icon = root + promoted_legend = { + change_legend_quality_effect = { + VALUE = medium_legend_quality_increase + } + } + } + } + # no one believes you + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = legend_spread_events.0001.a.tt.failure + send_interface_toast = { + title = legend_spread_events.0001.a.tt.failure + left_icon = root + promoted_legend = { + change_legend_quality_effect = { + VALUE = medium_legend_quality_decrease + } + } + } + } + } + + stress_impact = { + content = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = humble + } + } + } + } + + option = { #Let's keep it down + name = legend_spread_events.0001.b + every_vassal = { + custom = every_parochial_vassal + add_opinion = { + modifier = trust_opinion + opinion = 20 + target = root + } + } + stress_impact = { + arrogant = major_stress_impact_gain + deceitful = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = deceitful + has_trait = ambitious + } + } + } + } + + option = { #Send your own child + name = legend_spread_events.0001.c + trigger = { + exists = scope:my_child + primary_title.tier = tier_county + } + promoted_legend = { + change_legend_quality_effect = { + VALUE = minor_legend_quality_increase + } + } + every_vassal = { + custom = every_parochial_vassal + add_opinion = { + modifier = trust_opinion + opinion = 20 + target = root + } + } + stress_impact = { + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + arrogant = medium_stress_impact_gain #it's weird to have your child in the market + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = content + has_trait = arrogant + } + } + } + } + + option = { #I am my own legend + name = legend_spread_events.0001.d + trigger = { + has_trait = arrogant + } + add_character_modifier = { + modifier = legend_my_own_ancestor_modifier + years = 25 + } + stress_impact = { + humble = major_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = content + } + } + modifier = { + factor = 2 + has_trait = arrogant + } + } + } +} + +# Did you kill that monster? +legend_spread_events.0010 = { + + type = character_event + title = legend_spread_events.0010.t + desc = legend_spread_events.0010.desc + theme = legend + override_background = { reference = feast } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = brave + has_trait = strong + has_trait = ambitious + } + } + animation = hero_flex + } + animation = personality_honorable + } + right_portrait = { + character = scope:bard + animation = instrument_active + } + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + promoted_legend ?= { + legend_owner = root + exists = legend_property:beast #any legend featuring a beast + NOT = { has_variable = had_legends_0010 } + } + any_courtier = { #there's someone to tell you about this + this != root + is_available_ai_adult = yes + } + } + + immediate = { + save_scope_as = root_scope #loc reasons + promoted_legend = { + set_variable = had_legends_0010 + save_scope_as = legend + } + grab_appropriate_bard_effect = yes + } + + option = { #Actually... I killed a dragon + name = legend_spread_events.0010.a + trigger = { + promoted_legend = { + NOT = { + legend_property:beast ?= flag:dragon + } + } + } + duel = { + skills = { diplomacy prowess } #would people believe you _can_ kill a dragon? + value = high_skill_rating + 40 = { #you convince people + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = lifestyle_hunter + add = 5 + } + modifier = { + has_trait = deceitful + add = 5 + } + desc = legend_spread_events.0010.a.tt.success + send_interface_toast = { + title = legend_spread_events.0010.a.tt.success + left_icon = root + promoted_legend = { + set_legend_property = { name = beast target = flag:dragon } + } + add_character_modifier = { + modifier = legends_dragon_slayer + years = 25 + } + if = { + limit = { + is_ai = yes + } + random = { + chance = 5 + give_nickname = nick_the_dragonslayer + } + } + else = { + random = { + chance = 50 + give_nickname = nick_the_dragonslayer + } + } + add_prestige = minor_prestige_gain + } + } + # no one believes you + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + has_trait = craven + add = 25 + } + desc = legend_spread_events.0010.a.tt.failure + send_interface_toast = { + title = legend_spread_events.0010.a.tt.failure + left_icon = root + add_prestige = major_prestige_loss + } + } + } + + stress_impact = { + honest = major_stress_impact_gain + humble = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = humble + } + } + modifier = { + factor = 2 + has_trait = arrogant + } + } + } + + option = { #I did but it was a GIGANTIC one + name = legend_spread_events.0010.b + trigger = { + promoted_legend = { + NOT = { + legend_property:beast ?= flag:huge_beast + } + } + } + duel = { + skills = { diplomacy prowess } #would people believe you _can_ kill a dragon? + value = medium_skill_rating + 50 = { #you convince people + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = lifestyle_hunter + add = 25 + } + modifier = { + has_trait = strong + add = 5 + } + modifier = { + has_trait = brave + add = 5 + } + desc = legend_spread_events.0010.b.tt.success + send_interface_toast = { + title = legend_spread_events.0010.b.tt.success + left_icon = root + promoted_legend = { + set_legend_property = { name = beast target = flag:huge_beast } + } + add_prestige = minor_prestige_gain + } + } + # no one believes you + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + has_trait = craven + add = 10 + } + desc = legend_spread_events.0010.a.tt.failure + send_interface_toast = { + title = legend_spread_events.0010.a.tt.failure + left_icon = root + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + humble = medium_stress_impact_gain + honest = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = honest + } + } + } + } + + option = { #Let's keep it down + name = legend_spread_events.0010.c + every_vassal = { + custom = every_parochial_vassal + add_opinion = { + modifier = trust_opinion + opinion = 20 + target = root + } + } + stress_impact = { + arrogant = major_stress_impact_gain + deceitful = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = deceitful + has_trait = ambitious + } + } + } + } +} + +# Someone in your court doubts you +legend_spread_events.0020 = { + + type = character_event + title = legend_spread_events.0020.t + desc = { + desc = legend_spread_events.0020.desc.intro + first_valid = { + triggered_desc = { + trigger = { + promoted_legend.legend_protagonist = root + } + desc = legend_spread_events.0020.desc.you_protag + } + desc = legend_spread_events.0020.desc.other_protag + } + desc = legend_spread_events.0020.desc.outro + } + theme = legend + override_background = { reference = corridor_day } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = wrathful + } + } + animation = anger + } + animation = eavesdrop + } + right_portrait = { + character = scope:courtier + animation = scheme + } + cooldown = { years = 5 } + + trigger = { + is_available = yes + is_landed = yes + promoted_legend ?= { + legend_owner = root + } + any_courtier = { #there's someone gossipping + is_standard_legend_spreading_courtier = yes + } + } + + immediate = { + promoted_legend = { + legend_protagonist = { save_scope_as = protagonist } + } + random_courtier = { + limit = { + is_standard_legend_spreading_courtier = yes + } + save_scope_as = courtier + } + } + + option = { #Punish them + name = legend_spread_events.0020.a + trigger = { + OR = { + has_trait = arrogant + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + } + add_dread = major_dread_gain + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:courtier + IMPRISONER = root + } + every_courtier_or_guest = { + custom = all_courtiers_and_guests + add_opinion = { + opinion = -10 + target = root + modifier = cruelty_opinion + } + } + stress_impact = { + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = calm + } + } + modifier = { + factor = 2 + OR = { + has_trait = wrathful + has_trait = sadistic + } + } + } + } + + option = { #Call them out + name = legend_spread_events.0020.b + duel = { + skill = diplomacy + target = scope:courtier + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = legend_spread_events.0020.b.tt.success + send_interface_toast = { + title = legend_spread_events.0020.b.tt.success + left_icon = scope:courtier + add_character_modifier = { + modifier = legend_put_out_rumors_modifier + years = 5 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = legend_spread_events.0020.b.tt.failure + send_interface_toast = { + title = legend_spread_events.0020.b.tt.failure + left_icon = scope:courtier + scope:courtier = { + add_opinion = { + opinion = -30 + target = root + modifier = dismissive_opinion + } + } + } + } + } + + stress_impact = { + humble = medium_stress_impact_gain + honest = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = honest + } + } + } + } + + option = { #Ignore them + name = legend_spread_events.0020.c + add_character_modifier = { + modifier = legend_sus_rumors_modifier + years = 2 + } + stress_impact = { + base = medium_stress_impact_loss + arrogant = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + } + } + } +} + +# Do you wanna add this recent memory to your chronicle? + +scripted_trigger is_legend_worthy_memory = { + has_memory_category = positive + OR = { + has_memory_category = war + has_memory_category = travel + has_memory_category = martial + has_memory_category = battle + has_memory_category = tournament + has_memory_category = nemesis + } +} + +legend_spread_events.0030 = { + + type = character_event + title = legend_spread_events.0030.t + desc = { + desc = legend_spread_events.0030.desc.intro + first_valid = { + triggered_desc = { + trigger = { + promoted_legend.legend_protagonist = root + } + desc = legend_spread_events.0030.desc.you_protag + } + desc = legend_spread_events.0030.desc.other_protag + } + } + theme = legend + override_background = { reference = study } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:chronicler + animation = page_flipping + } + cooldown = { years = 5 } + + trigger = { + is_available = yes + promoted_legend ?= { + legend_owner = root + has_legend_chapter = { + name = extra_deed + } + NOT = { has_variable = had_legends_0030 } + } + any_memory = { + is_legend_worthy_memory = yes + } + any_courtier = { #chronicler backup + this != root + is_available_ai_adult = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + any_memory = { + is_legend_worthy_memory = yes + } + } + } + + immediate = { + grab_appropriate_chronicler_effect = yes + promoted_legend = { + set_variable = { + name = had_legends_0030 + years = 10 + } + legend_protagonist = { save_scope_as = protagonist } + } + random_memory = { + limit = { is_legend_worthy_memory = yes } + weight = { + base = 1 + modifier = { + add = 10 + has_memory_category = major + } + modifier = { + add = 2 + has_memory_category = battle + } + modifier = { + add = 2 + has_memory_category = war + } + modifier = { + add = 1 + has_memory_category = martial + } + } + save_scope_as = legend_memory + } + } + + option = { #I already told you my legend once, didn't I? + name = legend_spread_events.0030.a + flavor = legend_spread_events.0030.a.flavor + trigger = { + OR = { + has_trait = stubborn + has_trait = lazy + } + } + add_character_modifier = { + modifier = legend_lazy_modifier + years = 5 + } + stress_impact = { + lazy = major_stress_impact_loss + stubborn = major_stress_impact_loss + calm = medium_stress_impact_gain + ambitious = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = calm + } + } + modifier = { + factor = 2 + OR = { + has_trait = lazy + has_trait = stubborn + } + } + } + } + + option = { #Sure, replace it + name = legend_spread_events.0030.b + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = legend_spread_events.0030.b.tt.success + send_interface_toast = { + title = legend_spread_events.0030.b.tt.success + left_icon = root + promoted_legend = { + if = { + limit = { + NOT = { + exists = var:extra_deed_memory + } + } + set_variable = { + name = extra_deed_memory + value = scope:legend_memory + } + } + set_legend_chapter = { name = extra_deed localization_key = legend_chapter_extra_deed_memory } + } + if = { + limit = { #people remember you actually did this + promoted_legend.legend_protagonist = root + } + add_character_modifier = { + modifier = legend_memory_deed_modifier + years = 5 + } + } + else = { + add_prestige = minor_prestige_gain + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = legend_spread_events.0030.b.tt.failure + send_interface_toast = { + title = legend_spread_events.0030.b.tt.failure + left_icon = root + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + lazy = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = stubborn + } + } + } + } + + option = { #Leave it as it is + name = legend_spread_events.0030.c + every_courtier_or_guest = { + limit = { + OR = { + has_trait = humble + has_trait = content + } + } + custom = humble_content_courtiers_and_guests + add_opinion = { + opinion = 20 + target = root + modifier = pleased_opinion + } + } + stress_impact = { + humble = medium_stress_impact_loss + content = medium_stress_impact_loss + shy = major_stress_impact_loss + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = content + has_trait = shy + } + } + modifier = { + factor = 2 + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} + +# Did you do this because a peasant begged you to? +legend_spread_events.0040 = { + + type = character_event + title = legend_spread_events.0040.t + desc = { + desc = legend_spread_events.0040.desc.intro + first_valid = { + triggered_desc = { + trigger = { + promoted_legend.legend_protagonist = root + } + desc = legend_spread_events.0040.desc.you_protag + } + desc = legend_spread_events.0040.desc.other_protag + } + desc = legend_spread_events.0040.desc.outro + } + theme = legend + override_background = { reference = throne_room } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + animation = dismissal + } + animation = personality_honorable + } + right_portrait = { + character = scope:chronicler + animation = page_flipping + } + lower_center_portrait = { + trigger = { + exists = scope:chaplain + scope:chaplain != scope:chronicler + } + character = scope:chaplain + } + cooldown = { years = 5 } + + trigger = { + is_available = yes + promoted_legend ?= { + legend_owner = root + OR = { + legend_type = legend_type:heroic + legend_type = legend_type:holy + } + has_legend_chapter = motivation + NOT = { + has_legend_chapter = { + name = motivation + localization_key = legend_chapter_motivation_peasant + } + } + NOT = { has_variable = had_legends_0040 } + } + any_courtier = { #chronicler backup + this != root + is_available_ai_adult = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.5 + promoted_legend ?= { + legend_owner = root + legend_type = legend_type:holy + } + } + } + + immediate = { + grab_appropriate_chronicler_effect = yes + promoted_legend = { + set_variable = had_legends_0040 + legend_protagonist = { save_scope_as = protagonist } + } + save_scope_as = root_scope + cp:councillor_court_chaplain ?= { save_scope_as = chaplain } + } + + option = { #I would _never_ let a peasant tell me what to do + name = legend_spread_events.0040.a + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + promoted_legend = { + set_legend_chapter = { name = motivation localization_key = legend_chapter_motivation_evil } + } + stress_impact = { + callous = major_stress_impact_loss + sadistic = major_stress_impact_loss + calm = medium_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = compassionate + } + } + modifier = { + factor = 2 + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + + option = { #I sure did! + name = legend_spread_events.0040.b + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = legend_spread_events.0040.b.tt.success + send_interface_toast = { + title = legend_spread_events.0040.b.tt.success + left_icon = root + promoted_legend = { + set_legend_chapter = { name = motivation localization_key = legend_chapter_motivation_peasant } + } + add_piety = medium_piety_gain + every_vassal_or_below = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + target = root + opinion = -10 + modifier = disappointed_opinion + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = legend_spread_events.0040.b.tt.failure + send_interface_toast = { + title = legend_spread_events.0040.b.tt.failure + left_icon = root + if = { + limit = { + exists = cp:councillor_court_chaplain + } + cp:councillor_court_chaplain = { + add_opinion = { + target = root + opinion = -10 + modifier = impious_opinion + } + } + } + else_if = { + limit = { promoted_legend.legend_type = legend_type:holy } + add_piety = medium_piety_loss + } + else = { add_piety = minor_piety_loss } + } + } + } + + stress_impact = { + compassionate = major_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + promoted_legend.legend_type = legend_type:holy + } + modifier = { + factor = 2 + OR = { + has_trait = compassionate + has_trait = zealous + } + } + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + + option = { #Leave it as it is + name = legend_spread_events.0040.c + if = { + limit = { + promoted_legend.legend_type = legend_type:holy + } + add_piety = minor_piety_loss + } + else = { + add_piety = miniscule_piety_loss + } + stress_impact = { + zealous = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = zealous + has_trait = compassionate + } + } + } + } +} + +# Did you do this to honor a fair lady/lord? +scripted_trigger 0050_valid_courtier = { + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + is_attracted_to_gender_of = root + root = { is_attracted_to_gender_of = prev } +} + +legend_spread_events.0050 = { + type = character_event + title = legend_spread_events.0050.t + desc = legend_spread_events.0050.desc + theme = legend + override_background = { reference = garden } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = rakish + has_trait = lustful + has_trait = seducer + has_trait = deviant + } + } + animation = flirtation_left + } + triggered_animation = { + trigger = { has_trait = callous } + animation = dismissal + } + animation = laugh + } + right_portrait = { + character = scope:bard + animation = instrument_active + } + lower_left_portrait = { + trigger = { exists = scope:my_spouse } + character = scope:my_spouse + } + lower_right_portrait = scope:honored_lady + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + promoted_legend ?= { + legend_owner = root + NOT = { has_variable = had_legends_0050 } + NOR = { + has_legend_chapter = { + name = motivation + localization_key = legend_chapter_motivation_spouse + } + has_legend_chapter = { + name = motivation + localization_key = legend_chapter_motivation_honor_lady + } + } + has_legend_chapter = motivation + legend_protagonist = root + } + any_courtier_or_guest = { #we have a lady + 0050_valid_courtier = yes + count >= 2 #to make sure we also have a bard + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.25 + OR = { + is_married = yes + has_trait = lustful + has_trait = seducer + has_trait = rakish + } + } + } + + immediate = { + grab_appropriate_bard_effect = yes + promoted_legend = { + set_variable = had_legends_0050 + } + if = { + limit = { is_married = yes } + random_spouse = { + weight = { + base = 1 + modifier = { + add = 5 + has_relation_soulmate = root + } + modifier = { + add = 3 + primary_spouse = this + } + modifier = { + add = 1 + has_relation_lover = root + } + } + save_scope_as = my_spouse + } + } + random_courtier_or_guest = { + limit = { + 0050_valid_courtier = yes + this != scope:bard + } + weight = { + base = 1 + modifier = { + add = 20 + has_relation_soulmate = root + } + modifier = { + add = 10 + has_relation_lover = root + } + modifier = { + add = 5 + is_married = no + age >= root.age_minus_10 + age <= root.age_plus_10 + } + } + save_scope_as = honored_lady + } + } + + option = { #Of course! To honor my spouse! + name = legend_spread_events.0050.a + trigger = { + is_married = yes + } + promoted_legend = { + set_legend_chapter = { + name = motivation + localization_key = legend_chapter_motivation_spouse + } + } + if = { + limit = { + can_set_relation_soulmate_trigger = { CHARACTER = scope:my_spouse } + scope:my_spouse = { #do they like you + opinion = { + target = root + value >= 50 + } + } + } + set_relation_soulmate = { + reason = soulmate_legend_motivation + copy_reason = lover + target = scope:my_spouse + } + } + else = { + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = soulmate_legend_motivation + OPINION = default_lover_opinion + } + } + stress_impact = { + rakish = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = rakish + } + modifier = { + factor = 0 + might_cheat_on_every_partner_trigger = no + } + } + } + + option = { #That fair woman/man... + name = legend_spread_events.0050.b + duel = { + skill = intrigue + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = seducer + add = 10 + } + modifier = { + scope:honored_lady = { + has_trait = lustful + } + add = 5 + } + desc = legend_spread_events.0050.b.tt.success + send_interface_toast = { + title = legend_spread_events.0050.b.tt.success + left_icon = scope:honored_lady + promoted_legend = { + set_legend_chapter = { name = motivation localization_key = legend_chapter_motivation_honor_lady } + } + if = { + limit = { has_focus_or_focus_trait_trigger = { FOCUS = intrigue_temptation_focus } } + add_intrigue_lifestyle_xp = major_lifestyle_xp + } + else = { + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + progress_towards_lover_effect = { + CHARACTER = scope:honored_lady + REASON = soulmate_legend_motivation + OPINION = default_lover_opinion + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:honored_lady = { + OR = { + has_trait = chaste + has_trait = celibate + } + } + add = 10 + } + desc = legend_spread_events.0050.b.tt.failure + send_interface_toast = { + title = legend_spread_events.0050.b.tt.failure + left_icon = scope:honored_lady + + reverse_add_opinion = { + modifier = insulted_opinion + target = scope:honored_lady + opinion = -10 + } + } + } + } + scope:my_spouse ?= { + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -25 + } + } + stress_impact = { + seducer = major_stress_impact_loss + lustful = medium_stress_impact_loss + honest = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = compassionate + trigger_if = { + limit = { exists = scope:my_spouse } + NOT = { + might_cheat_on_partner_trigger = { PARTNER = scope:my_spouse } + } + } + } + } + modifier = { + factor = 2 + OR = { + has_trait = lustful + has_trait = seducer + } + } + } + } + + option = { #Leave it as it is + name = legend_spread_events.0050.c + add_prestige = minor_prestige_gain + scope:my_spouse ?= { + add_opinion = { + modifier = pleased_opinion + opinion = 5 + target = root + } + } + stress_impact = { + base = medium_stress_impact_loss + lustful = major_stress_impact_gain + seducer = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = seducer + } + } + } + } +} + +#Rumors about a powerful vassal mocking you +legend_spread_events.0060 = { + + type = character_event + title = legend_spread_events.0060.t + desc = { + desc = legend_spread_events.0060.desc.intro + first_valid = { + triggered_desc = { + trigger = { + promoted_legend.legend_protagonist = root + } + desc = legend_spread_events.0060.desc.you_protag + } + desc = legend_spread_events.0060.desc.other_protag + } + desc = legend_spread_events.0060.desc.outro + } + theme = legend + override_background = { reference = throne_room } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = deceitful + has_trait = stubborn + } + } + animation = anger + } + animation = dismissal + } + right_portrait = { + character = scope:courtier + animation = worry + } + lower_center_portrait = scope:bad_vassal + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + promoted_legend ?= { + legend_owner = root + } + any_courtier_or_guest = { + is_standard_legend_spreading_courtier = yes + } + any_powerful_vassal = { + is_available_ai_adult = yes + opinion = { + target = root + value <= -20 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.25 + any_powerful_vassal = { + is_available_ai_adult = yes + opinion = { + target = root + value <= -75 + } + } + } + } + + immediate = { + random_courtier_or_guest = { + limit = { is_standard_legend_spreading_courtier = yes } + weight = { + base = 1 + modifier = { + add = 2 + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = courtier + } + random_powerful_vassal = { + limit = { + is_available_ai_adult = yes + opinion = { + target = root + value <= -20 + } + } + weight = { + base = 1 + modifier = { + add = 10 + has_relation_nemesis = root + } + modifier = { + add = 5 + has_relation_rival = root + } + modifier = { + add = 2 + opinion = { + target = root + value <= -50 + } + } + } + save_scope_as = bad_vassal + } + } + + option = { #Seethe + name = legend_spread_events.0060.a + progress_towards_rival_effect = { + CHARACTER = scope:bad_vassal + REASON = rival_mocked_legend + OPINION = -20 + } + stress_impact = { + base = medium_stress_impact_loss + wrathful = massive_stress_impact_loss + calm = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = wrathful + } + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = forgiving + } + } + } + } + + option = { #Try to put out the rumors + name = legend_spread_events.0060.b + duel = { + skills = { diplomacy intrigue } + target = scope:bad_vassal + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = legend_spread_events.0060.b.tt.success + send_interface_toast = { + title = legend_spread_events.0060.b.tt.success + left_icon = scope:bad_vassal + add_character_modifier = { + modifier = legend_no_mocking_modifier + years = 5 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = legend_spread_events.0060.b.tt.failure + send_interface_toast = { + title = legend_spread_events.0060.b.tt.failure + left_icon = scope:bad_vassal + add_character_modifier = { + modifier = legend_extra_mocking_modifier + years = 5 + } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = wrathful + has_trait = arrogant + } + } + } + } + + option = { #Turn it back on them + name = legend_spread_events.0060.c + trigger = { + intrigue >= high_skill_rating + } + scope:bad_vassal = { + add_character_modifier = { + modifier = not_believable_modifier + years = 10 + } + } + stress_impact = { + base = medium_stress_impact_loss + callous = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = deceitful + } + } + } + } + + option = { #Didn't hear anything + name = legend_spread_events.0060.d + + stress_impact = { + base = minor_stress_impact_loss + calm = medium_stress_impact_loss + forgiving = medium_stress_impact_loss + wrathful = major_stress_impact_gain + arrogant = major_stress_impact_gain + vengeful = major_stress_impact_gain + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = calm + has_trait = forgiving + } + } + modifier = { + factor = 0 + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = callous + has_trait = vengeful + } + } + } + } +} + + +#Someone sings your legend at a party - doubts +#Start of event chain + +scripted_effect trigger_appropriate_breakdown_effect = { + if = { + limit = { + promoted_legend.legend_type = legend_type:holy + } + trigger_event = { + id = legend_spread_events.0072 + days = { 10 20 } + } + } + else_if = { + limit = { + promoted_legend.legend_type = legend_type:heroic + } + trigger_event = { + id = legend_spread_events.0073 + days = { 10 20 } + } + } + else = { #Legitimizing + trigger_event = { + id = legend_spread_events.0074 + days = { 10 20 } + } + } +} + +legend_spread_events.0070 = { + type = character_event + title = legend_spread_events.0070.t + desc = legend_spread_events.0070.desc + theme = legend + override_background = { reference = feast } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = callous + has_trait = ambitious + } + } + animation = personality_honorable + } + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + animation = grief + } + animation = worry + } + right_portrait = { + character = scope:bard + animation = instrument_active + } + cooldown = { years = 25 } + + trigger = { + is_available_adult = yes + promoted_legend ?= { + legend_owner = root + } + any_courtier_or_guest = { + is_standard_legend_spreading_courtier = yes + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + grab_appropriate_bard_effect = yes + } + + option = { #I am the very best like no one ever was + name = legend_spread_events.0070.a + trigger = { + OR = { + has_trait = arrogant + has_trait = callous + has_trait = ambitious + } + } + set_variable = legend_chain_arrogant_var + custom_tooltip = legend_spread_events.0070.a.tt + add_prestige = minor_prestige_gain + trigger_event = { + id = legend_spread_events.0071 + days = { 10 20 } + } + + stress_impact = { + base = medium_stress_impact_loss + depressed_1 = major_stress_impact_gain + depressed_genetic = major_stress_impact_gain + humble = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = callous + } + } + modifier = { + factor = 0 + OR = { + has_trait = depressed_1 + has_trait = depressed_genetic + has_trait = humble + } + } + } + } + + option = { #I'm having a mental breakdown help + name = legend_spread_events.0070.b + trigger = { + NOR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + trigger_appropriate_breakdown_effect = yes + custom_tooltip = legend_spread_events.0070.a.tt + add_piety = minor_piety_gain + + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = callous + } + } + } + } + + option = { #Im having a _really_ bad mental breakdown help + name = legend_spread_events.0070.c + trigger = { + OR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + custom_tooltip = legend_spread_events.0070.a.tt + set_variable = legend_chain_depressed_var + trigger_appropriate_breakdown_effect = yes + + stress_impact = { + base = medium_stress_impact_loss + arrogant = major_stress_impact_gain + ambitious = major_stress_impact_gain + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = callous + } + } + } + } + + option = { #It's not that bad + name = legend_spread_events.0070.d + custom_tooltip = legend_spread_events.0070.a.tt + add_prestige = minor_prestige_gain + trigger_event = { + id = legend_spread_events.0071 + days = { 10 20 } + } + + stress_impact = { + base = medium_stress_impact_gain + depressed_1 = major_stress_impact_gain + depressed_genetic = major_stress_impact_gain + humble = major_stress_impact_gain + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + callous = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + OR = { + has_trait = depressed_1 + has_trait = depressed_genetic + has_trait = humble + } + } + } + } +} + +scripted_trigger legend_spread_events_0071_promoter_trigger = { + is_physically_able_adult = yes + number_of_personality_traits_in_common = { + target = root + value >= 1 + } + NOT = { exists = promoted_legend } +} + +# You're feeling pretty good about your legend +legend_spread_events.0071 = { + type = character_event + title = legend_spread_events.0071.t + desc = { + desc = legend_spread_events.0071.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_variable = legend_chain_arrogant_var } + desc = legend_spread_events.0071.desc.mid.arrogant + } + desc = legend_spread_events.0071.desc.mid + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:promoter + } + desc = legend_spread_events.0071.desc.promoter + } + desc = legend_spread_events.0071.desc.fallback + } + } + theme = legend_terrain + left_portrait = { + character = root + animation = hero_flex + camera = camera_event_very_left + } + right_portrait = { + trigger = { exists = scope:promoter } + character = scope:promoter + animation = admiration + camera = camera_event_right + } + lower_right_portrait = { + trigger = { exists = scope:other_promoter } + character = scope:other_promoter + } + + immediate = { + save_scope_as = root_scope + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { legend_spread_events_0071_promoter_trigger = yes } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = -5 + primary_title = { is_head_of_faith = yes } + } + } + save_scope_as = promoter + } + if = { + limit = { NOT = { exists = scope:promoter } } + random_vassal = { + limit = { legend_spread_events_0071_promoter_trigger = yes } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 5 + is_powerful_vassal_of = root + } + } + save_scope_as = promoter + } + } + if = { + limit = { NOT = { exists = scope:promoter } } + random_courtier = { + limit = { legend_spread_events_0071_promoter_trigger = yes } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = promoter + } + } + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + legend_spread_events_0071_promoter_trigger = yes + this != scope:promoter + } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = -5 + primary_title = { is_head_of_faith = yes } + } + } + save_scope_as = other_promoter + } + if = { + limit = { NOT = { exists = scope:other_promoter } } + random_vassal = { + limit = { + legend_spread_events_0071_promoter_trigger = yes + this != scope:promoter + } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 5 + is_powerful_vassal_of = root + } + } + save_scope_as = other_promoter + } + } + if = { + limit = { NOT = { exists = scope:other_promoter } } + random_courtier = { + limit = { + legend_spread_events_0071_promoter_trigger = yes + this != scope:promoter + } + weight = { + base = 1 + modifier = { + add = 10 + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = other_promoter + } + } + } + + option = { #Convince this guy to be a promoter + name = legend_spread_events.0071.a + trigger = { + exists = scope:promoter + } + scope:promoter = { + set_promoted_legend = root.promoted_legend + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 25 + } + } + + stress_impact = { + gregarious = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = gregarious + } + modifier = { + factor = 0 + has_trait = ambitious + } + } + } + + option = { #Convince this other guy + name = legend_spread_events.0071.b + trigger = { exists = scope:other_promoter } + scope:other_promoter = { + set_promoted_legend = root.promoted_legend + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 25 + } + } + + stress_impact = { + gregarious = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = gregarious + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = arrogant + } + } + } + } + + option = { #Try to convince your vassals you're cool instead + name = legend_spread_events.0071.c + every_vassal = { + vassal_stance = parochial + custom = every_parochial_vassal + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 50 + } + } + + stress_impact = { + humble = medium_stress_impact_gain + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = humble + } + modifier = { + factor = 2 + has_trait = ambitious + } + } + } + + option = { #I don't care about anyone's opinion but MY OWN + name = legend_spread_events.0071.d + if = { + limit = { + has_variable = legend_chain_arrogant_var + } + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_arrogant_modifier + } + } + } + else = { + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_kinda_arrogant_modifier + } + } + } + + stress_impact = { + arrogant = medium_stress_impact_loss + callous = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + humble = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = gregarious + } + } + modifier = { + factor = 2 + OR = { + has_trait = callous + has_trait = deceitful + has_trait = arrogant + } + } + } + } +} + +# You're feeling pretty bad about your legend - Holy +legend_spread_events.0072 = { + type = character_event + title = legend_spread_events.0072.t + desc = { + desc = legend_spread_events.0072.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_variable = legend_chain_depressed_var } + desc = legend_spread_events.0072.desc.mid.depressed + } + desc = legend_spread_events.0072.desc.mid.fallback + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:praying_vassal + } + desc = legend_spread_events.0072.desc.vassal + } + desc = legend_spread_events.0072.desc.fallback + } + } + theme = legend + override_background = { reference = temple } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + animation = worry + } + animation = prayer + } + right_portrait = { + trigger = { exists = scope:praying_vassal } + character = scope:praying_vassal + animation = personality_zealous + } + lower_center_portrait = { + trigger = { exists = scope:bishop } + character = scope:bishop + } + + weight_multiplier = { + base = 1 + } + + immediate = { + save_scope_as = root_scope + if = { + limit = { + any_vassal = { + is_physically_able_adult = yes + ai_zeal > 0 + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_court_chaplain } + } + } + random_vassal = { + limit = { + is_physically_able_adult = yes + ai_zeal > 0 + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_court_chaplain } + } + weight = { + base = 1 + modifier = { + add = 10 + is_powerful_vassal_of = root + } + modifier = { + add = 5 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 5 + has_trait = zealous + } + } + save_scope_as = praying_vassal + } + } + if = { + limit = { + exists = cp:councillor_court_chaplain + } + cp:councillor_court_chaplain = { save_scope_as = bishop } + } + } + + option = { #Think about god + name = legend_spread_events.0072.a + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_zealous_modifier + } + } + + stress_impact = { + zealous = major_stress_impact_loss + cynical = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = zealous + } + modifier = { + factor = 0 + OR = { + has_trait = gregarious + has_trait = ambitious + has_trait = cynical + } + } + } + } + + option = { #Convince this guy that's also praying here + name = legend_spread_events.0072.b + trigger = { + exists = scope:praying_vassal + } + scope:praying_vassal = { + set_promoted_legend = root.promoted_legend + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 25 + } + } + + stress_impact = { + gregarious = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = gregarious + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = zealous + } + } + } + } + + option = { #Try to convince your vassals you're cool instead + name = legend_spread_events.0072.c + every_vassal = { + vassal_stance = zealot + custom = every_zealot_vassal + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 50 + } + } + + if = { #if you don't have another option we give you a bit of extra piety + limit = { + NOT = { exists = scope:praying_vassal } + } + add_piety = minor_piety_gain + } + + stress_impact = { + humble = medium_stress_impact_gain + zealous = medium_stress_impact_gain + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = zealous + } + } + modifier = { + factor = 2 + has_trait = ambitious + } + } + } + + option = { #I don't care about anyone's opinion but my chaplain's + name = legend_spread_events.0072.d + trigger = { + exists = scope:bishop + } + scope:bishop = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 50 + } + } + + stress_impact = { + zealous = medium_stress_impact_loss + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} + +# You're feeling pretty bad about your legend - Heroic +legend_spread_events.0073 = { + type = character_event + title = legend_spread_events.0073.t + desc = { + desc = legend_spread_events.0073.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_variable = legend_chain_depressed_var } + desc = legend_spread_events.0073.desc.mid.depressed + } + desc = legend_spread_events.0073.desc.mid.fallback + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:fighting_vassal + } + desc = legend_spread_events.0073.desc.vassal + } + desc = legend_spread_events.0073.desc.fallback + } + } + theme = legend_terrain + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + animation = grief + } + animation = worry + } + right_portrait = { + trigger = { exists = scope:fighting_vassal } + character = scope:fighting_vassal + animation = marshal + } + lower_center_portrait = { + trigger = { exists = scope:marshal } + character = scope:marshal + } + + weight_multiplier = { + base = 1 + } + + immediate = { + save_scope_as = root_scope + if = { + limit = { + any_vassal = { + is_physically_able_adult = yes + OR = { + ai_boldness > 0 + ai_energy > 0 + } + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_marshal } + } + } + random_vassal = { + limit = { + is_physically_able_adult = yes + OR = { + ai_boldness > 0 + ai_energy > 0 + } + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_marshal } + } + weight = { + base = 1 + modifier = { + add = 10 + is_powerful_vassal_of = root + } + modifier = { + add = 5 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 5 + has_trait = brave + } + } + save_scope_as = fighting_vassal + } + } + if = { + limit = { + exists = cp:councillor_marshal + } + cp:councillor_marshal = { save_scope_as = marshal } + } + } + + option = { #Think about heroic battles + name = legend_spread_events.0073.a + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_army_modifier + } + } + + stress_impact = { + calm = medium_stress_impact_gain + wrathful = medium_stress_impact_loss + brave = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = wrathful + has_trait = brave + } + } + modifier = { + factor = 0 + has_trait = calm + } + } + } + + option = { #Convince this guy that's also hanging out here + name = legend_spread_events.0073.b + trigger = { + exists = scope:fighting_vassal + } + scope:fighting_vassal = { + set_promoted_legend = root.promoted_legend + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 25 + } + } + + stress_impact = { + gregarious = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = gregarious + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = zealous + } + } + } + } + + option = { #Try to convince your vassals you're cool instead + name = legend_spread_events.0073.c + every_vassal = { + vassal_stance = glory_hound + custom = every_glory_hound_vassal + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 50 + } + } + + if = { #if you don't have another option we give you a bit of extra prestige + limit = { + NOT = { exists = scope:fighting_vassal } + } + add_prestige = minor_prestige_gain + } + + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = ambitious + } + } + } + + option = { #I don't care about anyone's opinion but my marshal's + name = legend_spread_events.0073.d + trigger = { + exists = scope:marshal + } + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_marshal_modifier + } + } + scope:marshal = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 50 + } + } + + stress_impact = { + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} + +# You're feeling pretty bad about your legend - Legitimizing +legend_spread_events.0074 = { + type = character_event + title = legend_spread_events.0074.t + desc = { + desc = legend_spread_events.0074.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_variable = legend_chain_depressed_var } + desc = legend_spread_events.0074.desc.mid.depressed + } + desc = legend_spread_events.0074.desc.mid.fallback + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:wise_vassal + } + desc = legend_spread_events.0074.desc.vassal + } + } + first_valid = { + triggered_desc = { + trigger = { + exists = scope:spouse + } + desc = legend_spread_events.0074.desc.spouse + } + desc = legend_spread_events.0074.desc.fallback + } + } + theme = legend + override_background = { reference = ce1_catacombs } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = depressed_genetic + has_trait = depressed_1 + } + } + animation = grief + } + animation = worry + } + right_portrait = { + trigger = { exists = scope:wise_vassal } + character = scope:wise_vassal + animation = personality_honorable + } + lower_left_portrait = { + trigger = { exists = scope:spouse } + character = scope:spouse + } + lower_right_portrait = { + trigger = { exists = scope:chancellor } + character = scope:chancellor + } + + immediate = { + save_scope_as = root_scope + if = { + limit = { + any_vassal = { + is_physically_able_adult = yes + OR = { + ai_sociability > 0 + ai_compassion > 0 + } + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_chancellor } + } + } + random_vassal = { + limit = { + is_physically_able_adult = yes + OR = { + ai_sociability > 0 + ai_compassion > 0 + } + NOT = { exists = promoted_legend } + NOT = { has_council_position = councillor_chancellor } + } + weight = { + base = 1 + modifier = { + add = 10 + is_powerful_vassal_of = root + } + modifier = { + add = 5 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 5 + OR = { + has_trait = shrewd + has_trait = intellect_good + } + } + } + save_scope_as = wise_vassal + } + } + if = { + limit = { + exists = cp:councillor_chancellor + } + cp:councillor_chancellor = { save_scope_as = chancellor } + } + if = { + limit = { + any_spouse = { } + } + random_spouse = { + weight = { + base = 1 + modifier = { + add = 10 + OR = { + has_relation_lover = root + has_relation_soulmate = root + } + } + modifier = { + add = 5 + this = root.primary_spouse + } + } + save_scope_as = spouse + } + } + } + + option = { #Think about your spouse + name = legend_spread_events.0074.a + trigger = { exists = scope:spouse } + add_character_modifier = { + modifier = legend_chain_spouse_modifier + years = 25 + } + + stress_impact = { + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + lustful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = lustful + has_trait = compassionate + } + } + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + + option = { #Convince this guy that's also hanging out here + name = legend_spread_events.0074.b + trigger = { + exists = scope:wise_vassal + } + scope:wise_vassal = { + set_promoted_legend = root.promoted_legend + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 25 + } + } + + stress_impact = { + gregarious = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = gregarious + } + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = compassionate + has_trait = lustful + } + } + } + } + + option = { #Try to convince your vassals you're cool instead + name = legend_spread_events.0074.c + trigger = { + any_vassal = { } + } + every_vassal = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 50 + } + } + + if = { #if you don't have another option we give you a bit of extra prestige + limit = { + NOR = { + exists = scope:wise_vassal + exists = scope:spouse + } + } + add_prestige = minor_prestige_gain + } + + stress_impact = { + + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = deceitful + } + } + } + } + + option = { #I don't care about anyone's opinion but my chancellor's + name = legend_spread_events.0074.d + trigger = { + exists = scope:chancellor + } + promoted_legend = { + add_legend_owner_modifier = { + modifier = legend_chain_chancellor_modifier + } + } + scope:chancellor = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 50 + } + } + + stress_impact = { + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} diff --git a/events/dlc/ce1/legitimacy_events.txt b/events/dlc/ce1/legitimacy_events.txt new file mode 100644 index 00000000..8b438237 --- /dev/null +++ b/events/dlc/ce1/legitimacy_events.txt @@ -0,0 +1,32 @@ +namespace = legitimacy_events + +############################ +## Legitimacy Maintenance Events +## 0001-1000 +## by Joe Parkin +############################ + +# legitimacy_events.0001 - Debug event for testing base legitimacy values with breakdowns of sources + +legitimacy_events.0001 = { + type = character_event + title = LOREM_IPSUM_TITLE + desc = LOREM_IPSUM_DESCRIPTION + theme = realm + orphan = yes + left_portrait = root + + trigger = { + exists = dynasty + # Exclude unplayable for now + NOR = { + government_has_flag = government_is_republic + government_has_flag = government_is_theocracy + } + } + + option = { + add_legitimacy = base_legitimacy_value + custom_tooltip = base_legitimacy_debug_tt + } +} diff --git a/events/dlc/ce1/physician_epidemic_events.txt b/events/dlc/ce1/physician_epidemic_events.txt new file mode 100644 index 00000000..58b5334b --- /dev/null +++ b/events/dlc/ce1/physician_epidemic_events.txt @@ -0,0 +1,1481 @@ +namespace = physician_epidemic_events + +############################ +## Superstitious physician irritating religious officials +## 1000 +## by James Beaumont +############################ +physician_epidemic_events.1000 = { + type = character_event + title = physician_epidemic_events.1000.t + desc = physician_epidemic_events.1000.desc + theme = plague + override_effect_2d = { reference = flies } + left_portrait = { + character = scope:zealous_courtier + animation = anger + camera = camera_event_very_left + } + right_portrait = { + character = scope:physician + animation = physician + } + cooldown = { years = 5 } + trigger = { + realm_has_any_nearby_epidemic = { INTENSITY = major SIZE = 1 } + court_position:court_physician_court_position ?= { + probably_superstitious = yes + is_available_ai_adult = yes + } + OR = { + any_vassal = { + probably_anti_superstitious = yes + is_available_ai_adult = yes + } + any_courtier_or_guest = { + probably_anti_superstitious = yes + is_available_ai_adult = yes + } + } + } + + immediate = { + get_random_nearby_realm_epidemic = { INTENSITY = major } + court_position:court_physician_court_position = { save_scope_as = physician } + if = { + limit = { + any_vassal = { + probably_anti_superstitious = yes + is_available_ai_adult = yes + } + } + random_vassal = { + limit = { + probably_anti_superstitious = yes + is_available_ai_adult = yes + } + weight = { + base = 1 + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + modifier = { + add = ai_zeal + } + } + save_scope_as = zealous_courtier + } + } + else = { + random_courtier_or_guest = { + limit = { + probably_anti_superstitious = yes + is_available_ai_adult = yes + } + weight = { + base = 1 + modifier = { + add = 10 + is_of_major_interest_to_root_trigger = yes + } + modifier = { + add = 5 + is_of_minor_interest_to_root_trigger = yes + } + modifier = { + add = ai_zeal + } + } + save_scope_as = zealous_courtier + } + } + } + + option = { # How about I suggest a better solution instead + name = physician_epidemic_events.1000.a + trigger = { + has_trait = whole_of_body + } + add_character_modifier = { + modifier = ce1_non_heretical_solution + years = 5 + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_compassion = 1 + ai_rationality = 1 + } + } + } + + option = { # Oh hush you bore, I'm sure this will work + name = physician_epidemic_events.1000.b + add_character_modifier = { + modifier = ce1_unorthodox_epidemic_treatment + years = 5 + } + scope:zealous_courtier = { + progress_towards_rival_effect = { + REASON = rival_heretical_physician + CHARACTER = scope:physician + OPINION = 0 + } + } + stress_impact = { + zealous = medium_stress_impact_gain + cynical = medium_stress_impact_gain + eccentric = minor_stress_impact_loss + witch = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + ai_rationality = -0.1 + ai_compassion = 1 + } + } + } + + option = { # I don't think so + name = physician_epidemic_events.1000.c + scope:zealous_courtier = { + add_opinion = { + target = root + modifier = relieved_opinion + opinion = 20 + } + } + add_piety = medium_piety_gain + stress_impact = { + witch = medium_stress_impact_gain + eccentric = medium_stress_impact_gain + diligent = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 0.1 + ai_compassion = -1 + } + } + } +} + +############################ +## Physician calls for a quarantine of infected counties +## 1010 +## by James Beaumont +############################ +physician_epidemic_events.1010 = { + type = character_event + title = physician_epidemic_events.1010.t + desc = physician_epidemic_events.1010.desc + theme = plague + override_effect_2d = { reference = flies } + left_portrait = { + character = root + animation = worry + camera = camera_event_crowd + } + right_portrait = { + character = scope:physician + animation = debating + camera = camera_event_very_right + } + cooldown = { years = 5 } + trigger = { + court_position:court_physician_court_position ?= { + is_available_ai_adult = yes + } + realm_has_any_nearby_epidemic = { SIZE = 5 INTENSITY = major } + } + + immediate = { + get_random_nearby_realm_epidemic = { INTENSITY = major } + court_position:court_physician_court_position = { save_scope_as = physician } + } + + option = { # Oh well alrighty then + name = physician_epidemic_events.1010.a + add_character_modifier = { + modifier = ce1_major_quarantine + years = 5 + } + every_sub_realm_county = { + custom = every_infected_county + limit = { + any_county_province = { + any_province_epidemic = { + this = scope:epidemic_scope + } + } + } + add_county_modifier = { + modifier = ce1_major_quarantine_county + years = 5 + } + } + stress_impact = { + greedy = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + cynical = minor_stress_impact_gain + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = -1 + ai_rationality = 1 + } + } + } + + option = { # This is not at all worth it + name = physician_epidemic_events.1010.b + stress_impact = { + callous = medium_stress_impact_gain + diligent = medium_stress_impact_gain + scholar = minor_stress_impact_gain + patient = minor_stress_impact_gain + trusting = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + ai_energy = -1 + } + } + } +} + +############################### +## PHYSICIAN EPIDEMIC TREATMENT +## 1020 +## by James Beaumont +############################### +physician_epidemic_events.1020 = { + type = character_event + title = physician_epidemic_events.1020.t + desc = { + desc = physician_epidemic_events.1020.start.desc + first_valid = { #Disease type + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:typhus } + desc = disease_desc_short_typhus + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:consumption } + desc = disease_desc_short_consumption + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:great_pox } + desc = disease_desc_short_smallpox + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:smallpox } + desc = disease_desc_short_smallpox + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:bubonic_plague } + desc = disease_desc_short_plague + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:measles } + desc = disease_desc_short_measles + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:ergotism } + desc = disease_desc_short_ergotism + } + triggered_desc = { + trigger = { scope:epidemic.epidemic_type.epidemic_trait = trait:dysentery } + desc = disease_desc_short_dysentery + } + desc = missing_epidemic + } + desc = physician_epidemic_events.1020.start.desc2 + random_valid = { + triggered_desc = { + trigger = { + OR = { + scope:epidemic = { outbreak_intensity <= minor } + scope:physician = { + NOR = { + has_trait = lifestyle_physician + has_trait = lifestyle_mystic + } + } + } + } + desc = physician_epidemic_events.1020.safe_recommendation.desc + } + triggered_desc = { + trigger = { + OR = { + scope:epidemic = { outbreak_intensity >= major } + scope:physician = { + NOR = { + has_trait = lifestyle_physician + has_trait = lifestyle_mystic + } + } + } + scope:physician = { + NOT = { has_trait = lifestyle_mystic } + } + } + desc = physician_epidemic_events.1020.risky_recommendation.desc + } + triggered_desc = { + trigger = { + scope:physician = { has_trait = lifestyle_mystic } + } + desc = physician_epidemic_events.1020.mystic_recommendation.desc + } + } + desc = physician_epidemic_events.1020.end.desc + } + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = cynical + has_trait = callous + has_trait = deceitful + has_trait = sadistic + } + } + animation = eyeroll + } + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = generous + has_trait = trusting + has_trait = gregarious + } + } + animation = sadness + } + animation = thinking + } + right_portrait = { + character = scope:physician + triggered_animation = { + trigger = { scope:epidemic = { outbreak_intensity >= major } } + animation = worry + } + triggered_animation = { + trigger = { scope:physician = { ai_rationality >= 0 } } + animation = personality_rational + } + triggered_animation = { + trigger = { scope:physician = { ai_rationality < -50 } } + animation = eccentric + } + animation = idle + } + + immediate = { + scope:physician.location ?= { save_scope_as = background_terrain_scope } + } + + #Minimal epidemic prevention + option = { + name = physician_epidemic_events.1020.a + epidemic_prevention_effect = { PREVENTION_LEVEL = 1 PHYSICIAN = scope:physician } + ai_chance = { base = 10 } + } + + #Moderate epidemic prevention + option = { + name = physician_epidemic_events.1020.b + epidemic_prevention_effect = { PREVENTION_LEVEL = 2 PHYSICIAN = scope:physician } + ai_chance = { base = 1 } + } + + #Superstitious epidemic prevention + option = { + trigger = { + scope:physician = { + OR = { + has_trait = lifestyle_mystic + has_trait = eccentric + } + } + } + name = physician_epidemic_events.1020.c + epidemic_prevention_effect = { PREVENTION_LEVEL = 3 PHYSICIAN = scope:physician } + ai_chance = { + base = 0.5 + modifier = { + add = -0.5 + ai_zeal >= 0 + } + } + } + + #No treatment + option = { + name = physician_epidemic_events.1020.d + + if = { # Admin governors lose a bit of trait XP if they don't try to do something + limit = { + is_governor = yes + has_trait = governor + } + increase_governance_effect = { VALUE = -2 } + } + + ai_chance = { base = 0 } + } +} + +# Minor success +physician_epidemic_events.1021 = { + type = character_event + title = physician_epidemic_events.1021.t + desc = physician_epidemic_events.1021.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = physician + } + + immediate = { + add_character_modifier = { + modifier = minor_epidemic_treatment + years = 10 + } + } + + #Neato! + option = { + name = physician_epidemic_events.1021.a + + if = { # Admin governors gain some XP when successful + limit = { + is_governor = yes + has_trait = governor + } + increase_governance_effect = { VALUE = 2 } + } + + ai_chance = { base = 10 } + } +} + +# Minor fail +physician_epidemic_events.1022 = { + type = character_event + title = physician_epidemic_events.1022.t + desc = physician_epidemic_events.1022.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = shock + } + + immediate = { + add_character_modifier = { + modifier = minor_epidemic_treatment_failed + years = 10 + } + } + + + + #Chastise + option = { + name = health.3107.b + + chastise_physician_effect = yes + + ai_chance = { + factor = 30 + modifier = { + scope:physician = { has_character_modifier = chastised_physician_modifier } + add = -20 + } + } + } + + #Oh well ¯\_(ツ)_/¯ + option = { + name = health.3107.c + + forgive_physician_effect = yes + + ai_chance = { + factor = 20 + ai_value_modifier = { + max = 80 + ai_compassion = 2.5 + ai_vengefulness = -2.5 + } + } + } + + #Imprison! + option = { + name = health.3107.d + + imprison_physician_effect = yes + + ai_chance = { + factor = 30 + ai_value_modifier = { + ai_compassion = -0.5 + } + } + } + + #Execute! + option = { + name = health.3107.e + + execute_physician_effect = yes + + ai_chance = { + factor = 15 + ai_value_modifier = { + ai_compassion = -1 + } + } + } +} + +# Major success +physician_epidemic_events.1023 = { + type = character_event + title = physician_epidemic_events.1023.t + desc = physician_epidemic_events.1023.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = admiration + } + + immediate = { + add_character_modifier = { + modifier = major_epidemic_treatment + years = 10 + } + } + + #Neato! + option = { + name = physician_epidemic_events.1023.a + + if = { # Admin governors gain some XP when successful + limit = { + is_governor = yes + has_trait = governor + } + increase_governance_effect = { VALUE = 4 } + } + + ai_chance = { base = 10 } + } +} + +# Major fail +physician_epidemic_events.1024 = { + type = character_event + title = physician_epidemic_events.1024.t + desc = physician_epidemic_events.1024.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = shock + } + + immediate = { + add_character_modifier = { + modifier = major_epidemic_treatment_failed + years = 10 + } + every_sub_realm_county = { + custom = every_infected_county + limit = { + any_county_province = { + any_province_epidemic = { + this = scope:epidemic + } + } + } + change_development_progress_with_overflow = -45 + } + } + + + + #Chastise + option = { + name = health.3107.b + + chastise_physician_effect = yes + + ai_chance = { + factor = 30 + modifier = { + scope:physician = { has_character_modifier = chastised_physician_modifier } + add = -20 + } + } + } + + #Oh well ¯\_(ツ)_/¯ + option = { + name = health.3107.c + + forgive_physician_effect = yes + + ai_chance = { + factor = 20 + ai_value_modifier = { + max = 80 + ai_compassion = 2.5 + ai_vengefulness = -2.5 + } + } + } + + #Imprison! + option = { + name = health.3107.d + + imprison_physician_effect = yes + + ai_chance = { + factor = 30 + ai_value_modifier = { + ai_compassion = -0.5 + ai_vengefulness = 1 + } + } + } + + #Execute! + option = { + name = health.3107.e + + execute_physician_effect = yes + + ai_chance = { + factor = 15 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 2.5 + } + } + } +} + +# Critical success +physician_epidemic_events.1025 = { + type = character_event + title = physician_epidemic_events.1025.t + desc = physician_epidemic_events.1025.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = manic + } + + immediate = { + add_character_modifier = { + modifier = critical_epidemic_treatment + years = 10 + } + } + + #Neato! + option = { + name = physician_epidemic_events.1025.a + + if = { # Admin governors gain some XP when successful + limit = { + is_governor = yes + has_trait = governor + } + increase_governance_effect = { VALUE = 6 } + } + + ai_chance = { base = 10 } + } +} + +# Critical fail +physician_epidemic_events.1026 = { + type = character_event + title = physician_epidemic_events.1026.t + desc = physician_epidemic_events.1026.desc + theme = plague + override_background = { + trigger = { scope:physician ?= { is_travelling = yes } exists = scope:background_terrain_scope } + reference = terrain_scope + } + override_background = { + reference = physicians_study + } + left_portrait = { + character = scope:physician + animation = manic + } + + immediate = { + add_character_modifier = { + modifier = critical_epidemic_treatment_failed + years = 10 + } + every_sub_realm_county = { + custom = every_infected_county + limit = { + any_county_province = { + any_province_epidemic = { + this = scope:epidemic + } + } + } + change_development_progress_with_overflow = -150 + } + } + + + + #Chastise + option = { + name = health.3107.b + + chastise_physician_effect = yes + + ai_chance = { + factor = 30 + modifier = { + scope:physician = { has_character_modifier = chastised_physician_modifier } + add = -20 + } + } + } + + #Oh well ¯\_(ツ)_/¯ + option = { + name = health.3107.c + + forgive_physician_effect = yes + + ai_chance = { + factor = 20 + ai_value_modifier = { + max = 80 + ai_compassion = 2.5 + ai_vengefulness = -2.5 + } + } + } + + #Imprison! + option = { + name = health.3107.d + + imprison_physician_effect = yes + + ai_chance = { + factor = 30 + ai_value_modifier = { + ai_compassion = -0.5 + ai_vengefulness = 1 + } + } + } + + #Execute! + option = { + name = health.3107.e + + execute_physician_effect = yes + + ai_chance = { + factor = 15 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 2.5 + } + } + } +} + +############################### +## PHYSICIAN BOOK +## 1030 +## by James Beaumont +############################### +physician_epidemic_events.1030 = { + type = character_event + title = physician_epidemic_events.1030.t + desc = physician_epidemic_events.1030.desc + theme = plague + override_effect_2d = { reference = flies } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:physician + animation = writing + } + cooldown = { years = 10 } + + trigger = { + exists = court_position:court_physician_court_position + court_position:court_physician_court_position = { + is_available_ai_adult = yes + } + realm_has_any_nearby_epidemic = { INTENSITY = major SIZE = 1 } + } + + immediate = { + court_position:court_physician_court_position = { save_scope_as = physician } + get_random_nearby_realm_epidemic = { INTENSITY = major } + } + + #Go for it king! + option = { + name = physician_epidemic_events.1030.a + remove_short_term_gold = medium_gold_value + custom_tooltip = may_get_cool_book_tt + hidden_effect = { + scope:physician = { + duel = { + skill = learning + value = high_skill_rating + # Failure + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:physician = { has_trait = lifestyle_physician } + factor = 0.5 + } + modifier = { + scope:physician = { + has_trait = lifestyle_physician + has_trait_xp = { + trait = lifestyle_physician + value >= 50 + } + } + factor = 0.5 + } + modifier = { + scope:physician = { + has_trait = lifestyle_physician + has_trait_xp = { + trait = lifestyle_physician + value >= 100 + } + } + factor = 0.5 + } + root = { + send_interface_toast = { + title = physician_epidemic_events.1030.a.failure + left_icon = root + right_icon = scope:physician + custom_tooltip = book_is_gibberish + } + } + } + 50 = { # Win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + duel = { # How much did I win by? + skill = learning + value = high_skill_rating + 50 = { # Not much + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + root = { + set_artifact_rarity_masterwork = yes + send_interface_toast = { + title = physician_epidemic_events.1030.a.success + left_icon = root + right_icon = scope:physician + create_artifact = { + name = pharmaceuticals + description = pharmaceuticals_desc + type = miscellaneous + modifier = artifact_epidemic_resistance_1_modifier + modifier = artifact_negate_health_penalty_add_1_modifier + visuals = pocket_book + quality = scope:quality + wealth = scope:wealth + creator = scope:physician + } + } + } + } + 50 = { # Okay + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + root = { + set_artifact_rarity_famed = yes + send_interface_toast = { + title = physician_epidemic_events.1030.a.success + left_icon = root + right_icon = scope:physician + create_artifact = { + name = pharmaceuticals + description = pharmaceuticals_desc + type = miscellaneous + modifier = artifact_epidemic_resistance_4_modifier + modifier = artifact_negate_health_penalty_add_2_modifier + visuals = pocket_book + quality = scope:quality + wealth = scope:wealth + creator = scope:physician + } + } + } + } + 15 = { # Bigly + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + root = { + set_artifact_rarity_illustrious = yes + send_interface_toast = { + title = physician_epidemic_events.1030.a.success + left_icon = root + right_icon = scope:physician + create_artifact = { + name = pharmaceuticals + description = pharmaceuticals_desc + type = miscellaneous + modifier = artifact_epidemic_resistance_7_modifier + modifier = artifact_negate_health_penalty_add_2_modifier + visuals = pocket_book + quality = scope:quality + wealth = scope:wealth + creator = scope:physician + } + } + } + } + } + } + } + } + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + short_term_gold < major_gold_value + } + ai_value_modifier = { + ai_greed = -1 + ai_rationality = 1 + } + } + } + + #How much for a bloody book? + option = { + name = physician_epidemic_events.1030.b + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 1 + ai_rationality = -1 + } + } + } +} + +############################### +## DISTRIBUTE ALMS +## 1040 +## by James Beaumont +############################### +physician_epidemic_events.1040 = { + type = character_event + title = physician_epidemic_events.1040.t + desc = physician_epidemic_events.1040.desc + theme = plague + override_effect_2d = { reference = flies } + left_portrait = { + character = root + animation = pondering + camera = camera_event_left_away_3_4 + } + right_portrait = { + character = scope:physician + animation = obsequious_bow + camera = camera_event_right_away + } + + cooldown = { years = 20 } + + trigger = { + realm_has_any_nearby_epidemic = { INTENSITY = major SIZE = 1 } + exists = court_position:court_physician_court_position + court_position:court_physician_court_position = { + is_available_ai_adult = yes + } + } + + immediate = { + get_random_nearby_realm_epidemic = { INTENSITY = major } + court_position:court_physician_court_position = { save_scope_as = physician } + } + + # Let's go touch some lepers + option = { + name = physician_epidemic_events.1040.a + add_piety = major_piety_gain + every_sub_realm_county = { + custom = every_infected_county + limit = { + any_county_province = { + any_province_epidemic = { + this = scope:epidemic_scope + } + } + } + add_county_modifier = { + modifier = ce1_royal_touch + years = 10 + } + } + if = { + limit = { + NOT = { + has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait + } + } + if = { + limit = { + NOT = { + has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait + } + } + if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:smallpox + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = smallpox TREATMENT_EVENT = yes } + } + } + else_if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:measles + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = measles TREATMENT_EVENT = yes } + } + } + else_if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:dysentery + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = dysentery TREATMENT_EVENT = yes } + } + } + else_if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:bubonic_plague + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = bubonic_plague TREATMENT_EVENT = yes } + } + } + else_if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:typhus + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = typhus TREATMENT_EVENT = yes } + } + } + else_if = { + limit = { + scope:epidemic_scope.epidemic_type.epidemic_trait = trait:consumption + } + random = { + chance = 5 + contract_disease_effect = { DISEASE = consumption TREATMENT_EVENT = yes } + } + } + } + } + stress_impact = { + sadistic = medium_stress_impact_gain + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + gold < minor_gold_value + } + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #I will absolutely not do this are you insane + option = { + name = physician_epidemic_events.1040.b + add_piety = minor_piety_loss + stress_impact = { + humble = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = -1 + } + } + } +} + +############################### +## Physician is helping soldiers +## 1050 +## by James Beaumont +############################### +physician_epidemic_events.1050 = { + type = character_event + title = physician_epidemic_events.1050.t + desc = physician_epidemic_events.1050.desc + theme = plague + override_effect_2d = { reference = flies } + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:physician + animation = prisonhouse + } + lower_right_portrait = { + character = scope:enemy + } + + cooldown = { years = 20 } + + trigger = { + is_at_war = yes + exists = court_position:court_physician_court_position + realm_has_any_nearby_epidemic = { INTENSITY = major SIZE = 1 } + court_position:court_physician_court_position = { + is_available_ai_adult = yes + OR = { # Would be willing to heal the enemy + has_trait = compassionate + has_trait = forgiving + has_trait = just + has_trait = zealous + } + } + } + + immediate = { + get_random_nearby_realm_epidemic = { INTENSITY = major } + court_position:court_physician_court_position = { save_scope_as = physician } + random_primary_war_enemy = { + limit = { + is_ai = yes + } + save_scope_as = enemy + } + } + + # Very good work, please continue + option = { + name = physician_epidemic_events.1050.a + add_piety = major_piety_gain + add_character_modifier = { + modifier = war_doctor + years = 10 + } + scope:enemy = { + add_character_modifier = { + modifier = war_doctor + years = 10 + } + add_opinion = { + modifier = impressed_opinion + opinion = 50 + target = root + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + forgiving = medium_stress_impact_loss + sadistic = medium_stress_impact_gain + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = -0.1 + } + } + } + + #I demand that this stop at once! + option = { + name = physician_epidemic_events.1050.b + add_character_modifier = { + modifier = war_doctor + years = 10 + } + scope:physician = { + progress_towards_rival_effect = { + REASON = rival_prevented_from_protecting_sick + CHARACTER = root + OPINION = default_rival_opinion + } + } + stress_impact = { + humble = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = -1 + ai_rationality = 0.1 + } + } + } +} + +############################### +## Physician advises you to banish all infected characters from your court +## 1060 +## by James Beaumont +############################### +physician_epidemic_events.1060 = { + type = character_event + title = physician_epidemic_events.1060.t + desc = physician_epidemic_events.1060.desc + theme = plague + override_background = physicians_study + override_effect_2d = { reference = flies } + left_portrait = { + character = scope:physician + animation = physician + } + right_portrait = { + character = scope:gross_sick_person + animation = cough + } + + trigger = { + exists = court_position:court_physician_court_position + any_sub_realm_county = { + 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 = { + count >= 1 + intensity >= major + save_temporary_scope_as = epidemic_to_check + root = { + any_close_or_extended_family_member = { + is_courtier_of = root + has_trait = scope:epidemic_to_check.epidemic_type.epidemic_trait + } + } + } + } + } + court_position:court_physician_court_position = { + is_available_ai_adult = yes + } + } + + immediate = { + get_random_nearby_realm_epidemic = { INTENSITY = major } + court_position:court_physician_court_position = { save_scope_as = physician } + random_close_or_extended_family_member = { + limit = { + is_courtier_of = root + has_trait = scope:epidemic_scope.epidemic_type.epidemic_trait + } + save_scope_as = gross_sick_person + } + } + + # Drastic times call for drastic measures + option = { + name = physician_epidemic_events.1060.a + every_courtier_or_guest = { + custom = every_infected_courtier_or_guest + limit = { + has_trait_with_flag = epidemic_disease + } + banish = yes # banish_effect not used for unlanded + } + every_courtier_or_guest = { + custom = every_uninfected_courtier_or_guest + limit = { + NOT = { + has_trait_with_flag = epidemic_disease + } + } + add_character_modifier = { + modifier = ce1_banishment_resistance + years = 10 + } + } + add_character_modifier = { + modifier = ce1_banishment_resistance + years = 10 + } + stress_impact = { + base = medium_stress_impact_gain + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + arbitrary = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = -1 + ai_greed = 0.5 + ai_rationality = 0.5 + } + } + } + + #I will not banish my own kin! + option = { + name = physician_epidemic_events.1060.b + add_piety = medium_piety_gain + every_courtier_or_guest = { + custom = every_infected_courtier_or_guest + limit = { + has_trait_with_flag = epidemic_disease + } + add_opinion = { + modifier = grateful_opinion + opinion = 25 + target = root + } + } + stress_impact = { + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -0.5 + ai_rationality = -0.5 + ai_vengefulness = -0.5 + } + } + } +} diff --git a/events/dlc/ep1/ep1_character_interaction_events.txt b/events/dlc/ep1/ep1_character_interaction_events.txt new file mode 100644 index 00000000..0d3f377f --- /dev/null +++ b/events/dlc/ep1/ep1_character_interaction_events.txt @@ -0,0 +1,719 @@ +namespace = ep1_character_interaction + +################################################## +# +# Character Interaction Events +# +# 0001 - 0010 Indebt Guest +################################################## + + + + + + + + + + +################################################## +# CHARACTER INTERACTION EVENTS + +################################################## +# A Sensible Recompense +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +scripted_trigger ep1_character_interaction_0001_valid_hostile_relation_trigger = { + # Must be at a court of some kind *other* than your own. + exists = host + scope:actor != host + # And not in scope:actor's prison. + NOR = { + imprisoner ?= scope:actor + } + # Double check that this'd be an appropriate court to send a plant. + save_temporary_scope_as = current_target + scope:actor = { + OR = { + # Either you've got a scheme on the go... + any_scheme = { + hostile_scheme_trigger = yes + scheme_target_character = scope:current_target + } + # ... or you could start one. + can_start_hostile_scheme_against_trigger = { TARGET = scope:current_target} + } + } +} + +scripted_trigger ep1_character_interaction_0001_valid_rival_trigger = { + ep1_character_interaction_0001_valid_hostile_relation_trigger = yes + OR = { + NOT = { exists = scope:actor_nemesis } + this != scope:actor_nemesis + } +} + +scripted_effect ep1_character_interaction_0001_move_character_and_family_effect = { + scope:recipient = { + # Whatever else happens, just move them. + scope:actor = { remove_courtier_or_guest = scope:recipient } + $DESTINATION$ = { add_courtier = scope:recipient } + # If they have any family, quietly send them along too. + hidden_effect = { + if = { + limit = { + any_traveling_family_member = { } + } + every_traveling_family_member = { + save_temporary_scope_as = family_to_shunt + scope:actor = { remove_courtier_or_guest = scope:family_to_shunt } + $DESTINATION$ = { add_courtier = scope:family_to_shunt } + } + } + } + } +} + +# Trick a guest into a debt & turn them into an agent. +ep1_character_interaction.0001 = { + type = character_event + title = ep1_character_interaction.0001.t + desc = { + desc = ep1_character_interaction.0001.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:false_flag_type = flag:lustful } + desc = ep1_character_interaction.0001.desc.lustful + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:chaste } + desc = ep1_character_interaction.0001.desc.chaste + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:gluttonous } + desc = ep1_character_interaction.0001.desc.gluttonous + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:temperate } + desc = ep1_character_interaction.0001.desc.temperate + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:greedy } + desc = ep1_character_interaction.0001.desc.greedy + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:generous } + desc = ep1_character_interaction.0001.desc.generous + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:lazy } + desc = ep1_character_interaction.0001.desc.lazy + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:diligent } + desc = ep1_character_interaction.0001.desc.diligent + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:wrathful } + desc = ep1_character_interaction.0001.desc.wrathful + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:calm } + desc = ep1_character_interaction.0001.desc.calm + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:patient } + desc = ep1_character_interaction.0001.desc.patient + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:impatient } + desc = ep1_character_interaction.0001.desc.impatient + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:arrogant } + desc = ep1_character_interaction.0001.desc.arrogant + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:humble } + desc = ep1_character_interaction.0001.desc.humble + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:deceitful } + desc = ep1_character_interaction.0001.desc.deceitful + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:honest } + desc = ep1_character_interaction.0001.desc.honest + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:craven } + desc = ep1_character_interaction.0001.desc.craven + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:brave } + desc = ep1_character_interaction.0001.desc.brave + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:shy } + desc = ep1_character_interaction.0001.desc.shy + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:gregarious } + desc = ep1_character_interaction.0001.desc.gregarious + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:ambitious } + desc = ep1_character_interaction.0001.desc.ambitious + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:content } + desc = ep1_character_interaction.0001.desc.content + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:arbitrary } + desc = ep1_character_interaction.0001.desc.arbitrary + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:just } + desc = ep1_character_interaction.0001.desc.just + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:cynical } + desc = ep1_character_interaction.0001.desc.cynical + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:zealous } + desc = ep1_character_interaction.0001.desc.zealous + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:paranoid } + desc = ep1_character_interaction.0001.desc.paranoid + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:trusting } + desc = ep1_character_interaction.0001.desc.trusting + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:compassionate } + desc = ep1_character_interaction.0001.desc.compassionate + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:callous } + desc = ep1_character_interaction.0001.desc.callous + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:sadistic } + desc = ep1_character_interaction.0001.desc.sadistic + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:stubborn } + desc = ep1_character_interaction.0001.desc.stubborn + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fickle } + desc = ep1_character_interaction.0001.desc.fickle + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:vengeful } + desc = ep1_character_interaction.0001.desc.vengeful + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:forgiving } + desc = ep1_character_interaction.0001.desc.forgiving + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fallback_1 } + desc = ep1_character_interaction.0001.desc.fallback_1 + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fallback_2 } + desc = ep1_character_interaction.0001.desc.fallback_2 + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fallback_3 } + desc = ep1_character_interaction.0001.desc.fallback_3 + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fallback_4 } + desc = ep1_character_interaction.0001.desc.fallback_4 + } + triggered_desc = { + trigger = { scope:false_flag_type = flag:fallback_5 } + desc = ep1_character_interaction.0001.desc.fallback_5 + } + } + desc = ep1_character_interaction.0001.desc.outro + } + theme = intrigue_skulduggery_focus + left_portrait = { + character = scope:actor + animation = schadenfreude + } + right_portrait = { + character = scope:recipient + animation = fear + } + lower_center_portrait = scope:actor_nemesis + lower_right_portrait = scope:actor_rival + override_background = { reference = throne_room } + + immediate = { + # Apply the interaction's effects. + indebt_guest_interaction_accepted_effect = yes + # Roll the offending crime. + ## Percentages even throughout: we're not fussed about which result you roll. + scope:recipient = { + random_list = { + # lustful + 100 = { + trigger = { has_trait = lustful } + save_scope_value_as = { + name = false_flag_type + value = flag:lustful + } + } + # chaste + 100 = { + trigger = { has_trait = chaste } + save_scope_value_as = { + name = false_flag_type + value = flag:chaste + } + } + # gluttonous + 100 = { + trigger = { has_trait = gluttonous } + save_scope_value_as = { + name = false_flag_type + value = flag:gluttonous + } + } + # temperate + 100 = { + trigger = { has_trait = temperate } + save_scope_value_as = { + name = false_flag_type + value = flag:temperate + } + } + # greedy + 100 = { + trigger = { has_trait = greedy } + save_scope_value_as = { + name = false_flag_type + value = flag:greedy + } + } + # generous + 100 = { + trigger = { has_trait = generous } + save_scope_value_as = { + name = false_flag_type + value = flag:generous + } + } + # lazy + 100 = { + trigger = { has_trait = lazy } + save_scope_value_as = { + name = false_flag_type + value = flag:lazy + } + } + # diligent + 100 = { + trigger = { has_trait = diligent } + save_scope_value_as = { + name = false_flag_type + value = flag:diligent + } + } + # wrathful + 100 = { + trigger = { has_trait = wrathful } + save_scope_value_as = { + name = false_flag_type + value = flag:wrathful + } + } + # calm + 100 = { + trigger = { has_trait = calm } + save_scope_value_as = { + name = false_flag_type + value = flag:calm + } + } + # patient + 100 = { + trigger = { has_trait = patient } + save_scope_value_as = { + name = false_flag_type + value = flag:patient + } + } + # impatient + 100 = { + trigger = { has_trait = impatient } + save_scope_value_as = { + name = false_flag_type + value = flag:impatient + } + } + # arrogant + 100 = { + trigger = { has_trait = arrogant } + save_scope_value_as = { + name = false_flag_type + value = flag:arrogant + } + } + # humble + 100 = { + trigger = { has_trait = humble } + save_scope_value_as = { + name = false_flag_type + value = flag:humble + } + } + # deceitful + 100 = { + trigger = { has_trait = deceitful } + save_scope_value_as = { + name = false_flag_type + value = flag:deceitful + } + } + # honest + 100 = { + trigger = { has_trait = honest } + save_scope_value_as = { + name = false_flag_type + value = flag:honest + } + } + # craven + 100 = { + trigger = { has_trait = craven } + save_scope_value_as = { + name = false_flag_type + value = flag:craven + } + } + # brave + 100 = { + trigger = { has_trait = brave } + save_scope_value_as = { + name = false_flag_type + value = flag:brave + } + } + # shy + 100 = { + trigger = { has_trait = shy } + save_scope_value_as = { + name = false_flag_type + value = flag:shy + } + } + # gregarious + 100 = { + trigger = { has_trait = gregarious } + save_scope_value_as = { + name = false_flag_type + value = flag:gregarious + } + } + # ambitious + 100 = { + trigger = { has_trait = ambitious } + save_scope_value_as = { + name = false_flag_type + value = flag:ambitious + } + } + # content + 100 = { + trigger = { has_trait = content } + save_scope_value_as = { + name = false_flag_type + value = flag:content + } + } + # arbitrary + 100 = { + trigger = { has_trait = arbitrary } + save_scope_value_as = { + name = false_flag_type + value = flag:arbitrary + } + } + # just + 100 = { + trigger = { has_trait = just } + save_scope_value_as = { + name = false_flag_type + value = flag:just + } + } + # cynical + 100 = { + trigger = { has_trait = cynical } + save_scope_value_as = { + name = false_flag_type + value = flag:cynical + } + } + # zealous + 100 = { + trigger = { has_trait = zealous } + save_scope_value_as = { + name = false_flag_type + value = flag:zealous + } + } + # paranoid + 100 = { + trigger = { has_trait = paranoid } + save_scope_value_as = { + name = false_flag_type + value = flag:paranoid + } + } + # trusting + 100 = { + trigger = { has_trait = trusting } + save_scope_value_as = { + name = false_flag_type + value = flag:trusting + } + } + # compassionate + 100 = { + trigger = { has_trait = compassionate } + save_scope_value_as = { + name = false_flag_type + value = flag:compassionate + } + } + # callous + 100 = { + trigger = { has_trait = callous } + save_scope_value_as = { + name = false_flag_type + value = flag:callous + } + } + # sadistic + 100 = { + trigger = { has_trait = sadistic } + save_scope_value_as = { + name = false_flag_type + value = flag:sadistic + } + } + # stubborn + 100 = { + trigger = { has_trait = stubborn } + save_scope_value_as = { + name = false_flag_type + value = flag:stubborn + } + } + # fickle + 100 = { + trigger = { has_trait = fickle } + save_scope_value_as = { + name = false_flag_type + value = flag:fickle + } + } + # vengeful + 100 = { + trigger = { has_trait = vengeful } + save_scope_value_as = { + name = false_flag_type + value = flag:vengeful + } + } + # forgiving + 100 = { + trigger = { has_trait = forgiving } + save_scope_value_as = { + name = false_flag_type + value = flag:forgiving + } + } + # fallback_1 + 100 = { + save_scope_value_as = { + name = false_flag_type + value = flag:fallback_1 + } + } + # fallback_2 + 100 = { + save_scope_value_as = { + name = false_flag_type + value = flag:fallback_2 + } + } + # fallback_3 + 100 = { + save_scope_value_as = { + name = false_flag_type + value = flag:fallback_3 + } + } + # fallback_4 + 100 = { + save_scope_value_as = { + name = false_flag_type + value = flag:fallback_4 + } + } + # fallback_5 + 100 = { + save_scope_value_as = { + name = false_flag_type + value = flag:fallback_5 + } + } + } + } + # Sort scopes for event options. + scope:actor = { + # If scope:actor has a nemesis, save them for loc. + if = { + limit = { + any_relation = { + type = nemesis + count >= 1 + ep1_character_interaction_0001_valid_hostile_relation_trigger = yes + } + } + random_relation = { + type = nemesis + limit = { ep1_character_interaction_0001_valid_hostile_relation_trigger = yes } + save_scope_as = actor_nemesis + } + } + # If scope:actor has any valid rivals, pick a random one for option B. + if = { + limit = { + any_relation = { + type = rival + count >= 1 + ep1_character_interaction_0001_valid_rival_trigger = yes + } + } + random_relation = { + type = rival + # Prefer rivals that are targets of hostile schemes. + limit = { + any_targeting_scheme = { + scheme_owner = scope:actor + is_hostile = yes + } + ep1_character_interaction_0001_valid_rival_trigger = yes + } + # Failing that, rivals who are targets of any schemes. + alternative_limit = { + any_targeting_scheme = { + scheme_owner = scope:actor + is_hostile = no + } + ep1_character_interaction_0001_valid_rival_trigger = yes + } + # Otherwise just any rando rival who could be schemed against. + alternative_limit = { ep1_character_interaction_0001_valid_rival_trigger = yes } + save_scope_as = actor_rival + } + } + } + } + + # *Cackling* Oh yes, [actor_nemesis.GetFirstName] will never see this coming! + option = { + name = ep1_character_interaction.0001.a + trigger = { exists = scope:actor_nemesis } + + # Quietly add scope:recipient as a courtier of scope:actor_nemesis. + ep1_character_interaction_0001_move_character_and_family_effect = { DESTINATION = scope:actor_nemesis } + + stress_impact = { + patient = miniscule_stress_impact_loss + vengeful = minor_stress_impact_loss + impatient = medium_stress_impact_gain + trusting = major_stress_impact_gain + } + ai_chance = { + # If valid, this should always be the choice selected. + base = 100 + } + } + + # Excellent! Now, you will deliver yourself to [actor_rival.GetFirstNamePossessive] court... + option = { + name = ep1_character_interaction.0001.b + trigger = { exists = scope:actor_rival } + + # Quietly add scope:recipient as a courtier of scope:actor_rival. + ep1_character_interaction_0001_move_character_and_family_effect = { DESTINATION = scope:actor_rival } + + stress_impact = { + patient = miniscule_stress_impact_loss + vengeful = minor_stress_impact_loss + impatient = medium_stress_impact_gain + trusting = major_stress_impact_gain + } + ai_chance = { + # Never pick this option... + base = 0 + # ... unless there's no nemesis, in which case it should be the default. + modifier = { + add = 100 + NOT = { exists = scope:actor_rival } + } + } + } + + # Now, begone till I have need of you. + option = { + name = ep1_character_interaction.0001.c + + # Boot 'em out. + hidden_effect = { + scope:recipient = { select_and_move_to_pool_effect = yes } + } + show_as_tooltip = { + remove_courtier_or_guest = scope:recipient + } + + stress_impact = { + shy = minor_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + # AI should never be taking this without a nemesis, but if they do, it doesn't matter where they send scope:recipient. + base = 0 + } + } + + # Naturally, you will stay where I can keep an eye on you. + option = { + name = ep1_character_interaction.0001.d + + # Status quo: no extra changes here. + + # No stress impact necessary for the fallback option. + ai_chance = { + # AI should never be taking this without a nemesis, but if they do, it doesn't matter where they send scope:recipient. + base = 0 + } + } +} + diff --git a/events/dlc/ep1/ep1_court_position_events.txt b/events/dlc/ep1/ep1_court_position_events.txt new file mode 100644 index 00000000..7dd66a63 --- /dev/null +++ b/events/dlc/ep1/ep1_court_position_events.txt @@ -0,0 +1,552 @@ +namespace = court_position + +################################ +# FLAVOR EVENTS +# 1001 - 8999 +################################ + + + +############################# +# MURDER SAVE EVENTS +# 9001 - 9199 +# by Linnéa Thimrén +############################# + +############### +# SAVED BY FOOD TASTER + +# FOR MURDERER: Saved from poisoned food by food taster +# by Linnéa Thimrén +court_position.9001 = { + type = character_event + window = scheme_failed_event + title = court_position.9001.t + desc = { + desc = court_position.9001.desc + triggered_desc = { + trigger = { exists = local_var:food_taster_dies } + desc = court_position.9001.food_taster_dies + } + } + theme = murder_scheme + left_portrait = { + character = scope:owner + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + center_portrait = { + character = scope:food_taster + animation = poison + } + right_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + override_background = { reference = feast } + widget = { + gui = "event_window_widget_scheme" + container = "custom_widgets_container" + } + + trigger = { + scope:target = { + employs_court_position = food_taster_court_position + any_court_position_holder = { + type = food_taster_court_position + foodtaster_will_actually_do_job_trigger = yes + } + } + } + + immediate = { + scope:target = { + random_court_position_holder = { + type = food_taster_court_position + limit = { is_physically_able = yes } + save_scope_as = food_taster + } + } + murder_failure_effect = yes + hidden_effect = { + random = { + chance = 75 + set_local_variable = { + name = food_taster_dies + value = yes + } + } + } + } + + option = { + name = murder_save.0001.a + scope:scheme = { end_scheme = yes } + } + + option = { + name = murder_save.0001.b + restart_murder_scheme_effect = yes + } + + after = { + # Fire the rest of the outcome. + scope:target = { trigger_event = court_position.9002 } + if = { + limit = { exists = local_var:food_taster_dies } + show_as_tooltip = { + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:food_taster + REASON = death_poison + } + } + } + } +} + +# FOR TARGET: Food taster dies to poison +court_position.9002 = { + type = character_event + window = scheme_conclusion_event_no_header + title = court_position.9001.t + desc = { + desc = court_position.9002.desc + triggered_desc = { + trigger = { exists = local_var:food_taster_dies } + desc = court_position.9002.food_taster_dies + } + triggered_desc = { + trigger = { exists = scope:scheme_discovered } + desc = court_position.9002.owner_discovered + } + } + theme = murder_scheme + left_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + center_portrait = { + character = scope:food_taster + animation = poison + } + right_portrait = { + character = scope:owner_to_reveal + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + + immediate = { + set_variable = { + name = block_death_event_from + value = scope:food_taster + days = 3 + } + # Handle the death of the food taster, if necessary + if = { + limit = { exists = local_var:food_taster_dies } + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:food_taster + REASON = death_poison + } + } + } + + # Who could do such a thing? + option = { + name = murder_save.1001.a + trigger = { + NOT = { exists = scope:scheme_discovered } + } + custom_tooltip = murder_save.failure_unknown_owner_tt + } + + # Vengeance! + option = { + name = murder_save.1001.b + trigger = { exists = scope:scheme_discovered } + custom_tooltip = murder_save.failure_known_owner_tt + } + + after = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } +} + + +############### +# SAVED BY CUP-BEARER + +# FOR MURDERER: Saved from poisoned drink by cup-bearer +# by Linnéa Thimrén +court_position.9011 = { + type = character_event + window = scheme_failed_event + title = court_position.9011.t + desc = { + desc = court_position.9011.desc + triggered_desc = { + trigger = { exists = local_var:cupbearer_dies } + desc = court_position.9011.cupbearer_dies + } + } + theme = murder_scheme + left_portrait = { + character = scope:owner + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + center_portrait = { + character = scope:food_taster + animation = poison + } + right_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + widget = { + gui = "event_window_widget_scheme" + container = "custom_widgets_container" + } + + trigger = { + scope:target = { + employs_court_position = cupbearer_court_position + any_court_position_holder = { + type = cupbearer_court_position + cupbearer_will_actually_do_job_trigger = yes + } + } + } + + immediate = { + scope:target = { + random_court_position_holder = { + type = cupbearer_court_position + limit = { is_physically_able = yes } + save_scope_as = cupbearer + } + } + murder_failure_effect = yes + hidden_effect = { + random = { + chance = 75 + set_local_variable = { + name = cupbearer_dies + value = yes + } + } + } + } + + option = { + name = murder_save.0001.a + scope:scheme = { end_scheme = yes } + } + + option = { + name = murder_save.0001.b + restart_murder_scheme_effect = yes + } + + after = { + # Fire the rest of the outcome. + scope:target = { trigger_event = court_position.9012 } + if = { + limit = { exists = local_var:cupbearer_dies } + show_as_tooltip = { + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:cupbearer + REASON = death_poison + } + } + } + } +} + + +# FOR TARGET: Cup-bearer dies to poison +court_position.9012 = { + type = character_event + window = scheme_conclusion_event_no_header + title = court_position.9011.t + desc = { + desc = court_position.9012.desc + triggered_desc = { + trigger = { exists = local_var:cupbearer_dies } + desc = court_position.9012.cupbearer_dies + } + triggered_desc = { + trigger = { exists = scope:scheme_discovered } + desc = court_position.9002.owner_discovered + } + } + theme = murder_scheme + left_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + center_portrait = { + character = scope:food_taster + animation = poison + } + right_portrait = { + character = scope:owner_to_reveal + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + + immediate = { + set_variable = { + name = block_death_event_from + value = scope:cupbearer + days = 3 + } + # Handle the death of the cupbearer, if necessary + if = { + limit = { exists = local_var:cupbearer_dies } + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:cupbearer + REASON = death_poison + } + } + } + + # Who could do such a thing? + option = { + name = murder_save.1001.a + trigger = { + NOT = { exists = scope:scheme_discovered } + } + custom_tooltip = murder_save.failure_unknown_owner_tt + } + + # Vengeance! + option = { + name = murder_save.1001.b + trigger = { exists = scope:scheme_discovered } + custom_tooltip = murder_save.failure_known_owner_tt + } + + after = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } +} + + +############### +# SAVED BY BODYGUARD + +# FOR MURDERER: Saved from assassin by bodyguard +# by Linnéa Thimrén +court_position.9021 = { + type = character_event + window = scheme_failed_event + title = court_position.9021.t + desc = { + desc = court_position.9021.desc + triggered_desc = { + trigger = { exists = local_var:bodyguard_dies } + desc = court_position.9021.bodyguard_dies + } + } + theme = murder_scheme + left_portrait = { + character = scope:owner + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + center_portrait = { + character = scope:bodyguard + triggered_animation = { + trigger = { is_alive = no } + animation = map_fear + } + animation = random_weapon_aggressive + camera = camera_event_center_pointing_left + } + right_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + widget = { + gui = "event_window_widget_scheme" + container = "custom_widgets_container" + } + + trigger = { + scope:target = { + employs_court_position = bodyguard_court_position + any_court_position_holder = { + type = bodyguard_court_position + bodyguard_will_actually_do_job_trigger = yes + } + } + } + + immediate = { + scope:target = { + random_court_position_holder = { + type = bodyguard_court_position + limit = { is_physically_able = yes } + save_scope_as = bodyguard + } + } + murder_failure_effect = yes + hidden_effect = { + random = { + chance = 75 + set_local_variable = { + name = bodyguard_dies + value = yes + } + } + } + } + + option = { + name = murder_save.0001.a + scope:scheme = { end_scheme = yes } + } + + option = { + name = murder_save.0001.b + restart_murder_scheme_effect = yes + } + + after = { + # Fire the rest of the outcome. + scope:target = { trigger_event = court_position.9022 } + if = { + limit = { exists = local_var:bodyguard_dies } + show_as_tooltip = { + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:bodyguard + REASON = death_murder + } + } + } + } +} + +# FOR TARGET: Bodyguard dies to assassin +court_position.9022 = { + type = character_event + window = scheme_conclusion_event_no_header + title = court_position.9021.t + desc = { + desc = court_position.9022.desc + triggered_desc = { + trigger = { exists = local_var:bodyguard_dies } + desc = court_position.9022.bodyguard_dies + } + triggered_desc = { + trigger = { exists = scope:scheme_discovered } + desc = court_position.9002.owner_discovered + } + } + theme = murder_scheme + left_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + center_portrait = { + character = scope:bodyguard + triggered_animation = { + trigger = { is_alive = no } + animation = map_fear + } + animation = random_weapon_aggressive + } + right_portrait = { + character = scope:owner_to_reveal + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + + immediate = { + set_variable = { + name = block_death_event_from + value = scope:bodyguard + days = 3 + } + # Handle the death of the bodyguard, if necessary + if = { + limit = { exists = local_var:bodyguard_dies } + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:bodyguard + REASON = death_murder + } + } + } + + # Who could do such a thing? + option = { + name = murder_save.1001.a + trigger = { + NOT = { exists = scope:scheme_discovered } + } + custom_tooltip = murder_save.failure_unknown_owner_tt + } + + # Vengeance! + option = { + name = murder_save.1001.b + trigger = { exists = scope:scheme_discovered } + custom_tooltip = murder_save.failure_known_owner_tt + } + + after = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } +} diff --git a/events/dlc/ep1/ep1_flavor_events.txt b/events/dlc/ep1/ep1_flavor_events.txt new file mode 100644 index 00000000..0afe9b7e --- /dev/null +++ b/events/dlc/ep1/ep1_flavor_events.txt @@ -0,0 +1,6005 @@ +namespace = ep1_flavor + +################################################## +# Ewan + +################################################## +# 0001 - 0010 Learn of the secret scion of an existing neighbouring court. +# 0011 - 0020 Diplomats from nearby realms have trashed your favourite hall. +# 0021 - 0030 You compete with another realm that shares your court language for grandeur. +# 0031 - 0040 Several fresh young scholars are newly arrived at court & need guidance. +################################################## + +################################################## +# The Secret DaughterSon +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +scripted_trigger ep1_flavour_0001_relative_appropriate_to_marry_trigger = { + can_marry_trigger = yes + is_adult = yes + liege = root + # Make sure we don't accidentally nab a player. + NOT = { is_ai = no } +} + +scripted_trigger ep1_flavour_0001_valid_to_have_secret_scion_trigger = { + # Standards checks: make sure the ruler is of the correct age, decently fertile, etc. + is_ai = yes + any_spouse = { + count = all + is_ai = yes + } + can_have_children = yes + fertility >= medium_fertility + ## Age needs to be relatively high so that the scion can be created successfully. + age >= ep1_flavour_0001_scion_parent_minimum_age_value + ## Having a dynasty makes things more fun + exists = dynasty + ## Soulmates are too complex to really handle hidden bastards for. + num_of_relation_soulmate = 0 + ## And though heterosexual, bisexual, and asexual characters might also conceivably have such a child, homosexual characters generally shouldn't. + NOT = { has_sexuality = homosexual } + # Hostility checks: filter out anyone who's at war with root, a bad relation, or just otherwise wouldn't be a good fit. + NOR = { + is_at_war_with = root + has_any_bad_relationship_with_root_trigger = yes + # Faiths that'd never consider marrying you are bad picks. + faith = { + faith_hostility_level = { + target = root.faith + value >= faith_evil_level + } + } + } + # Make sure we have someone who'd be personally concerned about the existence of bastards. + ## I.e, their faith discriminates against bastards. We check this manually both for ease of triggers & to keep things simple. + faith = { + OR = { + has_doctrine_parameter = bastards_legitimize + has_doctrine_parameter = bastards_always + } + } + # And finally someone who might actually actively empathise enough to try and protect their bastard from a harsh existence. + NOR = { + has_trait = lazy + has_trait = honest + has_trait = just + has_trait = trusting + has_trait = callous + has_trait = sadistic + } +} + +scripted_effect ep1_flavour_0001_marry_suitor_effect = { + # Diplo duel to try to pressure for the marriage. + duel = { + skill = diplomacy + target = scope:scion_parent + # Root wins, obtaining a forceful marriage alliance. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep1_flavor.0001.a.tt.success + send_interface_toast = { + title = ep1_flavor.0001.a.tt.success + left_icon = scope:scion_parent + right_icon = scope:scion_actual + # Calc all the bastard stuff. + ep1_flavour_0001_reveal_secret_child_effect = yes + # Scope:prospective_spouse & scope:scion_actual marry immediately or asap through grand wedding + if = { + limit = { + has_ep2_dlc_trigger = yes + } + create_grand_wedding_betrothal = { + SPOUSE_1 = scope:prospective_spouse + SPOUSE_2 = scope:scion_actual + HOST = root + PROMISEE = scope:scion_parent + } + } + else = { scope:prospective_spouse = { marry = scope:scion_actual } } + # Create an alliance root & scope:scion_parent via the married couple. + create_alliance = { + target = scope:scion_parent + allied_through_owner = scope:prospective_spouse + allied_through_target = scope:scion_actual + } + # Scope:scion_parent steps rivalry with root. + progress_towards_rival_effect = { + REASON = rival_succeeded_force_marriage + CHARACTER = scope:scion_parent + OPINION = -50 + } + } + } + # Scope:scion_parent obfuscates till they can whisk away their child. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep1_flavor.0001.a.tt.failure + send_interface_toast = { + title = ep1_flavor.0001.a.tt.failure + left_icon = scope:scion_parent + right_icon = scope:scion_actual + # Scope:scion gets away. + custom_tooltip = ep1_flavor.0001.tt.scion_escapes + # Root loses prestige. + add_prestige = major_prestige_loss + # Scope:scion_parent steps rivalry with root, but a bit less because they still won. + progress_towards_rival_effect = { + REASON = rival_attempted_to_force_marriage + CHARACTER = scope:scion_parent + OPINION = -25 + } + } + } + } + + # Sort stress. + ## If scope:scion_actual is at least a royal bastard, then arrogant characters are a little happy. + if = { + limit = { scope:scion_parent.primary_title.tier >= tier_kingdom } + stress_impact = { + arrogant = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + honest = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + } + ## Otherwise, they don't have a feeling. + else = { + stress_impact = { + humble = medium_stress_impact_gain + honest = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + } +} + +scripted_effect ep1_flavour_0001_reveal_secret_child_effect = { + # First, set up the sex as "recent" so we can pull the reveal. + ## The affair partner's gender is picked deterministically so that it could result in pregnancy. + scope:scion_parent = { + if = { + limit = { is_female = yes } + set_variable = { + name = had_recent_sex + value = flag:male + } + } + else = { + set_variable = { + name = had_recent_sex + value = flag:female + } + } + } + # Then, do the actual reveal. + ## First the effects of the extra-marital sex. + ### We regard this as the same as cheating actively for simplicity and the sake of the scale of the lie. + extramarital_sex_exposure_consequences_with_had_recent_sex_var_effect = { SPOUSE_EVENT = no } + # Finally, deal with scope:scion_actual's transformation. + scope:scion_actual = { + # Then make scope:scion_actual a bastard. + add_trait = bastard + # Obfuscate a few irrelevant bits. + hidden_effect = { + # Set up their legal parentage. + scope:scion_parent = { + if = { + limit = { is_female = yes } + scope:scion_actual = { set_mother = scope:scion_parent } + } + else = { + scope:scion_actual = { set_father = scope:scion_parent } + } + } + # Plus, dynasty. + set_house = scope:scion_parent.house + } + } + scope:scion_parent = { + if = { + limit = { + OR = { + AND = { + is_male = yes + NOT = { + faith = { has_doctrine = doctrine_adultery_men_accepted } + } + } + AND = { + is_female = yes + NOT = { + faith = { has_doctrine = doctrine_adultery_women_accepted } + } + } + } + + } + add_trait = adulterer + } + } +} + +# Learn of the secret scion of an existing neighbouring court. +ep1_flavor.0001 = { + type = character_event + title = ep1_flavor.0001.t + desc = ep1_flavor.0001.desc + theme = diplomacy + left_portrait = { + character = scope:scion_parent + animation = disbelief + outfit_tags = { beggar_rags } + } + right_portrait = { + character = scope:scion_actual + animation = worry + outfit_tags = { beggar_rags } + } + lower_center_portrait = scope:prospective_spouse + override_background = { reference = tavern } + + cooldown = { years = 100 } + + trigger = { + is_ai = no + # Standard checks. + has_royal_court = yes + has_dlc_feature = royal_court + is_available_at_peace_adult = yes + # Is suitable/has suitable family for the marriage. + OR = { + can_marry_trigger = yes + any_close_family_member = { ep1_flavour_0001_relative_appropriate_to_marry_trigger = yes } + } + # Has a valid neighbour or vassal. + OR = { + any_neighboring_and_across_water_realm_same_rank_owner = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes } + any_vassal = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes } + } + } + + weight_multiplier = { + base = 1 + + # Court weightings: plug in a court type that should see this event more often. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic } + } + + immediate = { + # First up, we decide whether root or a relative of theirs will be the marriable candidate. + ## If root can marry, we use root. + if = { + limit = { can_marry_trigger = yes } + save_scope_as = prospective_spouse + } + ## Otherwise, pick a family member. + else = { + random_close_family_member = { + limit = { ep1_flavour_0001_relative_appropriate_to_marry_trigger = yes } + save_scope_as = prospective_spouse + } + } + # Now we need to select a suitable dynasty to add the scion to. + ## Grab every candidate, chuck 'em in a list. + every_neighboring_and_across_water_realm_same_rank_owner = { + limit = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes } + add_to_list = valid_scion_candidates_list + } + every_vassal = { + limit = { ep1_flavour_0001_valid_to_have_secret_scion_trigger = yes } + add_to_list = valid_scion_candidates_list + } + ## Comb through the list for the most suitable dynasty. + ordered_in_list = { + list = valid_scion_candidates_list + order_by = { + value = 0 + # We prefer characters outside your sub-realm. + if = { + limit = { + liege != root + } + add = 100 + } + # Ideally ones with at least a bit of the relevant skills. + if = { + limit = { diplomacy >= decent_skill_rating } + add = 15 + } + if = { + limit = { intrigue >= decent_skill_rating } + add = 15 + } + # Certain traits really weight up the chances of the candidate. + if = { + limit = { has_trait = lustful } + add = 20 + } + if = { + limit = { has_trait = diligent } + add = 20 + } + if = { + limit = { has_trait = paranoid } + add = 20 + } + if = { + limit = { has_trait = seducer } + add = 20 + } + if = { + limit = { has_trait = schemer } + add = 20 + } + if = { + limit = { has_trait = compassionate } + add = 20 + } + } + save_scope_as = scion_parent + } + ## Take off scope:scion_parent's headgear for the event. + scope:scion_parent = { add_character_flag = no_headgear } + # Finally, we create the scion themselves. + ## Basic setup. + create_character = { + location = scope:scion_parent.capital_county.title_province + template = hidden_scion_template + save_scope_as = scion_actual + } + ## Adjust a few details. + hidden_effect = { + scope:scion_actual = { + # Copy over their genetics. + copy_inheritable_appearance_from = scope:scion_parent + # Add the sheltered modifier. + add_character_modifier = raised_in_secrecy_modifier + } + } + } + + # Preferred candidate: No doubt scope:scion_parent was simply holding HerHis hand for me? + option = { + name = ep1_flavor.0001.a + trigger = { this = scope:prospective_spouse } + + ep1_flavour_0001_marry_suitor_effect = yes + + # Stress impact taken care of in the scripted effect. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_rationality = 0.25 + ai_compassion = -0.5 + } + } + } + + # Backup candidate: No doubt scope:scion_parent was simply holding HerHis hand for my [Relative]? + option = { + name = ep1_flavor.0001.b + trigger = { + this != scope:prospective_spouse + } + + ep1_flavour_0001_marry_suitor_effect = yes + + # Stress impact taken care of in the scripted effect. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_rationality = 0.25 + ai_compassion = -0.5 + } + } + } + + # Grab them both, the world must know! + option = { + name = ep1_flavor.0001.c + + # You attempt to reveal scope:scion_actual's existence, giving scope:scion_parent fairly little time to completely erase HerHis existence. + duel = { + skill = intrigue + target = scope:scion_parent + # Scope:scion_parent leaves a trace, and you become the QueenKing of gossip for a time. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep1_flavor.0001.c.tt.success + send_interface_toast = { + title = ep1_flavor.0001.c.tt.success + left_icon = scope:scion_parent + # Gain some permanent intrigue. + add_intrigue_skill = 2 + # Scope:scion_actual is revealed. Consequences ensue. + ep1_flavour_0001_reveal_secret_child_effect = yes + ## Remember to mark this as having happened. + save_scope_value_as = { + name = scion_revealed + value = yes + } + # Become rivals with scope:scion_parent immediately (nemeses if they're vengeful). + if = { + limit = { + scope:scion_parent = { has_trait = vengeful } + can_set_relation_nemesis_trigger = { CHARACTER = scope:scion_parent } + } + set_relation_nemesis = { + target = scope:scion_parent + reason = rival_exposed_bastard + } + } + else_if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:scion_parent } + } + set_relation_rival = { + target = scope:scion_parent + reason = rival_exposed_bastard + } + } + else = { + reverse_add_opinion = { + target = scope:scion_parent + modifier = hate_opinion + opinion = -50 + } + } + } + } + # You're flummoxed by scope:scion_parent's trickery, leaving your accusations ridiculously baseless. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep1_flavor.0001.c.tt.failure + send_interface_toast = { + title = ep1_flavor.0001.c.tt.failure + left_icon = scope:scion_parent + # Scope:scion gets away. + custom_tooltip = ep1_flavor.0001.tt.scion_escapes + # Lose a load of prestige. + add_prestige = major_prestige_loss + # Stepped rivalry with scope:scion_parent. + progress_towards_rival_effect = { + REASON = rival_attempted_to_reveal_offspring + CHARACTER = scope:scion_parent + OPINION = -25 + } + } + } + } + + stress_impact = { + honest = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + deceitful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.75 + ai_compassion = -0.75 + } + } + } + + # I'll help you, but I expect something in return... + option = { + name = ep1_flavor.0001.d + trigger = { + can_add_hook = { + target = scope:scion_parent + type = manipulation_hook + } + } + + # Scope:scion gets away. + custom_tooltip = ep1_flavor.0001.tt.scion_escapes + # Gain a hook on scope:scion_parent, who's also grateful for your assistance in their time of need. + add_hook = { + type = favor_hook + target = scope:scion_parent + } + reverse_add_opinion = { + target = scope:scion_parent + modifier = grateful_opinion + opinion = 50 + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + honest = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_compassion = 0.25 + } + } + } + + # What a pedestrian drama. + option = { + # Doesn't believe in bastards. + name = { + trigger = { + faith = { has_doctrine_parameter = bastards_none } + } + text = ep1_flavor.0001.e.no_bastards + } + # Fallback. + name = ep1_flavor.0001.e.fallback + + # Scope:scion gets away. + custom_tooltip = ep1_flavor.0001.tt.scion_escapes + # You pay the stranger no mind; scope:scion_parent is relieved. + reverse_add_opinion = { + target = scope:scion_parent + modifier = relieved_opinion + opinion = 25 + } + + stress_impact = { + base = medium_stress_impact_loss + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.5 + ai_energy = -0.75 + } + } + } + + # Do a little clean-up. + after = { + # Afterwards, if scope:scion_actual isn't married or revealed, quietly disappear them. + hidden_effect = { + scope:scion_actual = { + if = { + limit = { + is_married = no + NOT = { exists = scope:scion_revealed } + } + death = { death_reason = death_vanished } + } + } + } + # Give scope:scion_parent their hat back. + scope:scion_parent = { remove_character_flag = no_headgear } + } +} + +################################################## +# An Absolute Shambles +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +scripted_trigger ep1_flavour_0011_valid_diplomats_trigger = { + # The title must be created first off. + is_title_created = yes + holder = { + # Make sure we're not looking at root. + this != root + # Now discard any that lack royal courts or aren't in diplomatic range. + has_royal_court = yes + has_dlc_feature = royal_court + in_diplomatic_range = root + # Then any that lack a chancellor. + exists = cp:councillor_chancellor + # Finally, their chancellor must be available & at peace. + cp:councillor_chancellor = { is_available_at_peace_ai_adult = yes } + } +} + +scripted_effect ep1_flavour_0011_friendly_diplomats_effect = { + reverse_add_opinion = { + target = scope:diplomat_1 + modifier = relieved_opinion + opinion = $OPINION$ + } + reverse_add_opinion = { + target = scope:diplomat_2 + modifier = relieved_opinion + opinion = $OPINION$ + } + ## Make them potential friends if appropriate. + hidden_effect = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:diplomat_1 } + } + set_relation_potential_friend = scope:diplomat_1 + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:diplomat_2 } + } + set_relation_potential_friend = scope:diplomat_2 + } + } +} + +# Diplomats from nearby realms have trashed your favourite hall. +ep1_flavor.0011 = { + type = character_event + title = ep1_flavor.0011.t + desc = ep1_flavor.0011.desc + theme = diplomacy + left_portrait = { + character = scope:diplomat_1 + animation = shock + } + right_portrait = { + character = scope:diplomat_2 + animation = shame + } + override_background = { reference = feast } + + cooldown = { years = 10 } + + trigger = { + # Standard checks. + has_royal_court = yes + has_dlc_feature = royal_court + is_available_at_peace_adult = yes + # Any two valid foreign chancellors are available. + any_kingdom = { + count >= 2 + ep1_flavour_0011_valid_diplomats_trigger = yes + } + } + + weight_multiplier = { + base = 1 + + # Court weightings: plug in a court type that should see this event more often. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic } + } + + immediate = { + # Grab all applicable chancellors. + every_kingdom = { + limit = { ep1_flavour_0011_valid_diplomats_trigger = yes } + holder.cp:councillor_chancellor = { add_to_list = valid_chancellors_list } + } + # Now, pick out the two most relevant chancellors. + ordered_in_list = { + list = valid_chancellors_list + order_by = { + value = 0 + # Prio up realms you're allied with, since they'd have good cause. + if = { + limit = { + liege = { + any_ally = { this = root } + } + } + add = 100 + } + # Plus anyone where there's a degree of mutual religious tolerance. + if = { + limit = { + faith = { + faith_hostility_level = { + target = root.faith + value <= faith_hostile_level + } + } + save_temporary_scope_as = current_char + root.faith = { + faith_hostility_level = { + target = scope:current_char.faith + value <= faith_hostile_level + } + } + } + add = 50 + } + # Various traits make it more likely. + ## Obviously drunkards. + if = { + limit = { has_trait = drunkard } + add = 10 + } + ## Revellers of all stripes. + if = { + limit = { has_trait = lifestyle_reveler } + add = 20 + } + ## Gluttons. + if = { + limit = { has_trait = gluttonous } + add = 10 + } + ## Arbitrary folks. + if = { + limit = { has_trait = arbitrary } + add = 10 + } + ## Gregarious party-throwers. + if = { + limit = { has_trait = gregarious } + add = 10 + } + # And a few traits make it less likely. + ## Recluses. + if = { + limit = { has_trait = reclusive } + add = -10 + } + ## The temperate. + if = { + limit = { has_trait = temperate } + add = -10 + } + ## Just folks. + if = { + limit = { has_trait = just } + add = -10 + } + ## The shy. + if = { + limit = { has_trait = shy } + add = -10 + } + # Diplomatic skill decreases it, since better diplomats are less likely to make a scene. + add = { + value = diplomacy + multiply = -1 + } + } + max = 2 + if = { + limit = { + NOT = { exists = scope:diplomat_1 } + } + save_scope_as = diplomat_1 + } + else_if = { + limit = { + NOT = { + this = scope:diplomat_1 + exists = scope:diplomat_2 + } + } + save_scope_as = diplomat_2 + } + } + # Set up a cost based on root's lodgings amenity. + if = { + limit = { + amenity_level = { + target = court_lodging_standards + value <= low_amenity_level + } + } + set_variable = { + name = reimbursement_cost + value = { + value = minor_gold_value + multiply = 0.5 + round = yes + } + } + } + if = { + limit = { + amenity_level = { + target = court_lodging_standards + value <= medium_amenity_level + } + } + set_variable = { + name = reimbursement_cost + value = { + value = medium_gold_value + multiply = 0.5 + round = yes + } + } + } + if = { + limit = { + amenity_level = { + target = court_lodging_standards + value <= high_amenity_level + } + } + set_variable = { + name = reimbursement_cost + value = { + value = major_gold_value + multiply = 0.5 + round = yes + } + } + } + if = { + limit = { + amenity_level = { + target = court_lodging_standards + value >= very_high_amenity_level + } + } + set_variable = { + name = reimbursement_cost + value = { + value = massive_gold_value + multiply = 0.5 + round = yes + } + } + } + ## No more gold for max, since we've already reached a pretty expensive bill. + # Add a negative modifier for the trashed hall. + add_character_modifier = { + modifier = legendary_party_aftermath_modifier + years = 10 + } + scope:diplomat_2 = { + add_character_flag = is_naked + } + } + + # You will pay for these damages, you lickspittle curs! + option = { + name = ep1_flavor.0011.a + + # Deduct half of the damages from each diplomat, pay it towards root. + ## We're not fussed if this cost is unexpected for the diplomats: they shouldn't have messed with the hall. + scope:diplomat_1 = { + pay_short_term_gold = { + target = root + gold = root.var:reimbursement_cost + } + } + scope:diplomat_2 = { + pay_short_term_gold = { + target = root + gold = root.var:reimbursement_cost + } + } + # Remove the negative modifier. + remove_character_modifier = legendary_party_aftermath_modifier + # Gain a replacement modifier. + add_character_modifier = { + modifier = lacking_diplomatic_munity_modifier + years = 10 + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + wrathful = miniscule_stress_impact_loss + calm = medium_stress_impact_gain + generous = medium_stress_impact_gain + forgiving = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_greed = 0.5 + } + } + } + + # Alright, you trashed it, you can clean it up. SERVANTS! A mop! + option = { + name = ep1_flavor.0011.b + + # The diplomats are fairly upset with this humiliation. + reverse_add_opinion = { + target = scope:diplomat_1 + modifier = humiliated_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:diplomat_2 + modifier = humiliated_opinion + opinion = -30 + } + ## Make them potential rivals if appropriate. + hidden_effect = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:diplomat_1 } + } + set_relation_potential_rival = scope:diplomat_1 + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:diplomat_2 } + } + set_relation_potential_rival = scope:diplomat_2 + } + } + # Remove the negative modifier. + remove_character_modifier = legendary_party_aftermath_modifier + # Replace it with a positive one. + add_character_modifier = { + modifier = humbling_hall_modifier + years = 10 + } + # Whack a lil CGV in for your swagger. + change_current_court_grandeur = miniscule_court_grandeur_gain + + stress_impact = { + just = miniscule_stress_impact_loss + calm = miniscule_stress_impact_loss + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_vengefulness = -0.5 + } + } + } + + # Oh no, this party's not over yet: someone fill my goblet! + option = { + name = ep1_flavor.0011.c + trigger = { + NOT = { has_trait = lifestyle_reveler } + } + + # The diplomats are immensely happy. + ep1_flavour_0011_friendly_diplomats_effect = { OPINION = 30 } + # The modifier gets worse in some ways, better in others. + remove_character_modifier = legendary_party_aftermath_modifier + add_character_modifier = { + modifier = mythic_party_aftermath_modifier + years = 10 + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = medium_stress_impact_gain + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_energy = 0.25 + ai_vengefulness = -0.5 + } + } + } + + # [Reveller] One night? Pathetic! Make way for the Party [TitleAsName]! + option = { + name = ep1_flavor.0011.d + trigger = { has_trait = lifestyle_reveler } + trait = lifestyle_reveler + + # The diplomats are even happier. + ep1_flavour_0011_friendly_diplomats_effect = { OPINION = 50 } + # The modifier gets *much* worse in some ways, *much* better in others. + remove_character_modifier = legendary_party_aftermath_modifier + add_character_modifier = { + modifier = world_shattering_party_aftermath_modifier + years = 10 + } + + stress_impact = { + base = medium_stress_loss + gregarious = miniscule_stress_impact_loss + shy = medium_stress_impact_gain + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.75 + ai_energy = 0.55 + ai_vengefulness = -0.5 + } + } + } + + # [wordlessly leave the hall] + option = { + name = ep1_flavor.0011.e + flavor = ep1_flavor.0011.e.tt + + # The diplomats gain stress & fear reprisal. + scope:diplomat_1 = { + add_opinion = { + target = root + modifier = scared_opinion + opinion = -30 + } + add_stress = major_stress_gain + } + scope:diplomat_2 = { + add_opinion = { + target = root + modifier = scared_opinion + opinion = -30 + } + add_stress = major_stress_gain + } + # People think you inscrutable. + add_character_modifier = { + modifier = inscrutable_host_modifier + years = 10 + } + + stress_impact = { + shy = minor_stress_impact_loss + reclusive = minor_stress_impact_loss + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -0.25 + ai_energy = -0.5 + ai_vengefulness = -0.75 + } + } + } + + # Do a little clean-up. + after = { + # Get rid of the reimbursement cost. + remove_variable = reimbursement_cost + scope:diplomat_2 = { + remove_character_flag = is_naked + } + } +} + +################################################## +# Two Realms Separated by a Courtly Language +# by Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +scripted_trigger ep1_flavour_0021_valid_nitpicking_courtier_trigger = { + # A simple is available check. + is_available_ai_adult = yes + # Plus they speak the court language. + knows_court_language_of = root +} + +scripted_trigger ep1_flavour_0021_valid_wrong_spelling_realm_trigger = { + # The title must be created first off. + is_title_created = yes + holder = { + # Make sure we're not looking at root. + this != root + # For erroring reasons, double check that their court is royal. + has_royal_court = yes + has_dlc_feature = royal_court + # Now ensure they speak the same court language. + has_same_court_language = root + # And that they can speak their *own* court language. + knows_court_language_of = this + # Finally, discard any that aren't in diplomatic range. + in_diplomatic_range = root + # ... or players. + is_ai = yes + } +} + +scripted_trigger ep1_flavour_0021_valid_characters_to_fuss_trigger = { + # Must speak the court language. + knows_court_language_of = $OWN_COURT$ + # And be an AI who's around and about. + is_available_at_peace_ai_adult = yes +} + +scripted_trigger ep1_flavour_0021_different_cultured_realms_trigger = { + $THIS$ = { + any_courtier = { + percent >= 0.5 + culture = $THIS$.culture + } + OR = { + any_sub_realm_county = { + count >= 10 + culture = $THIS$.culture + } + culture = { + any_culture_county = { + percent >= 0.25 + OR = { + holder = $THIS$ + holder = { + any_liege_or_above = { this = $THIS$ } + } + } + } + } + any_sub_realm_county = { + percent >= 0.5 + culture = $THIS$.culture + } + } + } +} + +scripted_effect ep1_flavour_0021_apply_mutual_court_opinions_effect = { + hidden_effect = { + every_in_list = { + list = root_court_list + save_temporary_scope_as = current_char + every_in_list = { + list = scope_rival_monarch_court_list + add_opinion = { + target = scope:current_char + modifier = $OPINION_TYPE$ + opinion = $OPINION_VALUE$ + } + } + } + every_in_list = { + list = scope_rival_monarch_court_list + save_temporary_scope_as = current_char + every_in_list = { + list = root_court_list + add_opinion = { + target = scope:current_char + modifier = $OPINION_TYPE$ + opinion = $OPINION_VALUE$ + } + } + } + } +} + +scripted_effect ep1_flavour_0021_apply_mutual_cultural_dislike_effect = { + if = { + limit = { + # First, check they're not the same culture. + culture != scope:rival_monarch.culture + # Then make sure both actually have a decent chunk of courtiers of their culture around, and aren't ruling some total adventurer kingdom.. + ep1_flavour_0021_different_cultured_realms_trigger = { THIS = root } + ep1_flavour_0021_different_cultured_realms_trigger = { THIS = scope:rival_monarch } + } + culture = { + change_cultural_acceptance = { + target = scope:rival_monarch.culture + value = $ACCEPTANCE_CHANGE$ + desc = $ACCEPTANCE_DESC$ + } + } + } +} + +# You compete with another realm that shares your court language for grandeur. +ep1_flavor.0021 = { + type = character_event + title = ep1_flavor.0021.t + desc = ep1_flavor.0021.desc + theme = diplomacy + left_portrait = { + character = scope:nitpicker + animation = scheme + } + right_portrait = { + character = scope:rival_monarch + animation = personality_vengeful + } + + cooldown = { years = 5 } + + trigger = { + # Standard checks. + has_royal_court = yes + has_dlc_feature = royal_court + is_available_at_peace_adult = yes + # For flavour reasons, root must be able to speak their own court language. + knows_court_language_of = this + # You'll also need someone in your court who can be the focal point. + ## This might occasionally make dumb selections, but honestly, that's sorta in the spirit of the quibbling. + any_courtier = { ep1_flavour_0021_valid_nitpicking_courtier_trigger = yes } + # Make sure we've got a suitable opposing realm. + OR = { + any_kingdom = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + any_empire = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + } + } + + weight_multiplier = { + base = 1 + + # Court weightings: plug in a court type that should see this event more often. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_diplomatic } + } + + immediate = { + # Select an opposing realm. + ## Kingdoms look for kingdoms... + if = { + limit = { highest_held_title_tier = tier_kingdom } + random_kingdom = { + limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + save_scope_as = rival_realm + holder = { save_scope_as = rival_monarch } + } + # ... but otherwise will take an empire. + if = { + limit = { + NOT = { exists = scope:rival_realm } + } + random_empire = { + limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + save_scope_as = rival_realm + holder = { save_scope_as = rival_monarch } + } + } + } + ## Empires look for empires... + else = { + random_empire = { + limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + save_scope_as = rival_realm + holder = { save_scope_as = rival_monarch } + } + # ... but will otherwise take kingdoms. + if = { + limit = { + NOT = { exists = scope:rival_realm } + } + random_kingdom = { + limit = { ep1_flavour_0021_valid_wrong_spelling_realm_trigger = yes } + save_scope_as = rival_realm + holder = { save_scope_as = rival_monarch } + } + } + } + # Grab a nitpicking courtier. + ## We do this after selecting the realm so that we can weight against poor-choice characters. + random_courtier = { + limit = { ep1_flavour_0021_valid_nitpicking_courtier_trigger = yes } + weight = { + base = 0 + # Weight up according to learning. + modifier = { add = learning } + # Plus a few traits make it more likely. + modifier = { + add = 10 + has_trait = arrogant + } + modifier = { + add = 10 + has_trait = scholar + } + ## Y'know, assuming you're just a stickler for the rules of language too. + modifier = { + add = 5 + has_trait = just + } + # And a few others less likely. + modifier = { + add = -10 + has_trait = humble + } + ## And, as with just, assuming that you also don't much care for the rules of language. + modifier = { + add = -5 + has_trait = arbitrary + } + # Weight against characters that might identify with the other realm. + modifier = { + add = -20 + any_close_or_extended_family_member = { this = scope:rival_monarch } + } + modifier = { + add = -20 + culture = scope:rival_monarch.culture + } + } + save_scope_as = nitpicker + } + # Nab both courts for effects. + ## First root. + every_courtier = { + limit = { + ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = root } + } + add_to_list = root_court_list + } + every_councillor = { + limit = { + ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = root } + # Ensure that a vassal kingdom isn't added as disapproving of their own spelling. + this != scope:rival_monarch + } + add_to_list = root_court_list + } + ## Then scope:rival_monarch. + scope:rival_monarch = { + every_courtier = { + limit = { + ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = scope:rival_monarch } + } + add_to_list = scope_rival_monarch_court_list + } + every_councillor = { + limit = { + ep1_flavour_0021_valid_characters_to_fuss_trigger = { OWN_COURT = scope:rival_monarch } + # Ensure that a vassal kingdom isn't added as disapproving of their own spelling. + this != root + } + add_to_list = scope_rival_monarch_court_list + } + } + } + + # This missive is missing half the vowels! Disgusting! + option = { + name = ep1_flavor.0021.a + + # Both courts gain dislike of each other. + custom_tooltip = ep1_flavor.0021.a.tt + ep1_flavour_0021_apply_mutual_court_opinions_effect = { + OPINION_TYPE = disgusted_opinion + OPINION_VALUE = ep1_flavour_0021_courts_lose_opinion_actual_value + } + # Diplo challenge to gain CGV at their expense. + duel = { + skill = diplomacy + target = scope:rival_monarch + # PrimaryTitle.GetAdjective spellings are best! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep1_flavor.0021.a.tt.success + send_interface_toast = { + title = ep1_flavor.0021.a.tt.success + left_icon = scope:rival_monarch + # Some for you... + change_current_court_grandeur = medium_court_grandeur_gain + # ... some from them. + scope:rival_monarch = { change_current_court_grandeur = medium_court_grandeur_loss } + } + } + # Scope:rival_monarch.PrimaryTitle.GetAdjective spellings are best! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep1_flavor.0021.a.tt.failure + send_interface_toast = { + title = ep1_flavor.0021.a.tt.failure + left_icon = scope:rival_monarch + # Some from you... + change_current_court_grandeur = medium_court_grandeur_loss + # ... some for them. + scope:rival_monarch = { change_current_court_grandeur = medium_court_grandeur_gain } + } + } + } + # Look at making things a bit more tense. + ep1_flavour_0021_apply_mutual_cultural_dislike_effect = { + ACCEPTANCE_CHANGE = minor_cultural_acceptance_loss + ACCEPTANCE_DESC = cultural_acceptance_courtly_spelling_differences + } + + stress_impact = { + humble = minor_stress_impact_gain + patient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.75 + ai_rationality = -0.25 + } + } + } + + # Are they not our linguistic cousins? + option = { + name = ep1_flavor.0021.b + + # Both courts start to like each other a bit more. + custom_tooltip = ep1_flavor.0021.b.tt + ep1_flavour_0021_apply_mutual_court_opinions_effect = { + OPINION_TYPE = respect_opinion + OPINION_VALUE = ep1_flavour_0021_courts_gain_opinion_value + } + # Stepped friendship with the other ruler. + progress_towards_friend_effect = { + CHARACTER = scope:rival_monarch + OPINION = default_friend_opinion + REASON = friend_common_language + } + # And, if appropriate, a little cultural acceptance. + ep1_flavour_0021_apply_mutual_cultural_dislike_effect = { + ACCEPTANCE_CHANGE = minor_cultural_acceptance_gain + ACCEPTANCE_DESC = cultural_acceptance_courtly_cousins + } + + stress_impact = { + arrogant = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.25 + ai_energy = 0.5 + } + } + } + + # Two noble courts and not a sodding brain between them... + option = { + name = ep1_flavor.0021.c + + # Both courts gain dislike of each other. + custom_tooltip = ep1_flavor.0021.c.tt + ep1_flavour_0021_apply_mutual_court_opinions_effect = { + OPINION_TYPE = disgusted_opinion + OPINION_VALUE = ep1_flavour_0021_courts_lose_opinion_actual_value + } + # Look at making things a bit more tense. + ep1_flavour_0021_apply_mutual_cultural_dislike_effect = { + ACCEPTANCE_CHANGE = minor_cultural_acceptance_loss + ACCEPTANCE_DESC = cultural_acceptance_courtly_spelling_differences + } + # Gain a modifier for your troubles. + add_character_modifier = { + modifier = above_petty_differences_modifier + years = 10 + } + + stress_impact = { + cynical = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.25 + ai_sociability = -0.5 + ai_energy = -0.75 + } + } + } +} + +################################################## +# Fresh at Court +# by Ewan Cowhig Croft +# 0031 - 0040 +################################################## + +scripted_effect ep1_flavour_0031_give_random_inspiration_effect = { + # Sort out an appropriate tooltip. + ## One for scope:scholar_1. + if = { + limit = { $THIS$ = scope:scholar_1 } + custom_tooltip = ep1_flavor.0031.inspire.scholar_1.tt + } + ## And one for scope:scholar_2. + if = { + limit = { $THIS$ = scope:scholar_2 } + custom_tooltip = ep1_flavor.0031.inspire.scholar_2.tt + } + # We weight up the more bookish inspirations a bit. + hidden_effect = { + random_list = { + 300 = { create_inspiration = book_inspiration } + 200 = { create_inspiration = artisan_inspiration } + 200 = { create_inspiration = alchemy_inspiration } + 100 = { create_inspiration = weapon_inspiration } + 100 = { create_inspiration = armor_inspiration } + 100 = { create_inspiration = weaver_inspiration } + 100 = { create_inspiration = smith_inspiration } + 50 = { create_inspiration = adventure_inspiration } + 50 = { create_inspiration = bow_inspiration } + } + } +} + +scripted_effect ep1_flavour_0031_add_both_scholars_effect = { + # Add both scholars first-up. + add_courtier = scope:scholar_1 + add_courtier = scope:scholar_2 + # Well, this doesn't exactly paint your court in the best light. + change_current_court_grandeur = miniscule_court_grandeur_loss + # Buuuut it does make pepole think better of ye. + add_prestige = minor_prestige_gain +} + +scripted_effect ep1_flavour_031_add_scholars_stress_effect = { + stress_impact = { + drunkard = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = $STRESS_GAIN$ + temperate = $STRESS_GAIN$ + } +} + +# Several fresh young scholars are newly arrived at court & need guidance. +ep1_flavor.0031 = { + type = character_event + title = ep1_flavor.0031.t + desc = ep1_flavor.0031.desc + theme = learning + left_portrait = { + character = scope:scholar_1 + animation = worry + } + right_portrait = { + character = scope:scholar_2 + animation = personality_bold + } + override_background = { reference = tavern } + + cooldown = { years = 5 } + + trigger = { + # Standard checks. + has_royal_court = yes + has_dlc_feature = royal_court + is_available_at_peace_adult = yes + # Since this is a fairly scholar-specific thing, we restrict it to scholarly courts. + has_court_type = court_scholarly + } + + weight_multiplier = { + base = 1 + + # No court weighting, since we hard-restrict this to scholarly courts. + } + + immediate = { + # Create the two scholars. + ## First a scholar's scholar. + create_character = { + template = capital_scholar_character + location = root.capital_province + save_scope_as = scholar_1 + } + ## Then a writer. + create_character = { + template = capital_writer_character + location = root.capital_province + save_scope_as = scholar_2 + } + } + + # Down it, scope:scholar_1! + option = { + name = ep1_flavor.0031.a + + # Become friends with scope:scholar_1. + set_relation_friend = { reason = friend_drinking_together target = scope:scholar_1 } + # Give scope:scholar_1 an inspiration. + scope:scholar_1 = { + ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_1 } + } + # Gain both scholars. + ep1_flavour_0031_add_both_scholars_effect = yes + + # Stress impact handled in the effect. + ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = medium_stress_impact_gain } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = 0.5 + } + } + } + + # We like to drink with scope:scholar_2, because scope:scholar_2 is our mate! + option = { + name = ep1_flavor.0031.b + + # Become friends with scope:scholar_2. + set_relation_friend = { reason = friend_drinking_together target = scope:scholar_1 } + # Give scope:scholar_2 an inspiration. + scope:scholar_2 = { + ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_2 } + } + # Gain both scholars. + ep1_flavour_0031_add_both_scholars_effect = yes + + # Stress impact handled in the effect. + ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = medium_stress_impact_gain } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = 0.5 + } + } + } + + # There are some techniques that only experience can teach... + option = { + name = ep1_flavor.0031.c + flavor = ep1_flavor.0031.c.tt + trigger = { + OR = { + has_trait = scholar + has_trait = drunkard + } + } + trait = scholar + trait = drunkard + + # Become friends with *both* scholars. + set_relation_friend = { reason = friend_impressive_feat_of_alcoholism target = scope:scholar_1 } + set_relation_friend = { reason = friend_impressive_feat_of_alcoholism target = scope:scholar_2 } + # Plus, *both* get inspirations. + scope:scholar_1 = { + ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_1 } + } + scope:scholar_2 = { + ep1_flavour_0031_give_random_inspiration_effect = { THIS = scope:scholar_2 } + } + # Gain a modifier that loses you a little health for the weird concoction. + add_character_modifier = { + modifier = what_did_i_just_drink_modifier + years = 5 + } + # Gain both scholars. + ep1_flavour_0031_add_both_scholars_effect = yes + + # Stress impact handled in the effect. + ep1_flavour_031_add_scholars_stress_effect = { STRESS_GAIN = major_stress_impact_gain } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = 1 + } + } + } + + # These rituals are unbecoming of the scholarly. + option = { + name = ep1_flavor.0031.d + + # The scholars are booted. + hidden_effect = { + scope:scholar_1 = { silent_disappearance_effect = yes } + scope:scholar_2 = { silent_disappearance_effect = yes } + } + # Gain a modifier making you out to be a bit of a miser, but a more learned one. + add_character_modifier = { + modifier = known_killjoy_modifier + years = 10 + } + # Gain a bunch of learning lifestyle XP. + add_learning_lifestyle_xp = major_lifestyle_xp + + stress_impact = { + shy = miniscule_stress_impact_loss + temperate = miniscule_stress_impact_loss + lifestyle_reveler = minor_stress_impact_gain + drunkard = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + gluttonous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -0.25 + ai_sociability = -0.5 + } + } + } +} + + +################################################## +# Oltner + +scripted_trigger appropriate_eunuch_trigger = { + is_available_ai_adult = yes + is_eunuch_trigger = yes + NOT = { + has_relation_rival = root + } +} + +scripted_effect appoint_court_eunuch_effect = { + if = { + limit = { + culture = { has_cultural_parameter = can_appoint_chief_eunuch } + } + court_position_grant_effect = { + EMPLOYER = root + CANDIDATE = scope:eunuch_target + POS = chief_eunuch + } + } +} + +# A visiting Eunuch offers their services +ep1_flavor.1000 = { + type = character_event + title = ep1_flavor.1000.t + desc = ep1_flavor.1000.desc + theme = learning + override_background = { + reference = sitting_room + } + + cooldown = { + years = 10 + } + + left_portrait = { + character = scope:eunuch_target + animation = flirtation + } + + trigger = { + has_ep1_dlc_trigger = yes + is_landed_or_landless_administrative = yes + culture = { + OR = { + has_cultural_parameter = can_castrate_prisoners + has_cultural_parameter = eunuch_trait_bonuses + has_cultural_parameter = court_machinations_eunuch_trait_bonuses + has_cultural_parameter = can_appoint_chief_eunuch + } + } + is_available_at_peace_adult = yes + OR = { + is_ai = no + primary_title.tier > tier_duchy # So that we don't create too many characters for the AI (performance) + } + } + + immediate = { + if = { + limit = { + any_pool_character = { + province = root.capital_province + appropriate_eunuch_trigger = yes + } + } + random_pool_character = { + province = root.capital_province + limit = { + appropriate_eunuch_trigger = yes + } + save_scope_as = eunuch_target + } + } + else = { + # Find an appropriate culture for the Eunuch + if = { + limit = { + is_ai = no # This is gonna be expensive, exclude AI's + any_culture_global = { + has_cultural_parameter = can_castrate_prisoners + } + } + random_culture_global = { + limit = { + has_cultural_parameter = can_castrate_prisoners + } + weight = { # Upweight for your own culture if it's valid (more greeks in greece, but the potential for east africans to visit, etc) + base = 1 + modifier = { + add = 2 + this = root.culture + } + modifier = { + factor = 0 + this != root.culture + NOT = { + any_culture_county = { # This is the expensive part + title_province = { + squared_distance = { target = root.capital_province value < squared_distance_massive } + } + } + } + } + } + save_scope_as = eunuch_target_culture + } + } + else = { + root.culture = { + save_scope_as = eunuch_target_culture + } + } + create_character = { + location = root.capital_province + culture = scope:eunuch_target_culture + dynasty = none + template = random_learned_eunuch_character + save_scope_as = eunuch_target + } + } + + if = { # Find somewhere else for the eunuch to move if they do not get employment + limit = { + any_neighboring_and_across_water_top_liege_realm = { + always = yes + } + } + random_neighboring_and_across_water_top_liege_realm = { + save_scope_as = new_court + } + } + + if = { # Save old court eunuch if relevant + limit = { employs_court_position = chief_eunuch_court_position } + random_court_position_holder = { + type = chief_eunuch_court_position + save_scope_as = old_holder + } + } + } + + option = { # Accept the Eunuch's offer + name = ep1_flavor.1000.a + + pay_short_term_gold = { + target = scope:eunuch_target + gold = root.tiny_gold_value + } + + add_courtier = scope:eunuch_target + + appoint_court_eunuch_effect = yes + + scope:eunuch_target = { + add_opinion = { + target = root + opinion = 50 + modifier = grateful_opinion + } + add_character_flag = { + flag = blocked_from_leaving + years = 25 + } + } + + stress_impact = { + greedy = massive_stress_impact_gain + paranoid = major_stress_gain + arrogant = major_stress_impact_gain + fickle = medium_stress_impact_gain + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.1 + ai_greed >= low_positive_ai_value + } + } + } + + option = { # Negotiate with the eunuch + name = ep1_flavor.1000.b + + duel = { + skill = diplomacy + value = 12 + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + + desc = ep1_flavor.1000.c.success + send_interface_toast = { + title = ep1_flavor.1000.c.success + left_icon = scope:eunuch_target + + add_courtier = scope:eunuch_target + appoint_court_eunuch_effect = yes + add_prestige = minor_prestige_gain + scope:eunuch_target = { + progress_towards_friend_effect = { + CHARACTER = root + OPINION = 0 + REASON = friend_court_position_recieved + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = ep1_flavor.1000.c.failure + send_interface_toast = { + title = ep1_flavor.1000.c.failure + left_icon = scope:eunuch_target + + add_prestige = minor_prestige_loss + scope:eunuch_target = { + hidden_effect = { + random = { + chance = 50 + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = root } + } + set_relation_potential_rival = root + } + } + } + } + + custom_tooltip = eunuch_moves_tt + + hidden_effect = { + scope:eunuch_target = { + if = { + limit = { + exists = scope:new_court + } + move_to_pool_at = scope:new_court.holder.capital_county.title_province + } + } + } + } + } + } + + stress_impact = { + generous = medium_stress_impact_gain + patient = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.1 + ai_sociability >= low_positive_ai_value + } + } + } + + option = { # Deny the eunuch + name = ep1_flavor.1000.c + + custom_tooltip = eunuch_moves_tt + + hidden_effect = { + scope:eunuch_target = { + if = { + limit = { + exists = scope:new_court + } + move_to_pool_at = scope:new_court.holder.capital_county.title_province + } + } + } + + stress_impact = { + diligent = massive_stress_impact_gain + gregarious = major_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.1 + ai_greed <= low_positive_ai_value + } + } + } +} + +# A learned eunuch wishes to sell various tips & tricks +ep1_flavor.1200 = { + type = character_event + title = ep1_flavor.1200.t + desc = ep1_flavor.1200.desc + theme = intrigue + + cooldown = { + years = 30 + } + + left_portrait = { + character = scope:eunuch_target + animation = personality_rational + } + + trigger = { + has_ep1_dlc_trigger = yes + is_landed_or_landless_administrative = yes + culture = { + OR = { + has_cultural_parameter = can_castrate_prisoners + has_cultural_parameter = eunuch_trait_bonuses + has_cultural_parameter = court_machinations_eunuch_trait_bonuses + has_cultural_parameter = can_appoint_chief_eunuch + } + } + is_available_at_peace_adult = yes + OR = { + is_ai = no + primary_title.tier > tier_duchy # So that we don't create too many characters for the AI (performance) + } + OR = { # Performance + is_ai = no + any_courtier_or_guest = { + appropriate_eunuch_trigger = yes + } + } + } + + immediate = { + if = { + limit = { + any_courtier_or_guest = { + appropriate_eunuch_trigger = yes + } + } + random_courtier_or_guest = { + limit = { + appropriate_eunuch_trigger = yes + } + assign_quirk_effect = yes + save_scope_as = eunuch_target + } + } + else_if = { + limit = { + any_pool_character = { + province = root.capital_province + appropriate_eunuch_trigger = yes + } + } + random_pool_character = { + province = root.capital_province + limit = { + appropriate_eunuch_trigger = yes + } + assign_quirk_effect = yes + save_scope_as = eunuch_target + } + } + else = { + # Find an appropriate culture for the Eunuch + if = { + limit = { + is_ai = no # This is gonna be expensive, exclude AI's + any_culture_global = { + has_cultural_parameter = can_castrate_prisoners + } + } + random_culture_global = { + limit = { + has_cultural_parameter = can_castrate_prisoners + } + weight = { # Upweight for your own culture if it's valid (more greeks in greece, but the potential for east africans to visit, etc) + base = 1 + modifier = { + add = 2 + this = root.culture + } + modifier = { + factor = 0 + this != root.culture + NOT = { + any_culture_county = { # This is the expensive part + title_province = { + squared_distance = { target = root.capital_province value < squared_distance_massive } + } + } + } + } + } + save_scope_as = eunuch_target_culture + } + } + else = { + root.culture = { + save_scope_as = eunuch_target_culture + } + } + create_character = { + location = root.capital_province + culture = scope:eunuch_target_culture + dynasty = none + template = random_learned_eunuch_character + save_scope_as = eunuch_target + } + } + } + + option = { # Boost to learning languages + name = ep1_flavor.1200.a + + pay_short_term_gold = { + target = scope:eunuch_target + gold = root.tiny_gold_value + } + + add_character_modifier = { + modifier = secrets_of_language_modifier + years = 15 + } + + stress_impact = { + greedy = massive_stress_impact_gain + paranoid = major_stress_gain + arrogant = major_stress_impact_gain + fickle = medium_stress_impact_gain + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + add = ai_sociability + } + } + } + + option = { # Hostile Scheme boost + name = ep1_flavor.1200.b + + pay_short_term_gold = { + target = scope:eunuch_target + gold = root.tiny_gold_value + } + + add_character_modifier = { + modifier = secrets_of_murder_modifier + years = 15 + } + + stress_impact = { + forgiving = massive_stress_impact_gain + compassionate = major_stress_gain + content = major_stress_impact_gain + humble = medium_stress_impact_gain + calm = medium_stress_impact_gain + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 0 + modifier = { + add = ai_vengefulness + } + } + } + + option = { # Stewardship tips + name = ep1_flavor.1200.c + + pay_short_term_gold = { + target = scope:eunuch_target + gold = root.tiny_gold_value + } + + add_character_modifier = { + modifier = secrets_of_the_realm_modifier + years = 15 + } + + stress_impact = { + lazy = massive_stress_impact_gain + impatient = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # No, thank you + name = ep1_flavor.1200.d + + scope:eunuch_target = { + add_opinion = { + target = root + opinion = -15 + modifier = disappointed_opinion + } + hidden_effect = { + random = { + chance = 50 + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = root } + } + set_relation_potential_rival = root + } + } + } + } + + stress_impact = { + diligent = massive_stress_impact_gain + gregarious = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + add = ai_energy + ai_energy <= 0 + } + } + } +} + + +################################################## +# Joe + +################################################## +# 2000 - 2999 +################################################## + +######################### +# Martial Exercises # +# by Joe Parkin # +######################### + +scripted_trigger ep1_flavor_2000_maa_scope_trigger = { + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:$TYPE$ + } + NAND = { + exists = scope:maa_type_2 + scope:maa_type_2 = flag:$TYPE$ + } +} + +scripted_effect ep1_flavor_2000_maa_scope_effect = { + if = { + limit = { + NOT = { exists = scope:maa_type_1 } + } + save_scope_value_as = { + name = maa_type_1 + value = flag:$TYPE$ + } + } + else_if = { + limit = { + NOT = { exists = scope:maa_type_2 } + } + save_scope_value_as = { + name = maa_type_2 + value = flag:$TYPE$ + } + } +} + +# Positive opinion modifiers for all vassal/courtier characters of root culture (they like you respecting their cultural MAA) +scripted_effect ep1_flavor_2000_culture_opinion_effect = { + every_vassal_or_below = { + custom = ep1_flavor.2000.culture_tt + limit = { + culture = root.culture + NOR = { + AND = { + exists = scope:knight_scope + this = scope:knight_scope + } + AND = { + exists = scope:marshal_scope + this = scope:marshal_scope + } + } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 5 + } + } + hidden_effect = { + every_courtier = { + limit = { + culture = root.culture + NOR = { + AND = { + exists = scope:knight_scope + this = scope:knight_scope + } + AND = { + exists = scope:marshal_scope + this = scope:marshal_scope + } + } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 5 + } + } + } +} + +# Apply correct modifier and opinion boosts based on selected MAA type +scripted_effect ep1_flavor_2000_type_effect = { + switch = { + trigger = scope:$TYPE$ + flag:archers = { + add_character_modifier = { + modifier = ep1_2000_archer_modifier + years = 10 + } + if = { + limit = { + culture = { culture_has_archer_maa = yes } + } + ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture + } + } + flag:infantry = { + add_character_modifier = { + modifier = ep1_2000_infantry_modifier + years = 10 + } + if = { + limit = { + OR = { + culture = { culture_has_heavy_infantry_maa = yes } + culture = { culture_has_pikemen_maa = yes } + } + } + ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture + } + } + flag:cavalry = { + add_character_modifier = { + modifier = ep1_2000_cavalry_modifier + years = 10 + } + if = { + limit = { + OR = { + culture = { culture_has_light_cavalry_maa = yes } + culture = { culture_has_heavy_cavalry_maa = yes } + } + } + ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture + } + } + flag:archer_cavalry = { + add_character_modifier = { + modifier = ep1_2000_acavalry_modifier + years = 10 + } + if = { + limit = { + OR = { + culture = { culture_has_archer_cavalry_maa = yes } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + ep1_flavor_2000_culture_opinion_effect = yes + } + } + flag:skirmishers = { + add_character_modifier = { + modifier = ep1_2000_skirmisher_modifier + years = 10 + } + if = { + limit = { + culture = { culture_has_skirmisher_maa = yes } + } + ep1_flavor_2000_culture_opinion_effect = yes # Applies opinion modifiers to all vassal/courtier characters of root culture + } + } + flag:elephant_cavalry = { + add_character_modifier = { + modifier = ep1_2000_ecavalry_modifier + years = 10 + } + } + flag:camel_cavalry = { + add_character_modifier = { + modifier = ep1_2000_ccavalry_modifier + years = 10 + } + } + flag:levies = { + add_character_modifier = { + modifier = ep1_2000_levies_modifier + years = 10 + } + } + } +} + +ep1_flavor.2000 = { + type = character_event + title = ep1_flavor.2000.t + desc = { + desc = ep1_flavor.2000.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:maa_type_1 = flag:archers } + desc = ep1_flavor.2000.desc_archers + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:infantry } + desc = ep1_flavor.2000.desc_infantry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:cavalry } + desc = ep1_flavor.2000.desc_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:archer_cavalry } + desc = ep1_flavor.2000.desc_archer_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:elephant_cavalry } + desc = ep1_flavor.2000.desc_elephant_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:camel_cavalry } + desc = ep1_flavor.2000.camel_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:levies } + desc = ep1_flavor.2000.desc_levies + } + } + desc = ep1_flavor.2000.desc_bridge + first_valid = { + triggered_desc = { + trigger = { scope:maa_type_2 = flag:archers } + desc = ep1_flavor.2000.desc_archers + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:infantry } + desc = ep1_flavor.2000.desc_infantry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:cavalry } + desc = ep1_flavor.2000.desc_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:archer_cavalry } + desc = ep1_flavor.2000.desc_archer_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:elephant_cavalry } + desc = ep1_flavor.2000.desc_elephant_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:camel_cavalry } + desc = ep1_flavor.2000.camel_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:levies } + desc = ep1_flavor.2000.desc_levies + } + } + desc = ep1_flavor.2000.desc_outro + } + theme = martial + override_background = { reference = army_camp } + cooldown = { years = 10 } + left_portrait = { + character = scope:knight_scope + animation = throne_room_two_handed_passive_1 + } + right_portrait = { + character = cp:councillor_marshal + animation = marshal + } + + trigger = { + has_ep1_dlc_trigger = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_landed_or_landless_administrative = yes + is_available_adult = yes + exists = cp:councillor_marshal + any_knight = { + count >= 1 + is_available_ai_adult = yes + NOT = { this = root.cp:councillor_marshal } + } + OR = { + OR = { + culture = { culture_has_archer_maa = yes } + number_maa_regiments_of_base_type = { type = archers value > 0 } + } + OR = { + culture = { culture_has_light_cavalry_maa = yes } + culture = { culture_has_heavy_cavalry_maa = yes } + number_maa_regiments_of_base_type = { type = light_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 } + } + OR = { + culture = { culture_has_heavy_infantry_maa = yes } + culture = { culture_has_pikemen_maa = yes } + number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 } + number_maa_regiments_of_base_type = { type = pikemen value > 0 } + + } + OR = { + OR = { + culture = { culture_has_archer_cavalry_maa = yes } + mpo_can_recruit_nomad_maa_trigger = yes + } + number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 } + } + OR = { + culture = { culture_has_skirmisher_maa = yes } + number_maa_regiments_of_base_type = { type = skirmishers value > 0 } + } + number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 } + } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_warlike } + } + + immediate = { + cp:councillor_marshal = { save_scope_as = marshal_scope } + ordered_knight = { + limit = { + is_available_ai_adult = yes + this != scope:marshal_scope + } + order_by = prowess + save_scope_as = knight_scope + } + hidden_effect = { + while = { + count = 3 + random_list = { + 10 = { # archers + trigger = { + OR = { + number_maa_regiments_of_base_type = { type = archers value > 0 } + culture = { culture_has_archer_maa = yes } + } + ep1_flavor_2000_maa_scope_trigger = { TYPE = archers } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = archers value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = archers } + } + 10 = { # infantry + trigger = { + OR = { + number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 } + number_maa_regiments_of_base_type = { type = pikemen value > 0 } + culture = { culture_has_heavy_infantry_maa = yes } + culture = { culture_has_pikemen_maa = yes } + } + ep1_flavor_2000_maa_scope_trigger = { TYPE = infantry } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = heavy_infantry value > 4 } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = pikemen value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = infantry } + } + 10 = { # cavalry + trigger = { + OR = { + number_maa_regiments_of_base_type = { type = light_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 } + culture = { culture_has_light_cavalry_maa = yes } + culture = { culture_has_heavy_cavalry_maa = yes } + } + ep1_flavor_2000_maa_scope_trigger = { TYPE = cavalry } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = light_cavalry value > 4 } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = heavy_cavalry value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = cavalry } + } + 10 = { # archer_cavalry + trigger = { + OR = { + number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 } + OR = { + culture = { culture_has_archer_cavalry_maa = yes } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + ep1_flavor_2000_maa_scope_trigger = { TYPE = archer_cavalry } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = archer_cavalry value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = archer_cavalry } + } + 10 = { # skirmishers + trigger = { + OR = { + number_maa_regiments_of_base_type = { type = skirmishers value > 0 } + culture = { culture_has_skirmisher_maa = yes } + } + ep1_flavor_2000_maa_scope_trigger = { TYPE = skirmishers } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = skirmishers value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = skirmishers } + } + 10 = { # elephant_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 } + ep1_flavor_2000_maa_scope_trigger = { TYPE = elephant_cavalry } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = elephant_cavalry value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = elephant_cavalry } + } + 10 = { # camel_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 } + ep1_flavor_2000_maa_scope_trigger = { TYPE = camel_cavalry } + } + modifier = { + factor = 2 + number_maa_regiments_of_base_type = { type = camel_cavalry value > 4 } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = camel_cavalry } + } + 1 = { # levies + trigger = { + ep1_flavor_2000_maa_scope_trigger = { TYPE = levies } + } + ep1_flavor_2000_maa_scope_effect = { TYPE = levies } + } + } + } + } + } + + option = { # First type + name = { + trigger = { scope:maa_type_1 = flag:archers } + text = ep1_flavor.2000.archers + } + name = { + trigger = { + scope:maa_type_1 = flag:archers + culture = { has_cultural_tradition = tradition_longbow_competitions } + } + text = ep1_flavor.2000.archers_longbow + } + name = { + trigger = { scope:maa_type_1 = flag:infantry } + text = ep1_flavor.2000.infantry + } + name = { + trigger = { scope:maa_type_1 = flag:cavalry } + text = ep1_flavor.2000.cavalry + } + name = { + trigger = { + scope:maa_type_1 = flag:cavalry + OR = { + culture = culture:french + culture = { has_cultural_tradition = tradition_chivalry } + } + } + text = ep1_flavor.2000.cavalry_joust + } + name = { + trigger = { + scope:maa_type_1 = flag:cavalry + OR = { + culture = { has_cultural_pillar = heritage_byzantine } + is_roman_emperor_trigger = yes + } + } + text = ep1_flavor.2000.cavalry_tzykanion + } + name = { + trigger = { + scope:maa_type_1 = flag:cavalry + OR = { + culture = { has_cultural_pillar = heritage_iranian } + has_title = title:e_persia #Must be the current emperor. + } + } + text = ep1_flavor.2000.cavalry_chovgan + } + name = { + trigger = { scope:maa_type_1 = flag:archer_cavalry } + text = ep1_flavor.2000.archer_cavalry + } + name = { + trigger = { scope:maa_type_1 = flag:skirmishers } + text = ep1_flavor.2000.skirmishers + } + name = { + trigger = { scope:maa_type_1 = flag:elephant_cavalry } + text = ep1_flavor.2000.elephant_cavalry + } + name = { + trigger = { scope:maa_type_1 = flag:camel_cavalry } + text = ep1_flavor.2000.camel_cavalry + } + name = { + trigger = { scope:maa_type_1 = flag:levies } + text = ep1_flavor.2000.levies + } + name = { + trigger = { + scope:maa_type_1 = flag:levies + culture = { has_cultural_pillar = heritage_goidelic } + } + text = ep1_flavor.2000.levies_caid + } + # Costs + stress_impact = { + arrogant = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + remove_treasury_or_gold = medium_treasury_or_gold_value + # Effects + ep1_flavor_2000_type_effect = { TYPE = maa_type_1 } # Add relevant modifier and cultural opinion if relevant + scope:marshal_scope = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + scope:knight_scope = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + ai_boldness = 0.5 + ai_rationality = 0.5 + } + modifier = { + factor = 2 + OR = { + has_relation_friend = scope:marshal_scope + has_relation_rival = scope:knight_scope + } + } + } + } + + option = { # Second type + name = { # Archers + trigger = { scope:maa_type_2 = flag:archers } + text = ep1_flavor.2000.archers + } + name = { # Longbowmen - welsh + trigger = { + scope:maa_type_2 = flag:archers + culture = { has_cultural_tradition = tradition_longbow_competitions } + } + text = ep1_flavor.2000.archers_longbow + } + name = { # Infantry + trigger = { scope:maa_type_2 = flag:infantry } + text = ep1_flavor.2000.infantry + } + name = { # Cavalry + trigger = { scope:maa_type_2 = flag:cavalry } + text = ep1_flavor.2000.cavalry + } + name = { # Joust - chivalry + trigger = { + scope:maa_type_2 = flag:cavalry + OR = { + culture = culture:french + culture = { has_cultural_tradition = tradition_chivalry } + } + } + text = ep1_flavor.2000.cavalry_joust + } + name = { # Tyzkanion - byzaboo + trigger = { + scope:maa_type_2 = flag:cavalry + OR = { + culture = { has_cultural_pillar = heritage_byzantine } + is_roman_emperor_trigger = yes + } + } + text = ep1_flavor.2000.cavalry_tzykanion + } + name = { # Chovgan - parsi + trigger = { + scope:maa_type_2 = flag:cavalry + OR = { + culture = { has_cultural_pillar = heritage_iranian } + has_title = title:e_persia #Must be the current emperor. + } + } + text = ep1_flavor.2000.cavalry_chovgan + } + name = { # Horse archers + trigger = { scope:maa_type_2 = flag:archer_cavalry } + text = ep1_flavor.2000.archer_cavalry + } + name = { # Skirmishers + trigger = { scope:maa_type_2 = flag:skirmishers } + text = ep1_flavor.2000.skirmishers + } + name = { # Elephantry + trigger = { scope:maa_type_2 = flag:elephant_cavalry } + text = ep1_flavor.2000.elephant_cavalry + } + name = { # Camelry + trigger = { scope:maa_type_2 = flag:camel_cavalry } + text = ep1_flavor.2000.camel_cavalry + } + name = { # Peasants + trigger = { scope:maa_type_2 = flag:levies } + text = ep1_flavor.2000.levies + } + name = { # Caid - gaelic + trigger = { + scope:maa_type_2 = flag:levies + culture = { has_cultural_pillar = heritage_goidelic } + } + text = ep1_flavor.2000.levies_caid + } + # Costs + stress_impact = { + arrogant = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + remove_treasury_or_gold = medium_treasury_or_gold_value + # Effects + ep1_flavor_2000_type_effect = { TYPE = maa_type_2 } # Add relevant modifier and cultural opinion if relevant + scope:marshal_scope = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + scope:knight_scope = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + ai_boldness = 0.5 + ai_rationality = 0.5 + } + modifier = { + factor = 2 + OR = { + has_relation_friend = scope:knight_scope + has_relation_rival = scope:marshal_scope + } + } + } + } + + option = { # Hunting is the best sport + name = ep1_flavor.2000.c + # Costs + remove_treasury_or_gold = medium_treasury_or_gold_value + stress_impact = { + humble = medium_stress_impact_gain + lazy = medium_stress_impact_gain + greedy = major_stress_impact_gain + lifestyle_hunter = medium_stress_impact_loss + athletic = minor_stress_impact_loss + } + # Effects + add_character_modifier = { + modifier = ep1_2000_knights_modifier + years = 5 + } + if = { + limit = { + culture = { + OR = { + has_cultural_tradition = tradition_hunters + has_cultural_tradition = tradition_sacred_hunts + } + } + } + custom_tooltip = ep1_flavor.2000.tradition_tt + ep1_flavor_2000_culture_opinion_effect = yes + } + else = { + every_knight = { + custom = ep1_flavor.2000.knight_tt + limit = { + NOR = { + this = scope:knight_scope + this = scope:marshal_scope + } + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 5 + } + } + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = -2 + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + factor = 2 + OR = { + has_trait = lifestyle_hunter + has_trait = athletic + } + } + } + } + + option = { # Too expensive + name = ep1_flavor.2000.d + # Costs + change_current_court_grandeur = minor_court_grandeur_loss + scope:marshal_scope = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + scope:knight_scope = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + stress_impact = { + generous = medium_stress_impact_gain + athletic = medium_stress_impact_gain + lifestyle_hunter = medium_stress_impact_gain + improvident = medium_stress_impact_gain + profligate = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 1 + ai_boldness = -1 + } + modifier = { + factor = 0.5 + OR = { + has_trait = lifestyle_hunter + has_trait = athletic + } + } + modifier = { + factor = 0.5 + OR = { + has_trait = improvident + has_trait = profligate + } + } + } + } +} + +######################### +# Court of Vipers # +# by Joe Parkin # +######################### + +# Councillor exists and is not already saved +scripted_trigger ep1_flavor_councillor_scope_trigger = { + exists = cp:councillor_$ROLE$ + NAND = { + exists = scope:councillor_1 + scope:councillor_1 = cp:councillor_$ROLE$ + } +} + +# Scheme is secret and hostile +scripted_trigger ep1_flavor_2010_base_scheme_trigger = { + scheme_owner.liege = root + is_hostile = yes + is_scheme_exposed = no +} + +# Scheme is above and contains a single councillor from event +scripted_trigger ep1_flavor_2010_councillor_scheme_trigger = { + ep1_flavor_2010_base_scheme_trigger = yes # Scheme is secret and hostile + OR = { # Only 1 councillor in a plot against you + AND = { + scheme_owner = { is_in_list = ep1_2010_list } + any_scheme_agent_character = { + count = 0 + is_in_list = ep1_2010_list + } + } + any_scheme_agent_character = { + count = 1 + is_in_list = ep1_2010_list + } + } +} + +# Character is not involved in plot already +scripted_trigger ep1_flavor_2010_real_plot_involvement_trigger = { + AND = { + exists = scope:real_plot + OR = { + this = scope:real_plot.scheme_owner + scope:real_plot = { scheme_is_character_agent = prev } + } + } +} + +# Character is not involved in event already +scripted_trigger ep1_flavor_2010_scapegoat_trigger = { + is_adult = yes + NOR = { + ep1_flavor_2010_real_plot_involvement_trigger = yes + AND = { + exists = scope:real_plot_revealer + this = scope:real_plot_revealer + } + AND = { + exists = scope:fake_plot_revealer_1 + this = scope:fake_plot_revealer_1 + } + AND = { + exists = scope:fake_plot_revealer_2 + this = scope:fake_plot_revealer_2 + } + AND = { + exists = scope:scapegoat_1 + this = scope:scapegoat_1 + } + } +} + +# Save scopes and add to list dynamically +scripted_effect ep1_flavor_2010_councillor_scope_effect = { + if = { + limit = { + NOT = { exists = scope:councillor_1 } + } + save_scope_as = councillor_1 + } + else = { save_scope_as = councillor_2 } + add_to_list = ep1_2010_list +} + +# Imprison selected character, and notify if it was the right one +scripted_effect ep1_flavor_2010_imprison_effect = { + if = { + limit = { $COUNCILLOR$ = scope:real_plot_revealer } + scope:real_plotter = { save_scope_as = accused } + } + else_if = { + limit = { $COUNCILLOR$ = scope:fake_plot_revealer_1 } + scope:scapegoat_1 = { save_scope_as = accused } + } + else_if = { + limit = { $COUNCILLOR$ = scope:fake_plot_revealer_2 } + scope:scapegoat_2 = { save_scope_as = accused } + } + rightfully_imprison_character_effect = { + TARGET = scope:accused + IMPRISONER = root + } + random_list = { + 2 = { + desc = ep1_flavor.2010.guilty + show_chance = no + modifier = { + trigger = { + scope:real_plotter != scope:accused + } + factor = 0 + } + send_interface_toast = { + title = ep1_flavor.2010.guilty + left_icon = scope:accused + hidden_effect = { + scope:real_plot = { + expose_scheme = yes + expose_scheme_agent = scope:real_plotter + } + } + add_prestige = minor_prestige_gain + change_current_court_grandeur = miniscule_court_grandeur_gain + } + } + 2 = { + desc = ep1_flavor.2010.innocent + show_chance = no + modifier = { + trigger = { scope:real_plotter = scope:accused } + factor = 0 + } + send_interface_toast = { + title = ep1_flavor.2010.innocent + left_icon = scope:accused + add_tyranny = minor_tyranny_gain + change_current_court_grandeur = miniscule_court_grandeur_loss + } + } + } +} + +ep1_flavor.2010 = { + type = character_event + title = ep1_flavor.2010.t + desc = { + desc = ep1_flavor.2010.desc + # Spymaster + first_valid = { + triggered_desc = { #Real + trigger = { scope:spymaster = scope:real_plot_revealer } + desc = ep1_flavor.2010.desc_spy_real + } + triggered_desc = { #Fake 1 + trigger = { scope:spymaster = scope:fake_plot_revealer_1 } + desc = ep1_flavor.2010.desc_spy_1 + } + triggered_desc = { #Fake 2 + trigger = { scope:spymaster = scope:fake_plot_revealer_2 } + desc = ep1_flavor.2010.desc_spy_2 + } + } + # Councillor 1 + first_valid = { + triggered_desc = { #Real + trigger = { scope:councillor_1 = scope:real_plot_revealer } + desc = ep1_flavor.2010.desc_1_real + } + triggered_desc = { #Fake 1 + trigger = { scope:councillor_1 = scope:fake_plot_revealer_1 } + desc = ep1_flavor.2010.desc_1_1 + } + triggered_desc = { #Fake 2 + trigger = { scope:councillor_1 = scope:fake_plot_revealer_2 } + desc = ep1_flavor.2010.desc_1_2 + } + } + # Councillor 2 + first_valid = { + triggered_desc = { #Real + trigger = { scope:councillor_2 = scope:real_plot_revealer } + desc = ep1_flavor.2010.desc_2_real + } + triggered_desc = { #Fake 1 + trigger = { scope:councillor_2 = scope:fake_plot_revealer_1 } + desc = ep1_flavor.2010.desc_2_1 + } + triggered_desc = { #Fake 2 + trigger = { scope:councillor_2 = scope:fake_plot_revealer_2 } + desc = ep1_flavor.2010.desc_2_2 + } + } + # Context + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:real_plotter = { is_close_family_of = root } + scope:scapegoat_1 = { is_close_family_of = root } + scope:scapegoat_2 = { is_close_family_of = root } + } + } + desc = ep1_flavor.2010.desc_family + } + triggered_desc = { + trigger = { + OR = { + scope:real_plotter = { is_consort_of = root } + scope:scapegoat_1 = { is_consort_of = root } + scope:scapegoat_2 = { is_consort_of = root } + } + } + desc = ep1_flavor.2010.desc_consort + } + triggered_desc = { + trigger = { + OR = { + scope:real_plotter = { is_councillor_of = root } + scope:scapegoat_1 = { is_councillor_of = root } + scope:scapegoat_2 = { is_councillor_of = root } + } + } + desc = ep1_flavor.2010.desc_councillor + } + desc = ep1_flavor.2010.desc_fallback + } + desc = ep1_flavor.2010.desc_outro + } + theme = intrigue + cooldown = { years = 10 } + left_portrait = { + character = scope:spymaster + animation = spymaster + } + lower_left_portrait = { + character = scope:councillor_1 + } + lower_center_portrait = { + character = scope:councillor_2 + } + + trigger = { + is_ai = no # Murder schemes are heavy for performance + has_ep1_dlc_trigger = yes + is_landed_or_landless_administrative = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_available_adult = yes + exists = cp:councillor_spymaster + cp:councillor_spymaster = { is_available_ai_adult = yes } + calc_true_if = { + amount >= 2 + AND = { + exists = cp:councillor_chancellor + cp:councillor_chancellor = { is_available_ai_adult = yes } + } + AND = { + exists = cp:councillor_marshal + cp:councillor_marshal = { is_available_ai_adult = yes } + } + AND = { + exists = cp:councillor_steward + cp:councillor_steward = { is_available_ai_adult = yes } + } + AND = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { is_available_ai_adult = yes } + } + } + any_courtier = { + is_available_ai_adult = yes + can_start_scheme = { + type = murder + target_character = root + } + } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_intrigue } + } + + immediate = { + # save 3 councillors + cp:councillor_spymaster = { + save_scope_as = spymaster + add_to_list = ep1_2010_list + } + hidden_effect = { + while = { + count = 2 + random_list = { + 2 = { + trigger = { # Councillor exists and is not already saved + ep1_flavor_councillor_scope_trigger = { ROLE = chancellor } + } + modifier = { + factor = 4 + cp:councillor_chancellor = { + is_scheming_against = { target = root } + } + } + cp:councillor_chancellor = { ep1_flavor_2010_councillor_scope_effect = yes } + } + 2 = { + trigger = { # Councillor exists and is not already saved + ep1_flavor_councillor_scope_trigger = { ROLE = marshal } + } + modifier = { + factor = 4 + cp:councillor_marshal = { + is_scheming_against = { target = root } + } + } + cp:councillor_marshal = { ep1_flavor_2010_councillor_scope_effect = yes } + } + 2 = { + trigger = { # Councillor exists and is not already saved + ep1_flavor_councillor_scope_trigger = { ROLE = steward } + } + modifier = { + factor = 4 + cp:councillor_steward = { + is_scheming_against = { target = root } + } + } + cp:councillor_steward = { ep1_flavor_2010_councillor_scope_effect = yes } + } + 1 = { + trigger = { # Councillor exists and is not already saved + ep1_flavor_councillor_scope_trigger = { ROLE = court_chaplain } + } + modifier = { + factor = 4 + cp:councillor_court_chaplain = { + is_scheming_against = { target = root } + } + } + cp:councillor_court_chaplain = { ep1_flavor_2010_councillor_scope_effect = yes } + } + } + } + } + # find hostile scheme that does involve councillor as an agent + if = { + limit = { + any_targeting_scheme = { ep1_flavor_2010_councillor_scheme_trigger = yes } + } + ordered_targeting_scheme = { + limit = { ep1_flavor_2010_councillor_scheme_trigger = yes } + order_by = scheme_phase_duration + save_scope_as = real_plot + } + random_in_list = { + list = ep1_2010_list + limit = { ep1_flavor_2010_real_plot_involvement_trigger = yes } + save_scope_as = real_plotter + } + } + # find hostile scheme that does not involve councillor as an agent + else_if = { + limit = { # Scheme is secret and hostile + any_targeting_scheme = { ep1_flavor_2010_base_scheme_trigger = yes } + } + ordered_targeting_scheme = { + limit = { ep1_flavor_2010_base_scheme_trigger = yes } + order_by = scheme_phase_duration + save_scope_as = real_plot + scheme_owner = { save_scope_as = real_plotter } + } + } + # create hostile scheme via a random courtier + else = { + random_courtier = { + limit = { + is_available_ai_adult = yes + can_start_scheme = { + type = murder + target_character = root + } + } + weight = { + modifier = { + factor = 10 + has_relation_rival = root + } + modifier = { + factor = 4 + opinion = { + target = root + value < 0 + } + } + modifier = { + factor = 2 + opinion = { + target = root + value < 50 + } + } + } + save_scope_as = plotter + hidden_effect = { + start_scheme = { + target_character = root + type = murder + } + } + random_scheme = { + type = murder + limit = { + scheme_target_character = root + } + save_scope_as = real_plot + scheme_owner = { save_scope_as = real_plotter } + } + } + } + # Save councillor roles in event + random_in_list = { + list = ep1_2010_list + limit = { ep1_flavor_2010_real_plot_involvement_trigger = no } + save_scope_as = real_plot_revealer + } + random_in_list = { + list = ep1_2010_list + limit = { + NOT = { scope:real_plot_revealer ?= this } + } + save_scope_as = fake_plot_revealer_1 + } + random_in_list = { + list = ep1_2010_list + limit = { + NOR = { + scope:real_plot_revealer ?= this + scope:fake_plot_revealer_1 ?= this + } + } + save_scope_as = fake_plot_revealer_2 + } + random_courtier = { + limit = { ep1_flavor_2010_scapegoat_trigger = yes } + weight = { + modifier = { + factor = 4 + trigger = { + any_in_list = { + list = ep1_2010_list + ep1_flavor_2010_real_plot_involvement_trigger = yes + } + } + is_councillor = yes + } + } + save_scope_as = scapegoat_1 + } + random_vassal_or_below = { + limit = { ep1_flavor_2010_scapegoat_trigger = yes } + weight = { + modifier = { + factor = 4 + trigger = { + any_in_list = { + list = ep1_2010_list + ep1_flavor_2010_real_plot_involvement_trigger = yes + } + } + is_councillor = yes + } + } + save_scope_as = scapegoat_2 + } + } + + option = { # Spymaster + name = { + trigger = { scope:spymaster = scope:real_plot_revealer } + text = ep1_flavor.2010.a.real + } + name = { + trigger = { scope:spymaster = scope:fake_plot_revealer_1 } + text = ep1_flavor.2010.a.fake_1 + } + name = { + trigger = { scope:spymaster = scope:fake_plot_revealer_2 } + text = ep1_flavor.2010.a.fake_2 + } + ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:spymaster } + stress_impact = { + just = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + option = { # Councillor 1 + name = { + trigger = { scope:councillor_1 = scope:real_plot_revealer } + text = ep1_flavor.2010.b.real + } + name = { + trigger = { scope:councillor_1 = scope:fake_plot_revealer_1 } + text = ep1_flavor.2010.b.fake_1 + } + name = { + trigger = { scope:councillor_1 = scope:fake_plot_revealer_2 } + text = ep1_flavor.2010.b.fake_2 + } + ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:councillor_1 } + stress_impact = { + just = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + option = { # Councillor 2 + name = { + trigger = { scope:councillor_2 = scope:real_plot_revealer } + text = ep1_flavor.2010.c.real + } + name = { + trigger = { scope:councillor_2 = scope:fake_plot_revealer_1 } + text = ep1_flavor.2010.c.fake_1 + } + name = { + trigger = { scope:councillor_2 = scope:fake_plot_revealer_2 } + text = ep1_flavor.2010.c.fake_2 + } + ep1_flavor_2010_imprison_effect = { COUNCILLOR = scope:councillor_2 } + stress_impact = { + just = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + option = { # Untangle the truth + name = ep1_flavor.2010.d + duel = { + skill = intrigue + value = high_skill_rating + 60 = { + desc = ep1_flavor.2010.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 5 + } + min = 10 + custom_tooltip = ep1_flavor.2010.d.success_tt + hidden_effect = { + send_interface_toast = { + title = ep1_flavor.2010.d.success + left_icon = root + scope:real_plot = { + expose_scheme = yes + expose_scheme_agent = scope:real_plotter + } + rightfully_imprison_character_effect = { + TARGET = scope:real_plotter + IMPRISONER = root + } + show_as_tooltip = { + add_prestige = medium_prestige_gain + change_current_court_grandeur = minor_court_grandeur_gain + } + } + } + add_prestige = medium_prestige_gain + change_current_court_grandeur = minor_court_grandeur_gain + } + 40 = { + desc = ep1_flavor.2010.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -5 + } + min = 10 + send_interface_toast = { + title = ep1_flavor.2010.d.failure + left_icon = root + add_prestige = medium_prestige_loss + change_current_court_grandeur = minor_court_grandeur_loss + add_character_modifier = { + modifier = ep1_2010_failure_modifier + years = 5 + } + } + } + } + stress_impact = { + arbitrary = medium_stress_impact_gain + lazy = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_honor = 1 + ai_rationality = 1 + ai_compassion = 1 + } + } + } +} + +######################### +# Interservice Rivalry # +# by Joe Parkin # +######################### + +# Save scopes and add to list dynamically +scripted_effect ep1_flavor_2020_maa_type_scope_effect = { + if = { + limit = { + NOT = { exists = scope:maa_type_1 } + } + save_scope_value_as = { name = maa_type_1 value = flag:$TYPE$ } + } + else = { + save_scope_value_as = { name = maa_type_2 value = flag:$TYPE$ } + } +} + +# Applies correct modifier based on relevant MAA (saved in event) +scripted_effect ep1_flavor_2020_modifier_effect = { + if = { + limit = { scope:$TYPE$ = flag:archers } + add_character_modifier = { + modifier = ep1_flavor_2020_archers_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:light_cavalry } + add_character_modifier = { + modifier = ep1_flavor_2020_light_cavalry_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:heavy_infantry } + add_character_modifier = { + modifier = ep1_flavor_2020_heavy_infantry_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:pikemen } + add_character_modifier = { + modifier = ep1_flavor_2020_pikemen_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:heavy_cavalry } + add_character_modifier = { + modifier = ep1_flavor_2020_heavy_cavalry_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:archer_cavalry } + add_character_modifier = { + modifier = ep1_flavor_2020_archer_cavalry_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:skirmishers } + add_character_modifier = { + modifier = ep1_flavor_2020_skirmishers_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:elephant_cavalry } + add_character_modifier = { + modifier = ep1_flavor_2020_elephant_cavalry_modifier + years = 5 + } + } + else_if = { + limit = { scope:$TYPE$ = flag:camel_cavalry } + add_character_modifier = { + modifier = ep1_flavor_2020_camel_cavalry_modifier + years = 5 + } + } +} + +ep1_flavor.2020 = { + type = character_event + title = ep1_flavor.2020.t + desc = { + desc = ep1_flavor.2020.desc + first_valid = { + triggered_desc = { + trigger = { scope:maa_type_1 = flag:archers } + desc = ep1_flavor.2020.desc_knight_1_archers + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:light_cavalry } + desc = ep1_flavor.2020.desc_knight_1_light_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:heavy_infantry } + desc = ep1_flavor.2020.desc_knight_1_heavy_infantry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:pikemen } + desc = ep1_flavor.2020.desc_knight_1_pikemen + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:heavy_cavalry } + desc = ep1_flavor.2020.desc_knight_1_heavy_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:archer_cavalry } + desc = ep1_flavor.2020.desc_knight_1_archer_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:skirmishers } + desc = ep1_flavor.2020.desc_knight_1_skirmishers + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:elephant_cavalry } + desc = ep1_flavor.2020.desc_knight_1_elephant_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_1 = flag:camel_cavalry } + desc = ep1_flavor.2020.desc_knight_1_camel_cavalry + } + } + desc = ep1_flavor.2020.desc_bridge + first_valid = { + triggered_desc = { + trigger = { scope:maa_type_2 = flag:archers } + desc = ep1_flavor.2020.desc_knight_2_archers + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:light_cavalry } + desc = ep1_flavor.2020.desc_knight_2_light_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:heavy_infantry } + desc = ep1_flavor.2020.desc_knight_2_heavy_infantry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:pikemen } + desc = ep1_flavor.2020.desc_knight_2_pikemen + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:heavy_cavalry } + desc = ep1_flavor.2020.desc_knight_2_heavy_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:archer_cavalry } + desc = ep1_flavor.2020.desc_knight_2_archer_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:skirmishers } + desc = ep1_flavor.2020.desc_knight_2_skirmishers + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:elephant_cavalry } + desc = ep1_flavor.2020.desc_knight_2_elephant_cavalry + } + triggered_desc = { + trigger = { scope:maa_type_2 = flag:camel_cavalry } + desc = ep1_flavor.2020.desc_knight_2_camel_cavalry + } + } + } + theme = martial + override_background = { reference = army_camp } + cooldown = { years = 10 } + left_portrait = { + character = scope:knight_1 + animation = disapproval + } + right_portrait = { + character = scope:knight_2 + animation = marshal + } + + trigger = { + has_ep1_dlc_trigger = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_landed_or_landless_administrative = yes + is_available_adult = yes + number_of_maa_regiments > 0 + calc_true_if = { + amount >= 2 + number_maa_regiments_of_base_type = { type = archers value > 0 } + number_maa_regiments_of_base_type = { type = light_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 } + number_maa_regiments_of_base_type = { type = pikemen value > 0 } + number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = skirmishers value > 0 } + number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 } + number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 } + } + any_knight = { + count >= 2 + is_available_ai_adult = yes + } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_warlike } + } + + immediate = { + hidden_effect = { + while = { + count = 2 + ordered_knight = { + limit = { + is_available_ai_adult = yes + NAND = { + exists = scope:knight_1 + THIS = scope:knight_1 + } + } + order_by = prowess + if = { + limit = { + NOT = { exists = scope:knight_1 } + } + save_scope_as = knight_1 + } + else = { save_scope_as = knight_2 } + } + } + while = { + count = 2 + random_list = { + 2 = { # archers + trigger = { + number_maa_regiments_of_base_type = { type = archers value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:archers + } + } + modifier = { + factor = 10 + culture = { culture_has_archer_maa = yes } + } + ep1_2020_maa_regiment_modifier = { TYPE = archers } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = archers } + } + 2 = { # light_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = light_cavalry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:light_cavalry + } + } + modifier = { + factor = 10 + culture = { culture_has_light_cavalry_maa = yes } + } + ep1_2020_maa_regiment_modifier = { TYPE = light_cavalry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = light_cavalry } + } + 2 = { # heavy_infantry + trigger = { + number_maa_regiments_of_base_type = { type = heavy_infantry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:heavy_infantry + } + } + modifier = { + factor = 10 + culture = { culture_has_heavy_infantry_maa = yes } + } + ep1_2020_maa_regiment_modifier = { TYPE = heavy_infantry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = heavy_infantry } + } + 2 = { # pikemen + trigger = { + number_maa_regiments_of_base_type = { type = pikemen value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:pikemen + } + } + ep1_2020_maa_regiment_modifier = { TYPE = pikemen } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = pikemen } + + } + 2 = { # heavy_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = heavy_cavalry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:heavy_cavalry + } + } + modifier = { + factor = 10 + culture = { culture_has_heavy_cavalry_maa = yes } + } + ep1_2020_maa_regiment_modifier = { TYPE = heavy_cavalry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = heavy_cavalry } + } + 2 = { # archer_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = archer_cavalry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:archer_cavalry + } + } + modifier = { + factor = 10 + OR = { + culture = { culture_has_archer_cavalry_maa = yes } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + ep1_2020_maa_regiment_modifier = { TYPE = archer_cavalry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = archer_cavalry } + } + 2 = { # skirmishers + trigger = { + number_maa_regiments_of_base_type = { type = skirmishers value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:skirmishers + } + } + modifier = { + factor = 10 + culture = { culture_has_skirmisher_maa = yes } + } + ep1_2020_maa_regiment_modifier = { TYPE = skirmishers } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = skirmishers } + } + 2 = { # elephant_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = elephant_cavalry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:elephant_cavalry + } + } + ep1_2020_maa_regiment_modifier = { TYPE = elephant_cavalry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = elephant_cavalry } + } + 2 = { # camel_cavalry + trigger = { + number_maa_regiments_of_base_type = { type = camel_cavalry value > 0 } + NAND = { + exists = scope:maa_type_1 + scope:maa_type_1 = flag:camel_cavalry + } + } + ep1_2020_maa_regiment_modifier = { TYPE = camel_cavalry } + ep1_flavor_2020_maa_type_scope_effect = { TYPE = camel_cavalry } + } + } + } + + } + } + + option = { # Side with 1st + name = ep1_flavor.2020.a + ep1_flavor_2020_modifier_effect = { TYPE = maa_type_1 } # Applies modifier based on relevant MAA type + scope:knight_1 = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + progress_towards_rival_effect = { + REASON = rival_snubbed_maa + CHARACTER = scope:knight_2 + OPINION = 0 + } + } + scope:knight_2 = { + add_opinion = { + target = root + modifier = insulted_opinion + opinion = -10 + } + } + if = { + limit = { has_relation_rival = scope:knight_1 } + stress_impact = { + base = medium_stress_impact_gain + } + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = 0.5 + } + modifier = { + factor = 1.5 + opinion = { target = scope:knight_1 value > 25 } + } + modifier = { + factor = 0 + has_relation_rival = scope:knight_1 + } + } + stress_impact = { + just = minor_stress_impact_gain + calm = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + } + + option = { # Side with 2nd + name = ep1_flavor.2020.b + ep1_flavor_2020_modifier_effect = { TYPE = maa_type_2 } # Applies modifier based on relevant MAA type + scope:knight_2 = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + progress_towards_rival_effect = { + REASON = rival_snubbed_maa + CHARACTER = scope:knight_1 + OPINION = 0 + } + } + scope:knight_1 = { + add_opinion = { + target = root + modifier = insulted_opinion + opinion = -10 + } + } + if = { + limit = { has_relation_rival = scope:knight_2 } + stress_impact = { + base = medium_stress_impact_gain + } + } + stress_impact = { + just = minor_stress_impact_gain + calm = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = 0.5 + } + modifier = { + factor = 1.5 + opinion = { target = scope:knight_2 value > 25 } + } + modifier = { + factor = 0 + has_relation_rival = scope:knight_2 + } + } + } + + option = { # Side with neither + name = ep1_flavor.2020.c + duel = { + skill = martial + target = scope:knight_1 + 2 = { + compare_modifier = { + value = scope:duel_value + multiplier = 0.5 + } + desc = ep1_flavor.2020.c.success + send_interface_toast = { + title = ep1_flavor.2020.c.success + left_icon = scope:knight_1 + right_icon = scope:knight_2 + add_character_modifier = { + modifier = ep1_flavor_2020_both_modifier + years = 5 + } + scope:knight_1 = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 5 + } + } + scope:knight_2 = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 5 + } + } + } + } + 3 = { + compare_modifier = { + value = scope:duel_value + multiplier = -0.5 + } + desc = ep1_flavor.2020.c.failure + send_interface_toast = { + title = ep1_flavor.2020.c.failure + left_icon = scope:knight_1 + right_icon = scope:knight_2 + add_prestige = minor_prestige_loss + scope:knight_1 = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -5 + } + } + scope:knight_2 = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -5 + } + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = -1 + } + modifier = { + factor = 0.5 + martial < average_skill_rating + } + modifier = { + factor = 2 + martial > average_skill_rating + } + } + } + + option = { # Chastise + name = ep1_flavor.2020.d + add_prestige = minor_prestige_loss + scope:knight_1 = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + scope:knight_2 = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + stress_impact = { + brave = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + } + } + } +} + +######################### +# Exotic Arms # +# by Joe Parkin # +######################### + +scripted_trigger ep1_flavor_2040_foreign_holder_trigger = { + NOR = { + has_variable = exotic_arms_cooldown + this = prev + in_diplomatic_range = prev + } + has_royal_court = yes + has_dlc_feature = royal_court + is_landed_or_landless_administrative = yes + is_available_adult = yes + gold >= major_gold_value +} + +scripted_trigger ep1_flavor_2040_artifact_trigger = { + is_equipped = no + artifact_durability >= 25 + AND = { + has_variable = quality + var:quality >= 33 + } + AND = { + has_variable = wealth + var:wealth >= 33 + } + OR = { + artifact_slot_type = primary_armament + artifact_slot_type = armor + } +} + +scripted_effect ep1_flavor_2040_artifact_effect = { + dummy_female = { save_scope_as = dummy_gender } + ## Chance for artifact to be bad + random = { + chance = 40 + save_scope_value_as = { + name = exotic_blade_quality + value = no + } + } + random_list = { + 2 = { + create_artifact_weapon_effect = { + OWNER = scope:exotic_blade_holder + CREATOR = scope:dummy_gender + SET_WEAPON_TYPE = flag:no + } + } + 2 = { + create_artifact_armor_effect = { + OWNER = scope:exotic_blade_holder + CREATOR = scope:dummy_gender + SET_ARMOR_TYPE = flag:no + } + } + } + ## Create Merchant + scope:exotic_arms_target = { + if = { + limit = { + any_character_to_title_neighboring_and_across_water_county = { + NOT = { + culture = { this = scope:exotic_arms_target.culture } + } + } + } + random_character_to_title_neighboring_and_across_water_county = { + limit = { + NOT = { + culture = { this = scope:exotic_arms_target.culture } + } + } + save_scope_as = merchant_county + } + } + else = { + random_independent_ruler = { + limit = { + in_diplomatic_range = root + any_realm_county = { + NOT = { + culture = { this = scope:exotic_arms_target.culture } + } + } + } + random_realm_county = { + limit = { + NOT = { + culture = { this = scope:exotic_arms_target.culture } + } + } + save_scope_as = merchant_county + } + } + } + } + create_character = { + template = foreign_merchant_template + location = scope:exotic_arms_target.capital_province + save_scope_as = foreign_merchant + } + if = { + limit = { exists = scope:newly_created_artifact } + scope:newly_created_artifact = { save_scope_as = exotic_blade } + } +} + +scripted_effect ep1_flavor_2040_transfer_effect = { + if = { + limit = { exists = scope:exotic_blade_quality } + send_interface_toast = { + title = ep1_flavor.2040.toast_poor + left_icon = scope:exotic_blade + scope:exotic_blade = { + set_owner = { + target = scope:exotic_arms_target + history = { + location = scope:exotic_arms_target.capital_province + actor = scope:foreign_merchant + recipient = scope:exotic_arms_target + type = given + } + } + } + } + } + else = { + send_interface_toast = { + title = ep1_flavor.2040.toast + left_icon = scope:exotic_blade + scope:exotic_blade = { + set_owner = { + target = scope:exotic_arms_target + history = { + location = scope:exotic_arms_target.capital_province + actor = scope:foreign_merchant + recipient = scope:exotic_arms_target + type = given + } + } + } + } + } +} + +ep1_flavor.2040 = { + type = character_event + title = ep1_flavor.2040.t + desc = { + desc = ep1_flavor.2040.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:my_artifact } + desc = ep1_flavor.2040.desc.artifact + } + desc = ep1_flavor.2040.desc.gold + } + first_valid = { + triggered_desc = { + trigger = { exists = scope:antiquarian } + desc = { + desc = ep1_flavor.2040.desc.outro_antiquarian + first_valid = { + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position >= 4 + } + desc = ep1_flavor.2040.desc.outro_good_praise + } + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position = 3 + } + desc = ep1_flavor.2040.desc.outro_good_unsure + } + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position <= 2 + } + desc = ep1_flavor.2040.desc.outro_good_warning + } + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position >= 4 + exists = scope:exotic_blade_quality + } + desc = ep1_flavor.2040.desc.outro_bad_warning + } + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position = 3 + exists = scope:exotic_blade_quality + } + desc = ep1_flavor.2040.desc.outro_bad_unsure + } + triggered_desc = { + trigger = { + exists = scope:antiquarian + scope:antiquarian.aptitude:court_tutor_court_position <= 2 + exists = scope:exotic_blade_quality + } + desc = ep1_flavor.2040.desc.outro_bad_praise + } + } + } + } + desc = ep1_flavor.2040.desc.outro + } + } + theme = martial + left_portrait = { + character = scope:antiquarian + animation = worry + } + right_portrait = { + character = scope:foreign_merchant + animation = admiration + } + + immediate = { + if = { + limit = { + employs_court_position = antiquarian_court_position + any_court_position_holder = { + is_available_ai_adult = yes + type = antiquarian_court_position + } + } + random_court_position_holder = { + type = antiquarian_court_position + limit = { is_available_ai_adult = yes } + save_scope_as = antiquarian + } + } + ## Save own artifact if exists + if = { + limit = { + any_character_artifact = { ep1_flavor_2040_artifact_trigger = yes } + } + random_character_artifact = { + limit = { ep1_flavor_2040_artifact_trigger = yes } + save_scope_as = my_artifact + } + } + } + + option = { + name = ep1_flavor.2040.a + trigger = { exists = scope:my_artifact } + custom_tooltip = ep1_flavor.2040.tt_my + custom_tooltip = ep1_flavor.2040.tt_exotic + hidden_effect = { + ep1_flavor_2040_transfer_effect = yes + scope:my_artifact = { + set_owner = { + target = scope:foreign_merchant + history = { + location = scope:exotic_arms_target.capital_province + actor = scope:exotic_arms_target + recipient = scope:foreign_merchant + type = purchased + } + } + set_owner = { + target = scope:exotic_blade_holder + history = { + location = scope:exotic_blade_holder.capital_province + actor = scope:foreign_merchant + recipient = scope:exotic_blade_holder + type = purchased + } + } + } + } + stress_impact = { + greedy = major_stress_impact_gain + arrogant = major_stress_impact_gain + paranoid = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 2 + } + } + } + + option = { + name = ep1_flavor.2040.b + trigger = { + NOT = { exists = scope:my_artifact } + } + remove_short_term_gold = major_gold_value + custom_tooltip = ep1_flavor.2040.tt_exotic + hidden_effect = { ep1_flavor_2040_transfer_effect = yes } + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 2 + } + modifier = { + factor = 0 + gold <= major_gold_value + } + } + } + + option = { + name = ep1_flavor.2040.c + stress_impact = { + profligate = medium_stress_impact_gain + trusting = medium_stress_impact_gain + improvident = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_greed = 4 + } + } + } + + after = { + scope:foreign_merchant = { silent_disappearance_effect = yes } + } +} + +ep1_flavor.2041 = { + type = character_event + hidden = yes + cooldown = { years = 10 } + + trigger = { + has_ep1_dlc_trigger = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_ai = yes + is_landed_or_landless_administrative = yes + any_character_with_royal_court = { ep1_flavor_2040_foreign_holder_trigger = yes } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + primary_title.tier = tier_empire + } + } + + immediate = { + save_scope_as = exotic_blade_holder + random_character_with_royal_court = { + limit = { ep1_flavor_2040_foreign_holder_trigger = yes } + weight = { + base = 1 + modifier = { + add = 10 + is_ai = no + } + modifier = { + add = 1 + has_court_type = court_warlike + } + modifier = { + add = 2 + any_character_artifact = { ep1_flavor_2040_artifact_trigger = yes } + } + } + save_scope_as = exotic_arms_target + set_variable = { + name = exotic_arms_cooldown + years = 50 + } + } + ep1_flavor_2040_artifact_effect = yes + scope:exotic_arms_target = { + trigger_event = { + id = ep1_flavor.2040 + days = 1 + } + } + } +} + +######################### +# Academic Disagreement # +# by Joe Parkin # +######################### + +scripted_trigger ep1_flavor_2070_foreign_court_trigger = { + this != root + in_diplomatic_range = root + faith = { + faith_hostility_level = { + target = root.faith + value < faith_hostile_level + } + } + save_temporary_scope_as = symposium_ruler_temp + root = { + faith = { + faith_hostility_level = { + target = scope:symposium_ruler_temp.faith + value < faith_hostile_level + } + } + } +} + +ep1_flavor.2070 = { + type = character_event + title = ep1_flavor.2070.t + desc = { + desc = ep1_flavor.2070.desc.intro + first_valid = { + triggered_desc = { # Theological + trigger = { + OR = { + scope:symposium_scholar = { is_theological_character_trigger = yes } + scope:symposium_courtier = { is_theological_character_trigger = yes } + } + } + desc = { + first_valid = { + triggered_desc = { # Same faith same culture + trigger = { + scope:symposium_scholar.faith = scope:symposium_courtier.faith + scope:symposium_scholar.culture = scope:symposium_courtier.culture + + } + desc = ep1_flavor.2070.desc.theo_same_faith + } + triggered_desc = { # Same faith diff culture + trigger = { scope:symposium_scholar.faith = scope:symposium_courtier.faith } + desc = ep1_flavor.2070.desc.theo_same_faith_diff_cult + } + triggered_desc = { # Same religion + trigger = { + scope:symposium_scholar.religion = scope:symposium_courtier.religion + scope:symposium_scholar.faith != scope:symposium_courtier.faith + } + desc = ep1_flavor.2070.desc.theo_same_relig + } + triggered_desc = { # Different religion + trigger = { + scope:symposium_scholar.religion != scope:symposium_courtier.religion + } + desc = ep1_flavor.2070.desc.theo_diff_relig + } + } + } + } + triggered_desc = { # Mystic + trigger = { + scope:symposium_scholar = { has_trait = lifestyle_mystic } + NOT = { + scope:symposium_courtier = { has_trait = lifestyle_mystic } + } + } + desc = ep1_flavor.2070.desc.mystic + } + triggered_desc = { # Medicine + trigger = { + OR = { + scope:symposium_scholar = { has_trait = lifestyle_physician } + scope:symposium_courtier = { has_trait = lifestyle_physician } + } + } + desc = ep1_flavor.2070.desc.medicine + } + triggered_desc = { # Culture + trigger = { scope:symposium_scholar.culture = scope:symposium_courtier.culture } + desc = ep1_flavor.2070.desc.ling_same_cult + } + triggered_desc = { # Language + trigger = { + scope:symposium_scholar.culture != scope:symposium_courtier.culture + scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture } + } + desc = ep1_flavor.2070.desc.ling_diff_cult + } + triggered_desc = { # Diff language + trigger = { + NOT = { + scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture } + } + } + desc = ep1_flavor.2070.desc.ling_diff_lang + } + random_valid = { # Fallback + desc = ep1_flavor.2070.desc.fall_alchemy + desc = ep1_flavor.2070.desc.fall_stars + desc = ep1_flavor.2070.desc.fall_books + } + } + } + theme = learning + cooldown = { years = 10 } + left_portrait = { + character = scope:symposium_courtier + animation = personality_rational + } + right_portrait = { + character = scope:symposium_scholar + animation = schadenfreude + } + + trigger = { + has_ep1_dlc_trigger = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_landed_or_landless_administrative = yes + is_available_adult = yes + any_character_with_royal_court = { ep1_flavor_2070_foreign_court_trigger = yes } + any_vassal_or_below = { learning >= 6 } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_scholarly } + } + + immediate = { + culture = { save_scope_as = ling_cul_1 } + every_vassal_or_below = { + limit = { learning >= 15 } + alternative_limit = { learning >= 10 } + alternative_limit = { learning >= 6 } + add_to_list = symposium_list + } + random_in_list = { + list = symposium_list + limit = { learning >= 15 } + alternative_limit = { learning >= 10 } + alternative_limit = { learning >= 6 } + weight = { + modifier = { + factor = 2 + is_powerful_vassal = yes + } + } + save_scope_as = symposium_courtier + } + random_character_with_royal_court = { + limit = { ep1_flavor_2070_foreign_court_trigger = yes } + weight = { + modifier = { + factor = 2 + primary_title.tier = tier_empire + } + } + save_scope_as = symposium_ruler + } + scope:symposium_ruler.culture = { save_scope_as = ling_cul_2 } + linguist_bonus_culture_effect = { CULTURE = ling_cul_1 } + linguist_bonus_culture_effect = { CULTURE = ling_cul_2 } + create_character = { + dynasty = none + location = root.capital_province + template = symposium_template + save_scope_as = symposium_scholar + } + } + + option = { + name = ep1_flavor.2070.a + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + pay_short_term_gold = { + target = scope:symposium_scholar + gold = medium_gold_value + } + add_courtier = scope:symposium_scholar + hidden_effect = { + scope:symposium_scholar = { return_to_court = yes } + } + reverse_add_opinion = { + target = scope:symposium_courtier + modifier = angry_opinion + opinion = -15 + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -0.5 + ai_compassion = 0.5 + ai_rationality = 1 + } + } + } + + option = { + name = { + trigger = { + NOT = { + scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture } + } + root = { knows_language_of_culture = scope:symposium_scholar.culture } + } + text = ep1_flavor.2070.c.lang + } + name = { + trigger = { always = yes } + text = ep1_flavor.2070.c + } + stress_impact = { + humble = medium_stress_impact_gain + shy = medium_stress_impact_gain + } + duel = { + skill = learning + target = scope:symposium_scholar + 4 = { + desc = ep1_flavor.2070.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 5 + } + modifier = { + add = 1 + has_trait = scholar + } + modifier = { + add = 4 + NOT = { + scope:symposium_scholar.culture = { has_same_culture_language = scope:symposium_courtier.culture } + } + root = { knows_language_of_culture = scope:symposium_scholar.culture } + } + min = 5 + send_interface_toast = { + title = ep1_flavor.2070.c.success + left_icon = scope:symposium_scholar + right_icon = scope:symposium_courtier + add_learning_lifestyle_xp = medium_lifestyle_xp + add_prestige = medium_prestige_gain + reverse_add_opinion = { + target = scope:symposium_courtier + modifier = impressed_opinion + opinion = 10 + } + custom_tooltip = ep1_flavor.2070.c.tt + hidden_effect = { + random_list = { + 2 = { + send_interface_toast = { + title = ep1_flavor.2070.c.success + left_icon = scope:symposium_scholar + add_courtier = scope:symposium_scholar + } + } + 2 = { + send_interface_toast = { + title = ep1_flavor.2070.c.failure + left_icon = scope:symposium_scholar + show_as_tooltip = { + scope:symposium_ruler = { add_courtier = scope:symposium_scholar } + } + } + } + } + } + } + } + 6 = { + desc = ep1_flavor.2070.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2 + } + min = 10 + send_interface_toast = { + title = ep1_flavor.2070.c.failure + left_icon = scope:symposium_scholar + right_icon = scope:symposium_courtier + add_prestige = medium_prestige_loss + reverse_add_opinion = { + target = scope:symposium_courtier + modifier = disappointed_opinion + opinion = -10 + } + show_as_tooltip = { + scope:symposium_ruler = { add_courtier = scope:symposium_scholar } + } + } + } + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = -0.5 + ai_rationality = 1 + } + } + } + + option = { + name = ep1_flavor.2070.d + stress_impact = { + humble = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + shy = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + add_prestige = minor_prestige_loss + reverse_add_opinion = { + target = scope:symposium_courtier + modifier = grateful_opinion + opinion = 5 + } + show_as_tooltip = { + scope:symposium_ruler = { add_courtier = scope:symposium_scholar } + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = 0.5 + ai_compassion = -1 + ai_rationality = -0.5 + } + } + } + + option = { + name = ep1_flavor.2070.e + trigger = { + OR = { + OR = { + scope:symposium_scholar = { is_theological_character_trigger = yes } + scope:symposium_courtier = { is_theological_character_trigger = yes } + } + AND = { + scope:symposium_scholar = { has_trait = lifestyle_mystic } + NOT = { has_trait = lifestyle_mystic } + } + } + has_trait = zealous + } + add_learning_skill = -1 + add_piety = medium_piety_gain + stress_impact = { + zealous = medium_stress_impact_loss + } + show_as_tooltip = { + scope:symposium_ruler = { add_courtier = scope:symposium_scholar } + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_zeal = 1 + ai_compassion = -1 + ai_rationality = -1 + } + } + } + + after = { + hidden_effect = { + scope:symposium_ruler = { + if = { + limit = { + scope:symposium_scholar.employer != root + } + add_courtier = scope:symposium_scholar + } + } + scope:symposium_scholar = { return_to_court = yes } + } + } +} + +######################### +# The Greater Good # +# by Joe Parkin # +######################### + +ep1_flavor.2060 = { + type = character_event + title = ep1_flavor.2060.t + desc = ep1_flavor.2060.desc + theme = intrigue + cooldown = { years = 10 } + left_portrait = { + character = scope:detective_scope + animation = worry + } + right_portrait = { + character = scope:grocer_scope + animation = scheme + } + lower_right_portrait = { + character = scope:victim_scope + outfit_tags = { beggar_rags } + } + + trigger = { + has_ep1_dlc_trigger = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_landed_or_landless_administrative = yes + is_available_adult = yes + # Victim + any_pool_guest = { + is_lowborn = yes + is_married = no + } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_intrigue } + } + + immediate = { + # Detective + create_character = { + age = { 30 35 } + dynasty = none + faith = root.capital_county.faith + culture = root.capital_county.culture + location = root.capital_province + # Education + random_traits_list = { + count = 1 + education_martial_2 = {} + education_martial_3 = {} + } + # Personality + trait = brave + trait = diligent + trait = compassionate + trait = intellect_good_1 + # Misc + random_traits = no + gender_female_chance = root_faith_dominant_gender_female_chance + # Skills + diplomacy = { min_template_low_skill max_template_decent_skill } + martial = { min_template_low_skill max_template_decent_skill } + stewardship = { min_template_low_skill max_template_decent_skill } + intrigue = { min_template_low_skill max_template_decent_skill } + learning = { min_template_low_skill max_template_decent_skill } + prowess = { min_template_low_skill max_template_decent_skill } + save_scope_as = detective_scope + } + # Grocer + create_character = { + age = { 50 55 } + dynasty = none + faith = root.capital_county.faith + culture = root.capital_county.culture + location = root.capital_province + # Education + random_traits_list = { + count = 1 + education_intrigue_2 = {} + education_intrigue_3 = {} + } + # Personality + trait = deceitful + trait = callous + trait = arrogant + # Misc + random_traits = no + gender_female_chance = root_faith_dominant_gender_female_chance + # Skills + diplomacy = { min_template_low_skill max_template_decent_skill } + martial = { min_template_low_skill max_template_decent_skill } + stewardship = { min_template_low_skill max_template_decent_skill } + intrigue = { min_template_low_skill max_template_low_skill } + learning = { min_template_low_skill max_template_decent_skill } + prowess = { min_template_low_skill max_template_decent_skill } + save_scope_as = grocer_scope + } + scope:grocer_scope = { + add_character_flag = { + flag = use_stealth_clothes + days = 1 + } + } + # Victim + random_pool_guest = { + limit = { + is_lowborn = yes + is_married = no + } + save_scope_as = victim_scope + } + hidden_effect = { + scope:victim_scope = { + death = { + death_reason = death_disappearance + killer = scope:grocer_scope + } + } + scope:grocer_scope = { + add_secret = { + type = secret_murder + target = scope:victim_scope + } + } + } + custom_tooltip = ep1_flavor.2060.death_tt + random_realm_province = { + limit = { + county != root.capital_county + has_holding_type = city_holding + } + alternative_limit = { has_holding_type = city_holding } + alternative_limit = { always = yes } + save_scope_as = sandford_scope + } + } + + option = { + name = ep1_flavor.2060.a + add_prestige = medium_prestige_loss + scope:detective_scope = { silent_disappearance_effect = yes } + custom_tooltip = ep1_flavor.2060.a.tt + change_current_court_grandeur = minor_court_grandeur_loss + every_pool_guest = { + custom = custom.every_guest + move_to_pool = yes + } + stress_impact = { + paranoid = medium_stress_impact_gain + diligent = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + impatient = medium_stress_impact_gain + craven = medium_stress_impact_gain + } + ai_chance = { + ai_value_modifier = { + ai_compassion = 1 + ai_boldness = -1 + ai_energy = -1 + } + } + } + + option = { + name = ep1_flavor.2060.b + hidden_effect = { + scope:victim_scope = { set_killer_public = yes } + } + send_interface_toast = { + title = ep1_flavor.2060.b.title + left_icon = scope:detective_scope + right_icon = scope:grocer_scope + show_as_tooltip = { + imprison = { + target = scope:grocer_scope + type = dungeon + } + } + add_courtier = scope:detective_scope + } + hidden_effect = { + scope:grocer_scope = { + random_secret = { + type = secret_murder + limit = { + secret_target = scope:victim_scope + } + expose_secret = scope:detective_scope + } + } + rightfully_imprison_character_effect = { + TARGET = scope:grocer_scope + IMPRISONER = root + } + } + scope:detective_scope = { + hidden_effect = { return_to_court = yes } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + stress_impact = { + callous = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + ai_boldness = 1 + } + } + } + + option = { + name = ep1_flavor.2060.c + send_interface_toast = { + title = ep1_flavor.2060.c.title + left_icon = scope:grocer_scope + right_icon = scope:detective_scope + scope:detective_scope = { + death = { + death_reason = death_disappearance + killer = root + } + } + add_courtier = scope:grocer_scope + } + add_secret = { + type = secret_murder + target = scope:detective_scope + } + random_secret = { + type = secret_murder + limit = { + secret_target = scope:detective_scope + } + reveal_to = scope:grocer_scope + } + scope:grocer_scope = { + hidden_effect = { return_to_court = yes } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + hidden_effect = { + scope:grocer_scope = { + random_secret = { + type = secret_murder + limit = { + secret_target = scope:victim_scope + } + reveal_to = root + } + } + } + } + change_current_court_grandeur = minor_court_grandeur_gain + stress_impact = { + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + honest = medium_stress_impact_gain + humble = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + ai_value_modifier = { + ai_compassion = -1 + ai_honor = -1 + ai_boldness = 1 + } + } + } +} + +######################### +# Taking Sides # +# by Joe Parkin # +######################### + +# Save scopes and add to list dynamically +scripted_effect ep1_flavor_2030_local_dispute_scope_effect = { + if = { + limit = { + NOT = { exists = scope:local_dispute_1 } + } + save_scope_as = local_dispute_1 + if = { + limit = { is_landed_or_landless_administrative = yes } + capital_province.county = { save_scope_as = local_county_1 } + } + else = { + root = { + random_sub_realm_county = { + weight = { + modifier = { + factor = 5 + culture = scope:local_dispute_1.culture + } + modifier = { + factor = 5 + faith = scope:local_dispute_1.faith + } + modifier = { + factor = 0.1 + this = root.capital_province.county + } + } + save_scope_as = local_county_1 + } + } + } + } + else_if = { + limit = { + exists = scope:local_dispute_1 + this != scope:local_dispute_1 + } + save_scope_as = local_dispute_2 + if = { + limit = { is_landed_or_landless_administrative = yes } + capital_province.county = { save_scope_as = local_county_2 } + } + else = { + root = { + random_sub_realm_county = { + weight = { + modifier = { + factor = 5 + culture = scope:local_dispute_2.culture + } + modifier = { + factor = 5 + faith = scope:local_dispute_2.faith + } + modifier = { + factor = 0.1 + this = root.capital_province.county + } + modifier = { + factor = 0.1 + exists = scope:local_county_1 + this = scope:local_county_1 + } + } + save_scope_as = local_county_2 + } + } + } + } +} + +scripted_effect ep1_flavor_2030_option_effect = { + scope:local_county_$WIN$ = { + add_county_modifier = { + modifier = ep1_flavor_2030_positive_modifier + years = 5 + } + } + scope:local_county_$LOSE$ = { + add_county_modifier = { + modifier = ep1_flavor_2030_negative_modifier + years = 5 + } + } + scope:local_dispute_$WIN$ = { + if = { + limit = { + NOT = { is_in_list = generated_dispute_characters } + } + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 10 + } + } + } + scope:local_dispute_$LOSE$ = { + if = { + limit = { + NOT = { is_in_list = generated_dispute_characters } + } + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -10 + } + } + } +} + +scripted_effect ep1_flavor_2030_boon_effect = { + switch = { + trigger = scope:taking_sides_boon_$NUM$ + 0 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_1_modifier + years = 5 + } + } + 1 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_2_modifier + years = 5 + } + } + 2 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_3_modifier + years = 5 + } + } + 3 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_4_modifier + years = 5 + } + } + 4 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_5_modifier + years = 5 + } + } + 5 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_6_modifier + years = 5 + } + } + 6 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_7_modifier + years = 5 + } + } + 7 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_8_modifier + years = 5 + } + } + 8 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_9_modifier + years = 5 + } + } + 9 = { + add_character_modifier = { + modifier = ep1_flavor_2030_boon_10_modifier + years = 5 + } + } + } +} + +ep1_flavor.2030 = { + type = character_event + title = ep1_flavor.2030.t + desc = { + desc = ep1_flavor.2030.desc_intro + first_valid = { + triggered_desc = { # Monk + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { has_trait = devoted } + } + desc = ep1_flavor.2030.desc_1_monk + } + triggered_desc = { # Bishop + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { + is_landed_or_landless_administrative = yes + government_has_flag = government_is_theocracy + } + } + desc = ep1_flavor.2030.desc_1_bishop + } + triggered_desc = { # Baron + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { is_landed_or_landless_administrative = yes } + } + desc = ep1_flavor.2030.desc_1_baron + } + triggered_desc = { # Scholar + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { has_trait = scholar } + } + desc = ep1_flavor.2030.desc_1_scholar + } + triggered_desc = { # Cultural minority + trigger = { + exists = scope:local_dispute_1 + culture != root.culture + } + desc = ep1_flavor.2030.desc_1_culture + } + triggered_desc = { # Religious minority + trigger = { + exists = scope:local_dispute_1 + faith != root.faith + } + desc = ep1_flavor.2030.desc_1_faith + } + triggered_desc = { # Judge + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { has_trait = education_learning } + } + desc = ep1_flavor.2030.desc_1_judge + } + triggered_desc = { # Captain + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { has_trait = education_martial } + } + desc = ep1_flavor.2030.desc_1_captain + } + triggered_desc = { # Merchant + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { always = yes } + } + desc = ep1_flavor.2030.desc_1_merchant + } + } + desc = ep1_flavor.2030.desc_bridge + first_valid = { + triggered_desc = { # Monk + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { has_trait = devoted } + } + desc = ep1_flavor.2030.desc_2_monk + } + triggered_desc = { # Bishop + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { + is_landed_or_landless_administrative = yes + government_has_flag = government_is_theocracy + } + } + desc = ep1_flavor.2030.desc_2_bishop + } + triggered_desc = { # Baron + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { is_landed_or_landless_administrative = yes } + } + desc = ep1_flavor.2030.desc_2_baron + } + triggered_desc = { # Scholar + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { has_trait = scholar } + } + desc = ep1_flavor.2030.desc_2_scholar + } + triggered_desc = { # Cultural minority + trigger = { + exists = scope:local_dispute_2 + culture != root.culture + } + desc = ep1_flavor.2030.desc_2_culture + } + triggered_desc = { # Religious minority + trigger = { + exists = scope:local_dispute_2 + faith != root.faith + } + desc = ep1_flavor.2030.desc_2_faith + } + triggered_desc = { # Judge + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { has_trait = education_learning } + } + desc = ep1_flavor.2030.desc_2_judge + } + triggered_desc = { # Captain + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { has_trait = education_martial } + } + desc = ep1_flavor.2030.desc_2_captain + } + triggered_desc = { # Merchant + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { always = yes } + } + desc = ep1_flavor.2030.desc_2_merchant + } + } + desc = ep1_flavor.2030.desc_outro + } + theme = stewardship + override_background = { reference = market } + cooldown = { years = 100 } + left_portrait = { + character = scope:local_dispute_1 + animation = dismissal + } + right_portrait = { + character = scope:local_dispute_2 + animation = disapproval + } + + trigger = { + has_ep1_dlc_trigger = yes + is_landed_or_landless_administrative = yes + has_royal_court = yes + has_dlc_feature = royal_court + is_available_adult = yes + any_sub_realm_county = { count >= 3 } + } + + weight_multiplier = { + base = 1 + # Court weightings. + ep1_weight_up_for_court_type_modifier = { COURT_TYPE = court_administrative } + } + + immediate = { + save_scope_value_as = { + name = taking_sides_boon_1 + value = { + integer_range = { + min = 0 + max = 9 + } + } + } + save_scope_value_as = { + name = taking_sides_boon_2 + value = { + integer_range = { + min = 0 + max = 9 + } + } + } + if = { + limit = { scope:taking_sides_boon_2 = scope:taking_sides_boon_1 } + while = { + limit = { scope:taking_sides_boon_2 = scope:taking_sides_boon_1 } + clear_saved_scope = taking_sides_boon_2 + save_scope_value_as = { + name = taking_sides_boon_2 + value = { + integer_range = { + min = 0 + max = 9 + } + } + } + } + } + hidden_effect = { + while = { + count = 2 + random_list = { + 10 = { + trigger = { + any_vassal_or_below = { + primary_title.tier = tier_barony + primary_title.county = { save_temporary_scope_as = local_dispute_temp_county } + NOR = { + is_in_list = dispute_characters + any_in_list = { + list = dispute_characters + AND = { + exists = scope:local_dispute_temp_county + is_landed_or_landless_administrative = yes + primary_title.county = scope:local_dispute_temp_county + } + } + } + } + } + modifier = { + add = -5 + any_in_list = { + list = dispute_characters + is_landed_or_landless_administrative = yes + has_same_government = prev + } + } + modifier = { + add = -4 + any_in_list = { + list = dispute_characters + count = all + faith = prev.faith + } + } + random_vassal_or_below = { + limit = { + primary_title.tier = tier_barony + NOT = { is_in_list = dispute_characters } + } + add_to_list = dispute_characters + } + } + 10 = { + modifier = { + add = -9 + any_in_list = { + list = dispute_characters + is_landed_or_landless_administrative = no + } + } + every_sub_realm_county = { add_to_list = local_dispute_county_list } + every_in_list = { + list = local_dispute_county_list + culture = { add_to_temporary_list = local_dispute_culture_list } + faith = { add_to_temporary_list = local_dispute_faith_list } + } + random_in_list = { + list = local_dispute_culture_list + weight = { + modifier = { + add = 10 + this = root.culture + } + modifier = { + add = -10 + any_in_list = { + list = dispute_characters + culture = prev + } + } + } + save_temporary_scope_as = local_dispute_culture + } + random_in_list = { + list = local_dispute_faith_list + weight = { + modifier = { + add = 10 + this = root.faith + } + modifier = { + add = -10 + any_in_list = { + list = dispute_characters + faith = prev + } + } + modifier = { + factor = 50 + any_in_list = { + list = local_dispute_county_list + faith = prev + culture = scope:local_dispute_culture + } + } + } + save_temporary_scope_as = local_dispute_faith + } + create_character = { + dynasty = none + culture = scope:local_dispute_culture + faith = scope:local_dispute_faith + location = root.capital_province + template = local_dispute_template + } + } + } + } + every_in_list = { + list = dispute_characters + ep1_flavor_2030_local_dispute_scope_effect = yes + } + } + } + + option = { # Side with 1st + name = ep1_flavor.2030.a + ep1_flavor_2030_option_effect = { WIN = 1 LOSE = 2 } + ep1_flavor_2030_boon_effect = { NUM = 1 } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + modifier = { + add = -50 + has_relation_rival = scope:local_dispute_1 + } + modifier = { + add = 25 + has_relation_friend = scope:local_dispute_1 + } + } + } + + option = { # Side with 2nd + name = ep1_flavor.2030.b + ep1_flavor_2030_option_effect = { WIN = 2 LOSE = 1 } + ep1_flavor_2030_boon_effect = { NUM = 2 } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + modifier = { + add = -50 + has_relation_rival = scope:local_dispute_2 + } + modifier = { + add = 25 + has_relation_friend = scope:local_dispute_2 + } + } + } + + option = { # Recruit 1st + name = ep1_flavor.2030.c + trigger = { + exists = scope:local_dispute_1 + scope:local_dispute_1 = { is_in_list = generated_dispute_characters } + } + add_prestige = medium_prestige_loss + send_interface_toast = { + title = ep1_flavor.2030.c.tt + left_icon = scope:local_dispute_1 + add_courtier = scope:local_dispute_1 + } + scope:local_dispute_1 = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + hidden_effect = { return_to_court = yes } + } + scope:local_county_2 = { + add_county_modifier = { + modifier = ep1_flavor_2030_negative_modifier + years = 5 + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + option = { # Recruit 2nd + name = ep1_flavor.2030.d + trigger = { + exists = scope:local_dispute_2 + scope:local_dispute_2 = { is_in_list = generated_dispute_characters } + } + add_prestige = medium_prestige_loss + send_interface_toast = { + title = ep1_flavor.2030.d.tt + left_icon = scope:local_dispute_2 + add_courtier = scope:local_dispute_2 + } + scope:local_dispute_2 = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + hidden_effect = { return_to_court = yes } + } + scope:local_county_1 = { + add_county_modifier = { + modifier = ep1_flavor_2030_negative_modifier + years = 5 + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + after = { + stress_impact = { + just = minor_stress_impact_gain + } + if = { + limit = { + any_in_list = { + list = generated_dispute_characters + employer != root + } + } + every_in_list = { + list = generated_dispute_characters + limit = { + employer != root + } + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/ep2/ep2_accolade_events.txt b/events/dlc/ep2/ep2_accolade_events.txt new file mode 100644 index 00000000..820baf95 --- /dev/null +++ b/events/dlc/ep2/ep2_accolade_events.txt @@ -0,0 +1,1197 @@ +namespace = ep2_accolade_events + +############################ +## Accolade Events +## 0200-999 +## by Jason Cantalini +############################ + +# ep2_accolade_events.0100 - Hunter gives you and/or your heir the hunter trait +# ep2_accolade_events.0200 - Blademaster gives you and/or your heir the Blademaster trait +# ep2_accolade_events.0300 - Master of Revels gives you and/or your heir the Reveler trait + +scripted_trigger ep2_accolade_events_0100_hunting_knight_trigger = { + accolade ?= { + has_accolade_parameter = acclaimed_knight_trains_hunting + } + is_healthy = yes + is_imprisoned = no + OR = { + AND = { + is_available = yes + root = { is_available = yes } + } + AND = { + is_available = yes + root.primary_heir ?= { is_available = yes } + } + location = root.location + root.primary_heir.location ?= location + } +} + +# Huntsmaster shares the Hunter trait with your line +ep2_accolade_events.0100 = { + type = character_event + title = ep2_accolade_events.0100.t + desc = { + desc = ep2_accolade_events.0100.desc + first_valid = { + triggered_desc = { + trigger = { + scope:new_hunter = { + this = root + } + scope:new_hunter_2 = { + this = root.primary_heir + } + } + desc = ep2_accolade_events.0100.desc.both + } + triggered_desc = { + trigger = { + scope:new_hunter = { + this = root.primary_heir + } + } + desc = ep2_accolade_events.0100.desc.heir + } + triggered_desc = { + trigger = { + scope:new_hunter = { + this = root + } + } + desc = ep2_accolade_events.0100.desc.liege + } + } + } + theme = hunt_activity + left_portrait = { + character = scope:new_hunter + animation = hunting_horn + } + right_portrait = { + character = scope:huntsmaster + animation = war_over_win + } + lower_right_portrait = { + character = scope:new_hunter_2 + } + + trigger = { + has_dlc_feature = accolades + any_active_accolade = { + accolade_parameter = acclaimed_knight_trains_hunting + } + OR = { + NOT = { + has_trait = lifestyle_hunter + } + AND = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_hunter + } + } + } + } + any_knight = { + ep2_accolade_events_0100_hunting_knight_trigger = yes + } + trigger_if = { + limit = { + NOT = { + has_trait = lifestyle_hunter + } + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + } + trigger_else = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_hunter + } + } + primary_heir = { + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + } + } + } + + immediate = { + random_knight = { + limit = { + ep2_accolade_events_0100_hunting_knight_trigger = yes + } + save_scope_as = huntsmaster + } + if = { + limit = { + NOT = { + has_trait = lifestyle_hunter + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + } + save_scope_as = new_hunter + } + else_if = { + limit = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_hunter + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + } + } + primary_heir = { + save_scope_as = new_hunter + } + } + if = { + limit = { + scope:new_hunter = { + this = root + } + primary_heir ?= { + NOT = { + has_trait = lifestyle_hunter + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + } + } + primary_heir = { + save_scope_as = new_hunter_2 + } + } + } + + option = { + name = ep2_accolade_events.0100.a + scope:new_hunter = { + add_trait = lifestyle_hunter + } + if = { + limit = { + exists = scope:new_hunter_2 + } + scope:new_hunter_2 = { + add_trait = lifestyle_hunter + } + } + if = { + limit = { + culture = { + OR = { + has_cultural_tradition = tradition_bush_hunting + has_cultural_tradition = tradition_hunters + has_cultural_tradition = tradition_sacred_hunts + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + lifestyle_hunter = miniscule_stress_impact_loss + } + } + else = { + stress_impact = { + lifestyle_hunter = miniscule_stress_impact_loss + } + } + ai_chance = { + base = 100 + } + } +} + +scripted_trigger ep2_accolade_events_0200_blademaster_knight_trigger = { + accolade ?= { + has_accolade_parameter = acclaimed_knight_trains_swordfighting + } + is_healthy = yes + is_imprisoned = no + OR = { + AND = { + is_available = yes + root = { is_available = yes } + } + AND = { + is_available = yes + root.primary_heir = { is_available = yes } + } + location = root.location + location = root.primary_heir.location + } +} + +# Blademaster shares the Blademaster trait with your line +ep2_accolade_events.0200 = { + type = character_event + title = ep2_accolade_events.0200.t + desc = { + desc = ep2_accolade_events.0200.desc + first_valid = { + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + exists = scope:new_blademaster_2 + scope:new_blademaster_2 = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + desc = ep2_accolade_events.0200.desc.both_not_martial + } + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root + } + exists = scope:new_blademaster_2 + scope:new_blademaster_2 = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + desc = ep2_accolade_events.0200.desc.heir_not_martial + } + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root + } + exists = scope:new_blademaster_2 + scope:new_blademaster_2 = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + desc = ep2_accolade_events.0200.desc.heir_not_martial + } + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root + } + exists = scope:new_blademaster_2 + } + desc = ep2_accolade_events.0200.desc.both + } + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root.primary_heir + } + } + desc = ep2_accolade_events.0200.desc.heir + } + triggered_desc = { + trigger = { + scope:new_blademaster = { + this = root + } + } + desc = ep2_accolade_events.0200.desc.liege + } + } + } + theme = martial + override_background = { + reference = courtyard + } + left_portrait = { + trigger = { + exists = scope:new_blademaster + } + character = scope:new_blademaster + animation = marshal + } + right_portrait = { + character = scope:acclaimed_blademaster + animation = throne_room_one_handed_passive_1 + } + lower_right_portrait = { + character = scope:new_blademaster_2 + } + + trigger = { + has_dlc_feature = accolades + any_active_accolade = { + accolade_parameter = acclaimed_knight_trains_swordfighting + } + OR = { + NOT = { + has_trait = lifestyle_blademaster + } + AND = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_blademaster + } + } + } + } + any_knight = { + ep2_accolade_events_0200_blademaster_knight_trigger = yes + } + trigger_if = { + limit = { + NOT = { + has_trait = lifestyle_blademaster + } + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_tournament } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + NOT = { has_character_flag = denied_blademaster_training } + } + trigger_else = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_blademaster + } + } + OR = { + primary_heir = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + primary_heir = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + NOR = { + has_trait = craven + has_trait = lazy + has_trait = content + } + } + } + primary_heir = { + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_tournament } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + NOT = { has_character_flag = denied_blademaster_training } + } + } + } + + immediate = { + #save trainer knight + random_knight = { + limit = { + ep2_accolade_events_0200_blademaster_knight_trigger = yes + } + save_scope_as = acclaimed_blademaster + } + #save non-blademaster liege + if = { + limit = { + NOT = { + has_trait = lifestyle_blademaster + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_tournament } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + NOT = { has_character_flag = denied_blademaster_training } + } + save_scope_as = new_blademaster + } + #save non-blademaster heir + else = { + primary_heir = { + save_scope_as = new_blademaster + } + } + #save non-blademaster heir, if liege exists + if = { + limit = { + scope:new_blademaster = { + this = root + } + primary_heir ?= { + NOT = { + has_trait = lifestyle_blademaster + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_hunt } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + NOT = { has_character_flag = denied_blademaster_training } + } + } + primary_heir = { + save_scope_as = new_blademaster_2 + } + } + scope:new_blademaster = { + add_character_flag = wear_armor + } + scope:acclaimed_blademaster = { + add_character_flag = wear_armor + } + scope:new_blademaster_2 ?= { + add_character_flag = wear_armor + } + } + + # we're going to be blademasters + option = { + name = ep2_accolade_events.0200.a + scope:new_blademaster = { + add_trait = lifestyle_blademaster + } + if = { + limit = { + exists = scope:new_blademaster_2 + } + scope:new_blademaster_2 = { + add_trait = lifestyle_blademaster + } + } + if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + } + add_piety = medium_piety_loss + add_character_modifier = { + modifier = defied_martial_custom_modifier + years = 20 + } + } + if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + } + } + reverse_add_opinion = { + modifier = grateful_opinion + target = primary_heir + opinion = 30 + } + } + if = { + limit = { + culture = { + OR = { + has_cultural_tradition = tradition_druzhina + has_cultural_tradition = tradition_futuwaa + has_cultural_tradition = tradition_khadga_puja + has_cultural_tradition = tradition_talent_acquisition + has_cultural_tradition = tradition_swords_for_hire + has_cultural_tradition = tradition_warriors_by_merit + has_cultural_tradition = tradition_only_the_strong + has_cultural_tradition = tradition_martial_admiration + has_cultural_tradition = tradition_fp1_trials_by_combat + has_cultural_tradition = tradition_chanson_de_geste + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + wrathful = miniscule_stress_impact_loss + lifestyle_blademaster = miniscule_stress_impact_loss + } + } + else_if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + } + stress_impact = { + craven = major_stress_impact_gain + lazy = major_stress_impact_gain + content = major_stress_impact_gain + zealous = minor_stress_impact_gain + humble = minor_stress_impact_gain + just = minor_stress_impact_gain + lifestyle_blademaster = miniscule_stress_impact_loss + } + } + else_if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + culture = { + OR = { + has_cultural_tradition = tradition_druzhina + has_cultural_tradition = tradition_futuwaa + has_cultural_tradition = tradition_khadga_puja + has_cultural_tradition = tradition_talent_acquisition + has_cultural_tradition = tradition_swords_for_hire + has_cultural_tradition = tradition_warriors_by_merit + has_cultural_tradition = tradition_only_the_strong + has_cultural_tradition = tradition_martial_admiration + has_cultural_tradition = tradition_fp1_trials_by_combat + has_cultural_tradition = tradition_chanson_de_geste + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + ambitious = miniscule_stress_impact_loss + wrathful = miniscule_stress_impact_loss + craven = major_stress_impact_gain + lazy = major_stress_impact_gain + content = major_stress_impact_gain + zealous = minor_stress_impact_gain + humble = minor_stress_impact_gain + just = minor_stress_impact_gain + lifestyle_blademaster = miniscule_stress_impact_loss + } + } + else = { + stress_impact = { + lifestyle_blademaster = miniscule_stress_impact_loss + } + } + ai_chance = { + base = 100 + modifier = { + add = -75 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + OR = { + has_trait = zealous + has_trait = humble + has_trait = just + } + } + modifier = { + add = 100 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + OR = { + has_trait = brave + has_trait = ambitious + has_trait = arrogant + has_trait = arbitrary + has_trait = cynical + } + } + modifier = { + factor = 0 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + OR = { + has_trait = craven + has_trait = lazy + has_trait = content + } + } + } + } + + # better not defy gender norms + option = { + trigger = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + } + name = ep2_accolade_events.0200.b + flavor = ep2_accolade_events.0200.b.tt + if = { + limit = { + scope:new_blademaster = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster = { + add_trait = lifestyle_blademaster + } + } + else = { + scope:new_blademaster = { + add_character_flag = denied_blademaster_training + } + } + if = { + limit = { + exists = scope:new_blademaster_2 + scope:new_blademaster_2 = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 = { + add_trait = lifestyle_blademaster + } + } + else = { + scope:new_blademaster_2 ?= { + add_character_flag = denied_blademaster_training + } + } + if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + } + } + reverse_add_opinion = { + modifier = angry_opinion + target = primary_heir + opinion = -30 + } + } + if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this != root.primary_heir + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this != root.primary_heir + } + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + brave = medium_stress_impact_gain + cynical = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + } + } + else_if = { + limit = { + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + } + } + stress_impact = { + compassionate = major_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + brave = medium_stress_impact_gain + cynical = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + } + } + ai_chance = { + base = 0 + modifier = { + add = 100 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + } + modifier = { + add = -75 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = brave + has_trait = cynical + has_trait = arbitrary + } + } + modifier = { + add = 100 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + OR = { + has_trait = humble + has_trait = content + has_trait = craven + has_trait = zealous + has_trait = just + has_trait = lazy + } + } + modifier = { + factor = 0 + OR = { + scope:new_blademaster = { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + scope:new_blademaster_2 ?= { + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + this = root.primary_heir + } + } + has_trait = compassionate + } + } + } + after = { + scope:acclaimed_blademaster = { + remove_character_flag = wear_armor + } + scope:new_blademaster = { + remove_character_flag = wear_armor + } + } +} + +scripted_trigger ep2_accolade_events_0300_reveler_knight_trigger = { + accolade ?= { + has_accolade_parameter = acclaimed_knight_trains_reveling + } + is_healthy = yes + is_imprisoned = no + OR = { + AND = { + is_available = yes + root = { is_available = yes } + } + AND = { + is_available = yes + root.primary_heir = { is_available = yes } + } + location = root.location + location = root.primary_heir.location + } +} + +# master_of_revels shares the reveler trait with your line +ep2_accolade_events.0300 = { + type = character_event + title = ep2_accolade_events.0300.t + desc = { + desc = ep2_accolade_events.0300.desc + first_valid = { + triggered_desc = { + trigger = { + scope:new_reveler = { + this = root + } + scope:new_reveler_2 = { + this = root.primary_heir + } + } + desc = ep2_accolade_events.0300.desc.both + } + triggered_desc = { + trigger = { + scope:new_reveler = { + this = root.primary_heir + } + } + desc = ep2_accolade_events.0300.desc.heir + } + triggered_desc = { + trigger = { + scope:new_reveler = { + this = root + } + } + desc = ep2_accolade_events.0300.desc.liege + } + } + } + theme = feast_activity + left_portrait = { + character = scope:new_reveler + animation = laugh + } + right_portrait = { + character = scope:master_of_revels + animation = toast_goblet + } + lower_right_portrait = { + character = scope:new_reveler_2 + } + + trigger = { + has_dlc_feature = accolades + any_active_accolade = { + accolade_parameter = acclaimed_knight_trains_reveling + } + OR = { + NOR = { + has_trait = lifestyle_reveler + has_trait = temperate + has_trait = shy + } + AND = { + primary_heir ?= { + NOR = { + has_trait = lifestyle_reveler + has_trait = temperate + has_trait = shy + } + } + } + } + any_knight = { + ep2_accolade_events_0300_reveler_knight_trigger = yes + } + trigger_if = { + limit = { + NOT = { + has_trait = lifestyle_reveler + } + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + } + trigger_else = { + primary_heir ?= { + NOT = { + has_trait = lifestyle_reveler + } + } + primary_heir = { + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + } + } + } + + immediate = { + random_knight = { + limit = { + ep2_accolade_events_0300_reveler_knight_trigger = yes + } + save_scope_as = master_of_revels + } + if = { + limit = { + NOR = { + has_trait = lifestyle_reveler + has_trait = temperate + has_trait = shy + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + is_healthy = yes + is_imprisoned = no + age >= 13 + } + save_scope_as = new_reveler + } + else_if = { + limit = { + primary_heir ?= { + NOR = { + has_trait = lifestyle_reveler + has_trait = temperate + has_trait = shy + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + } + } + primary_heir = { + save_scope_as = new_reveler + } + } + if = { + limit = { + scope:new_reveler ?= { + this = root + } + primary_heir ?= { + NOT = { + has_trait = lifestyle_reveler + has_trait = temperate + has_trait = shy + } + OR = { + is_available = yes + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + is_healthy = yes + is_ai = yes + is_imprisoned = no + age >= 13 + is_courtier_of = root + } + } + primary_heir = { + save_scope_as = new_reveler_2 + } + } + } + + option = { + name = ep2_accolade_events.0300.a + scope:new_reveler ?= { + add_trait = lifestyle_reveler + } + if = { + limit = { + exists = scope:new_reveler_2 + } + scope:new_reveler_2 = { + add_trait = lifestyle_reveler + } + } + if = { + limit = { + culture = { + OR = { + has_cultural_tradition = tradition_festivities + has_cultural_tradition = tradition_welcoming + } + } + faith = { + OR = { + has_doctrine = tenet_ritual_celebrations + has_doctrine = tenet_hedonistic + } + } + } + stress_impact = { + base = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + gluttonous = miniscule_stress_impact_loss + drunkard = miniscule_stress_impact_loss + profligate = miniscule_stress_impact_loss + comfort_eater = miniscule_stress_impact_loss + lustful = miniscule_stress_impact_loss + lifestyle_reveler = miniscule_stress_impact_loss + } + } + else = { + stress_impact = { + lifestyle_reveler = miniscule_stress_impact_loss + } + } + ai_chance = { + base = 100 + } + } +} diff --git a/events/dlc/ep2/wedding_events/ep2_bloody_wedding_events.txt b/events/dlc/ep2/wedding_events/ep2_bloody_wedding_events.txt new file mode 100644 index 00000000..b9d88167 --- /dev/null +++ b/events/dlc/ep2/wedding_events/ep2_bloody_wedding_events.txt @@ -0,0 +1,1857 @@ +namespace = ep2_wedding + +# ON START - CEREMONY - BLOODY WEDDING + +ep2_wedding.0101 = { + type = activity_event + title = ep2_wedding.0101.t + desc = { + desc = ep2_wedding.0101.desc.intro + first_valid = { + triggered_desc = { + trigger = { root = scope:spouse_1 } + desc = ep2_wedding.0101.desc.spouse + } + triggered_desc = { + trigger = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } } + desc = ep2_wedding.0101.desc.bad + } + triggered_desc = { + trigger = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } } + desc = ep2_wedding.0101.desc.good + } + } + } + + theme = bloody_wedding_ceremony + left_portrait = { + character = root + animation = schadenfreude + } + right_portrait = { + character = scope:spouse_2 + animation = admiration + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Events/Grand_Activities/Feasts/ep2_event_grand_murder_feast" + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } #for loc + } + + option = { #kill all of them + name = { + trigger = { scope:spouse_2 = { is_lowborn = no } } + text = ep2_wedding.0101.a + } + name = { + trigger = { scope:spouse_2 = { is_lowborn = yes } } + text = ep2_wedding.0101.a_lowborn + } + custom_tooltip = ep2_wedding.0101.a.tt + set_variable = { + name = bloody_wedding_murder + value = flag:family + years = 1 + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = arbitrary + has_trait = paranoid + has_trait = deceitful + has_trait = wrathful + has_trait = vengeful + has_trait = callous + has_trait = sadistic + } + NOT = { has_trait = calm } + add = 50 + } + modifier = { + OR = { + has_trait = calm + has_trait = compassionate + has_trait = forgiving + has_trait = just + has_trait = honest + } + add = -50 + } + } + } + + option = { #kill only the spouse + name = ep2_wedding.0101.b + custom_tooltip = ep2_wedding.0101.a.tt + set_variable = { + name = bloody_wedding_murder + value = flag:solo + years = 1 + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = just + has_trait = brave + has_trait = temperate + has_trait = impatient + } + NOT = { has_trait = wrathful } + add = 50 + } + } + } + + option = { #kill only the spouse - during OUR wedding night + name = ep2_wedding.0101.c + custom_tooltip = ep2_wedding.0101.c.tt + trigger = { + root = scope:spouse_1 + scope:spouse_2 = { is_ai = yes } #too complex to account for this if it's a player + NOT = { + scope:activity = { + any_attending_character = { + is_close_or_extended_family_of = scope:spouse_2 + is_ai = no + } + } + } + } + set_variable = { + name = bloody_wedding_murder + value = flag:spouse + years = 1 + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = just + has_trait = brave + has_trait = patient + has_trait = craven + } + add = 50 + } + } + } + + option = { #back down + name = ep2_wedding.0101.d + custom_tooltip = ep2_wedding.0101.d.tt + set_variable = { + name = bloody_wedding_backed_down_var + years = 1 + } + ai_chance = { + base = 10 #unlikely to back down once it's started + modifier = { #UNLESS + OR = { + has_trait = calm + has_trait = compassionate + has_trait = forgiving + has_trait = just + has_trait = honest + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + add = 200 + } + } + } +} + +# ON COMPLETE BANQUET - MASSACRE - BLOODY WEDDING - KILL EVERYONE + +scripted_trigger ep2_wedding_0202_valid_family_member_trigger = { + is_close_or_extended_family_of = scope:spouse_2 + this != root + is_close_family_or_spouse_of_root_trigger = no + this != scope:spouse_2 +} + +ep2_wedding.0202 = { + type = activity_event + title = { + first_valid = { + triggered_desc = { + trigger = { + root = scope:spouse_1 + } + desc = ep2_wedding.0202.t.spouse + } + triggered_desc = { + desc = ep2_wedding.0202.t + } + } + } + desc = { + desc = ep2_wedding.0202.desc.intro + random_valid = { + triggered_desc = { + trigger = { #compassionate + OR = { + has_trait = compassionate + has_trait = forgiving + } + } + desc = ep2_wedding.0202.desc.compassionate + } + triggered_desc = { #paranoid + trigger = { + has_trait = paranoid + } + desc = ep2_wedding.0202.desc.paranoid + } + triggered_desc = { #zealous + trigger = { + has_trait = zealous + } + desc = ep2_wedding.0202.desc.zealous + } + triggered_desc = { #sadistic + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = torturer + } + } + desc = ep2_wedding.0202.desc.sadistic + } + triggered_desc = { #cannibal + trigger = { + is_cannibal_trigger = yes + } + desc = ep2_wedding.0202.desc.cannibal + } + triggered_desc = { #craven + trigger = { + has_trait = craven + } + desc = ep2_wedding.0202.desc.craven + } + triggered_desc = { #arrogant + trigger = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + NOT = { has_trait = humble } + } + desc = ep2_wedding.0202.desc.arrogant + } + triggered_desc = { #lazy + trigger = { + has_trait = lazy + } + desc = ep2_wedding.0202.desc.lazy + } + triggered_desc = { #just + trigger = { + OR = { + has_trait = just + has_trait = honest + } + } + desc = ep2_wedding.0202.desc.just + } + triggered_desc = { #wrathful + trigger = { + OR = { + has_trait = wrathful + has_trait = stubborn + has_trait = vengeful + } + NOT = { has_trait = calm } + } + desc = ep2_wedding.0202.desc.wrathful + } + desc = ep2_wedding.0202.desc.fallback + } + desc = ep2_wedding.0202.desc.outro + } + + theme = bloody_wedding_banquet + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = calm + has_trait = craven + } + } + animation = worry + } + animation = schadenfreude + } + center_portrait = { + character = scope:mercenary_1 + animation = aggressive_sword + } + right_portrait = { + character = scope:spouse_2 + animation = fear + } + lower_center_portrait = { + trigger = { exists = scope:entourage_1 } + character = scope:entourage_1 + } + lower_right_portrait = { + trigger = { exists = scope:entourage_2 } + character = scope:entourage_2 + } + lower_left_portrait = { + trigger = { exists = scope:entourage_3 } + character = scope:entourage_3 + } + cooldown = { years = 3 } #so you don't get it again and again + + trigger = { + exists = scope:activity + var:bloody_wedding_murder ?= flag:family + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Events/Grand_Activities/Feasts/ep2_event_grand_murder_feast" + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } #for loc + hidden_effect = { + create_character = { + template = mercenary + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = mercenary_1 + } + create_character = { #random peasant is present so the whole activity doesn't cancel + template = servant_character + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + save_scope_as = shocked_rob + } + scope:shocked_rob = { + add_to_activity = scope:activity + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_0202_valid_family_member_trigger = yes + } + } + } + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + } + save_scope_as = entourage_1 + } + random_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + this != scope:entourage_1 + } + save_scope_as = entourage_2 + } + random_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + this != scope:entourage_1 + this != scope:entourage_2 + } + save_scope_as = entourage_3 + } + } + } + } + + option = { + name = { + trigger = { scope:spouse_2 = { is_lowborn = no } } + text = ep2_wedding.0202.a + } + name = { + trigger = { scope:spouse_2 = { is_lowborn = yes } } + text = ep2_wedding.0202.a.lowborn + } + if = { + limit = { scope:spouse_2 = { is_ai = no } } + scope:spouse_2 = { trigger_event = ep2_wedding.0204 } + } + else_if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_0202_valid_family_member_trigger = yes + is_ai = no #there's a player family member + } + } + } + scope:activity = { + every_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + is_ai = no #there's a player family member + } + trigger_event = ep2_wedding.0204 + } + } + } + else = { + if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_0202_valid_family_member_trigger = yes + } + } + } + scope:activity = { + every_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + } + custom = every_attending_relative_of_spouse_2 + death = { + death_reason = death_bloody_wedding + } + } + } + } + show_as_tooltip = { #we wanna show this + scope:spouse_2 = { + death = { death_reason = death_bloody_wedding } + scope:host = { + add_secret = { + type = secret_murder + target = scope:spouse_2 + } + } + } + } + hidden_effect = { #this does the effect + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = root + REASON = death_bloody_wedding + } + } + create_character_memory = { + type = grand_wedding_massacre + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + } + + after = { + if = { + limit = { is_ai = yes } + scope:mercenary_1 = { silent_disappearance_effect = yes } + } + hidden_effect = { + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } +} + +# ON COMPLETE BANQUET - MASSACRE - BLOODY WEDDING - KILL THE SPOUSE +ep2_wedding.0203 = { + type = activity_event + title = { + first_valid = { + triggered_desc = { + trigger = { + root = scope:spouse_1 + } + desc = ep2_wedding.0203.t.spouse + } + triggered_desc = { + desc = ep2_wedding.0203.t + } + } + } + desc = { + desc = ep2_wedding.0203.desc.intro + random_valid = { + triggered_desc = { + trigger = { #compassionate + OR = { + has_trait = compassionate + has_trait = forgiving + } + } + desc = ep2_wedding.0203.desc.compassionate + } + triggered_desc = { #paranoid + trigger = { + has_trait = paranoid + } + desc = ep2_wedding.0203.desc.paranoid + } + triggered_desc = { #zealous + trigger = { + has_trait = zealous + } + desc = ep2_wedding.0203.desc.zealous + } + triggered_desc = { #sadistic + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = torturer + } + } + desc = ep2_wedding.0203.desc.sadistic + } + triggered_desc = { #cannibal + trigger = { + is_cannibal_trigger = yes + } + desc = ep2_wedding.0203.desc.cannibal + } + triggered_desc = { #craven + trigger = { + has_trait = craven + } + desc = ep2_wedding.0203.desc.craven + } + triggered_desc = { #arrogant + trigger = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + NOT = { has_trait = humble } + } + desc = ep2_wedding.0203.desc.arrogant + } + triggered_desc = { #just + trigger = { + OR = { + has_trait = just + has_trait = honest + } + } + desc = ep2_wedding.0203.desc.just + } + triggered_desc = { #wrathful + trigger = { + OR = { + has_trait = wrathful + has_trait = stubborn + has_trait = vengeful + } + NOT = { has_trait = calm } + } + desc = ep2_wedding.0203.desc.wrathful + } + desc = ep2_wedding.0203.desc.fallback + } + desc = ep2_wedding.0203.desc.outro + } + theme = bloody_wedding_banquet + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = calm + has_trait = craven + } + } + animation = worry + } + animation = schadenfreude + } + center_portrait = { + character = scope:my_agent + animation = aggressive_dagger + } + right_portrait = { + character = scope:spouse_2 + animation = shock + } + cooldown = { years = 3 } #so you don't get it again and again + + trigger = { + exists = scope:activity + var:bloody_wedding_murder ?= flag:solo + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Events/Grand_Activities/Feasts/ep2_event_grand_murder_feast" + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + #save scopes for the celebration_spy_character template + location.faith = { + save_scope_as = guest_faith + } + location.culture = { + save_scope_as = guest_culture + } + hidden_effect = { + create_character = { + template = celebration_spy_character + dynasty = none + location = root.location + gender_female_chance = root_soldier_female_chance + save_scope_as = my_agent + } + } + } + + option = { + name = ep2_wedding.0203.a + if = { + limit = { scope:spouse_2 = { is_ai = no } } + scope:spouse_2 = { trigger_event = ep2_wedding.0204 } + } + else = { + show_as_tooltip = { #we wanna show this + scope:spouse_2 = { + death = { death_reason = death_bloody_wedding } + add_secret = { + type = secret_murder + target = scope:spouse_2 + } + } + } + hidden_effect = { #this does the effect + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = root + REASON = death_bloody_wedding + } + } + create_character_memory = { + type = grand_wedding_solo_kill + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + } + + after = { + if = { + limit = { is_ai = yes } + scope:my_agent = { silent_disappearance_effect = yes } + } + hidden_effect = { + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } +} + +# ON START WNIGHT - MASSACRE - BLOODY WEDDING - WEDDING NIGHT KILL + +ep2_wedding.3060 = { + type = activity_event + title = ep2_wedding.3060.t + desc = ep2_wedding.3060.desc + theme = wedding_night_activity + left_portrait = { + character = root + animation = flirtation_left + } + right_portrait = { + character = scope:spouse_2 + animation = flirtation + } + + cooldown = { years = 3 } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Events/Grand_Activities/Feasts/ep2_event_grand_murder_feast" + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + } + + #Go for it + option = { + name = ep2_wedding.3060.a + duel = { + skill = prowess + target = scope:spouse_2 + 65 = { #you kill them + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.3060.a.success + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.a.success + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = root + REASON = death_mysterious + } + } + create_character_memory = { + type = grand_wedding_solo_kill + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + give_nickname = nick_the_just_widowed + } + 35 = { #they survive + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.3060.a.failure + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.a.failure + scope:spouse_2 = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -50 + } + } + } + set_variable = bloody_murder_fail + } + } + stress_impact = { + calm = medium_stress_impact_gain + craven = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = compassionate + has_trait = calm + } + } + } + } + + #Offer some drink (poisoned) + option = { + name = ep2_wedding.3060.b + trigger = { + OR = { + has_trait = lifestyle_herbalist + has_trait = witch + has_trait = lifestyle_physician + has_trait = whole_of_body + has_trait = lifestyle_gardener + has_trait = schemer + } + } + duel = { + skill = intrigue + target = scope:spouse_2 + 80 = { #you kill them + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.3060.b.success + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.b.success + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = root + REASON = death_mysterious + } + } + create_character_memory = { + type = grand_wedding_solo_kill + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + give_nickname = nick_the_just_widowed + } + 20 = { #they survive + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.3060.b.failure + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.b.failure + scope:spouse_2 = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -50 + } + } + } + set_variable = bloody_murder_fail + } + } + stress_impact = { + impatient = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = wrathful + has_trait = compassionate + } + } + } + } + + #Cut their throat + option = { + name = ep2_wedding.3060.c + flavor = ep2_wedding.3060.c.flavor + trigger = { + OR = { + has_trait = lifestyle_hunter + has_trait = torturer + has_trait = lifestyle_blademaster + has_trait = kinslayer + has_trait = aggressive_attacker + has_trait = murderer + has_trait = wrathful + has_trait = deceitful + has_trait = sadistic + has_trait = callous + } + } + duel = { + skills = { prowess intrigue } + target = scope:spouse_2 + 80 = { #you kill them + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.3060.c.success + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.c.success + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = root + REASON = death_mysterious + } + } + create_character_memory = { + type = grand_wedding_solo_kill + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + give_nickname = nick_the_just_widowed + } + 20 = { #they survive + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.3060.c.failure + send_interface_toast = { + left_icon = scope:spouse_2 + title = ep2_wedding.3060.c.failure + scope:spouse_2 = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -50 + } + } + } + set_variable = bloody_murder_fail + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + craven = medium_stress_impact_gain + calm = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = craven + has_trait = calm + } + } + } + } + + #I actually like this person + option = { + name = ep2_wedding.3060.d + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:spouse_2 + } + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_romantic_wedding_night + OPINION = 20 + } + had_sex_with_effect = { + CHARACTER = scope:spouse_2 + PREGNANCY_CHANCE = pregnancy_chance + } + set_variable = { + name = bloody_wedding_backed_down_var + years = 1 + } + stress_impact = { + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = wrathful + } + } + } + } + + after = { + hidden_effect = { + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + remove_character_flag = is_naked + scope:spouse_2 = { + remove_character_flag = is_naked + } + } +} + +# ON START WNIGHT - THE CLEANING UP - BLOODY WEDDING - HOST +ep2_wedding.0301 = { + type = activity_event + title = ep2_wedding.0301.t + desc = { + first_valid = { + triggered_desc = { #Your mercenaries killed everyone + trigger = { + var:bloody_wedding_murder ?= flag:family + } + desc = ep2_wedding.0301.desc.family + } + triggered_desc = { #Agent killed the spouse + trigger = { + var:bloody_wedding_murder ?= flag:solo + } + desc = ep2_wedding.0301.desc.agent + } + triggered_desc = { #Spouse died during the wedding night + trigger = { + var:bloody_wedding_murder ?= flag:spouse + } + desc = ep2_wedding.0301.desc.wedding_night + } + } + first_valid = { + triggered_desc = { #You're the spouse - wedding night kill + trigger = { + scope:spouse_1 = root + var:bloody_wedding_murder ?= flag:spouse + } + desc = ep2_wedding.0301.spouse_wnight + } + triggered_desc = { #You're the spouse + trigger = { + scope:spouse_1 = root + } + desc = ep2_wedding.0301.spouse + } + desc = ep2_wedding.0301.non_spouse #you're not the spouse + } + } + theme = bloody_wedding_banquet + left_portrait = { + character = root + triggered_animation = { + trigger = { + this = scope:spouse_1 + } + animation = grief + } + animation = schadenfreude + } + center_portrait = { + trigger = { exists = scope:shocked_guest } + character = scope:shocked_guest + animation = shock + } + right_portrait = { + trigger = { + root != scope:spouse_1 + } + character = scope:spouse_1 + animation = grief + } + lower_right_portrait = scope:spouse_2 + cooldown = { years = 3 } + + trigger = { + exists = scope:activity + } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + if = { + limit = { + scope:activity = { + any_attending_character = { + is_alive = yes + is_adult = yes + this != scope:activity.special_guest:spouse_1 + this != scope:spouse_2 + this != scope:host + } + } + } + scope:activity = { + random_attending_character = { + limit = { + is_alive = yes + is_adult = yes + this != scope:activity.special_guest:spouse_1 + this != scope:host + } + weight = { + base = 1 + modifier = { + add = -5 + is_close_family_or_spouse_of_root_trigger = yes + } + modifier = { + add = 2 + is_close_or_extended_family_of = scope:spouse_2 + } + } + save_scope_as = shocked_guest + } + } + } + } + + option = { #What a tragedy! + name = ep2_wedding.0301.a + scope:spouse_1 = { + remove_character_modifier = wedding_fertility_delay_modifier + } + } + + after = { + if = { + limit = { + this = scope:host + } + scope:host = { + save_scope_as = root_scope + trigger_event = ep2_wedding.0955 + } + } + scope:activity = { + every_attending_character = { + limit = { + this != scope:host + this != scope:spouse_1 + } + trigger_event = ep2_wedding.0956 + } + } + } +} + +# ON START - THE CLEANING UP - BLOODY WEDDING - SURVIVORS / this is the event where the guests realize it's a bloody wedding +ep2_wedding.0302 = { + type = activity_event + title = ep2_wedding.0302.t + desc = { + first_valid = { + triggered_desc = { #Host killed everyone + trigger = { + scope:host = { var:bloody_wedding_murder ?= flag:family } + } + desc = ep2_wedding.0302.desc.family + } + triggered_desc = { #Agent killed the spouse + trigger = { + scope:host = { var:bloody_wedding_murder ?= flag:solo } + } + desc = ep2_wedding.0302.desc.agent + } + triggered_desc = { #Spouse died during the wedding night + trigger = { + scope:host = { var:bloody_wedding_murder ?= flag:spouse } + } + desc = ep2_wedding.0302.desc.wedding_night + } + } + first_valid = { + triggered_desc = { #Spouse! + trigger = { + this = scope:spouse_1 + } + desc = ep2_wedding.0302.spouse + } + triggered_desc = { #Good relationship + trigger = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + desc = ep2_wedding.0302.good + } + triggered_desc = { #Bad relationship + trigger = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + desc = ep2_wedding.0302.bad + } + triggered_desc = { #You admire the hustle + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = torturer + has_trait = vengeful + } + } + desc = ep2_wedding.0302.sadistic + } + desc = ep2_wedding.0302.indifferent + } + } + theme = bloody_wedding_banquet + left_portrait = { + character = root + animation = fear + } + right_portrait = { + character = scope:spouse_1 + animation = grief + } + lower_center_portrait = scope:spouse_2 + cooldown = { years = 3 } + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_intrigue" } + + trigger = { + exists = scope:activity + } + + immediate = { + play_music_cue = mx_cue_murder + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + if = { + limit = { + scope:host = { var:bloody_wedding_murder ?= flag:family } + } + show_as_tooltip = { + scope:activity = { + every_attending_character = { + limit = { + OR = { + is_close_or_extended_family_of = scope:spouse_2 + this = scope:spouse_2 + } + } + custom = every_attending_relative_of_spouse_2 + death = { + death_reason = death_bloody_wedding + } + } + } + } + } + else_if = { + limit = { + scope:host = { + OR = { + var:bloody_wedding_murder ?= flag:solo + var:bloody_wedding_murder ?= flag:spouse + } + } + } + show_as_tooltip = { + scope:spouse_2 = { + death = { + death_reason = death_bloody_wedding + } + } + } + } + } + + option = { + name = ep2_wedding.0302.a + } +} + +# CONCLUSION - BLOODY WEDDING - HOST +ep2_wedding.0955 = { + type = activity_event + title = ep2_wedding.0955.t + desc = { + desc = ep2_wedding.0955.desc.intro + first_valid = { + triggered_desc = { #failed - you're spouses + trigger = { + has_variable = bloody_murder_fail + } + desc = ep2_wedding.0955.desc.failed + } + desc = ep2_wedding.0955.desc.murder + } + first_valid = { + triggered_desc = { #Good relationship + trigger = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + NOT = { has_variable = bloody_murder_fail } + } + desc = ep2_wedding.0955.good + } + triggered_desc = { #Bad relationship + trigger = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + NOT = { has_variable = bloody_murder_fail } + } + desc = ep2_wedding.0955.bad + } + triggered_desc = { #Rejoice + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = torturer + has_trait = vengeful + } + NOT = { has_variable = bloody_murder_fail } + } + desc = ep2_wedding.0955.sadistic + } + triggered_desc = { #Repent, kinda + trigger = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = just + has_trait = trusting + } + NOT = { has_variable = bloody_murder_fail } + } + desc = ep2_wedding.0955.compassionate + } + triggered_desc = { #Meh + trigger = { NOT = { has_variable = bloody_murder_fail } } + desc = ep2_wedding.0955.indifferent + } + } + } + theme = bloody_wedding_banquet + left_portrait = { + character = root + triggered_animation = { + trigger = { has_variable = bloody_murder_fail } + animation = anger + } + animation = schadenfreude + } + right_portrait ={ + trigger = { scope:spouse_2 = { is_alive = yes } } + character = scope:spouse_2 + animation = schadenfreude + } + cooldown = { years = 3 } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + } + + option = { + name = { + trigger = { has_variable = bloody_murder_fail } + text = ep2_wedding.0955.a.failure + } + name = { + trigger = { NOT = { has_variable = bloody_murder_fail } } + text = ep2_wedding.0955.a + } + show_as_tooltip = { + disburse_murder_wedding_host_rewards = yes + } + #Stress rewards + stress_impact = { + paranoid = massive_stress_impact_loss + callous = massive_stress_impact_loss + sadistic = massive_stress_impact_loss + compassionate = massive_stress_impact_gain + just = massive_stress_impact_gain + calm = major_stress_impact_gain + } + + hidden_effect = { + if = { #if you haven't failed + limit = { + NOT = { has_variable = bloody_murder_fail } + } + trigger_event = { #cleans up the variables with enough delay for the guest events + id = ep2_wedding.0958 + days = 7 + } + if = { #if they have a parent they always send the letter unless they're too nice + limit = { + scope:activity.var:spouse_2_var = { + any_parent = { + is_available_ai_adult = yes + } + } + } + scope:activity.var:spouse_2_var = { + random_parent = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = avenging_family + } + } + random = { + chance = 100 + modifier = { + add = -25 + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = calm + } + } + modifier = { + add = -25 + has_any_good_relationship_with_root_trigger = yes + } + modifier = { + add = 25 + has_any_bad_relationship_with_root_trigger = yes + } + trigger_event = { + id = ep2_wedding.0957 + days = 14 + } + } + } + else_if = { #if they have a close family member it's a random chance + limit = { + scope:activity.var:spouse_2_var = { + any_close_family_member = { + is_available_ai_adult = yes + NOT = { is_parent_of = scope:activity.var:spouse_2_var } + } + } + } + scope:activity.var:spouse_2_var = { + random_close_family_member = { + limit = { + is_available_ai_adult = yes + NOT = { is_parent_of = scope:activity.var:spouse_2_var } + } + save_scope_as = avenging_family + } + } + random = { + chance = 50 + modifier = { + add = 25 + OR = { + has_trait = vengeful + has_trait = wrathful + has_trait = callous + } + } + modifier = { + add = 25 + has_any_bad_relationship_with_root_trigger = yes + } + modifier = { + add = -25 + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = calm + } + } + modifier = { + add = -25 + has_any_good_relationship_with_root_trigger = yes + } + trigger_event = { + id = ep2_wedding.0957 + days = 14 + } + } + } + else_if = { #if they have an extended family member it's a a bit errr + limit = { + scope:activity.var:spouse_2_var = { + any_close_or_extended_family_member = { + is_available_ai_adult = yes + NOT = { is_close_family_of = scope:activity.var:spouse_2_var } + } + } + } + scope:activity.var:spouse_2_var = { + random_close_or_extended_family_member = { + limit = { + is_available_ai_adult = yes + NOT = { is_close_family_of = scope:activity.var:spouse_2_var } + } + save_scope_as = avenging_family + } + } + random = { + chance = 20 + modifier = { + add = 25 + OR = { + has_trait = vengeful + has_trait = wrathful + has_trait = callous + } + } + modifier = { + add = 25 + has_any_bad_relationship_with_root_trigger = yes + } + modifier = { + add = -25 + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = calm + } + } + modifier = { + add = -25 + has_any_good_relationship_with_root_trigger = yes + } + trigger_event = { + id = ep2_wedding.0957 + days = 14 + } + } + } + } + } + } +} + +ep2_wedding.0958 = { #variable clean up - done in an event so they persist for the guests + hidden = yes + immediate = { + remove_variable ?= bloody_wedding_murder + remove_variable ?= bloody_wedding_backed_down_var + remove_variable ?= bloody_murder_fail + } +} + +# CONCLUSION - BLOODY WEDDING - SURVIVOR +ep2_wedding.0956 = { + type = activity_event + title = ep2_wedding.0956.t + desc = ep2_wedding.0956.desc + theme = bloody_wedding_banquet + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + animation = schadenfreude + } + animation = sadness + } + lower_right_portrait = scope:host + cooldown = { years = 3 } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + } + + option = { + name = { + trigger = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + text = ep2_wedding.0956.a.good + } + name = { + trigger = { + NOT = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } } + } + text = ep2_wedding.0956.a + } + if = { + limit = { + OR = { + has_trait = torturer + has_trait = sadistic + has_trait = vengeful + has_trait = callous + } + } + show_as_tooltip = { #handed out to the host in their event + add_opinion = { + modifier = respect_opinion + target = scope:host + opinion = 20 + } + } + } + else = { + show_as_tooltip = { + add_opinion = { + modifier = suspicion_opinion + target = scope:host + opinion = -25 + } + } + } + add_prestige = medium_prestige_gain + create_character_memory = { + type = grand_wedding_massacre_guest + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + stress_impact = { + torturer = major_stress_impact_loss + sadistic = major_stress_impact_loss + callous = major_stress_impact_loss + vengeful = major_stress_impact_loss + paranoid = medium_stress_impact_gain + } + } +} + +### PLAYER ONLY EVENTS ### + +# MASSACRE - SOMEONE IS TRYING TO KILL YOU +ep2_wedding.0204 = { + type = activity_event + title = ep2_wedding.0204.t + desc = { + desc = ep2_wedding.0204.desc.intro + first_valid = { + triggered_desc = { + trigger = { + #you only get this event if the host chose family kill + this != scope:spouse_2 + } + desc = ep2_wedding.0204.desc.family.non_spouse + } + #we assume you're the spouse otherwise + triggered_desc = { + trigger = { + scope:host = { var:bloody_wedding_murder ?= flag:family } + } + desc = ep2_wedding.0204.desc.family + } + triggered_desc = { + trigger = { + scope:host = { var:bloody_wedding_murder ?= flag:solo } + } + desc = ep2_wedding.0204.desc.solo + } + } + } + theme = bloody_wedding_banquet + left_portrait = { + character = scope:mercenary_1 + animation = aggressive_axe + } + center_portrait = { + character = root + animation = fear + } + right_portrait = { + character = scope:mercenary_2 + animation = aggressive_sword + } + lower_center_portrait = { + trigger = { + root != scope:spouse_2 + NOT = { scope:host = { var:bloody_wedding_murder ?= flag:solo } } + } + character = scope:spouse_2 + } + lower_right_portrait = { + trigger = { + exists = scope:entourage_1 + root != scope:entourage_1 + NOT = { scope:host = { var:bloody_wedding_murder ?= flag:solo } } + } + character = scope:entourage_1 + } + lower_left_portrait = { + trigger = { + exists = scope:entourage_2 + root != scope:entourage_2 + NOT = { scope:host = { var:bloody_wedding_murder ?= flag:solo } } + } + character = scope:entourage_2 + } + cooldown = { years = 3 } + + immediate = { + play_music_cue = mx_cue_murder + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + save_scope_as = murder_victim + hidden_effect = { + create_character = { + template = mercenary + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = mercenary_1 + } + create_character = { + template = mercenary + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = mercenary_2 + } + } + } + + option = { #Skill duel to get out + name = ep2_wedding.0204.a + duel = { + skill = prowess + value = medium_skill_rating + # Die, unfortunately + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep2_wedding.0204.a.tt.failure + #no need for your own toast if you die + scope:host = { + send_interface_toast = { + title = ep2_wedding.0204.a.tt.success.host #these are flipped in loc + right_icon = scope:murder_victim + scope:murder_victim = { + death = { + death_reason = death_bloody_wedding + } + } + } + } + } + # Save yourself + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep2_wedding.0204.a.tt.success + send_interface_toast = { + title = ep2_wedding.0204.a.tt.success + left_icon = scope:murder_victim + } + scope:host = { + send_interface_toast = { + title = ep2_wedding.0204.a.tt.failure.host + right_icon = scope:murder_victim + if = { + limit = { root = scope:spouse_2 } + set_variable = bloody_murder_fail + } + } + } + if = { + limit = { root = scope:spouse_2 } + create_character_memory = { + type = grand_wedding_massacre_spouse_survivor + participants = { + host = scope:host + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + else = { + create_character_memory = { + type = grand_wedding_massacre_survivor + participants = { + host = scope:host + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + } + } + if = { + limit = { + scope:spouse_2 ?= { is_ai = yes } + } + custom_tooltip = { + text = ep2_wedding.0204.a.spouse_2_murder.tt + unknown_murder_effect = { + VICTIM = scope:spouse_2 + MURDERER = scope:host + REASON = death_bloody_wedding + } + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_0202_valid_family_member_trigger = yes + is_ai = yes + this != root + } + } + } + scope:activity = { + every_attending_character = { + limit = { + ep2_wedding_0202_valid_family_member_trigger = yes + is_ai = yes + this != root + } + custom = every_attending_relative_of_spouse_2 + death = { + death_reason = death_bloody_wedding + } + } + } + } + } +} + +# Bloody Wedding follow up event + +ep2_wedding.0957 = { + type = letter_event + opening = { + desc = ep2_wedding.0957.opening + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:avenging_family = { is_parent_of = scope:spouse_2 } } + desc = ep2_wedding.0957.desc.parent + } + desc = ep2_wedding.0957.desc + } + } + sender = scope:avenging_family + + option = { + name = ep2_wedding.0957.a + if = { + limit = { + #DLC check + has_bp1_dlc_trigger = yes + scope:avenging_family.house.house_head = { + valid_for_feud_events_with_target_trigger = { TARGET = root } + } + } + scope:avenging_family = { + house_feud_start_effect = { + # Feuding House Head + ACTOR = scope:avenging_family + # Target House Head + TARGET = root + # Feud Reason + REASON = bloody_wedding + # House Member attacker if relevant, otherwise same as ACTOR + ATTACKER = scope:avenging_family + # House Member victim if relevant, otherwise same as TARGET + VICTIM = scope:spouse_2 + } + } + } + scope:spouse_2 = { + every_close_family_member = { + custom = ep2_wedding.0957.a.tt + limit = { + is_close_family_or_spouse_of_root_trigger = no + this != scope:avenging_family + } + add_opinion = { + target = root + modifier = bloody_wedding_family_opinion + } + } + } + add_prestige = minor_prestige_loss + } +} diff --git a/events/dlc/ep2/wedding_events/ep2_wedding_events.txt b/events/dlc/ep2/wedding_events/ep2_wedding_events.txt new file mode 100644 index 00000000..25f43574 --- /dev/null +++ b/events/dlc/ep2/wedding_events/ep2_wedding_events.txt @@ -0,0 +1,23480 @@ +namespace = ep2_wedding + +############################ +## Wedding Events - Maintenance +## 0001-0999 +## by Claudia Baldassi +############################ +## Wedding Events +## +## by Claudia Baldassi, Veronica Pazos, Luke Bean +# +## Ceremony Events +# ep2_wedding.1000 - Host: The other party arrives early and criticizes your chosen options +# ep2_wedding.1010 - Host: You have an occasion to kickstart your Diplomacy/Seduce targeting efforts +# ep2_wedding.1080 - Matchmaking Intent: Lay the ground for the matchmaking +# ep2_wedding.1100 - Northern wedding: the bride goes to a bathhouse with the married women of her family: removal of clothes and kransen (golden circlet) +# ep2_wedding.1020 - Spouse: The spouses fall in love at first sight +# ep2_wedding.1030 - A good or bad omen happens: how do you react? +# ep2_wedding.1120 - Children of the spouses from a previous partner make a fuss +# ep2_wedding.1130 - A bad secret about one of the spouses comes up +# ep2_wedding.1140 - Host: A spouse has an embarrassing misstep, how do you recover? +# ep2_wedding.1150 - Seduction Intent: target scouting +# ep2_wedding.1160 - Some pesants are at the gate of the festivity - what do you do? +# ep2_wedding.1170 - A spouse has arrived with a whole parade. Interact with it +# ep2_wedding.1180 - Your spouse doesn't really like you... +# ep2_wedding.1190 - Religious guest complains about lavishness, luxury, wastes, and unchaste mingling +# ep2_wedding.1200 - Proud parent watches everything go well and brags with intent target/friend/rival/neighbor +# ep2_wedding.1210 - Political talk with a fellow ruler +# ep2_wedding.1220 - In-laws are bullies (or other close relatives) +# ep2_wedding.4000 - Non-spouse: Matchmaking Intent - What a nice wedding, maybe you should follow? +# +## Banquet Events +# ep2_wedding.1040 - You make a new friend +# ep2_wedding.1050 - Someone catches fire from the torches +# ep2_wedding.1070 - Showing off exotic animals can go very well or very wrong +# ep2_wedding.1090 - Matchmaking Intent: push a couple together +# ep2_wedding.1310 - A Friend Is Monopolizing Your Attention +# ep2_wedding.1320 - A rival seeks forgiveness +# ep2_wedding.2000-2001 - Diplomatic Intent: You find information about your target by talking to a friend of theirs +# ep2_wedding.2010-2011 - Host: Paint an animal white and pretend it's a legendary guest +# +## Wedding Night Events +# ep2_wedding.1060 - Spouse: Inspired by Matilda of Tuscany's second wedding: a younger/meeker husband is too intimidated +# ep2_wedding.1065 - Spouse: Inverted event: it's you who have problems - spouse's reaction +# ep2_wedding.1110 - Non-spouses: someone gets extremely drunk/doesn't want to leave +# ep2_wedding.1111 - Non-spouses: you get extremely drunk/don't want to leave +# ep2_wedding.1300 - Spouse: a spouse has insecurities +# ep2_wedding.1330 - Spouse: We were lovers before the wedding +# ep2_wedding.3000 - Spouse: Both spouses are shy/nervous +# ep2_wedding.3010 - Spouse: Spouse with a secret has a breakdown and confesses +# ep2_wedding.3020 - Spouse: You find out that your spouse fancies the other gender +# ep2_wedding.3030 - Spouse: Spouse gives you a memento to symbolize your love +# ep2_wedding.3040 - Spouse: The bed catches fire while you're at it +# ep2_wedding.3050 - Non-spouses: Murder Intent - try to kill your target with a chandelier +# ep2_wedding.3060 - Spouse: Murder Intent - try to kill your spouse while you're at it + +# BETROTHAL INVALIDATED + +# The Grand Wedding wasn't organized in the set amount of time + +ep2_wedding.0001 = { + type = character_event + title = ep2_wedding.0001.t + desc = { + desc = ep2_wedding.0001.desc + first_valid = { + triggered_desc = { + trigger = { + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + desc = ep2_wedding.0001.desc_betrothed + } + desc = ep2_wedding.0001.desc_self + } + } + theme = marriage + left_portrait = { + character = root + animation = disapproval + } + lower_right_portrait = scope:spouse_1 + lower_center_portrait = scope:spouse_2 + + trigger = { + var:promised_grand_wedding_marriage_countdown ?= { + is_alive = yes + is_available_allow_travelling = yes + age >= 19 + save_temporary_scope_as = spouse_1 + betrothed = { + is_alive = yes + is_available_allow_travelling = yes + age >= 19 + can_marry_character_trigger = { CHARACTER = scope:spouse_1 } + } + } + NOT = { + involved_activity ?= { + has_activity_type = activity_wedding + activity_host = root + } + } + } + + # This event shouldn't trigger unless the spouses have been adult and marriable for at least 3 years in any case, but to prevent edge cases, we check that they are adult, and if they are not or have not been for at least 3 years, we try again one year later + on_trigger_fail = { + if = { + limit = { + # you are not in this GW + NOT = { + involved_activity ?= { + has_activity_type = activity_wedding + activity_host = root + } + } + } + var:promised_grand_wedding_marriage_countdown ?= { + save_scope_as = spouse_1 + betrothed ?= { save_scope_as = spouse_2 } + } + if = { + limit = { + exists = scope:spouse_1 + exists = scope:spouse_2 + } + if = { + limit = { + # no longer valid marriage, e.g. devoted + scope:spouse_1 ?= { + NOT = { + can_marry_character_trigger = { CHARACTER = scope:spouse_2 } + } + } + } + # TODO informing event + clean_grand_wedding_betrothal_variables = yes + } + else_if = { + limit = { + scope:spouse_1 ?= { + OR = { + age < 19 + scope:spouse_2.age < 19 + # grace period for illness + AND = { + is_available_allow_travelling = no + age < 25 + } + scope:spouse_2 = { + is_available_allow_travelling = no + age < 25 + } + } + } + } + trigger_event = { + id = ep2_wedding.0001 + days = 365 + } + set_variable = { + name = promised_grand_wedding_marriage_countdown + value = scope:spouse_1 + years = grand_wedding_timeout + } + } + # both adult, but can't attend for a reallly long time + else_if = { + limit = { + scope:spouse_1 ?= { + age >= 25 + scope:spouse_2.age >= 25 + OR = { + is_available_allow_travelling = no + scope:spouse_2 = { + is_available_allow_travelling = no + } + } + } + } + # TODO: add an event + clean_grand_wedding_betrothal_variables = yes + } + else_if = { + limit = { + has_variable = promised_grand_wedding_marriage_countdown + } + clean_grand_wedding_betrothal_variables = yes + } + } + } + } + + immediate = { + var:promised_grand_wedding_marriage_countdown = { + save_scope_as = spouse_1 + } + scope:spouse_1.betrothed = { + save_scope_as = spouse_2 + } + } + + option = { + name = ep2_wedding.0001.a + break_grand_wedding_betrothal_effect = yes + } +} + +# A betrothed died before organizing the activity - Host + +ep2_wedding.0002 = { + type = character_event + title = ep2_wedding.0002.t + desc = ep2_wedding.0002.desc + theme = marriage + left_portrait = { + character = root + animation = grief + } + lower_right_portrait = scope:dead_spouse + lower_center_portrait = scope:alive_spouse + + immediate = { + + } + + option = { + name = ep2_wedding.0002.a + clean_grand_wedding_betrothal_variables = yes + } +} + +# Your betrothed died before organizing the activity - Other Betrothed (also if the betrothed was the host) + +ep2_wedding.0003 = { + type = character_event + title = ep2_wedding.0002.t + desc = ep2_wedding.0003.desc + theme = marriage + left_portrait = { + character = root + animation = grief + } + lower_right_portrait = scope:dead_spouse + + option = { + name = ep2_wedding.0003.a + remove_variable = promised_grand_wedding_by + if = { + limit = { + has_variable = promised_grand_wedding_marriage_countdown + } + remove_variable = promised_grand_wedding_marriage_countdown + } + } +} + +# ON START - CEREMONY + +ep2_wedding.0100 = { + type = activity_event + title = ep2_wedding.0100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + root = scope:host + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + desc = { + desc = ep2_wedding.0100.desc_host + desc = ep2_wedding.0100.desc_host_outro + } + } + triggered_desc = { + trigger = { + root = scope:host + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + desc = ep2_wedding.0100.desc_host_spouse + } + triggered_desc = { + trigger = { + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + desc = ep2_wedding.0100.desc_spouse + } + desc = ep2_wedding.0100.desc_guest + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + is_pregnant = yes + } + desc = ep2_wedding.0100.desc_root_pregnant + } + triggered_desc = { + trigger = { + OR = { + AND = { + scope:spouse_1 = { is_pregnant = yes } + root != scope:spouse_1 + } + AND = { + scope:spouse_2 = { is_pregnant = yes } + root != scope:spouse_2 + } + } + } + desc = ep2_wedding.0100.desc_spouse_pregnant + } + } + theme = wedding_ceremony_activity + left_portrait = { + trigger = { + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + character = root + animation = happiness + } + center_portrait = { + character = scope:spouse_1_portrait + camera = camera_event_left_wedding + triggered_animation = { + trigger = { + NOT = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } } + } + animation = wedding_bride_left + } + animation = disapproval + } + right_portrait = { + character = scope:spouse_2_portrait + camera = camera_event_right_wedding + triggered_animation = { + trigger = { + NOT = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_1 } } + } + animation = wedding_groom_right + } + animation = dismissal + } + + immediate = { + scope:host = { save_scope_as = host } + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + if = { + limit = { + root = scope:spouse_1 + } + scope:spouse_2 = { save_scope_as = my_spouse } + } + else_if = { + limit = { + root = scope:spouse_2 + } + scope:spouse_1 = { save_scope_as = my_spouse } + } + if = { + limit = { + scope:activity.special_guest:spouse_1 = { + sex_opposite_of = scope:activity.special_guest:spouse_2 + is_male = yes + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_2_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_1_portrait + } + } + else = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2_portrait + } + } + } + + option = { + name = ep2_wedding.0100.a + } +} + +# ON END - CEREMONY + +# For the host (not spouse) and guests +ep2_wedding.0150 = { + type = activity_event + title = ep2_wedding.0150.t + desc = ep2_wedding.0150.desc + theme = wedding_ceremony_activity + left_portrait = { + character = scope:spouse_1_portrait + animation = wedding_bride_left + camera = camera_event_left_wedding + } + center_portrait = { + character = scope:officiant + animation = wedding_priest + } + right_portrait = { + character = scope:spouse_2_portrait + animation = wedding_groom_right + camera = camera_event_right_wedding + } + + trigger = { + exists = scope:activity.special_guest:spouse_1 + exists = scope:activity.special_guest:spouse_2 + NOR = { + scope:activity.special_guest:spouse_1 = this + scope:activity.special_guest:spouse_2 = this + } + } + + immediate = { + if = { + limit = { + location.culture = { has_graphical_india_culture_group_trigger = yes } + } + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_india" + } + else_if = { + limit = { + OR = { + location.culture = { has_graphical_mena_culture_group_trigger = yes } + location.culture = { has_graphical_steppe_culture_group_trigger = yes } + location.culture = { has_graphical_african_culture_group_trigger = yes } + } + } + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_mena" + } + else = { + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_west" + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + check_officiant_effect = yes + scope:activity.var:officiant ?= { save_scope_as = officiant } + scope:spouse_1 = { + show_as_tooltip = { + marry = scope:spouse_2 + } + } + if = { + limit = { + scope:activity.special_guest:spouse_1 = { + sex_opposite_of = scope:activity.special_guest:spouse_2 + is_male = yes + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_2_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_1_portrait + } + } + else = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2_portrait + } + } + base_legitimacy_intent_reward = yes + } + + option = { + name = ep2_wedding.0150.a + } +} + +# For the spouses +ep2_wedding.0151 = { + type = activity_event + title = ep2_wedding.0150.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + is_bloody_wedding = yes + } + desc = ep2_wedding.0151.desc.murder + } + random_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + has_trait = diplomat + has_trait = administrator + has_trait = ambitious + } + } + desc = ep2_wedding.0151.desc_diplo + } + triggered_desc = { + trigger = { + OR = { + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + has_trait = scholar + has_trait = theologian + has_trait = zealous + has_character_modifier = bp1_superstition_modifier + } + } + desc = ep2_wedding.0151.desc_religious + } + triggered_desc = { + trigger = { + OR = { + has_trait = lifestyle_reveler + has_trait = gluttonous + has_trait = gregarious + has_trait = drunkard + has_trait = hashishiyah + } + } + desc = ep2_wedding.0151.desc_party + } + triggered_desc = { + trigger = { + OR = { + has_trait = seducer + has_trait = lustful + has_trait = rakish + has_trait = deviant + has_trait = adulterer + has_trait = fornicator + } + } + desc = ep2_wedding.0151.desc_seducer + } + triggered_desc = { + trigger = { + OR = { + has_trait = chaste + has_trait = humble + has_trait = shy + has_trait = reclusive + } + } + desc = ep2_wedding.0151.desc_shy + } + triggered_desc = { + trigger = { + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = callous + has_trait = irritable + has_trait = impatient + } + } + desc = ep2_wedding.0151.desc_arrogant + } + triggered_desc = { + trigger = { + OR = { + has_trait = paranoid + has_trait = craven + } + } + desc = ep2_wedding.0151.desc_paranoid + } + triggered_desc = { + trigger = { + OR = { + has_trait = maimed + has_trait = one_eyed + has_trait = one_legged + has_trait = disfigured + has_trait = scarred + has_trait = blind + has_trait = beauty_bad + has_trait = physique_bad + has_trait = clubfooted + has_trait = hunchbacked + has_trait = weak + has_trait = scaly + has_trait = wheezing + has_trait = bleeder + } + } + desc = ep2_wedding.0151.desc_appearance + } + desc = ep2_wedding.0151.desc + } + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = scope:spouse_1_portrait + animation = wedding_bride_left + camera = camera_event_left_wedding + } + center_portrait = { + character = scope:officiant + animation = wedding_priest + } + right_portrait = { + character = scope:spouse_2_portrait + animation = wedding_groom_right + camera = camera_event_right_wedding + } + + trigger = { + exists = scope:activity.special_guest:spouse_1 + exists = scope:activity.special_guest:spouse_2 + root = scope:activity.special_guest:spouse_1 + } + + immediate = { + if = { + limit = { + location.culture = { has_graphical_india_culture_group_trigger = yes } + } + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_india" + } + else_if = { + limit = { + OR = { + location.culture = { has_graphical_mena_culture_group_trigger = yes } + location.culture = { has_graphical_steppe_culture_group_trigger = yes } + location.culture = { has_graphical_african_culture_group_trigger = yes } + } + } + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_mena" + } + else = { + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_west" + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + if = { + limit = { + scope:activity.special_guest:spouse_1 = { + sex_opposite_of = scope:activity.special_guest:spouse_2 + is_male = yes + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_2_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_1_portrait + } + } + else = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1_portrait + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2_portrait + } + } + } + + option = { + name = ep2_wedding.0151.a + scope:spouse_1 = { + marry = scope:spouse_2 + } + if = { + limit = { scope:officiant ?= scope:spouse_1.faith.religious_head } + scope:spouse_1 = { + add_piety = major_piety_gain + } + } + else_if = { + limit = { scope:officiant.involved_activity ?= scope:activity } + scope:spouse_1 = { + add_piety = medium_piety_gain + } + } + else = { + scope:spouse_1 = { + add_piety = minor_piety_gain + } + } + if = { + limit = { scope:officiant ?= scope:spouse_2.faith.religious_head } + scope:spouse_2 = { + add_piety = major_piety_gain + } + } + else_if = { + limit = { scope:officiant.involved_activity ?= scope:activity } + scope:spouse_2 = { + add_piety = medium_piety_gain + } + } + else = { + scope:spouse_2 = { + add_piety = minor_piety_gain + } + } + if = { + limit = { + root = scope:host + } + scope:activity.activity_location.county = { + add_county_modifier = { + modifier = ruler_married_here_county_modifier + years = 10 + } + } + } + scope:spouse_1.dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_gain } + if = { + limit = { + NOT = { scope:spouse_2.dynasty ?= scope:spouse_1.dynasty } + } + scope:spouse_2.dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_gain } + } + if = { + limit = { + this = scope:spouse_1 + } + create_character_memory = { + type = grand_wedding_got_married + participants = { + spouse = scope:spouse_2 + } + } + } + else = { + create_character_memory = { + type = grand_wedding_got_married + participants = { + spouse = scope:spouse_1 + } + } + } + scope:host = { + clean_grand_wedding_betrothal_variables = yes + } + # The marriage should not be consummated before the Wedding Night! + hidden_effect = { + scope:spouse_1 = { + add_character_modifier = { modifier = wedding_fertility_delay_modifier } + } + scope:spouse_2 = { + add_character_modifier = { modifier = wedding_fertility_delay_modifier } + } + } + # Progress to next phase + hidden_effect = { + scope:activity = { progress_activity_phase_after = { days = 1 } } + } + } + + option = { + name = ep2_wedding.0151.b + trigger = { + is_ai = no + } + custom_tooltip = ep2_wedding.0151.b.tt + scope:activity = { + set_variable = wedding_invalidated_said_no + } + add_character_flag = grand_wedding_said_no + ai_chance = { + base = 0 + } + } +} + +scripted_effect ep2_wedding_cleanup_jitter_modifier_effect = { + if = { + limit = { has_character_modifier = wedding_confident_groom } + remove_character_modifier = wedding_confident_groom + } + if = { + limit = { has_character_modifier = wedding_confident_bride } + remove_character_modifier = wedding_confident_bride + } + if = { + limit = { has_character_modifier = wedding_jitters } + remove_character_modifier = wedding_jitters + } +} + +# I DON'T: the consequences +ep2_wedding.0152 = { + type = character_event + title = ep2_wedding.0152.t + desc = ep2_wedding.0152.desc + theme = wedding_ceremony_activity + + left_portrait = { + character = root + animation = wedding_objection_start + } + right_portrait = { + character = scope:spouse_2 + animation = shock + } + lower_right_portrait = scope:scorned_matchmaker + + immediate = { + scope:spouse_2.matchmaker = { + if = { + limit = { + this != scope:spouse_2 + } + save_scope_as = scorned_matchmaker + } + } + scope:previous_host = { + # the betrothal is broken: hand out the consequences + break_grand_wedding_betrothal_effect = yes + + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9000.tt + add_gold = var:gwedding_gold_recoup_value + } + } + create_character_memory = { + type = grand_wedding_refused_to_marry + participants = { + spouse = scope:spouse_2 + } + } + ep2_wedding_cleanup_jitter_modifier_effect = yes + scope:spouse_2 = { + ep2_wedding_cleanup_jitter_modifier_effect = yes + } + } + + option = { + name = ep2_wedding.0152.a + } + + after = { + remove_character_flag = grand_wedding_said_no + scope:previous_host = { remove_variable = gwedding_gold_recoup_value } + } +} + + +# ON START - BANQUET + +ep2_wedding.0200 = { + type = activity_event + title = ep2_wedding.0200.t + desc = { + first_valid = { + triggered_desc = { + trigger = { #spouse and bloody wedding + this = scope:host + is_bloody_wedding = yes + root = scope:spouse_1 + } + desc = ep2_wedding.0200.desc.murder_spouse + } + triggered_desc = { #bloody wedding + trigger = { + this = scope:host + is_bloody_wedding = yes + root != scope:spouse_1 + } + desc = ep2_wedding.0200.desc.murder + } + triggered_desc = { #spouses + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + desc = ep2_wedding.0200.desc_spouse_dislike + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + desc = ep2_wedding.0200.desc_spouse_like + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + OR = { + has_trait = lifestyle_reveler + has_trait = gluttonous + has_trait = gregarious + has_trait = drunkard + has_trait = hashishiyah + } + } + desc = ep2_wedding.0200.desc_spouse_party + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + OR = { + has_trait = chaste + has_trait = humble + has_trait = shy + has_trait = reclusive + } + } + desc = ep2_wedding.0200.desc_spouse_shy + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = callous + has_trait = irritable + has_trait = impatient + } + } + desc = ep2_wedding.0200.desc_spouse_arrogant + } + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + desc = ep2_wedding.0200.desc_spouse_fallback + } + triggered_desc = { #host + trigger = { + root = scope:host + } + desc = ep2_wedding.0200.desc_host + } + desc = ep2_wedding.0200.desc #guest + } + } + theme = wedding_banquet_activity + left_portrait = { + trigger = { + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + character = root + animation = toast_goblet + } + center_portrait = { + character = scope:spouse_1 + camera = camera_event_left_wedding + triggered_animation = { + trigger = { + scope:spouse_1 = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + } + animation = disapproval + } + animation = wedding_bride_left + } + right_portrait = { + character = scope:spouse_2 + camera = camera_event_right_wedding + triggered_animation = { + trigger = { + scope:spouse_2 = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_1 } + } + } + animation = disapproval + } + animation = wedding_groom_right + } + + trigger = { + exists = scope:activity + } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.var:spouse_2_var = { save_scope_as = spouse_2 } + if = { + limit = { + root = scope:spouse_1 + } + scope:spouse_2 = { + save_scope_as = my_spouse + } + } + else_if = { + limit = { + root = scope:spouse_2 + } + scope:spouse_1 = { + save_scope_as = my_spouse + } + } + } + + option = { + name = { + trigger = { + is_bloody_wedding = yes + } + text = ep2_wedding.0200.a.murder + } + name = { + trigger = { + is_bloody_wedding = no + } + text = ep2_wedding.0200.a + } + if = { + limit = { + OR = { + root = scope:host + root = scope:spouse_1 + root = scope:spouse_2 + } + } + add_prestige = minor_prestige_gain + } + } +} + +# ON START - WEDDING NIGHT + +ep2_wedding.0300 = { + type = activity_event + title = ep2_wedding.0300.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + is_bloody_wedding = yes + root = scope:spouse_1 + } + desc = ep2_wedding.0300.desc.murder_spouse + } + triggered_desc = { + trigger = { + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + desc = ep2_wedding.0300.desc_spouse + } + triggered_desc = { + trigger = { + root = scope:host + } + desc = ep2_wedding.0300.desc + } + desc = ep2_wedding.0300.desc_guest + } + } + theme = wedding_night_activity + left_portrait = { + trigger = { + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + character = root + animation = happiness + } + center_portrait = { + character = scope:spouse_1 + triggered_animation = { + trigger = { + scope:spouse_1 = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_2 } + } + } + animation = disapproval + } + animation = reception_groom_left + } + right_portrait = { + character = scope:spouse_2 + triggered_animation = { + trigger = { + scope:spouse_2 = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:spouse_1 } + } + } + animation = dismissal + } + animation = reception_bride_right + } + + immediate = { + scope:activity.special_guest:spouse_1 ?= { + save_scope_as = spouse_1 + } + scope:activity.special_guest:spouse_2 ?= { + save_scope_as = spouse_2 + } + if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + scope:activity.special_guest:spouse_2 = { save_scope_as = other_spouse } + } + else_if = { + limit = { + root = scope:activity.special_guest:spouse_2 + } + scope:activity.special_guest:spouse_1 = { save_scope_as = other_spouse } + } + hidden_effect = { + scope:spouse_1 ?= { + if = { + limit = { + has_character_modifier = wedding_fertility_delay_modifier + } + remove_character_modifier = wedding_fertility_delay_modifier + } + } + scope:spouse_2 ?= { + if = { + limit = { + has_character_modifier = wedding_fertility_delay_modifier + } + remove_character_modifier = wedding_fertility_delay_modifier + } + } + } + } + + option = { + name = ep2_wedding.0300.a + } +} + +# INVALIDATED + +# For the host (not spouse) and the guests - one of the spouses died + +ep2_wedding.0900 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0900.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = sadness + } + right_portrait = { + character = scope:sad_spouse + animation = grief + } + + immediate = { + if = { + limit = { + scope:spouse_1 ?= { is_alive = yes } + } + scope:spouse_1 = { save_scope_as = sad_spouse } + scope:spouse_2 = { save_scope_as = dead_spouse } + } + else = { + scope:spouse_2 = { save_scope_as = sad_spouse } + scope:spouse_1 = { save_scope_as = dead_spouse } + } + if = { + limit = { + scope:sad_spouse = { has_character_modifier = wedding_fertility_delay_modifier } + } + scope:sad_spouse = { remove_character_modifier = wedding_fertility_delay_modifier } + } + if = { + limit = { + root = scope:previous_host + } + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9000.tt + add_gold = var:gwedding_gold_recoup_value + } + } + } + + option = { + name = ep2_wedding.0900.a + } + + after = { + if = { + limit = { + has_variable = gwedding_gold_recoup_value + } + remove_variable = gwedding_gold_recoup_value + } + } +} + +# For the spouses - the other spouse died + +ep2_wedding.0910 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0910.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = grief + } + + immediate = { + if = { + limit = { + root = scope:previous_host + } + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9000.tt + add_gold = var:gwedding_gold_recoup_value + } + } + create_character_memory = { + type = grand_wedding_death_at_wedding + participants = { + dead_spouse = scope:dead_spouse + } + } + error_log = "Invalidating [activity.GetName] of [activity.GetOwner.GetLogName] because a spouse is dead" + } + + option = { + name = ep2_wedding.0910.a + } + + after = { + if = { + limit = { + has_variable = gwedding_gold_recoup_value + } + remove_variable = gwedding_gold_recoup_value + } + remove_variable = promised_grand_wedding_by + if = { + limit = { + has_character_modifier = wedding_fertility_delay_modifier + } + remove_character_modifier = wedding_fertility_delay_modifier + } + } +} + +# If the host who is a spouse dies, notify the heir +ep2_wedding.0915 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0915.desc + theme = family + left_portrait = { + character = root + animation = sadness + } + lower_center_portrait = scope:previous_host + + immediate = { + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9015.tt + add_gold = scope:previous_host.var:gwedding_gold_recoup_value + } + } + + option = { + name = ep2_wedding.0915.a + } + + after = { + if = { + limit = { + has_variable = gwedding_gold_recoup_value + } + remove_variable = gwedding_gold_recoup_value + } + } +} + +# A spouse has been imprisoned: for the prisoner +ep2_wedding.0920 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0920.desc + theme = prison + left_portrait = { + character = root + triggered_animation = { + trigger = { is_in_prison_type = house_arrest } + animation = prisonhouse + } + triggered_animation = { + trigger = { is_in_prison_type = dungeon } + animation = prisondungeon + } + } + + immediate = { + if = { + limit = { + root = scope:previous_host + } + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9000.tt + add_gold = var:gwedding_gold_recoup_value + } + } + create_character_memory = { + type = grand_wedding_missed_wedding_in_prison + participants = { + spouse = scope:free_spouse + } + } + } + + option = { + name = ep2_wedding.0920.a + } + + after = { + if = { + limit = { + has_variable = gwedding_gold_recoup_value + } + remove_variable = gwedding_gold_recoup_value + } + if = { + limit = { + has_character_modifier = wedding_fertility_delay_modifier + } + remove_character_modifier = wedding_fertility_delay_modifier + } + } +} + +# A spouse has been imprisoned: for everyone else +ep2_wedding.0921 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0921.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = sadness + } + lower_center_portrait = scope:prisoner_spouse + + immediate = { + if = { + limit = { + root = scope:previous_host + } + # The wedding is invalidated: get a refund + custom_tooltip = { + text = ep2_wedding.9000.tt + add_gold = var:gwedding_gold_recoup_value + } + } + if = { + limit = { + root = scope:free_spouse + } + create_character_memory = { + type = grand_wedding_canceled_in_prison + participants = { + spouse = scope:prisoner_spouse + } + } + } + } + + option = { + name = ep2_wedding.0921.a + } + + after = { + if = { + limit = { + has_variable = gwedding_gold_recoup_value + } + remove_variable = gwedding_gold_recoup_value + } + if = { + limit = { + has_character_modifier = wedding_fertility_delay_modifier + } + remove_character_modifier = wedding_fertility_delay_modifier + } + } +} + +# CONCLUSION - HOST + +ep2_wedding.0950 = { + type = activity_event + title = ep2_wedding.0950.t + desc = ep2_wedding.0950.desc + theme = wedding_ceremony_activity + left_portrait = { + trigger = { + NOR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + character = root + animation = happiness + } + center_portrait = { + character = scope:spouse_1 + animation = wedding_bride_left + camera = camera_event_left_wedding + } + right_portrait = { + character = scope:spouse_2 + animation = wedding_groom_right + camera = camera_event_right_wedding + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_end" + play_music_cue = weddingend_cue + show_as_tooltip = { + scope:spouse_1 = { marry = scope:spouse_2 } + tooltip_disburse_wedding_host_activity_rewards = yes + } + save_scope_as = root_scope + # if the host is also a spouse, we disburse the special host-spouse rewards to the host, and the regular spouse rewards to the other spouse + if = { + limit = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + show_as_tooltip = { disburse_wedding_spouse_host_activity_rewards = yes } + } + else = { #the spouses already had a memory created during the ceremony + create_character_memory = { + type = grand_wedding_completed_host + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + } + + option = { + name = ep2_wedding.0950.a + } +} + +# CONCLUSION - SPOUSES + +ep2_wedding.0960 = { + type = activity_event + title = ep2_wedding.0950.t + desc = ep2_wedding.0960.desc + theme = wedding_ceremony_activity + left_portrait = { + character = scope:spouse_1 + animation = wedding_bride_left + camera = camera_event_left_wedding + } + right_portrait = { + character = scope:spouse_2 + animation = wedding_groom_right + camera = camera_event_right_wedding + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_end" + play_music_cue = weddingend_cue + save_scope_as = root_scope + show_as_tooltip = { + scope:spouse_1 = { marry = scope:spouse_2 } + disburse_wedding_spouse_activity_rewards = yes + } + if = { + limit = { + root = scope:spouse_1 + } + scope:spouse_2 = { save_scope_as = other_spouse } + } + else_if = { + limit = { + root = scope:spouse_2 + } + scope:spouse_1 = { save_scope_as = other_spouse } + } + } + + option = { + name = ep2_wedding.0950.a + } +} + +# CONCLUSION - GUESTS + +ep2_wedding.0970 = { + type = activity_event + title = ep2_wedding.0950.t + desc = ep2_wedding.0970.desc + theme = wedding_ceremony_activity + left_portrait = { + character = scope:spouse_1 + animation = wedding_bride_left + camera = camera_event_left_wedding + } + right_portrait = { + character = scope:spouse_2 + animation = wedding_groom_right + camera = camera_event_right_wedding + } + + immediate = { + play_sound_effect = "event:/DLC/EP2/SFX/Stingers/Grand_Activities/ep2_mx_sting_wedding_end" + play_music_cue = weddingend_cue + save_scope_as = root_scope + show_as_tooltip = { + scope:spouse_1 = { marry = scope:spouse_2 } + tooltip_disburse_wedding_guest_activity_rewards = yes + } + create_character_memory = { + type = grand_wedding_completed_guest + participants = { + spouse_1 = scope:spouse_1 + spouse_2 = scope:spouse_2 + } + } + } + + option = { + name = ep2_wedding.0970.a + } +} + +# INVALIDATION - SPOUSE DISAPPEARS +ep2_wedding.0997 = { + type = character_event + title = ep2_wedding.0900.t + desc = { + desc = ep2_wedding.0997.desc_intro + first_valid = { + triggered_desc = { + trigger = { + OR = { + root = scope:spouse_1 + root = scope:spouse_2 + } + } + desc = ep2_wedding.0997.desc_spouse + } + desc = ep2_wedding.0997.desc_generic + } + } + + theme = realm + + left_portrait = { + character = root + animation = sadness + } + + option = { + name = ep2_wedding.0998.a + } +} + +# FALLBACK INVALIDATION +ep2_wedding.0998 = { + type = character_event + title = ep2_wedding.0900.t + desc = ep2_wedding.0998.desc + theme = realm + + left_portrait = { + character = root + animation = sadness + } + + immediate = { + # we should never get this far. If it happens, just get a free pass out of the Grand Wedding Promise since something has gone wrong + if = { + limit = { + exists = scope:spouse_1 + exists = scope:spouse_2 + } + show_as_tooltip = { + scope:spouse_1 = { + break_betrothal = scope:spouse_2 + } + } + } + } + + option = { + name = ep2_wedding.0998.a + } +} + +# INVALIDATION - HOST TIER TOO LOW +ep2_wedding.0999 = { + type = character_event + title = ep2_wedding.0999.t + desc = ep2_wedding.0999.desc + theme = realm + + left_portrait = { + character = scope:host + animation = grief + } + + immediate = { + } + + option = { + name = ep2_wedding.0999.a + } +} + +# CEREMONY EVENTS + +################################################## +# Artistic Differences +# by Claudia Baldassi +# ep2_wedding.1000 +################################################## + +# The other party arrives early and criticizes your chosen options. + +scripted_trigger ep2_wedding_1000_valid_relative_trigger = { + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + age >= 10 + location = root.location + NOT = { has_character_flag = busy_in_wgathering_event } +} + +ep2_wedding.1000 = { + type = activity_event + title = ep2_wedding.1000.t + desc = { + desc = ep2_wedding.1000.desc + random_valid = { + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + } + desc = ep2_wedding.1000.desc_servants + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + } + desc = ep2_wedding.1000.desc_dec + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + } + desc = ep2_wedding.1000.desc_dec_low + } + triggered_desc = { + trigger = { + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_good + } + } + } + desc = ep2_wedding.1000.desc_entertainment + } + desc = ep2_wedding.1000.desc_fallback + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = eyeroll + } + right_portrait = { + character = scope:1000_relative + animation = disapproval + } + + cooldown = { years = 5 } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity.special_guest:spouse_2 = { + any_close_family_member = { + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + has_trait = fickle + } + } + add = 1 + } + modifier = { + scope:activity.special_guest:spouse_2 = { + any_close_family_member = { + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + has_trait = arrogant + } + } + add = 3 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = 2 + } + modifier = { + scope:activity.special_guest:spouse_2 = { + any_close_family_member = { + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + root.intent_target ?= this + } + } + add = 3 + } + modifier = { + scope:activity.special_guest:spouse_2 ?= { + house_has_feud_relation_with_trigger = { TARGET = scope:activity.special_guest:spouse_1 } + } + add = 5 + } + } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:host = root + location = scope:activity.activity_location + scope:activity.special_guest:spouse_1 = root + + scope:activity.special_guest:spouse_2 = { + any_close_family_member = { + ep2_wedding_1000_valid_relative_trigger = yes + } + } + } + + immediate = { + add_character_flag = busy_in_wgathering_event + + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + + scope:spouse_2 = { + random_close_family_member = { + limit = { + ep2_wedding_1000_valid_relative_trigger = yes + root.intent_target ?= this + } + alternative_limit = { + ep2_wedding_1000_valid_relative_trigger = yes + } + save_scope_as = 1000_relative + add_character_flag = busy_in_wgathering_event + } + } + } + + # Option A: mediate + option = { + name = ep2_wedding.1000.a + duel = { + skill = diplomacy + target = scope:1000_relative + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1000.a.success + send_interface_toast = { + title = ep2_wedding.1000.a.success.tt + left_icon = root + right_icon = scope:1000_relative + scope:activity = { + add_activity_log_entry = { + key = wedding_artistic_mediate_log + tags = { good } + score = 20 + character = root + target = scope:1000_relative + + # Effect + root = { + reverse_add_opinion = { + target = scope:1000_relative + modifier = impressed_opinion + opinion = 20 + } + add_prestige = minor_prestige_gain + stress_impact = { + base = minor_stress_impact_loss + impatient = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + } + } + } + } + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1000.a.failure + send_interface_toast = { + title = ep2_wedding.1000.a.failure.tt + left_icon = root + right_icon = scope:1000_relative + scope:activity = { + add_activity_log_entry = { + key = wedding_artistic_mediate_fail_log + tags = { bad } + score = 20 + character = root + target = scope:1000_relative + } + root = { + stress_impact = { + base = minor_stress_impact_gain + impatient = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + add = -50 + has_trait = impatient + } + modifier = { + add = -50 + has_trait = arrogant + } + } + } + + # Option B: insult + option = { + name = ep2_wedding.1000.b + scope:activity = { + add_activity_log_entry = { + key = wedding_artistic_insult_log + tags = { bad } + score = 20 + character = root + target = scope:1000_relative + + # Effect + root = { + reverse_add_opinion = { + target = scope:1000_relative + modifier = insult_opinion + opinion = -20 + } + add_dread = minor_dread_gain + } + } + } + + stress_impact = { + patient = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + add = -50 + has_trait = patient + } + modifier = { + add = -50 + has_trait = humble + } + } + } + + #Option C: I don't care + option = { + name = ep2_wedding.1000.c + trigger = { + has_activity_intent = reduce_stress_intent + } + reason = activity_intent + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 80 + modifier = { + has_trait = lazy + add = 100 + } + } + } + + after = { + remove_character_flag = busy_in_wgathering_event + scope:1000_relative = { remove_character_flag = busy_in_wgathering_event } + } +} + +################################################## +# A Magnificent Welcome +# by Claudia Baldassi +# ep2_wedding.1010 +################################################## + +# You have an occasion to kickstart your Diplomacy/Seduce targeting efforts + +ep2_wedding.1010 = { + type = activity_event + title = ep2_wedding.1010.t + desc = { + desc = ep2_wedding.1010.desc + first_valid = { + triggered_desc = { + trigger = { + has_activity_intent = diplomatic_intent + } + desc = ep2_wedding.1010.diplo + } + triggered_desc = { + trigger = { + has_activity_intent = woo_attendee_intent + } + desc = ep2_wedding.1010.seduce + } + triggered_desc = { + trigger = { + exists = scope:1010_match + } + desc = ep2_wedding.1010.match + } + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = happiness + } + center_portrait = { + trigger = { + exists = scope:1010_match + } + character = scope:1010_match + animation = boredom + } + right_portrait = { + character = scope:1010_target + animation = dismissal + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + + scope:host = root + intent_target.location = root.location + + intent_target = { + is_ai = yes + NOT = { has_character_flag = busy_in_wgathering_event } + } + } + + immediate = { + intent_target = { + save_scope_as = 1010_target + add_character_flag = busy_in_wgathering_event + } + if = { + limit = { + any_child = { + is_adult = no + is_betrothed = no + is_participant_in_activity = scope:activity + is_ai = yes + NOT = { has_character_flag = busy_in_wgathering_event } + } + } + random_child = { + limit = { + is_adult = no + is_betrothed = no + is_participant_in_activity = scope:activity + is_ai = yes + NOT = { has_character_flag = busy_in_wgathering_event } + } + save_scope_as = 1010_match + add_character_flag = busy_in_wgathering_event + } + } + add_character_flag = busy_in_wgathering_event + } + + #Option A: gardens + option = { + name = ep2_wedding.1010.a + random_list = { + # target is impressed + 60 = { + modifier = { + scope:activity.activity_location.county = { + development_level >= medium_development_level + } + add = 15 + } + modifier = { + has_trait = lifestyle_gardener + add = 25 + } + modifier = { + has_trait = lifestyle_herbalist + add = 25 + } + modifier = { + any_court_position_holder = { + type = court_gardener_court_position + } + add = 40 + } + modifier = { + scope:activity.activity_location = { + has_building_or_higher = orchards_01 + } + add = 20 + } + modifier = { + scope:activity.activity_location = { + has_building_or_higher = royal_garden_01 + } + add = 50 + } + desc = ep2_wedding.1010.a.success + send_interface_toast = { + title = ep2_wedding.1010.a.success.tt + left_icon = scope:1010_target + scope:activity = { + add_activity_log_entry = { + key = wedding_welcome_garden_log + tags = { good } + score = 20 + character = root + target = scope:1010_target + + # Effect + root = { + reverse_add_opinion = { + target = scope:1010_target + modifier = impressed_opinion + opinion = 20 + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + can_set_relation_lover_trigger = { CHARACTER = scope:1010_target } + } + progress_towards_lover_effect = { + REASON = lover_atmospheric_location + CHARACTER = scope:1010_target + OPINION = default_lover_opinion + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + lustful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + } + } + } + #target is not impressed + 40 = { + modifier = { + diplomacy < 10 + add = 10 + } + modifier = { + stewardship < 10 + add = 10 + } + modifier = { + scope:activity.activity_location.county = { + development_level <= bad_development_level + } + add = 30 + } + desc = ep2_wedding.1010.a.failure + send_interface_toast = { + title = ep2_wedding.1010.a.failure.tt + left_icon = scope:1010_target + scope:activity = { + add_activity_log_entry = { + key = wedding_welcome_garden_fail_log + tags = { bad } + score = 20 + character = root + target = scope:1010_target + + # Effect + root = { + reverse_add_opinion = { + target = scope:1010_target + modifier = bored_opinion + opinion = -20 + } + stress_impact = { + base = minor_stress_impact_gain + lustful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + } + } + } + ai_chance = { + base = 100 + modifier = { + scope:activity.activity_location.county = { + development_level >= medium_development_level + } + add = 15 + } + modifier = { + has_trait = lifestyle_gardener + add = 25 + } + modifier = { + has_trait = lifestyle_herbalist + add = 25 + } + modifier = { + any_court_position_holder = { + type = court_gardener_court_position + } + add = 40 + } + modifier = { + scope:activity.activity_location = { + has_building_or_higher = orchards_01 + } + add = 20 + } + modifier = { + scope:activity.activity_location = { + has_building_or_higher = royal_garden_01 + } + add = 50 + } + } + } + + #Option B: venue + option = { + name = ep2_wedding.1010.b + random_list = { + # target is impressed + 60 = { + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_food + option = wedding_food_good + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_good + } + } + add = 10 + } + desc = ep2_wedding.1010.b.success + send_interface_toast = { + title = ep2_wedding.1010.a.success.tt + left_icon = scope:1010_target + scope:activity = { + add_activity_log_entry = { + key = wedding_welcome_ceremony_log + tags = { good } + score = 20 + character = root + target = scope:1010_target + + # Effect + root = { + reverse_add_opinion = { + target = scope:1010_target + modifier = impressed_opinion + opinion = 20 + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + can_set_relation_lover_trigger = { CHARACTER = scope:1010_target } + } + progress_towards_lover_effect = { + REASON = lover_atmospheric_location + CHARACTER = scope:1010_target + OPINION = default_lover_opinion + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + lustful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + } + } + } + #target is not impressed + 40 = { + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_food + option = wedding_food_bad + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_bad + } + } + add = 10 + } + desc = ep2_wedding.1010.b.failure + send_interface_toast = { + title = ep2_wedding.1010.a.failure.tt + left_icon = scope:1010_target + scope:activity = { + add_activity_log_entry = { + key = wedding_welcome_ceremony_fail_log + tags = { bad } + score = 20 + character = root + target = scope:1010_target + + # Effect + root = { + reverse_add_opinion = { + target = scope:1010_target + modifier = bored_opinion + opinion = -20 + } + stress_impact = { + base = minor_stress_impact_gain + lustful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + } + } + } + ai_chance = { + base = 100 + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_food + option = wedding_food_good + } + } + add = 10 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_good + } + } + add = 10 + } + } + } + + #Option C: nevermind + option = { + name = ep2_wedding.1010.c + reverse_add_opinion = { + target = scope:1010_target + modifier = feeling_welcome_opinion + opinion = 5 + } + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 50 + } + } + } + after = { + remove_character_flag = busy_in_wgathering_event + scope:1010_target = { remove_character_flag = busy_in_wgathering_event } + if = { + limit = { + exists = scope:1010_match + } + scope:1010_match = { remove_character_flag = busy_in_wgathering_event } + } + } +} + +################################################## +# A Proper Match +# by Claudia Baldassi +# ep2_wedding.1080 +################################################## + +# Lay the ground for the matchmaking + +ep2_wedding.1080 = { + type = activity_event + title = ep2_wedding.1080.t + desc = { + desc = ep2_wedding.1080.desc + triggered_desc = { + trigger = { + exists = scope:matchmaking_2 + } + desc = ep2_wedding.1080.desc_2 + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:1080_target + animation = happiness + } + lower_left_portrait = scope:matchmaking_1 + lower_center_portrait = scope:matchmaking_2 + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + has_activity_intent = matchmaking_intent + + intent_target.location = root.location + location = scope:activity.activity_location + + intent_target = { + has_activity_state = passive + is_ai = yes + NOT = { has_character_flag = busy_in_wgathering_event } + } + + scope:activity = { + any_attending_character = { + is_ai = yes + location = root.location + has_activity_state = passive + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + intent_target = { save_scope_as = 1080_target } + scope:1080_target = { add_character_flag = busy_in_wgathering_event } + add_character_flag = busy_in_wgathering_event + scope:activity = { + random_attending_character = { + limit = { + is_ai = yes + location = root.location + has_activity_state = passive + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + save_scope_as = matchmaking_1 + add_character_flag = busy_in_wgathering_event + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + is_ai = yes + location = root.location + has_activity_state = passive + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + this = scope:matchmaking_1 + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + is_ai = yes + location = root.location + has_activity_state = passive + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + this = scope:matchmaking_1 + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + save_scope_as = matchmaking_2 + add_character_flag = busy_in_wgathering_event + } + } + } + } + + #Option A: Introduce to matchmaking_1 + option = { + name = ep2_wedding.1080.a + scope:1080_target = { + duel = { + skill = diplomacy + target = scope:matchmaking_1 + 60 = { # success - the matchmaking continues + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1080.a.success + root = { + send_interface_toast = { + title = ep2_wedding.1080.a.success.tt + left_icon = scope:1080_target + right_icon = scope:matchmaking_1 + scope:activity = { + add_activity_log_entry = { + key = wedding_propermatch_court_log + tags = { good } + score = 20 + character = scope:1080_target + target = scope:matchmaking_1 + + # Effect + scope:matchmaking_1 = { + add_opinion = { + target = scope:1080_target + modifier = impressed_opinion + opinion = 20 + } + } + } + } + } + } + scope:1080_target = { + set_variable = { + name = wedding_good_match + value = scope:matchmaking_1 + } + } + } + 40 = { # failure - you'll have to start again with someone else + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1080.a.failure + root = { + send_interface_toast = { + title = ep2_wedding.1080.a.failure.tt + left_icon = scope:1080_target + right_icon = scope:matchmaking_1 + scope:activity = { + add_activity_log_entry = { + key = wedding_propermatch_court_fail_log + tags = { bad } + score = 20 + character = scope:1080_target + target = scope:matchmaking_1 + } + } + } + } + scope:1080_target = { + set_variable = { + name = wedding_no_match + value = scope:matchmaking_1 + } + } + } + } + } + ai_chance = { + base = 200 + } + } + + #Option B: Introduce to matchmaking_2 + option = { + trigger = { + exists = scope:matchmaking_2 + } + name = ep2_wedding.1080.b + scope:1080_target = { + duel = { + skill = diplomacy + target = scope:matchmaking_2 + 50 = { # success - the matchmaking continues + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1080.b.success + root = { + send_interface_toast = { + title = ep2_wedding.1080.a.success.tt + left_icon = scope:1080_target + right_icon = scope:matchmaking_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_propermatch_court_log + tags = { good } + score = 20 + character = scope:1080_target + target = scope:matchmaking_2 + + # Effect + scope:matchmaking_2 = { + add_opinion = { + target = scope:1080_target + modifier = impressed_opinion + opinion = 20 + } + } + } + } + } + } + scope:1080_target = { + set_variable = { + name = wedding_good_match + value = scope:matchmaking_2 + } + } + } + 50 = { # failure - you'll have to start again with someone else + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1080.b.failure + root = { + send_interface_toast = { + title = ep2_wedding.1080.a.failure.tt + left_icon = scope:1080_target + right_icon = scope:matchmaking_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_propermatch_court_fail_log + tags = { bad } + score = 20 + character = scope:1080_target + target = scope:matchmaking_2 + } + } + } + } + scope:1080_target = { + set_variable = { + name = wedding_no_match + value = scope:matchmaking_2 + } + } + } + } + } + ai_chance = { + base = 200 + } + } + + #Option C: let's keep looking + option = { + name = ep2_wedding.1080.c + flavor = ep2_wedding.1080.c.tt + ai_chance = { + base = 100 + modifier = { + has_trait = fickle + add = 25 + } + } + } + after = { + remove_character_flag = busy_in_wgathering_event + scope:1080_target = { remove_character_flag = busy_in_wgathering_event } + scope:matchmaking_1 = { remove_character_flag = busy_in_wgathering_event } + if = { + limit = { exists = scope:matchmaking_2 } + scope:matchmaking_2 = { remove_character_flag = busy_in_wgathering_event } + } + } +} + +################################################## +# A Ritual Wash +# by Claudia Baldassi +# ep2_wedding.1100 +################################################## + +# Northern wedding: the bride goes to a bathhouse with the married women of her family: removal of clothes and kransen (golden circlet) + +ep2_wedding.1100 = { + type = activity_event + title = ep2_wedding.1100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + desc = ep2_wedding.1100.desc_bride + } + desc = ep2_wedding.1100.desc_relative + } + triggered_desc = { + trigger = { + exists = scope:guest_3 + } + desc = ep2_wedding.1100.desc_extra_guest + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = scope:bride + animation = personality_content + } + center_portrait = { + character = scope:guest_2 + animation = admiration + } + right_portrait = { + character = scope:guest_1 + animation = wedding_happy_cry + } + lower_center_portrait = scope:guest_3 + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { has_variable = has_had_event_1100 } + } + + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_ai = no + OR = { + AND = { + this = scope:activity.special_guest:spouse_1 + any_spouse = { + even_if_dead = yes + NOT = { exists = this } + } + any_former_spouse = { + even_if_dead = yes + NOT = { exists = this } + } + } + AND = { + this = scope:activity.special_guest:spouse_2 + any_spouse = { + even_if_dead = yes + NOT = { exists = this } + } + any_former_spouse = { + even_if_dead = yes + NOT = { exists = this } + } + } + AND = { + is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 + scope:activity.special_guest:spouse_1 = { is_female = yes } + is_married = yes + } + AND = { + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + scope:activity.special_guest:spouse_2 = { is_female = yes } + is_married = yes + } + } + trigger_if = { + limit = { + scope:activity.special_guest:spouse_1 = { + is_female = yes + } + } + scope:activity = { + any_attending_character = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 + is_married = yes + save_temporary_scope_as = guest_1 + } + } + scope:activity = { + any_attending_character = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 + is_married = yes + this != scope:guest_1 + } + } + } + trigger_else = { + scope:activity = { + any_attending_character = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + is_married = yes + is_ai = yes + save_temporary_scope_as = guest_1 + } + } + scope:activity = { + any_attending_character = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + is_married = yes + is_ai = yes + this != scope:guest_1 + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = reduce_stress_intent + add = 2 + } + modifier = { + is_ai = no + factor = 2 + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1100 + } + if = { + limit = { + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + save_scope_as = bride + } + else_if = { + limit = { + scope:activity.special_guest:spouse_1 = { is_female = yes } + } + scope:activity.special_guest:spouse_1 = { save_scope_as = bride } + root = { save_scope_as = guest_1 } + } + else = { + scope:activity.special_guest:spouse_2 = { save_scope_as = bride } + root = { save_scope_as = guest_1 } + } + scope:bride = { + add_character_flag = busy_in_wgathering_event + } + scope:activity = { + random_attending_character = { + limit = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:bride + is_married = yes + is_ai = yes + NOR = { + has_character_flag = busy_in_wgathering_event + this = scope:guest_1 + } + } + if = { + limit = { + exists = scope:guest_1 + } + save_scope_as = guest_2 + } + else = { + save_scope_as = guest_1 + } + } + random_attending_character = { + limit = { + culture = { has_cultural_pillar = heritage_north_germanic } + is_female = yes + is_close_or_extended_family_of = scope:bride + is_married = yes + is_ai = yes + NOR = { + has_character_flag = busy_in_wgathering_event + this = scope:guest_1 + this = scope:guest_2 + } + } + if = { + limit = { + exists = scope:guest_2 + } + save_scope_as = guest_3 + } + else = { + save_scope_as = guest_2 + } + } + } + scope:guest_1 = { add_character_flag = busy_in_wgathering_event } + scope:guest_2 = { add_character_flag = busy_in_wgathering_event } + if = { + limit = { + exists = scope:guest_3 + } + scope:guest_3 = { add_character_flag = busy_in_wgathering_event } + } + } + + #Option A: follow tradition + option = { + name = ep2_wedding.1100.a + scope:activity = { + add_activity_log_entry = { + key = wedding_cleansing_log + tags = { good } + score = 50 + character = scope:bride + + # Effect + scope:bride = { + add_character_modifier = { + modifier = wedding_purified_modifier + years = 5 + } + } + } + } + scope:guest_1 = { + add_character_modifier = { + modifier = wedding_purified_modifier + years = 5 + } + } + scope:guest_2 = { + add_character_modifier = { + modifier = wedding_purified_modifier + years = 5 + } + } + if = { + limit = { exists = scope:guest_3 } + scope:guest_3 = { + add_character_modifier = { + modifier = wedding_purified_modifier + years = 5 + } + } + } + if = { + limit = { + scope:bride = { + any_vassal = { vassal_stance = courtly } + } + } + scope:bride = { + every_vassal = { + vassal_stance = courtly + add_opinion = { + target = scope:bride + modifier = wedding_traditional_ritual_opinion + } + } + } + } + else_if = { + limit = { + scope:bride.betrothed = { + any_vassal = { vassal_stance = courtly } + } + } + scope:bride.betrothed = { + every_vassal = { + vassal_stance = courtly + add_opinion = { + target = scope:bride + modifier = wedding_traditional_ritual_opinion + } + } + } + } + ai_chance = { + base = 100 + } + } + + #Option B: try something new + option = { + name = ep2_wedding.1100.b + trigger = { + this = scope:bride + } + random_list = { + 25 = {} #nothing happens + 25 = { + show_chance = no + trigger = { + can_set_relation_friend_trigger = { CHARACTER = scope:guest_1 } + } + set_relation_friend = { + target = scope:guest_1 + reason = friend_wedding_ritual + } + } + 25 = { + show_chance = no + trigger = { + can_set_relation_friend_trigger = { CHARACTER = scope:guest_2 } + } + set_relation_friend = { + target = scope:guest_2 + reason = friend_wedding_ritual + } + } + 25 = { + show_chance = no + trigger = { + exists = scope:guest_3 + can_set_relation_friend_trigger = { CHARACTER = scope:guest_3 } + } + set_relation_friend = { + target = scope:guest_3 + reason = friend_wedding_ritual + } + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_cleansing_new_log + tags = { good } + score = 50 + character = scope:bride + + # Effect + } + } + stress_impact = { + shy = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + #Option D: just enjoy the bath + option = { + name = ep2_wedding.1100.d + trigger = { + has_activity_intent = reduce_stress_intent + this = scope:bride + } + reason = activity_intent + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 150 + modifier = { + has_trait = lazy + add = 100 + } + } + } + + #Option C: this is dumb + option = { + name = ep2_wedding.1100.c + if = { + limit = { + this = scope:bride + any_vassal = { vassal_stance = courtly } + } + every_vassal = { + vassal_stance = courtly + add_opinion = { + target = root + modifier = wedding_no_ritual_opinion + } + } + } + else_if = { + limit = { + this = scope:bride + betrothed = { + any_vassal = { + vassal_stance = courtly + } + } + } + betrothed = { + every_vassal = { + vassal_stance = courtly + add_opinion = { + target = scope:bride + modifier = wedding_no_ritual_opinion + } + } + } + } + else_if = { + limit = { + this != scope:bride + } + scope:bride = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -20 + } + if = { + limit = { + NOT = { has_relation_rival = root } + } + progress_towards_rival_effect = { + REASON = rival_despised_ritual + CHARACTER = root + OPINION = 0 + } + } + } + } + add_character_modifier = { + modifier = wedding_thinking_outside_box_modifier + years = 10 + } + stress_impact = { + zealous = medium_stress_impact_gain + cynical = medium_stress_impact_loss + } + if = { + limit = { root = scope:bride } + scope:activity = { + add_activity_log_entry = { + key = wedding_cleansing_dismiss_log + tags = { good } + score = 50 + character = scope:bride + } + } + } + else = { + scope:activity = { + add_activity_log_entry = { + key = wedding_cleansing_log + tags = { good } + score = 50 + character = scope:bride + } + } + } + ai_chance = { + base = 75 + modifier = { + has_trait = cynical + add = 25 + } + modifier = { + has_trait = zealous + add = -25 + } + } + } + + after = { + scope:bride = { remove_character_flag = busy_in_wgathering_event } + scope:guest_1 = { remove_character_flag = busy_in_wgathering_event } + scope:guest_2 = { remove_character_flag = busy_in_wgathering_event } + if = { + limit = { + exists = scope:guest_3 + } + scope:guest_3 = { remove_character_flag = busy_in_wgathering_event } + } + } +} + +# CEREMONY EVENTS + +################################################## +# Could it Be You? +# by Claudia Baldassi +# ep2_wedding.1020 +################################################## + +# The spouses fall in love at first sight + +ep2_wedding.1020 = { + type = activity_event + title = ep2_wedding.1020.t + desc = ep2_wedding.1020.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = ecstasy + } + right_portrait = { + character = scope:spouse_2 + animation = admiration + } + + cooldown = { years = 30 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOR = { + has_variable = has_had_event_1020 + has_variable = has_had_event_1180 + } + } + + scope:activity.special_guest:spouse_1 = { + num_of_relation_soulmate = 0 + NOT = { has_character_flag = busy_in_ceremony_event } + } + scope:activity.special_guest:spouse_2 = { + num_of_relation_soulmate = 0 + NOT = { has_character_flag = busy_in_ceremony_event } + } + + root = { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + + scope:activity.special_guest:spouse_1 = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_2 } + scope:activity.special_guest:spouse_2 = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_1 = { + can_set_relation_soulmate_trigger = { + CHARACTER = scope:activity.special_guest:spouse_2 + } + } + + # They should not know each other, as much as we can verify + scope:activity.special_guest:spouse_1 = { + NOR = { + has_relation_lover = scope:activity.special_guest:spouse_2 + has_relation_friend = scope:activity.special_guest:spouse_2 + has_relation_potential_lover = scope:activity.special_guest:spouse_2 + has_relation_crush = scope:activity.special_guest:spouse_2 + has_relation_potential_friend = scope:activity.special_guest:spouse_2 + } + } + NOT = { + scope:activity.special_guest:spouse_1 = { has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:activity.special_guest:spouse_2 } } + } + + trigger_if = { + limit = { + root = { is_ai = yes } + } + scope:activity.special_guest:spouse_1 = { is_ai = yes } + scope:activity.special_guest:spouse_2 = { is_ai = yes } + } + trigger_else = { + OR = { + scope:activity.special_guest:spouse_1 = { is_ai = yes } + scope:activity.special_guest:spouse_2 = { is_ai = yes } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = woo_attendee_intent + intent_target ?= root.betrothed + add = 1 + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1020 + } + if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + } + } + else = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_2 + } + } + add_character_flag = busy_in_ceremony_event + scope:spouse_2 = { add_character_flag = busy_in_ceremony_event } + } + + option = { + name = ep2_wedding.1020.a + scope:activity = { + add_activity_log_entry = { + key = wedding_first_sight_log + tags = { good } + score = 50 + character = root + target = scope:spouse_2 + + # Effect + root = { + set_relation_soulmate = { reason = soulmate_wedding_first_sight target = scope:spouse_2 } + reverse_add_opinion = { + target = scope:spouse_2 + modifier = love_opinion + opinion = 30 + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = scope:spouse_2 + } + complete_activity_intent = yes + } + # Achievements + player_succeeded_at_a_thousand_and_one_nights_achievement_effect = yes + } + } + } + } + after = { + remove_character_flag = busy_in_ceremony_event + scope:spouse_2 = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# A Good/Bad Omen +# by Claudia Baldassi +# ep2_wedding.1030 +################################################## + +# A good or bad omen happens: how do you react? + +ep2_wedding.1030 = { + type = activity_event + title = ep2_wedding.1030.t + desc = { + desc = ep2_wedding.1030.desc + random_valid = { + triggered_desc = { + trigger = { + has_character_flag = good_thing_flag + } + desc = ep2_wedding.1030.desc_good1 + } + triggered_desc = { + trigger = { + has_character_flag = good_thing_flag + } + desc = ep2_wedding.1030.desc_good2 + } + triggered_desc = { + trigger = { + has_character_flag = good_thing_flag + } + desc = ep2_wedding.1030.desc_good3 + } + triggered_desc = { + trigger = { + has_character_flag = bad_thing_flag + } + desc = ep2_wedding.1030.desc_bad1 + } + triggered_desc = { + trigger = { + has_character_flag = bad_thing_flag + } + desc = ep2_wedding.1030.desc_bad2 + } + triggered_desc = { + trigger = { + has_character_flag = bad_thing_flag + } + desc = ep2_wedding.1030.desc_bad3 + } + } + desc = ep2_wedding.1030.desc_outro + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = bad_thing_flag + } + desc = ep2_wedding.1030.desc_bad + } + desc = ep2_wedding.1030.desc_good + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_flag = bad_thing_flag + } + animation = fear + } + animation = happiness + } + right_portrait = { + character = scope:1030_chatter + triggered_animation = { + trigger = { + has_character_flag = bad_thing_flag + } + animation = worry + } + animation = admiration + } + lower_center_portrait = { + character = scope:spouse_2 + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1030 + } + } + + scope:activity.special_guest:spouse_2 = { is_ai = yes } + scope:activity = { + any_attending_character = { + is_ai = yes + NOR = { + this = scope:activity.special_guest:spouse_2 + this = root + has_character_flag = busy_in_ceremony_event + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_character_modifier = bp1_superstition_modifier + add = 3 + } + modifier = { + is_ai = yes + factor = 0.3 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = 1 + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1030 + } + hidden_effect = { + random_list = { + 50 = { + add_character_flag = good_thing_flag + } + 50 = { + add_character_flag = bad_thing_flag + } + } + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + add_character_flag = busy_in_ceremony_event + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + } + + scope:activity = { + random_attending_character = { + limit = { + NOR = { + scope:spouse_2 = this + root = this + } + is_ai = yes + } + save_scope_as = 1030_chatter + add_character_flag = busy_in_ceremony_event + } + } + + add_character_flag = busy_in_ceremony_event + + random = { + chance = legend_seed_chance_low + add_character_flag = wedding_legend_seed + } + } + + #Option A: good omen - excellent! + option = { + name = ep2_wedding.1030.a + trigger = { + has_character_flag = good_thing_flag + } + scope:activity = { + add_activity_log_entry = { + key = wedding_omen_good_log + tags = { good } + score = 50 + character = root + target = scope:spouse_2 + } + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + stress_impact = { + base = medium_stress_impact_loss + } + } + else = { + stress_impact = { + base = minor_stress_impact_loss + } + } + } + + #Option B: dismiss bad omen + option = { + name = ep2_wedding.1030.b + trigger = { + has_character_flag = bad_thing_flag + NOT = { has_character_modifier = bp1_superstition_modifier } + } + if = { + limit = { + ai_rationality >= 40 + } + scope:activity = { + add_activity_log_entry = { + key = wedding_omen_dismissed_log + tags = { bad } + score = 50 + character = root + target = scope:spouse_2 + } + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + stress_impact = { + base = minor_stress_impact_loss + } + } + } + else = { + stress_impact = { + base = minor_stress_impact_gain + } + scope:activity = { + add_activity_log_entry = { + key = wedding_omen_bad_log + tags = { bad } + score = 50 + character = root + target = scope:spouse_2 + } + } + } + ai_chance = { + base = 100 + } + } + + #Option c: bad omen - panic + option = { + name = ep2_wedding.1030.c + trigger = { + has_character_flag = bad_thing_flag + has_character_modifier = bp1_superstition_modifier + } + stress_impact = { + base = medium_stress_impact_gain + } + scope:activity = { + add_activity_log_entry = { + key = wedding_omen_bad_log + tags = { bad } + score = 50 + character = root + target = scope:spouse_2 + } + } + ai_chance = { + base = 100 + } + } + + #Option D: good omen - you get a legend seed! + option = { + name = ep2_wedding.1030.d + trigger = { + has_character_flag = good_thing_flag + NOR = { + has_personal_legend_seed = heroic + has_personal_legend_seed = holy + has_personal_legend_seed = legitimizing + } + has_character_flag = wedding_legend_seed + OR = { + scope:spouse_2.dynasty = root.dynasty + scope:spouse_1.dynasty = root.dynasty + } + } + + scope:activity = { + add_activity_log_entry = { + key = wedding_omen_good_log + tags = { good } + score = 50 + character = root + target = scope:spouse_2 + } + } + + legend_seed_great_deed_dynasty_effect = yes + + ai_chance = { #AI can into legend seeds + base = 200 + } + } + + after = { + if = { + limit = { + has_character_flag = good_thing_flag + } + remove_character_flag = good_thing_flag + } + else = { + remove_character_flag = bad_thing_flag + } + remove_character_flag = busy_in_ceremony_event + scope:spouse_2 = { remove_character_flag = busy_in_ceremony_event } + scope:1030_chatter = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# New Family +# by Claudia Baldassi +# ep2_wedding.1120 +################################################## + +# Spouse: your child from a previous partner makes a fuss + +scripted_trigger ep2_wedding_1120_valid_child_trigger = { + NOR = { + has_trait = child_of_concubine_female + has_trait = child_of_concubine_male + any_parent = { this = root.betrothed } + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + any_parent = { + even_if_dead = yes + this != root + # polygamy case + trigger_if = { + limit = { is_alive = yes } + NOT = { any_consort = { this = root.betrothed } } + } + save_temporary_scope_as = other_parent + } + age >= 6 + involved_activity ?= { this = scope:activity } + save_temporary_scope_as = trouble_child +} + +ep2_wedding.1120 = { + type = activity_event + title = ep2_wedding.1120.t + desc = { + desc = ep2_wedding.1120.desc + first_valid = { + triggered_desc = { + trigger = { + scope:trouble_child = { + is_adult = no + } + } + desc = ep2_wedding.1120.desc_child + } + desc = ep2_wedding.1120.desc_adult + } + triggered_desc = { + trigger = { + scope:other_parent = { + involved_activity ?= { this = scope:activity } + } + } + desc = ep2_wedding.1120.desc_parent + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = shock + } + center_portrait = { + character = scope:other_spouse + animation = worry + } + right_portrait = { + character = scope:trouble_child + animation = wedding_objection_start + } + lower_right_portrait = scope:other_parent + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1120 + } + } + + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + betrothed ?= { + is_ai = yes + } + any_child ?= { + ep2_wedding_1120_valid_child_trigger = yes + } + # if the child's real parent is a secret, make sure that the child knows about it before denouncing it, and they don't like you enough + trigger_if = { + limit = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + } + } + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + is_known_by = scope:trouble_child + } + scope:trouble_child = { + opinion = { target = root value < 0 } + } + } + trigger_if = { + limit = { + any_secret = { + type = secret_disputed_heritage + secret_target = { this = scope:trouble_child } + } + } + any_secret = { + type = secret_disputed_heritage + secret_target = { this = scope:trouble_child } + is_known_by = scope:trouble_child + } + scope:trouble_child = { + opinion = { target = root value < 0 } + } + } + } + + weight_multiplier = { + base = 1 + # More drama if the other parent is there too + modifier = { + any_child = { + ep2_wedding_1120_valid_child_trigger = yes + } + scope:other_parent = { + is_alive = yes + involved_activity ?= { this = scope:activity } + } + add = 4 + } + # more likely if the child is an actual child + modifier = { + any_child = { + ep2_wedding_1120_valid_child_trigger = yes + is_adult = no + } + add = 2 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = -0.5 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1120 + } + betrothed = { save_scope_as = other_spouse } + scope:other_spouse = { + add_character_flag = busy_in_ceremony_event + } + random_child = { + limit = { + ep2_wedding_1120_valid_child_trigger = yes + } + save_scope_as = trouble_child + } + scope:trouble_child = { + random_parent = { + even_if_dead = yes + limit = { + this != root + } + save_scope_as = other_parent + } + add_character_flag = busy_in_ceremony_event + } + if = { + limit = { + scope:other_parent = { + is_alive = yes + involved_activity ?= { this = scope:activity } + } + } + scope:other_parent = { add_character_flag = busy_in_ceremony_event } + } + if = { + limit = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + } + } + random_secret = { + type = secret_unmarried_illegitimate_child + limit = { + secret_target = { this = scope:trouble_child } + } + expose_secret = scope:trouble_child + } + add_character_flag = wedding_secret_child_revealed + } + else_if = { + limit = { + any_secret = { + type = secret_disputed_heritage + secret_target = { this = scope:trouble_child } + } + } + random_secret = { + type = secret_disputed_heritage + limit = { + secret_target = { this = scope:trouble_child } + } + expose_secret = scope:trouble_child + } + add_character_flag = wedding_secret_child_revealed + } + if = { + limit = { + has_character_flag = wedding_secret_child_revealed + } + scope:activity = { + add_activity_log_entry = { + key = wedding_child_fuss_secret_log + show_in_conclusion = yes + character = scope:trouble_child + target = root + } + } + } + else = { + scope:activity = { + add_activity_log_entry = { + key = wedding_child_fuss_log + character = scope:trouble_child + target = root + } + } + } + } + + # Option A: be strict + option = { + name = ep2_wedding.1120.a + trigger = { + NOT = { + has_character_flag = wedding_secret_child_revealed + } + } + add_prestige = major_prestige_gain + scope:trouble_child = { + add_opinion = { + target = root + modifier = hate_opinion + opinion = -60 + } + } + scope:other_spouse = { + add_opinion = { + target = scope:trouble_child + modifier = angry_opinion + opinion = -30 + } + if = { + limit = { + OR = { + has_trait = compassionate + has_trait = humble + has_trait = content + ai_compassion >= medium_positive_ai_value + } + } + add_opinion = { + target = root + modifier = awkward_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = root + modifier = amused_opinion + opinion = 30 + } + root = { + add_character_modifier = { + modifier = ep2_wedding_shared_values_modifier + years = 5 + } + } + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + patient = minor_stress_impact_gain + humble = minor_stress_impact_gain + calm = minor_stress_impact_gain + shy = minor_stress_impact_gain + arrogant = medium_stress_impact_loss + callous = medium_stress_impact_loss + impatient = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + # Option B: be accepting + option = { + name = ep2_wedding.1120.b + trigger = { + NOT = { + has_character_flag = wedding_secret_child_revealed + } + } + dynasty ?= { + add_dynasty_prestige = medium_dynasty_prestige_gain + } + scope:trouble_child = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 60 + } + } + scope:other_spouse = { + add_opinion = { + target = scope:trouble_child + modifier = angry_opinion + opinion = -30 + } + if = { + limit = { + OR = { + ai_compassion <= low_positive_ai_value + has_trait = callous + has_trait = wrathful + has_trait = vengeful + } + } + add_opinion = { + target = root + modifier = awkward_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + root = { + add_character_modifier = { + modifier = ep2_wedding_shared_values_modifier + years = 5 + } + } + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + patient = minor_stress_impact_loss + humble = minor_stress_impact_loss + calm = minor_stress_impact_loss + shy = minor_stress_impact_loss + arrogant = medium_stress_impact_gain + callous = medium_stress_impact_gain + impatient = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + # Option C: it was a secret!! + option = { + name = ep2_wedding.1120.c + trigger = { + has_character_flag = wedding_secret_child_revealed + } + if = { + limit = { + scope:trouble_child = { + is_adult = yes + } + } + set_variable = { + days = 100 + name = ep2_confrontational_child + value = scope:trouble_child + } + } + stress_impact = { + deceitful = major_stress_impact_gain + honest = major_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:trouble_child = { remove_character_flag = busy_in_ceremony_event } + scope:other_spouse = { remove_character_flag = busy_in_ceremony_event } + scope:other_parent = { + if = { + limit = { has_character_flag = busy_in_ceremony_event } + remove_character_flag = busy_in_ceremony_event + } + } + if = { + limit = { + has_character_flag = wedding_secret_child_revealed + } + remove_character_flag = wedding_secret_child_revealed + } + } +} + +# Opposite event: it is your spouse who has a complaining child + +scripted_trigger ep2_wedding_1121_valid_child_trigger = { + NOT = { + any_parent = { this = root } + } + any_parent = { + even_if_dead = yes + this != root.betrothed + # polygamy case + trigger_if = { + limit = { is_alive = yes } + NOT = { any_consort = { this = root.betrothed } } + } + save_temporary_scope_as = other_parent + } + age >= 6 + involved_activity ?= scope:activity + save_temporary_scope_as = trouble_child +} + +ep2_wedding.1121 = { + type = activity_event + title = ep2_wedding.1120.t + desc = { + desc = ep2_wedding.1120.desc + first_valid = { + triggered_desc = { + trigger = { + scope:trouble_child = { + is_adult = no + } + } + desc = ep2_wedding.1121.desc_child + } + desc = ep2_wedding.1121.desc_adult + } + triggered_desc = { + trigger = { + scope:other_parent = { + involved_activity ?= { this = scope:activity } + } + } + desc = ep2_wedding.1120.desc_parent + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = scope:other_spouse + animation = worry + } + center_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:trouble_child + animation = wedding_objection_start + } + lower_right_portrait = scope:other_parent + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1120 + } + } + + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + root.betrothed ?= { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + is_ai = yes + save_temporary_scope_as = other_spouse + any_child = { + ep2_wedding_1121_valid_child_trigger = yes + } + } + # if the child's real parent is a secret, make sure that the child knows about it before denouncing it, and they don't like their parent enough + trigger_if = { + limit = { + scope:other_spouse = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + } + } + } + scope:other_spouse = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + is_known_by = scope:trouble_child + } + } + scope:trouble_child = { + opinion = { target = scope:other_spouse value < 0 } + } + } + trigger_if = { + limit = { + scope:other_spouse = { + any_secret = { + type = secret_disputed_heritage + secret_target = { this = scope:trouble_child } + } + } + } + scope:other_spouse = { + any_secret = { + type = secret_disputed_heritage + secret_target = { this = scope:trouble_child } + is_known_by = scope:trouble_child + } + } + scope:trouble_child = { + opinion = { target = scope:other_spouse value < 0 } + } + } + } + + weight_multiplier = { + base = 1 + # More drama if the other parent is there too + modifier = { + root.betrothed = { + any_child = { + ep2_wedding_1121_valid_child_trigger = yes + } + scope:other_parent = { + is_alive = yes + involved_activity ?= { this = scope:activity } + } + } + add = 4 + } + # more likely if the child is an actual child + modifier = { + root.betrothed = { + any_child = { + ep2_wedding_1121_valid_child_trigger = yes + is_adult = no + } + } + add = 2 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = -0.5 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1120 + } + root.betrothed = { save_scope_as = other_spouse } + scope:other_spouse = { + add_character_flag = busy_in_ceremony_event + } + scope:other_spouse = { + random_child = { + limit = { + ep2_wedding_1121_valid_child_trigger = yes + } + save_scope_as = trouble_child + } + } + scope:trouble_child = { + random_parent = { + even_if_dead = yes + limit = { + this != root.betrothed + } + save_scope_as = other_parent + } + add_character_flag = busy_in_ceremony_event + } + if = { + limit = { + scope:other_parent = { + involved_activity ?= { this = scope:activity } + } + } + scope:other_parent = { add_character_flag = busy_in_ceremony_event } + } + if = { + limit = { + scope:other_spouse = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + } + } + } + scope:other_spouse = { + random_secret = { + type = secret_unmarried_illegitimate_child + limit = { + secret_target = { this = scope:trouble_child } + } + expose_secret = scope:trouble_child + } + add_character_flag = wedding_secret_child_revealed + } + } + else_if = { + limit = { + scope:other_spouse = { + any_secret = { + type = secret_unmarried_illegitimate_child + secret_target = { this = scope:trouble_child } + } + } + } + scope:other_spouse = { + random_secret = { + type = secret_disputed_heritage + limit = { + secret_target = { this = scope:trouble_child } + } + expose_secret = scope:trouble_child + } + add_character_flag = wedding_secret_child_revealed + } + } + scope:other_spouse = { + if = { + limit = { + has_character_flag = wedding_secret_child_revealed + } + add_opinion = { + target = scope:trouble_child + modifier = angry_opinion + opinion = -30 + } + } + } + if = { + limit = { + scope:other_spouse = { has_character_flag = wedding_secret_child_revealed } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_child_fuss_secret_log + show_in_conclusion = yes + character = scope:trouble_child + target = scope:other_spouse + } + } + } + else = { + scope:activity = { + add_activity_log_entry = { + key = wedding_child_fuss_log + character = scope:trouble_child + target = scope:other_spouse + } + } + } + } + + # Option A: Shut up! + option = { + name = ep2_wedding.1121.a + add_dread = medium_dread_gain + scope:trouble_child = { + add_opinion = { + target = root + modifier = hate_opinion + opinion = -50 + } + } + scope:other_spouse = { + if = { + limit = { + save_temporary_opinion_value_as = { name = opinion_of_you target = root } + opinion = { target = scope:trouble_child value >= scope:opinion_of_you } + NOT = { + has_dread_level_towards = { + target = root + level >= 1 + } + } + } + add_opinion = { + target = root + modifier = berated_child_opinion + } + } + } + add_character_modifier = { + modifier = ep2_wedding_authoritarian_modifier + years = 10 + } + stress_impact = { + compassionate = major_stress_impact_gain + arrogant = major_stress_impact_gain + patient = medium_stress_impact_gain + humble = medium_stress_impact_gain + calm = medium_stress_impact_gain + shy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_vengefulness = 0.5 + } + } + } + + # Option B: I'll be a better parent! + option = { + name = ep2_wedding.1121.b + scope:trouble_child = { + add_opinion = { + target = root + modifier = give_a_chance_opinion + } + } + scope:other_spouse = { + add_opinion = { + target = root + modifier = give_a_chance_opinion + } + } + add_character_modifier = { + modifier = ep2_wedding_family_focus_modifier + years = 10 + } + stress_impact = { + callous = major_stress_impact_gain + arrogant = major_stress_impact_gain + wrathful = major_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_vengefulness = -0.5 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:trouble_child = { remove_character_flag = busy_in_ceremony_event } + scope:other_spouse = { + remove_character_flag = busy_in_ceremony_event + if = { + limit = { + has_character_flag = wedding_secret_child_revealed + } + remove_character_flag = wedding_secret_child_revealed + } + } + scope:other_parent = { + if = { + limit = { has_character_flag = busy_in_ceremony_event } + remove_character_flag = busy_in_ceremony_event + } + } + } +} + +# Follow-up to 1120. NB this is a Banquet Event. +# You talk with the child who revealed your secret. + +ep2_wedding.1122 = { + type = activity_event + title = ep2_wedding.1120.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:trouble_child = { + has_character_flag = 1122_repentant + } + } + desc = ep2_wedding.1122.desc_repentant + } + desc = ep2_wedding.1122.desc_unrepentant + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:trouble_child + triggered_animation = { + trigger = { + scope:trouble_child = { + has_character_flag = 1122_repentant + } + } + animation = shame + } + triggered_animation = { + trigger = { + NOT = { + scope:trouble_child = { + has_character_flag = 1122_repentant + } + } + } + animation = personality_callous + } + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + has_variable = ep2_confrontational_child + scope:activity = { + NOT = { + has_variable = has_had_event_1122 + } + } + } + + immediate = { + var:ep2_confrontational_child = { + save_scope_as = trouble_child + } + scope:activity = { + set_variable = has_had_event_1122 + } + add_character_flag = busy_in_banquet_event + scope:trouble_child = { + add_character_flag = busy_in_banquet_event + } + scope:trouble_child = { + random_list = { + # child regrets it + 50 = { + modifier = { + has_trait = humble + add = 50 + } + modifier = { + has_trait = family_first + add = 100 + } + modifier = { + has_trait = compassionate + add = 100 + } + modifier = { + has_trait = patient + add = 20 + } + modifier = { + has_trait = craven + add = 20 + } + modifier = { + has_trait = shy + add = 20 + } + modifier = { + has_trait = trusting + add = 20 + } + modifier = { + has_trait = fickle + add = 50 + } + modifier = { + has_trait = forgiving + add = 20 + } + modifier = { + has_trait = contrite + add = 100 + } + add_character_flag = 1122_repentant + } + # child is unrepentant + 50 = { + modifier = { + has_trait = arrogant + add = 50 + } + modifier = { + has_trait = arbitrary + add = 50 + } + modifier = { + has_trait = paranoid + add = 100 + } + modifier = { + has_trait = wrathful + add = 20 + } + modifier = { + has_trait = impatient + add = 20 + } + modifier = { + has_trait = brave + add = 20 + } + modifier = { + has_trait = ambitious + add = 20 + } + modifier = { + has_trait = vengeful + add = 20 + } + modifier = { + has_trait = callous + add = 50 + } + modifier = { + has_trait = stubborn + add = 100 + } + } + } + } + } + + # Option A: You forgive + option = { + name = ep2_wedding.1122.a + trigger = { + scope:trouble_child = { + has_character_flag = 1122_repentant + } + } + scope:activity = { + add_activity_log_entry = { + key = 1122_child_pacified_log + tags = { good } + score = 10 + character = root + target = scope:trouble_child + # Effect + scope:trouble_child = { + add_opinion = { + target = root + modifier = forgiven_opinion + opinion = 20 + } + } + } + } + stress_impact = { + vengeful = massive_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + # Option B: You don't forgive + option = { + name = ep2_wedding.1122.b + trigger = { + scope:trouble_child = { + has_character_flag = 1122_repentant + } + } + scope:activity = { + add_activity_log_entry = { + key = 1122_child_not_pacified_log + tags = { bad } + score = 10 + character = root + target = scope:trouble_child + # Effect + scope:trouble_child = { + add_opinion = { + target = root + modifier = unforgiven_opinion + opinion = -30 + } + } + root = { + if = { + limit = { + can_add_hook = { + target = scope:trouble_child + type = indebted_hook + } + } + add_hook = { + target = scope:trouble_child + type = indebted_hook + } + } + } + } + } + stress_impact = { + forgiving = massive_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + + # Option C: You accept the critique + option = { + name = ep2_wedding.1122.c + trigger = { + scope:trouble_child = { + NOT = { has_character_flag = 1122_repentant } + } + } + scope:activity = { + add_activity_log_entry = { + key = 1122_child_pacified_log + tags = { good } + score = 10 + character = root + target = scope:trouble_child + # Effect + scope:trouble_child = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + } + } + } + stress_impact = { + vengeful = massive_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + } + } + } + + # Option D: You remain angry + option = { + name = ep2_wedding.1122.d + trigger = { + scope:trouble_child = { + NOT = { has_character_flag = 1122_repentant } + } + } + scope:activity = { + add_activity_log_entry = { + key = 1122_child_not_pacified_log + tags = { bad } + score = 10 + character = root + target = scope:trouble_child + # Effect + root = { + if = { + limit = { + can_add_hook = { + target = scope:trouble_child + type = indebted_hook + } + } + add_hook = { + target = scope:trouble_child + type = indebted_hook + } + } + } + } + } + stress_impact = { + forgiving = massive_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + } + } + } + + after = { + remove_character_flag = busy_in_banquet_event + scope:trouble_child = { + remove_character_flag = busy_in_banquet_event + if = { + limit = { + has_character_flag = 1122_repentant + } + remove_character_flag = 1122_repentant + } + } + remove_variable = ep2_confrontational_child + } +} + +################################################## +# Secret Whispers +# by Claudia Baldassi +# ep2_wedding.1130 +################################################## + +# A bad secret comes up and compromises the union: someone who knows spills the beans +#The secret is yours. + +ep2_wedding.1130 = { + type = activity_event + title = ep2_wedding.1130.t + desc = { + desc = ep2_wedding.1130.desc + desc = ep2_wedding.1130.desc_continue + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:1130_knows + animation = wedding_objection_start + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1130 + } + } + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + has_any_secrets = yes + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root + NOT = { secret_target ?= prev } + } + opinion = { target = root value <= 0 } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root + NOT = { secret_target ?= prev } + + } + has_trait = contrite + } + } + add = 4 + } + modifier = { + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root + NOT = { secret_target ?= prev } + } + has_relation_rival = root + } + } + add = 5 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = -0.5 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1130 + } + betrothed = { + save_scope_as = other_spouse + add_character_flag = busy_in_ceremony_event + } + scope:activity = { + random_attending_character = { + limit = { + any_known_secret = { + secret_owner = root + NOT = { secret_target ?= prev } + } + } + save_scope_as = 1130_knows + add_character_flag = busy_in_ceremony_event + } + } + scope:1130_knows = { + random_known_secret = { + limit = { + secret_owner = root + NOT = { secret_target ?= scope:1130_knows } + } + save_scope_as = 1130_secret + } + } + } + + #Option A: let them expose the secret + option = { + name = ep2_wedding.1130.a + add_character_modifier = { + modifier = wedding_clean_slate_modifier + years = 10 + } + scope:activity = { + add_activity_log_entry = { + key = wedding_secret_revealed_log + show_in_conclusion = yes + character = scope:1130_knows + target = root + + #Effect + scope:1130_secret = { expose_secret = scope:1130_knows } + root = { + if = { + limit = { + can_set_relation_nemesis_trigger = { CHARACTER = scope:1130_knows } + } + set_relation_nemesis = { + target = scope:1130_knows + reason = nemesis_wedding_spread_voices_secret + } + } + } + } + } + scope:1130_knows = { + if = { + limit = { + has_activity_intent = banquet_mischief_intent + } + complete_activity_intent = yes + } + } + stress_impact = { + deceitful = major_stress_impact_gain + contrite = massive_stress_impact_loss + honest = major_stress_impact_loss + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_honor = 0.5 + } + modifier = { + has_trait = contrite + add = 200 + } + modifier = { + has_trait = honest + add = 100 + } + } + } + + #Option B: kick them out + option = { + name = ep2_wedding.1130.b + add_character_modifier = { + modifier = wedding_web_of_secrets_modifier + years = 10 + } + scope:activity = { + add_activity_log_entry = { + key = wedding_secret_not_revealed_log + show_in_conclusion = yes + character = scope:1130_knows + target = root + + #Effect + root = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:1130_knows } + } + set_relation_rival = { + target = scope:1130_knows + reason = rival_wedding_spread_voices + } + } + add_dread = major_dread_gain + } + scope:1130_knows = { + remove_from_activity = scope:activity + } + } + } + stress_impact = { + contrite = massive_stress_impact_gain + honest = major_stress_impact_gain + } + ai_chance = { + base = 125 + ai_value_modifier = { + ai_honor = -0.5 + } + modifier = { + has_trait = deceitful + add = 200 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:other_spouse = { + remove_character_flag = busy_in_ceremony_event + } + scope:1130_knows = { + remove_character_flag = busy_in_ceremony_event + } + } +} + +# The secret is your partner's. + +ep2_wedding.1131 = { + type = activity_event + title = ep2_wedding.1130.t + desc = { + desc = ep2_wedding.1130.desc + desc = ep2_wedding.1131.desc + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = shock + } + center_portrait = { + character = scope:other_spouse + animation = shame + } + right_portrait = { + character = scope:1130_knows + animation = wedding_objection_start + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1130 + } + } + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + betrothed ?= { + has_any_secrets = yes + } + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root.betrothed + NOT = { is_known_by = root } + NOT = { secret_target ?= prev } + } + opinion = { target = root.betrothed value <= 0 } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root.betrothed + NOT = { is_known_by = root } + NOT = { secret_target ?= prev } + } + has_trait = contrite + } + } + add = 4 + } + modifier = { + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root.betrothed + NOT = { is_known_by = root } + NOT = { secret_target ?= prev } + } + has_relation_rival = root + } + } + add = 4 + } + modifier = { + scope:activity = { + any_attending_character = { + any_known_secret = { + secret_owner = root.betrothed + NOT = { is_known_by = root } + NOT = { secret_target ?= prev } + } + has_relation_rival = root.betrothed + } + } + add = 4 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = -0.5 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1130 + } + betrothed = { + save_scope_as = other_spouse + add_character_flag = busy_in_ceremony_event + } + scope:activity = { + random_attending_character = { + limit = { + any_known_secret = { + secret_owner = root.betrothed + NOT = { is_known_by = root } + NOT = { secret_target ?= prev } + } + } + save_scope_as = 1130_knows + add_character_flag = busy_in_ceremony_event + } + } + scope:1130_knows = { + random_known_secret = { + limit = { + secret_owner = scope:other_spouse + NOT = { is_known_by = root } + NOT = { secret_target ?= scope:1130_knows } + } + save_scope_as = 1130_secret + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_secret_revealed_log + show_in_conclusion = yes + character = scope:1130_knows + target = scope:other_spouse + + #Effect + scope:1130_secret = { expose_secret = scope:1130_knows } + } + } + scope:1130_knows = { + if = { + limit = { + has_activity_intent = banquet_mischief_intent + } + complete_activity_intent = yes + } + } + } + + #Option A: be understanding + option = { + name = ep2_wedding.1131.a + scope:other_spouse = { + add_opinion = { + target = root + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + can_add_hook = { + target = scope:other_spouse + type = favor_hook + } + } + add_hook = { + target = scope:other_spouse + type = favor_hook + } + } + stress_impact = { + impatient = minor_stress_impact_gain + callous = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + vengeful = major_stress_impact_gain + paranoid = major_stress_impact_gain + honest = medium_stress_impact_loss + forgiving = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + trusting = major_stress_impact_loss + } + ai_chance = { + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Option B: this is unacceptable! + option = { + name = ep2_wedding.1131.b + add_dread = major_dread_gain + add_character_modifier = { + modifier = wedding_trust_compromised_modifier + years = 10 + } + stress_impact = { + impatient = minor_stress_impact_loss + callous = medium_stress_impact_loss + wrathful = medium_stress_impact_loss + vengeful = major_stress_impact_loss + paranoid = major_stress_impact_loss + honest = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + trusting = major_stress_impact_gain + } + ai_chance = { + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:other_spouse = { + remove_character_flag = busy_in_ceremony_event + } + scope:1130_knows = { + remove_character_flag = busy_in_ceremony_event + } + } +} + +# You know a secret about a spouse. + +ep2_wedding.1132 = { + type = activity_event + title = ep2_wedding.1130.t + desc = ep2_wedding.1132.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = wedding_objection_start + } + center_portrait = { + character = scope:other_spouse + animation = shock + } + right_portrait = { + character = scope:spouse_with_secret + animation = shame + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1130 + } + } + NOR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + any_known_secret = { + secret_owner = { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + NOT = { secret_target ?= root } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = contrite + add = 4 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = -0.5 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1130 + } + random_known_secret = { + limit = { + secret_owner = { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + NOT = { secret_target ?= root } + } + save_scope_as = 1130_secret + } + scope:1130_secret = { + secret_owner = { + save_scope_as = spouse_with_secret + add_character_flag = busy_in_ceremony_event + } + } + scope:spouse_with_secret.betrothed = { + save_scope_as = other_spouse + add_character_flag = busy_in_ceremony_event + } + } + + #Option A: reveal it + option = { + name = ep2_wedding.1132.a + scope:activity = { + add_activity_log_entry = { + key = wedding_secret_revealed_log + show_in_conclusion = yes + character = root + target = scope:spouse_with_secret + + #Effect + scope:1130_secret = { expose_secret = root } + } + } + scope:other_spouse = { + add_opinion = { + target = root + modifier = opened_my_eyes_opinion + } + } + if = { + limit = { + can_add_hook = { + target = scope:other_spouse + type = favor_hook + } + } + add_hook = { + target = scope:other_spouse + type = favor_hook + } + } + if = { + limit = { + has_activity_intent = banquet_mischief_intent + } + complete_activity_intent = yes + } + stress_impact = { + honest = major_stress_impact_loss + contrite = massive_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = honest + add = 100 + } + modifier = { + has_trait = contrite + add = 100 + } + } + } + + #Option B: keep it + option = { + name = ep2_wedding.1132.b + scope:spouse_with_secret = { + add_opinion = { + target = root + modifier = kept_my_secret_opinion + } + } + if = { + limit = { + can_add_hook = { + target = scope:spouse_with_secret + type = favor_hook + } + } + add_hook = { + target = scope:spouse_with_secret + type = favor_hook + } + } + stress_impact = { + deceitful = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + add = 100 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:spouse_with_secret = { + remove_character_flag = busy_in_ceremony_event + } + scope:other_spouse = { + remove_character_flag = busy_in_ceremony_event + } + } +} + +################################################## +# A Misstep +# by Claudia Baldassi +# ep2_wedding.1140 +################################################## + +# A spouse has an embarrassing misstep: stuttering, missing cues, forgetting vows… How do you recover? + +ep2_wedding.1140 = { + type = activity_event + title = ep2_wedding.1140.t + desc = { + desc = ep2_wedding.1140.desc + random_valid = { + desc = ep2_wedding.1140.desc_1 + desc = ep2_wedding.1140.desc_2 + desc = ep2_wedding.1140.desc_3 + } + triggered_desc = { + trigger = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + intent_target = { + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + } + desc = ep2_wedding.1140.desc_target + } + triggered_desc = { + trigger = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + intent_target = { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + } + desc = ep2_wedding.1140.desc_target_spouse + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = wedding_objection_start + } + right_portrait = { + character = scope:fumbling_spouse + animation = shame + } + + lower_right_portrait = scope:intent_target + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + root = scope:host + NOR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + scope:activity.special_guest:spouse_1 = { is_ai = yes } + scope:activity.special_guest:spouse_2 = { is_ai = yes } + trigger_if = { + limit = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + } + intent_target = { is_ai = yes } + } + } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + has_activity_intent = reduce_stress_intent + } + add = 2 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + random_list = { + 50 = { + modifier = { + scope:spouse_1 = { + has_trait = shy + } + add = 10 + } + modifier = { + scope:spouse_1 = { + has_trait = gregarious + } + add = -10 + } + modifier = { + scope:spouse_1 = { + has_trait = calm + } + add = -10 + } + modifier = { + scope:spouse_1 = { + has_trait = impatient + } + add = 10 + } + modifier = { + scope:spouse_1 = { + has_trait = arrogant + } + add = 10 + } + scope:spouse_1 = { save_scope_as = fumbling_spouse } + } + 50 = { + modifier = { + scope:spouse_2 = { + has_trait = shy + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = gregarious + } + add = -10 + } + modifier = { + scope:spouse_2 = { + has_trait = calm + } + add = -10 + } + modifier = { + scope:spouse_2 = { + has_trait = impatient + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = arrogant + } + add = 10 + } + scope:spouse_2 = { save_scope_as = fumbling_spouse } + } + } + if = { + limit = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + } + intent_target = { save_scope_as = intent_target } + } + } + + # Option A: Try to salvage the situation + option = { + name = ep2_wedding.1140.a + duel = { + skill = diplomacy + value = average_skill_rating + # Success: you recover smoothly + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1140.a.success + send_interface_toast = { + title = ep2_wedding.1140.a.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = recovered_from_misstep_log + tags = { good } + score = 50 + character = root + target = scope:spouse_1 + + root = { + if = { + limit = { + has_lifestyle = diplomacy_lifestyle + } + add_diplomacy_lifestyle_xp = major_lifestyle_experience + } + } + if = { + limit = { + root = { has_activity_intent = diplomatic_intent } + } + custom_tooltip = ep2_wedding.1140.a.success.tt2 + root.intent_target = { + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 30 + } + } + } + else_if = { + limit = { + root = { has_activity_intent = woo_attendee_intent } + } + custom_tooltip = ep2_wedding.1140.a.success.tt2 + root = { + progress_towards_lover_effect = { + REASON = lover_impressed_by_smooth_save + CHARACTER = root.intent_target + OPINION = 15 + } + } + } + scope:fumbling_spouse = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + brave = medium_stress_impact_loss + } + } + } + # Failure: you are publicly embarassed + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1140.a.failure + send_interface_toast = { + title = ep2_wedding.1140.a.failure.tt + left_icon = root + right_icon = scope:fumbling_spouse + scope:activity = { + add_activity_log_entry = { + key = made_a_misstep_log + tags = { bad } + score = 50 + character = scope:fumbling_spouse + + scope:fumbling_spouse = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + shy = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_activity_intent = diplomatic_intent + has_activity_intent = woo_attendee_intent + } + add = 50 + } + } + } + + # Option B: ignore it + option = { + name = ep2_wedding.1140.b + scope:fumbling_spouse = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_loss + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + lazy = medium_stress_impact_loss + } + scope:activity = { + add_activity_log_entry = { + key = made_a_misstep_log + tags = { bad } + score = 50 + character = scope:fumbling_spouse + } + } + ai_chance = { + base = 100 + } + } + + # Option C: relax! + option = { + name = ep2_wedding.1140.c + trigger = { + has_activity_intent = reduce_stress_intent + } + reason = activity_intent + scope:fumbling_spouse = { + add_opinion = { + target = root + modifier = relieved_opinion + opinion = 20 + } + } + stress_impact = { + base = medium_stress_impact_loss + } + scope:activity = { + add_activity_log_entry = { + key = recovered_from_misstep_log + tags = { good } + score = 50 + character = root + target = scope:fumbling_spouse + } + } + ai_chance = { + base = 100 + modifier = { + has_activity_intent = reduce_stress_intent + add = 100 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + } +} + +################################################## +# Romantic Scouting +# by Claudia Baldassi +# ep2_wedding.1150 +################################################## + +# Seduction Intent: target scouting + +ep2_wedding.1150 = { + type = activity_event + title = ep2_wedding.1150.t + desc = { + desc = ep2_wedding.1150.desc + first_valid = { + triggered_desc = { + trigger = { + scope:intent_target = { + OR = { + has_trait = shy + has_trait = compassionate + } + } + } + desc = ep2_wedding.1150.desc_1 + } + triggered_desc = { + trigger = { + scope:intent_target = { + OR = { + has_trait = gluttonous + has_trait = drunkard + } + } + } + desc = ep2_wedding.1150.desc_2 + } + triggered_desc = { + trigger = { + scope:intent_target = { + OR = { + has_trait = callous + has_trait = cynical + } + } + } + desc = ep2_wedding.1150.desc_3 + } + triggered_desc = { + trigger = { + scope:intent_target = { + has_trait = zealous + } + } + desc = ep2_wedding.1150.desc_4 + } + desc = ep2_wedding.1150.desc_fallback + } + desc = ep2_wedding.1150.desc_conclusion + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = flirtation_left + } + right_portrait = { + character = scope:intent_target + animation = personality_content + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + has_activity_intent = woo_attendee_intent + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + NOR = { + intent_target = scope:activity.special_guest:spouse_1 + intent_target = scope:activity.special_guest:spouse_2 + } + intent_target = { is_ai = yes } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = busy_in_ceremony_event + intent_target = { + save_scope_as = intent_target + add_character_flag = busy_in_ceremony_event + } + } + + # Option A: approach with diplo + option = { + name = ep2_wedding.1150.a + duel = { + skill = diplomacy + target = scope:intent_target + # Success: you make a good impression + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1150.a.success + send_interface_toast = { + title = ep2_wedding.1150.a.success.tt + left_icon = root + right_icon = scope:intent_target + progress_towards_lover_effect = { + REASON = lover_impressed_by_talk + CHARACTER = scope:intent_target + OPINION = 15 + } + if = { + limit = { + has_lifestyle = diplomacy_lifestyle + } + add_diplomacy_lifestyle_xp = major_lifestyle_experience + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + lustful = major_stress_impact_loss + } + } + scope:activity = { + add_activity_log_entry = { + key = seduction_good_impression_log + tags = { good } + score = 50 + character = root + target = scope:intent_target + } + } + } + # Failure: target is not impress + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1150.a.failure + send_interface_toast = { + title = ep2_wedding.1150.a.failure.tt + left_icon = root + right_icon = scope:intent_target + scope:intent_target = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + shy = medium_stress_impact_gain + lustful = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + diplomacy >= average_skill_level + add = 50 + } + } + } + + # Option B: approach with intrigue + option = { + name = ep2_wedding.1150.b + duel = { + skill = intrigue + target = scope:intent_target + # Success: you make a good impression + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1150.a.success + send_interface_toast = { + title = ep2_wedding.1150.a.success.tt + left_icon = root + right_icon = scope:intent_target + progress_towards_lover_effect = { + REASON = lover_impressed_by_talk + CHARACTER = scope:intent_target + OPINION = 15 + } + if = { + limit = { + has_lifestyle = intrigue_lifestyle + } + add_intrigue_lifestyle_xp = major_lifestyle_experience + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + lustful = major_stress_impact_loss + } + } + scope:activity = { + add_activity_log_entry = { + key = seduction_good_impression_log + tags = { good } + score = 50 + character = root + target = scope:intent_target + } + } + } + # Failure: target is not impress + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1150.a.failure + send_interface_toast = { + title = ep2_wedding.1150.a.failure.tt + left_icon = root + right_icon = scope:intent_target + scope:intent_target = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + shy = medium_stress_impact_gain + lustful = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + intrigue >= average_skill_level + add = 50 + } + } + } + + # Option C: approach with learning + option = { + name = ep2_wedding.1150.c + duel = { + skill = learning + target = scope:intent_target + # Success: you make a good impression + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1150.a.success + send_interface_toast = { + title = ep2_wedding.1150.a.success.tt + left_icon = root + right_icon = scope:intent_target + progress_towards_lover_effect = { + REASON = lover_impressed_by_talk + CHARACTER = scope:intent_target + OPINION = 15 + } + if = { + limit = { + has_lifestyle = learning_lifestyle + } + add_learning_lifestyle_xp = major_lifestyle_experience + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + lustful = major_stress_impact_loss + } + } + scope:activity = { + add_activity_log_entry = { + key = seduction_good_impression_log + tags = { good } + score = 50 + character = root + target = scope:intent_target + } + } + } + # Failure: target is not impress + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1150.a.failure + send_interface_toast = { + title = ep2_wedding.1150.a.failure.tt + left_icon = root + right_icon = scope:intent_target + scope:intent_target = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + shy = medium_stress_impact_gain + lustful = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + learning >= average_skill_level + add = 50 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:intent_target = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# Gatecrashers +# by Claudia Baldassi +# ep2_wedding.1160 +################################################## + +# Some pesants are at the gate of the festivity - what do you do? + +ep2_wedding.1160 = { + type = activity_event + title = ep2_wedding.1160.t + desc = ep2_wedding.1160.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = schadenfreude + } + + lower_right_portrait = scope:host + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + has_activity_intent = banquet_mischief_intent + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + scope:activity = { + NOT = { + has_variable = has_had_1160_event + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_1160_event + } + } + + # Option A: let the peasants in + option = { + name = ep2_wedding.1160.a + flavor = ep2_wedding.1160.a.tt + # for the follow-up event + root = { + save_scope_as = mischief_maker + } + scope:host = { trigger_event = ep2_wedding.1161 } + stress_impact = { + base = minor_stress_impact_loss + wrathful = medium_stress_impact_loss + impatient = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + deceitful = major_stress_impact_loss + arbitrary = major_stress_impact_loss + callous = major_stress_impact_loss + fickle = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + add = 50 + } + modifier = { + has_trait = arbitrary + add = 50 + } + modifier = { + has_trait = callous + add = 50 + } + modifier = { + has_trait = fickle + add = 50 + } + } + } + + # Option B: smuggle food to the pesants + option = { + name = ep2_wedding.1160.b + flavor = ep2_wedding.1160.b.tt + stress_impact = { + base = minor_stress_impact_loss + gluttonous = medium_stress_impact_loss + diligent = medium_stress_impact_loss + generous = major_stress_impact_loss + humble = major_stress_impact_loss + gregarious = major_stress_impact_loss + compassionate = massive_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = generous + add = 50 + } + modifier = { + has_trait = humble + add = 50 + } + modifier = { + has_trait = gregarious + add = 50 + } + modifier = { + has_trait = compassionate + add = 50 + } + } + } + + # Option C: this is below me + option = { + name = ep2_wedding.1160.c + stress_impact = { + greedy = minor_stress_impact_loss + temperate = minor_stress_impact_loss + lazy = minor_stress_impact_loss + honest = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + add = 50 + } + modifier = { + has_trait = honest + add = 50 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + } +} + +# Follow-up for the host + +ep2_wedding.1161 = { + type = activity_event + title = ep2_wedding.1160.t + desc = ep2_wedding.1161.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = anger + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = busy_in_ceremony_event + } + + # Option A: kick them out! + option = { + name = ep2_wedding.1161.a + duel = { + skill = martial + value = average_skill_rating + 50 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1161.success + send_interface_toast = { + title = ep2_wedding.1161.success.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_peasant_invasion_managed_log + tags = { good } + score = 20 + character = root + + root = { + add_character_modifier = { + modifier = wedding_enforced_security_modifier + years = 10 + } + } + } + } + + stress_impact = { + base = minor_stress_impact_loss + wrathful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + callous = major_stress_impact_loss + paranoid = massive_stress_impact_loss + } + } + scope:mischief_maker = { + send_interface_toast = { + title = ep2_wedding.1161.success.tt2 + left_icon = root + } + } + } + 50 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1161.failure + send_interface_toast = { + title = ep2_wedding.1161.failure.tt + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_peasant_invasion_not_managed_log + tags = { bad } + score = 20 + character = root + + root = { + add_character_modifier = { + modifier = wedding_peasants_overrun_modifier + years = 10 + } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + callous = medium_stress_impact_gain + paranoid = major_stress_impact_gain + } + } + scope:mischief_maker = { + send_interface_toast = { + title = ep2_wedding.1161.failure.tt2 + left_icon = root + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option B: let them stay + option = { + name = ep2_wedding.1161.b + scope:activity = { + add_activity_log_entry = { + key = wedding_peasant_invasion_stay_log + tags = { bad } + score = 20 + character = root + + root.location.county = { + add_county_modifier = { + modifier = wedding_peasants_connections_county_modifier + years = 10 + } + } + } + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + stress_impact = { + base = medium_stress_impact_loss + } + } + else = { + stress_impact = { + generous = medium_stress_impact_loss + humble = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + paranoid = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + } + scope:mischief_maker = { + send_interface_toast = { + title = ep2_wedding.1161.b.tt + left_icon = root + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + add = 50 + } + modifier = { + has_trait = gregarious + add = 50 + } + modifier = { + has_trait = humble + add = 50 + } + modifier = { + has_trait = generous + add = 50 + } + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + } +} + +################################################## +# The Parade +# by Claudia Baldassi +# ep2_wedding.1170 +################################################## + +# A spouse has arrived with a whole parade. Interact with it + +ep2_wedding.1170 = { + type = activity_event + title = ep2_wedding.1170.t + desc = { + desc = ep2_wedding.1170.desc + triggered_desc = { + trigger = { + has_activity_intent = reduce_stress_intent + } + desc = ep2_wedding.1170.desc_relax + } + triggered_desc = { + trigger = { + has_activity_intent = banquet_mischief_intent + } + desc = ep2_wedding.1170.desc_mischief + } + triggered_desc = { + trigger = { + has_activity_intent = murder_attendee_intent + } + desc = ep2_wedding.1170.desc_murder + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = ecstasy + } + lower_center_portrait = scope:rich_spouse + lower_right_portrait = scope:murderee + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + OR = { + scope:activity.special_guest:spouse_1 = { + NOT = { is_close_or_extended_family_of = root } + is_lowborn = no + is_ai = yes + location = scope:activity.activity_location + } + scope:activity.special_guest:spouse_2 = { + NOT = { is_close_or_extended_family_of = root } + is_lowborn = no + is_ai = yes + location = scope:activity.activity_location + } + } + NOT = { + scope:activity = { + has_variable = has_had_event_1170 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + add = 2 + } + modifier = { + has_activity_intent = murder_attendee_intent + add = 1 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_event_1170 + } + random_list = { + 50 = { + trigger = { + scope:activity.special_guest:spouse_1 = { + NOT = { is_close_or_extended_family_of = root } + is_lowborn = no + is_ai = yes + } + } + scope:activity.special_guest:spouse_1 = { save_scope_as = rich_spouse } + } + 50 = { + trigger = { + scope:activity.special_guest:spouse_2 = { + NOT = { is_close_or_extended_family_of = root } + is_lowborn = no + is_ai = yes + } + } + scope:activity.special_guest:spouse_2 = { save_scope_as = rich_spouse } + } + } + if = { + limit = { + has_activity_intent = murder_attendee_intent + } + intent_target = { + save_scope_as = murderee + add_character_flag = busy_in_ceremony_event + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_parade_arrival_log + tags = { good } + score = 20 + character = scope:rich_spouse + } + } + } + + # Option A: Pocket some horseshoes + option = { + name = ep2_wedding.1170.a + flavor = ep2_wedding.1170.a.tt + add_gold = minor_gold_value + stress_impact = { + greedy = medium_stress_impact_loss + generous = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + # Option B: What a show + option = { + name = ep2_wedding.1170.b + trigger = { + NOT = { + has_activity_intent = reduce_stress_intent + } + } + flavor = ep2_wedding.1170.b.tt + stress_impact = { + base = minor_stress_impact_loss + generous = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + # Option C: Enjoy the show + option = { + name = ep2_wedding.1170.c + trigger = { + has_activity_intent = reduce_stress_intent + } + reason = activity_intent + stress_impact = { + base = medium_stress_impact_loss + humble = major_stress_impact_loss + compassionate = major_stress_impact_loss + gregarious = major_stress_impact_loss + trusting = major_stress_impact_loss + generous = major_stress_impact_loss + } + ai_chance = { + base = 200 + } + } + + # Option D: mayhem + option = { + name = ep2_wedding.1170.d + trigger = { + has_activity_intent = banquet_mischief_intent + } + reason = activity_intent + add_character_modifier = { + modifier = wedding_parade_mayhem_modifier + years = 5 + } + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 200 + } + } + + # Option E: try to kill + option = { + name = ep2_wedding.1170.e + trigger = { + has_activity_intent = murder_attendee_intent + } + flavor = ep2_wedding.1170.e.tt + reason = activity_intent + duel = { + skills = { intrigue prowess } + target = scope:murderee + 40 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1170.success + send_interface_toast = { + title = ep2_wedding.1170.success.tt + left_icon = root + right_icon = scope:murderee + scope:activity = { + add_activity_log_entry = { + key = wedding_parade_death_log + tags = { good } + score = 20 + character = scope:rich_spouse + target = scope:murderee + } + } + scope:murderee = { + death = { + killer = root + death_reason = death_plotting + } + } + complete_activity_intent = yes + stress_impact = { + base = minor_stress_impact_loss + vengeful = medium_stress_impact_loss + paranoid = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + } + } + } + 60 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1170.failure + send_interface_toast = { + title = ep2_wedding.1170.failure.tt + left_icon = root + right_icon = scope:murderee + stress_impact = { + base = minor_stress_impact_gain + vengeful = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 200 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + if = { + limit = { + intent_target ?= { has_character_flag = busy_in_ceremony_event } + } + intent_target = { remove_character_flag = busy_in_ceremony_event } + } + } +} + +################################################## +# A Bad Match +# by Claudia Baldassi +# ep2_wedding.1180 +################################################## + +# Your spouse doesn't really like you... + +ep2_wedding.1180 = { + type = activity_event + title = ep2_wedding.1180.t + desc = ep2_wedding.1180.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:other_spouse + animation = disgust + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + OR = { + root.betrothed ?= { + trait_compatibility = { + target = root + value <= low_negative_trait_compatibility + } + } + root.betrothed ?= { + save_temporary_opinion_value_as = { + name = target_opinion + target = root + } + scope:target_opinion < 0 + } + } + root.betrothed ?= { + has_any_good_relationship_with_root_trigger = no + is_ai = yes + } + } + + + weight_multiplier = { + base = 1 + modifier = { + betrothed = { has_any_bad_relationship_with_root_trigger = yes } + add = 1 + } + modifier = { + betrothed = { has_trait = fickle } + add = 1 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + betrothed = { + save_scope_as = other_spouse + add_character_flag = busy_in_ceremony_event + } + scope:activity = { set_variable = has_had_event_1180 } + } + + # Option A: it doesn't matter + option = { + name = ep2_wedding.1180.a + add_character_modifier = { + modifier = wedding_political_mentality_modifier + years = 10 + } + scope:other_spouse = { + add_opinion = { + target = root + modifier = hurt_opinion + opinion = -20 + } + } + stress_impact = { + humble = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 50 + } + modifier = { + has_trait = callous + add = 50 + } + } + } + + # Option B: I'll make you like me! + option = { + name = ep2_wedding.1180.b + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = scope:other_spouse + } + progress_towards_lover_effect = { + CHARACTER = scope:other_spouse + REASON = lover_wedding_trying_hard + OPINION = default_lover_opinion + } + } + else_if = { + limit = { + can_start_scheme = { + type = seduce + target_character = scope:other_spouse + } + } + start_scheme = { + type = seduce + target_character = scope:other_spouse + } + } + else_if = { + limit = { + any_scheme = { + type = seduce + scheme_target_character = scope:other_spouse + } + } + random_scheme = { + type = seduce + limit = { + scheme_target_character = scope:other_spouse + } + add_scheme_progress = scheme_progress_gain + } + } + else = { + scope:other_spouse = { + add_opinion = { + target = root + modifier = making_an_effort_opinion + } + } + } + if = { + limit = { + scope:other_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:other_spouse + } + stress_impact = { + arrogant = minor_stress_impact_gain + fickle = minor_stress_impact_gain + lustful = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = lustful + add = 50 + } + } + } + + # Option C: don't care! + option = { + name = ep2_wedding.1180.c + trigger = { + has_activity_intent = reduce_stress_intent + } + reason = activity_intent + scope:other_spouse = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + stress_impact = { + base = major_stress_impact_loss + } + ai_chance = { + base = 150 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:other_spouse = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# Religious Complaints +# by Claudia Baldassi +# ep2_wedding.1190 +################################################## + +# Religious guest complains about lavishness, luxury, wastes, and unchaste mingling + +ep2_wedding.1190 = { + type = activity_event + title = ep2_wedding.1190.t + desc = ep2_wedding.1190.desc + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:grumbler + animation = personality_zealous + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { + root = scope:host + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + scope:activity = { + any_attending_character = { + NOR = { + this = root + this = scope:host + } + OR = { + this = root.faith.religious_head + has_trait = devoted + has_trait = theologian + has_trait = zealous + } + faith = { + NOR = { + trait_is_virtue = lustful + trait_is_virtue = gluttonous + } + } + } + NOT = { + has_variable = has_had_1190 + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = busy_in_ceremony_event + scope:activity = { + set_variable = has_had_1190 + random_attending_character = { + limit = { + NOR = { + this = root + this = scope:host + } + this = root.faith.religious_head + faith = { + NOR = { + trait_is_virtue = lustful + trait_is_virtue = gluttonous + } + } + } + alternative_limit = { + NOR = { + this = root + this = scope:host + } + has_trait = devoted + faith = { + NOR = { + trait_is_virtue = lustful + trait_is_virtue = gluttonous + } + } + } + alternative_limit = { + NOR = { + this = root + this = scope:host + } + has_trait = theologian + faith = { + NOR = { + trait_is_virtue = lustful + trait_is_virtue = gluttonous + } + } + } + alternative_limit = { + NOR = { + this = root + this = scope:host + } + has_trait = zealous + faith = { + NOR = { + trait_is_virtue = lustful + trait_is_virtue = gluttonous + } + } + } + save_scope_as = grumbler + add_character_flag = busy_in_ceremony_event + } + add_activity_log_entry = { + key = wedding_religious_complaints_log + tags = { bad } + score = 20 + character = scope:grumbler + } + } + } + + # Option A: repent + option = { + name = ep2_wedding.1190.a + scope:grumbler = { + add_opinion = { + target = root + modifier = pious_opinion + opinion = 20 + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + has_trait = zealous + } + } + } + scope:activity = { + every_attending_character = { + limit = { + has_trait = zealous + this != scope:grumbler + this != root + } + custom = every_zealous_attending_character + add_opinion = { + target = root + modifier = pious_opinion + opinion = 5 + } + } + } + } + if = { + limit = { + has_lifestyle = learning_lifestyle + } + add_learning_lifestyle_xp = medium_lifestyle_experience + } + stress_impact = { + zealous = medium_stress_impact_loss + humble = minor_stress_impact_loss + temperate = minor_stress_impact_loss + chaste = minor_stress_impact_loss + cynical = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + gluttonous = medium_stress_impact_gain + lustful = medium_stress_impact_gain + drunkard = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1.5 + } + } + } + + # Option B: kick them out + option = { + name = ep2_wedding.1190.b + trigger = { + root = scope:host + } + scope:grumbler = { + remove_from_activity = scope:activity + } + progress_towards_rival_effect = { + CHARACTER = scope:grumbler + REASON = rival_kicked_out_priest + OPINION = default_rival_opinion + } + stress_impact = { + zealous = major_stress_impact_gain + cynical = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + gluttonous = medium_stress_impact_loss + lustful = medium_stress_impact_loss + drunkard = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = gluttonous + add = 25 + } + modifier = { + has_trait = lustful + add = 50 + } + modifier = { + has_trait = cynical + add = 50 + } + modifier = { + has_trait = drunkard + add = 50 + } + } + } + + # Option C: ignore + option = { + name = ep2_wedding.1190.c + scope:grumbler = { + add_opinion = { + target = root + modifier = ignored_opinion + opinion = -5 + } + } + stress_impact = { + zealous = medium_stress_impact_gain + cynical = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + gluttonous = minor_stress_impact_loss + lustful = minor_stress_impact_loss + drunkard = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + # Option D: yes, and I will enjoy it too! + option = { + name = ep2_wedding.1190.d + trigger = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = woo_attendee_intent + has_activity_intent = banquet_mischief_intent + } + } + reason = activity_intent + scope:grumbler = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -20 + } + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = { + NOR = { + this = scope:grumbler + has_trait = zealous + } + } + } + root = { + progress_towards_lover_effect = { + CHARACTER = root.intent_target + REASON = lover_daring_move + OPINION = default_lover_opinion + } + } + } + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 200 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:grumbler = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# A Parent's Heart +# by Claudia Baldassi +# ep2_wedding.1200 +################################################## + +# Proud parent watches everything go well and brags with intent target/friend/rival/neighbor + +ep2_wedding.1200 = { + type = activity_event + title = ep2_wedding.1200.t + desc = { + desc = ep2_wedding.1200.desc + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_activity_intent = woo_attendee_intent + has_activity_intent = diplomatic_intent + has_activity_intent = matchmaking_intent + scope:listener = { has_relation_rival = root } + scope:listener = { has_relation_potential_rival = root} + } + } + desc = ep2_wedding.1200.desc_interest + } + desc = ep2_wedding.1200.desc_generic + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = wedding_happy_cry + } + center_portrait = { + character = scope:my_child + animation = wrestling_victory + } + right_portrait = { + character = scope:listener + animation = boredom + } + lower_left_portrait = scope:my_child + lower_center_portrait = scope:intent_target + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + OR = { + scope:activity.special_guest:spouse_1 = { is_child_of = root } + scope:activity.special_guest:spouse_2 = { is_child_of = root } + } + # Incest alert + NOR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + scope:activity = { + any_attending_character = { + NOR = { + this = root + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + } + trigger_if = { + limit = { + has_activity_intent = matchmaking_intent + } + OR = { + root.intent_target = { has_variable = wedding_good_match } + scope:activity = { + any_attending_character = { + is_ai = yes + location = root.location + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + root.intent_target.var:wedding_no_match ?= this + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = woo_attendee_intent + add = 1 + } + modifier = { + has_activity_intent = diplomatic_intent + add = 1 + } + modifier = { + has_activity_intent = matchmaking_intent + add = 1 + } + modifier = { + root = scope:host + add = 2 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + if = { + limit = { + scope:activity.special_guest:spouse_1 = { is_child_of = root } + } + scope:activity.special_guest:spouse_1 = { save_scope_as = my_child } + } + else = { + scope:activity.special_guest:spouse_2 = { save_scope_as = my_child } + } + if = { + limit = { + OR = { + has_activity_intent = woo_attendee_intent + has_activity_intent = diplomatic_intent + } + } + intent_target = { save_scope_as = listener } + } + else_if = { + limit = { + has_activity_intent = matchmaking_intent + intent_target = { has_variable = wedding_good_match } + } + intent_target.var:wedding_good_match = { save_scope_as = listener } + } + else_if = { + limit = { + has_activity_intent = matchmaking_intent + } + scope:activity = { + random_attending_character = { + limit = { + is_ai = yes + location = root.location + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + has_character_flag = busy_in_wgathering_event + is_close_or_extended_family_of = root.intent_target + root.intent_target.var:wedding_no_match ?= this + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } + } + save_scope_as = listener + } + } + } + else_if = { + limit = { + scope:activity = { + any_attending_character = { + OR = { + has_relation_friend = root + has_relation_rival = root + has_relation_lover = root + has_relation_potential_friend = root + has_relation_potential_rival = root + has_relation_potential_lover = root + } + NOR = { + this = scope:my_child + this = scope:my_child.betrothed + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + OR = { + has_relation_friend = root + has_relation_rival = root + has_relation_lover = root + has_relation_potential_friend = root + has_relation_potential_rival = root + has_relation_potential_lover = root + } + NOR = { + this = scope:my_child + this = scope:my_child.betrothed + } + } + save_scope_as = listener + } + } + } + else = { + scope:activity = { + random_attending_character = { + limit = { + NOR = { + this = root + this = scope:my_child + this = scope:my_child.betrothed + } + } + save_scope_as = listener + } + } + } + scope:listener = { add_character_flag = busy_in_ceremony_event } + if = { + limit = { + has_activity_intent = matchmaking_intent + } + intent_target = { save_scope_as = intent_target } + } + } + + # Option A: So proud + option = { + name = ep2_wedding.1200.a + add_prestige = minor_prestige_gain + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_gain } + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:listener } + add = 50 + } + } + } + + # Option B: Aren't you jealous + option = { + name = ep2_wedding.1200.b + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:listener } + } + progress_towards_rival_effect = { + CHARACTER = scope:listener + REASON = rival_rubbed_it_in + OPINION = default_rival_opinion + } + } + else_if = { + limit = { + has_relation_rival = scope:listener + num_of_relation_nemesis = 0 + } + set_relation_nemesis = { + target = scope:listener + reason = rival_rubbed_it_in + } + } + else = { + reverse_add_opinion = { + target = scope:listener + modifier = annoyed_opinion + opinion = -15 + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_gloating_log + tags = { bad } + score = 20 + character = root + target = scope:listener + } + } + stress_impact = { + vengeful = medium_stress_impact_loss + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + paranoid = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:listener } + add = 50 + } + modifier = { + has_trait = vengeful + add = 25 + } + modifier = { + has_trait = callous + add = 25 + } + } + } + + # Option C: Woo - what about *us* + option = { + name = ep2_wedding.1200.c + trigger = { + has_activity_intent = woo_attendee_intent + } + reason = activity_intent + duel = { + skill = intrigue + target = scope:listener + 50 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + scope:listener = { has_trait = lustful } + add = 15 + } + desc = ep2_wedding.1200.success + send_interface_toast = { + title = ep2_wedding.1200.success.tt + left_icon = root + right_icon = scope:listener + progress_towards_lover_effect = { + CHARACTER = scope:listener + REASON = lover_love_is_in_the_air + OPINION = default_lover_opinion + } + stress_impact = { + base = minor_stress_impact_loss + lustful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + } + } + } + 50 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:listener = { has_trait = chaste } + add = 15 + } + desc = ep2_wedding.1200.failure + send_interface_toast = { + title = ep2_wedding.1200.failure.tt + left_icon = root + right_icon = scope:listener + scope:listener = { + add_opinion = { + target = root + modifier = awkward_opinion + opinion = -10 + } + } + stress_impact = { + base = minor_stress_impact_gain + lustful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 200 + } + } + + # Option D: Diplo: impressive show of power + option = { + name = ep2_wedding.1200.d + flavor = ep2_wedding.1200.d.tt + trigger = { + has_activity_intent = diplomatic_intent + } + reason = activity_intent + duel = { + skill = diplomacy + target = scope:listener + 40 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + root = scope:host + add = 10 + } + modifier = { + scope:listener = { has_trait = trusting } + add = 10 + } + desc = ep2_wedding.1200.success + send_interface_toast = { + title = ep2_wedding.1200.success.tt + left_icon = root + right_icon = scope:listener + complete_activity_intent = yes + scope:activity = { + add_activity_log_entry = { + key = wedding_alliance_log + tags = { good } + score = 20 + character = root + target = scope:listener + + root = { + create_alliance = { + target = scope:listener + allied_through_owner = root + allied_through_target = scope:listener + } + } + scope:listener = { + add_opinion = { + target = root + modifier = event_negotiated_alliance_opinion + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + } + } + } + 60 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:listener = { has_trait = paranoid } + add = 20 + } + desc = ep2_wedding.1200.failure + send_interface_toast = { + title = ep2_wedding.1200.failure.tt + left_icon = root + right_icon = scope:listener + stress_impact = { + base = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 200 + } + } + + # Option E: Matchmaking: if only I could do the same for X + option = { + name = ep2_wedding.1200.e + trigger = { + has_activity_intent = matchmaking_intent + } + reason = activity_intent + duel = { + skills = { diplomacy intrigue } + target = scope:listener + 50 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1200.e.success + send_interface_toast = { + title = ep2_wedding.1200.e.success + left_icon = root + right_icon = scope:listener + custom_tooltip = ep2_wedding.1200.e.success.tt + if = { + limit = { + intent_target = { + NOT = { + has_variable = wedding_good_match + } + } + } + intent_target = { + set_variable = { + name = wedding_good_match + value = scope:listener + } + } + } + else = { + intent_target = { + create_betrothal = scope:listener + } + } + scope:listener = { + add_opinion = { + target = root + modifier = flattered_opinion + opinion = 15 + } + } + scope:listener = { + add_opinion = { + target = scope:intent_target + modifier = flattered_opinion + opinion = 15 + } + } + stress_impact = { + base = minor_stress_impact_loss + family_first = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + } + } + } + 50 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1200.e.failure + send_interface_toast = { + title = ep2_wedding.1200.e.failure + left_icon = root + right_icon = scope:listener + intent_target = { + set_variable = { + name = wedding_no_match + value = scope:listener + } + } + scope:listener = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -10 + } + } + stress_impact = { + base = minor_stress_impact_gain + family_first = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 200 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:listener = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# Political Talk +# by Claudia Baldassi +# ep2_wedding.1210 +################################################## + +# Political talk with a fellow ruler + +ep2_wedding.1210 = { + type = activity_event + title = ep2_wedding.1210.t + desc = { + desc = ep2_wedding.1210.desc + random_valid = { + triggered_desc = { + trigger = { + scope:talk_to.gold < 0 + } + desc = ep2_wedding.1210.desc_gold + } + triggered_desc = { + trigger = { + scope:talk_to = { + OR = { + has_trait = shy + has_trait = craven + } + } + } + desc = ep2_wedding.1210.desc_fear + } + triggered_desc = { + trigger = { + scope:talk_to = { + any_sub_realm_county = { + any_county_province = { + has_province_modifier = recently_looted_modifier + } + } + } + } + desc = ep2_wedding.1210.desc_raids + } + triggered_desc = { + trigger = { + scope:talk_to = { + OR = { + any_relation = { + type = rival + } + has_trait = paranoid + } + } + } + desc = ep2_wedding.1210.desc_rivals + } + triggered_desc = { + trigger = { + scope:talk_to = { + age > 65 + } + } + desc = ep2_wedding.1210.desc_age + } + desc = ep2_wedding.1210.desc_bad_harvest + desc = ep2_wedding.1210.desc_rain + desc = ep2_wedding.1210.desc_enemies + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:talk_to + animation = thinking + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + is_landed = yes + has_activity_intent = diplomatic_intent + intent_target = { + is_landed = yes + NOT = { is_vassal_of = root } + is_ai = yes + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + NOR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = busy_in_ceremony_event + intent_target = { + save_scope_as = talk_to + add_character_flag = busy_in_ceremony_event + } + } + + # Option A: gain hook + option = { + name = ep2_wedding.1210.a + trigger = { + can_add_hook = { + target = scope:talk_to + type = threat_hook + } + } + duel = { + skill = intrigue + target = scope:talk_to + 50 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = schemer + add = 10 + } + modifier = { + has_trait = torturer + add = 20 + } + modifier = { + scope:talk_to = { has_trait = lazy } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = craven } + add = 20 + } + desc = ep2_wedding.1210.a.success + send_interface_toast = { + title = ep2_wedding.1210.a.success + left_icon = root + right_icon = scope:talk_to + scope:activity = { + add_activity_log_entry = { + key = wedding_intimidation_log + tags = { good } + score = 20 + character = root + target = scope:talk_to + + root = { + add_hook = { + target = scope:talk_to + type = threat_hook + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + deceitful = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + } + } + } + 50 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:talk_to = { has_trait = torturer } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = brave } + add = 20 + } + desc = ep2_wedding.1210.a.failure + send_interface_toast = { + title = ep2_wedding.1210.a.failure + left_icon = root + right_icon = scope:talk_to + reverse_add_opinion = { + target = scope:talk_to + modifier = threatened_opinion + opinion = -20 + } + stress_impact = { + base = minor_stress_impact_gain + deceitful = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option B: gain alliance + option = { + name = ep2_wedding.1210.b + duel = { + skill = diplomacy + target = scope:talk_to + 40 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = diplomat + add = 20 + } + modifier = { + has_trait = august + add = 10 + } + modifier = { + scope:talk_to = { has_trait = lazy } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = trusting } + add = 20 + } + desc = ep2_wedding.1210.b.success + send_interface_toast = { + title = ep2_wedding.1210.b.success + left_icon = root + right_icon = scope:talk_to + complete_activity_intent = yes + scope:activity = { + add_activity_log_entry = { + key = wedding_alliance_log + tags = { good } + score = 20 + character = root + target = scope:talk_to + + root = { + create_alliance = { + target = scope:talk_to + allied_through_owner = root + allied_through_target = scope:talk_to + } + } + scope:talk_to = { + add_opinion = { + target = root + modifier = event_negotiated_alliance_opinion + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + } + } + } + 60 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:talk_to = { has_trait = diplomat } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = august } + add = 10 + } + modifier = { + scope:talk_to = { has_trait = paranoid } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = shy } + add = 20 + } + desc = ep2_wedding.1210.b.failure + send_interface_toast = { + title = ep2_wedding.1210.b.failure + left_icon = root + right_icon = scope:talk_to + scope:talk_to = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -10 + } + } + stress_impact = { + base = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + # Option C: subjugate + option = { + name = ep2_wedding.1210.c + trigger = { + scope:talk_to = { activity_wedding_diplomatic_intent_impressible_target = yes } + } + duel = { + skills = { diplomacy intrigue } + target = scope:talk_to + 30 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = diplomat + add = 20 + } + modifier = { + has_trait = august + add = 10 + } + modifier = { + scope:talk_to = { has_trait = trusting } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = craven } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = shy } + add = 20 + } + desc = ep2_wedding.1210.c.success + send_interface_toast = { + title = ep2_wedding.1210.c.success + left_icon = root + right_icon = scope:talk_to + complete_activity_intent = yes + scope:activity = { + add_activity_log_entry = { + key = wedding_fealty_log + tags = { good } + score = 20 + character = root + target = scope:talk_to + + root = { + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = title_change + add_claim_on_loss = no + } + scope:talk_to = { + change_liege = { + liege = root + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + } + } + } + stress_impact = { + base = minor_stress_impact_loss + ambitious = major_stress_impact_loss + } + } + } + 70 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:talk_to = { has_trait = diplomat } + add = 20 + } + modifier = { + scope:talk_to = { has_trait = august } + add = 10 + } + modifier = { + scope:talk_to = { has_trait = paranoid } + add = 20 + } + desc = ep2_wedding.1210.c.failure + send_interface_toast = { + title = ep2_wedding.1210.c.failure + left_icon = root + right_icon = scope:talk_to + scope:talk_to = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -20 + } + } + stress_impact = { + base = minor_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:talk_to = { remove_character_flag = busy_in_ceremony_event } + } +} + +################################################## +# Poisonous Relations +# by Claudia Baldassi +# ep2_wedding.1220 +################################################## + +# In-laws are bullies (or other close relatives) + +scripted_trigger wedding_1220_valid_relative_trigger = { + is_ai = yes + is_adult = yes + is_close_family_of = $RELATIVE_SPOUSE$ + NOT = { is_close_family_of = $NON_RELATIVE_SPOUSE$ } + NOR = { + this = $RELATIVE_SPOUSE$ + this = $NON_RELATIVE_SPOUSE$ + } + OR = { + # They enjoy making people feel inadequate + has_trait = deceitful + has_trait = vengeful + has_trait = callous + has_trait = torturer + has_trait = greedy + has_trait = sadistic + # Their family is marrying down + highest_held_title_tier > $NON_RELATIVE_SPOUSE$.highest_held_title_tier + $RELATIVE_SPOUSE$.highest_held_title_tier > $NON_RELATIVE_SPOUSE$.highest_held_title_tier + # They are feuding + house_has_feud_relation_with_trigger = { TARGET = $NON_RELATIVE_SPOUSE$ } + # They already didn't like you + has_any_bad_relationship_with_character_trigger = { CHARACTER = $NON_RELATIVE_SPOUSE$ } + opinion = { + target = $NON_RELATIVE_SPOUSE$ + value <= -25 + } + # They think you are a criminal + has_imprisonment_reason = $NON_RELATIVE_SPOUSE$ + # Or a miscreant + faith = { + NOR = { + this = $NON_RELATIVE_SPOUSE$.faith + faith_hostility_level = { + target = $NON_RELATIVE_SPOUSE$.faith + value = 0 # Accepted + } + } + } + } +} + +ep2_wedding.1220 = { + type = activity_event + title = ep2_wedding.1220.t + desc = { + desc = ep2_wedding.1220.desc + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:relative.highest_held_title_tier > root.highest_held_title_tier + scope:other_spouse.highest_held_title_tier > root.highest_held_title_tier + } + } + desc = ep2_wedding.1220.desc_marry_down + } + triggered_desc = { + trigger = { + scope:relative ?= { + house_has_feud_relation_with_trigger = { TARGET = root } + } + } + desc = ep2_wedding.1220.desc_feud + } + triggered_desc = { + trigger = { + scope:relative = { + OR = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + opinion = { + target = root + value <= -25 + } + has_imprisonment_reason = root + } + } + } + desc = ep2_wedding.1220.desc_despicable + } + triggered_desc = { + trigger = { + scope:relative.faith = { + NOR = { + this = root.faith + faith_hostility_level = { + target = root.faith + value = 0 + } + } + } + } + desc = ep2_wedding.1220.desc_miscreant + } + desc = ep2_wedding.1220.desc_fallback + } + triggered_desc = { + trigger = { + has_activity_intent = diplomatic_intent + scope:relative != scope:diplo_target + } + desc = ep2_wedding.1220.desc_target + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = shame + } + center_portrait = { + trigger = { + scope:diplo_target ?= { this != scope:relative } + } + character = scope:diplo_target + animation = thinking + } + right_portrait = { + character = scope:relative + animation = anger + } + + lower_right_portrait = scope:other_spouse + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + trigger_if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + scope:activity = { + any_attending_character = { + wedding_1220_valid_relative_trigger = { + RELATIVE_SPOUSE = scope:activity.special_guest:spouse_2 + NON_RELATIVE_SPOUSE = scope:activity.special_guest:spouse_1 + } + } + } + } + trigger_else = { + scope:activity = { + any_attending_character = { + wedding_1220_valid_relative_trigger = { + RELATIVE_SPOUSE = scope:activity.special_guest:spouse_1 + NON_RELATIVE_SPOUSE = scope:activity.special_guest:spouse_2 + } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_activity_intent = diplomatic_intent + add = 2 + } + modifier = { + has_activity_intent = banquet_mischief_intent + add = 1 + } + } + + immediate = { + add_character_flag = busy_in_ceremony_event + if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + scope:activity.special_guest:spouse_2 = { save_scope_as = other_spouse } + } + else = { + scope:activity.special_guest:spouse_1 = { save_scope_as = other_spouse } + } + scope:activity = { + random_attending_character = { + limit = { + wedding_1220_valid_relative_trigger = { + RELATIVE_SPOUSE = scope:other_spouse + NON_RELATIVE_SPOUSE = root + } + } + save_scope_as = relative + add_character_flag = busy_in_ceremony_event + } + } + if = { + limit = { + has_activity_intent = diplomatic_intent + } + intent_target = { save_scope_as = diplo_target } + } + } + + # Option A: ignore + option = { + name = ep2_wedding.1220.a + add_prestige = minor_prestige_loss + scope:relative = { + add_opinion = { + target = root + modifier = weak_opinion + opinion = 15 + } + } + stress_impact = { + lazy = minor_stress_impact_loss + calm = medium_stress_impact_loss + patient = medium_stress_impact_loss + humble = medium_stress_impact_loss + content = medium_stress_impact_loss + forgiving = major_stress_impact_loss + wrathful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + brave = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + } + } + } + + # Option B: react aggressively + option = { + name = ep2_wedding.1220.b + add_prestige = medium_prestige_gain + scope:relative = { + add_opinion = { + target = root + modifier = threatened_opinion + opinion = -15 + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:relative } + } + progress_towards_rival_effect = { + REASON = rival_wedding_challenged_prejudices + CHARACTER = scope:relative + OPINION = 0 + } + } + stress_impact = { + lazy = minor_stress_impact_gain + calm = medium_stress_impact_gain + patient = medium_stress_impact_gain + humble = medium_stress_impact_gain + craven = medium_stress_impact_gain + shy = medium_stress_impact_gain + paranoid = minor_stress_impact_loss + wrathful = medium_stress_impact_loss + brave = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + stubborn = medium_stress_impact_loss + vengeful = major_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + + # Option C: diplomatic intent: if you handle them well, you can also impress your target (especially if they are the target) + option = { + name = ep2_wedding.1220.c + trigger = { + has_activity_intent = diplomatic_intent + } + flavor = ep2_wedding.1220.c.tt + reason = activity_intent + duel = { + skill = diplomacy + target = scope:relative + 50 = { + # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1220.c.success + send_interface_toast = { + title = ep2_wedding.1220.c.success.tt + left_icon = root + right_icon = scope:relative + scope:activity = { + add_activity_log_entry = { + key = wedding_proved_wrong_log + tags = { good } + score = 50 + character = root + target = scope:relative + + root = { + add_prestige = medium_prestige_gain + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:relative } + } + progress_towards_friend_effect = { + REASON = friend_wedding_not_so_bad + CHARACTER = scope:relative + OPINION = default_friend_opinion + } + } + } + scope:diplo_target ?= { + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 20 + } + if = { + limit = { + this = scope:relative + root = { + can_add_hook = { + target = scope:relative + type = favor_hook + } + } + } + root = { + add_hook = { + target = scope:relative + type = favor_hook + } + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + calm = medium_stress_impact_loss + patient = medium_stress_impact_loss + forgiving = major_stress_impact_loss + } + } + } + 50 = { + # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1220.c.failure + send_interface_toast = { + title = ep2_wedding.1220.c.failure.tt + left_icon = root + right_icon = scope:relative + add_prestige = minor_prestige_loss + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:relative } + } + progress_towards_rival_effect = { + REASON = rival_wedding_confirmed_prejudices + CHARACTER = scope:relative + OPINION = default_rival_opinion + } + } + stress_impact = { + base = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + wrathful = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 200 + } + } + + # Option D: mischief intent: mess with them + option = { + name = ep2_wedding.1220.d + trigger = { + has_activity_intent = banquet_mischief_intent + } + reason = activity_intent + if = { + limit = { + has_lifestyle = intrigue_lifestyle + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + add_dread = minor_dread_gain + stress_impact = { + base = medium_stress_impact_loss + arrogant = major_stress_impact_loss + stubborn = major_stress_impact_loss + vengeful = major_stress_impact_loss + } + ai_chance = { + base = 200 + } + } + + after = { + remove_character_flag = busy_in_ceremony_event + scope:relative = { remove_character_flag = busy_in_ceremony_event } + } +} + + + +# BANQUET EVENTS + +################################################## +# A Kindred Spirit +# by Claudia Baldassi +# ep2_wedding.1040 +################################################## + +# You make a new friend + +ep2_wedding.1040 = { + type = activity_event + title = ep2_wedding.1040.t + desc = ep2_wedding.1040.desc + theme = wedding_banquet_activity + center_portrait = { + character = root + animation = laugh + } + right_portrait = { + character = scope:new_friend + animation = personality_content + } + + cooldown = { years = 1 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + scope:activity = { + any_attending_character = { + OR = { + has_relation_potential_friend = root + AND = { + has_any_good_relationship_with_root_trigger = no + has_any_bad_relationship_with_root_trigger = no + } + } + is_ai = yes + is_adult = yes + NOT = { has_character_flag = busy_in_banquet_event } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + add_character_flag = busy_in_banquet_event + scope:activity = { + random_attending_character = { + limit = { + OR = { + has_relation_potential_friend = root + AND = { + has_any_good_relationship_with_root_trigger = no + has_any_bad_relationship_with_root_trigger = no + } + } + is_ai = yes + is_adult = yes + NOT = { has_character_flag = busy_in_banquet_event } + } + save_scope_as = new_friend + } + } + scope:new_friend = { add_character_flag = busy_in_banquet_event } + } + + #Option A: + option = { + name = ep2_wedding.1040.a + scope:activity = { + add_activity_log_entry = { + key = wedding_kindred_log + tags = { good } + score = 50 + character = root + target = scope:new_friend + + # Effect + root = { + set_relation_friend = { reason = friend_wedding_enjoyable_chat target = scope:new_friend } + reverse_add_opinion = { + target = scope:new_friend + modifier = friendliness_opinion + opinion = 20 + } + } + } + } + stress_impact = { + shy = minor_stress_impact_gain + reclusive = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + trusting = medium_stress_impact_loss + gregarious = major_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + has_trait = shy + add = -50 + } + modifier = { + has_trait = reclusive + add = -75 + } + modifier = { + has_trait = paranoid + add = -75 + } + } + } + + #Option B: + option = { + name = ep2_wedding.1040.b + reverse_add_opinion = { + target = scope:new_friend + modifier = unfriendly_opinion + opinion = -15 + } + stress_impact = { + gregarious = medium_stress_impact_gain + reclusive = major_stress_impact_loss + paranoid = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + add = -75 + } + } + } + after = { + remove_character_flag = busy_in_banquet_event + scope:new_friend = { remove_character_flag = busy_in_banquet_event } + } +} + +################################################## +# A Fiery Dance +# by Claudia Baldassi +# ep2_wedding.1050 +################################################## + +# Someone catches fire from the torches + +scripted_trigger ep2_wedding_extra_victim_valid_trigger = { + is_ai = yes + is_adult = yes + NOR = { + this = root + this = scope:1050_victim + } + NOT = { has_character_flag = busy_in_banquet_event } +} + +ep2_wedding.1050 = { + type = activity_event + title = ep2_wedding.1050.t + desc = ep2_wedding.1050.desc + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = fear + } + center_portrait = { + trigger = { + exists = scope:extra_victim_1 + } + character = scope:extra_victim_1 + animation = shock + } + right_portrait = { + character = scope:victim + animation = pain + } + lower_center_portrait = scope:other_victim + lower_right_portrait = scope:extra_victim_2 + + cooldown = { years = 15 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + NOT = { + has_variable = has_had_event_1050 + } + } + + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_good + } + } + scope:activity = { + any_attending_character = { + is_adult = yes + this != root + is_ai = yes + NOT = { has_character_flag = busy_in_banquet_event } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + scope:activity = { + set_variable = has_had_event_1050 + } + scope:activity = { + random_attending_character = { + limit = { + is_adult = yes + this != root + is_ai = yes + NOT = { has_character_flag = busy_in_banquet_event } + } + save_scope_as = 1050_victim + increase_wounds_effect = { REASON = burned } + add_character_flag = busy_in_banquet_event + } + } + add_character_flag = busy_in_banquet_event + if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_extra_victim_valid_trigger = yes + save_temporary_scope_as = extra_victim_1 + } + } + scope:activity = { + any_attending_character = { + ep2_wedding_extra_victim_valid_trigger = yes + this != scope:extra_victim_1 + } + } + } + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_extra_victim_valid_trigger = yes + } + save_scope_as = extra_victim_1 + add_character_flag = busy_in_banquet_event + } + random_attending_character = { + limit = { + ep2_wedding_extra_victim_valid_trigger = yes + this != scope:extra_victim_1 + } + save_scope_as = extra_victim_2 + add_character_flag = busy_in_banquet_event + } + } + } + if = { + limit = { + scope:activity = { + any_attending_character = { + ep2_wedding_extra_victim_valid_trigger = yes + NOR = { + this = scope:extra_victim_1 + this = scope:extra_victim_2 + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_extra_victim_valid_trigger = yes + NOR = { + this = scope:extra_victim_1 + this = scope:extra_victim_2 + } + } + save_scope_as = other_victim + add_character_flag = busy_in_banquet_event + } + } + } + } + + #Option A: try to save them + option = { + name = ep2_wedding.1050.a + duel = { + skill = prowess + value = decent_skill_rating + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1050.a.success + send_interface_toast = { + title = ep2_wedding.1050.a.success.tt + left_icon = scope:1050_victim + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_rescue_log + tags = { good } + score = 25 + character = root + target = scope:1050_victim + + # Effect + root = { + reverse_add_opinion = { + target = scope:1050_victim + modifier = grateful_opinion + opinion = 30 + } + if = { + limit = { + can_add_hook = { + type = indebted_hook + target = scope:1050_victim + } + } + add_hook = { + type = indebted_hook + target = scope:1050_victim + } + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = scope:1050_victim + } + progress_towards_lover_effect = { + REASON = lover_wedding_saved_from_flames + CHARACTER = scope:1050_victim + OPINION = default_lover_opinion + } + } + else_if = { + limit = { + has_activity_intent = diplomatic_intent + intent_target = scope:1050_victim + } + create_alliance = { + target = scope:1050_victim + allied_through_owner = root + allied_through_target = scope:1050_victim + } + scope:1050_victim = { + add_opinion = { + target = root + modifier = event_negotiated_alliance_opinion + } + } + } + } + } + } + } + } + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1050.a.failure + send_interface_toast = { + title = ep2_wedding.1050.a.failure.tt + left_icon = scope:1050_victim + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_rescue_fail_log + tags = { bad } + score = 25 + character = root + target = scope:1050_victim + + # Effect + root = { + increase_wounds_effect = { REASON = burned } + scope:1050_victim = { + increase_wounds_effect = { REASON = burned } + } + } + } + } + } + } + } + stress_impact = { + craven = massive_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + has_trait = brave + add = 100 + } + modifier = { + has_trait = craven + add = -100 + } + } + } + + #Option B: call for help + option = { + name = ep2_wedding.1050.b + random_list = { + 50 = { + #Saved! + desc = ep2_wedding.1050.b.1 + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + add = -25 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + add = 25 + } + send_interface_toast = { + title = ep2_wedding.1050.b.1.tt + left_icon = scope:1050_victim + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_saved_log + tags = { good } + score = 25 + character = scope:1050_victim + } + + root = { + reverse_add_opinion = { + target = scope:1050_victim + modifier = grateful_opinion + opinion = 15 + } + if = { + limit = { + can_add_hook = { + type = indebted_hook + target = scope:1050_victim + } + } + add_hook = { + type = indebted_hook + target = scope:1050_victim + } + } + } + } + } + } + 50 = { + #Keeps burning! + desc = ep2_wedding.1050.b.2 + send_interface_toast = { + title = ep2_wedding.1050.b.2.tt + left_icon = scope:1050_victim + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_saved_fail_log + tags = { bad } + score = 25 + character = scope:1050_victim + + # Effect + scope:1050_victim = { + increase_wounds_effect = { REASON = burned } + } + } + } + } + } + } + ai_chance = { + base = 50 + } + } + + #Option C: FIRE! + option = { + name = ep2_wedding.1050.c + trigger = { + exists = scope:extra_victim_1 + exists = scope:extra_victim_2 + } + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_disaster_log + tags = { bad } + score = 25 + character = scope:1050_victim + + # Effect + scope:extra_victim_1 = { + increase_wounds_effect = { REASON = burned } + } + scope:extra_victim_2 = { + increase_wounds_effect = { REASON = burned } + } + + root = { add_dread = medium_dread_gain } + } + } + stress_impact = { + compassionate = major_stress_impact_gain + callous = medium_stress_impact_loss + vengeful = major_stress_impact_loss + sadistic = massive_stress_impact_loss + torturer = massive_stress_impact_loss + } + ai_chance = { + base = 30 + modifier = { + has_trait = sadistic + add = 70 + } + modifier = { + has_trait = callous + add = 20 + } + modifier = { + has_trait = compassionate + add = -70 + } + } + } + + #Option D: panic + option = { + name = ep2_wedding.1050.d + trigger = { exists = scope:other_victim } + random = { + chance = 30 + send_interface_toast = { + title = ep2_wedding.1050.d.tt.2 + left_icon = scope:other_victim + scope:activity = { + add_activity_log_entry = { + key = wedding_dance_knocked_log + tags = { bad } + score = 25 + character = root + target = scope:other_victim + + # Effect + root = { custom_tooltip = ep2_wedding.1050.d.tt } + scope:other_victim = { + increase_wounds_effect = { REASON = burned } + } + } + } + } + + } + stress_impact = { + brave = massive_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + has_trait = craven + add = 100 + } + modifier = { + has_trait = brave + add = -100 + } + } + } + after = { + remove_character_flag = busy_in_banquet_event + scope:1050_victim = { remove_character_flag = busy_in_banquet_event } + if = { + limit = { exists = scope:other_victim } + scope:other_victim = { remove_character_flag = busy_in_banquet_event } + } + if = { + limit = { exists = scope:extra_victim_1 } + scope:extra_victim_1 = { remove_character_flag = busy_in_banquet_event } + } + if = { + limit = { exists = scope:extra_victim_2 } + scope:extra_victim_2 = { remove_character_flag = busy_in_banquet_event } + } + } +} + +################################################## +# An Exotic Show +# by Claudia Baldassi +# ep2_wedding.1070 +################################################## + +# Showing off exotic animals can go very well or very wrong + +ep2_wedding.1070 = { + type = activity_event + title = ep2_wedding.1070.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + root = scope:host + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + desc = ep2_wedding.1070.desc_host + } + desc = ep2_wedding.1070.desc_guest + } + desc = ep2_wedding.1070.desc_mid + first_valid = { + triggered_desc = { #Everyone is impressed + trigger = { + has_character_flag = 1070_exotic_fiends_good + } + desc = ep2_wedding.1070.desc_good + } + desc = ep2_wedding.1070.desc_bad #The animals are out of control! + } + triggered_desc = { + trigger = { + exists = scope:1070_target + has_character_flag = 1070_exotic_fiends_bad + } + desc = ep2_wedding.1070.desc_bad_target + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_flag = 1070_exotic_fiends_bad + } + animation = shock + } + triggered_animation = { + trigger = { + has_character_flag = 1070_exotic_fiends_good + } + animation = personality_bold + } + } + right_portrait = { + trigger = { + exists = scope:1070_target + has_character_flag = 1070_exotic_fiends_bad + } + character = scope:1070_target + animation = fear + } + + lower_right_portrait = scope:m_hunt + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_good + } + } + scope:activity = { + NOT = { has_variable = has_had_event_1070 } + } + scope:host = { + has_character_modifier = hunt_captive_beast_modifier + } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:host = { has_trait = arrogant } + add = 1 + } + modifier = { + scope:host = { has_trait = humble } + add = -1 + } + modifier = { + is_ai = no + factor = 2 + } + } + + immediate = { + add_character_flag = busy_in_banquet_event + scope:activity = { set_variable = has_had_event_1070 } + scope:host = { + if = { + limit = { + employs_court_position = master_of_hunt_court_position + any_court_position_holder = { + type = master_of_hunt_court_position + is_ai = yes + is_adult = yes + involved_activity = root.involved_activity + NOT = { has_character_flag = busy_in_banquet_event } + } + } + random_court_position_holder = { + type = master_of_hunt_court_position + limit = { + is_ai = yes + is_adult = yes + involved_activity = root.involved_activity + NOT = { has_character_flag = busy_in_banquet_event } + } + save_scope_as = m_hunt + add_character_flag = busy_in_banquet_event + } + } + } + if = { + limit = { + OR = { + has_activity_intent = murder_attendee_intent + has_activity_intent = woo_attendee_intent + has_activity_intent = diplomatic_intent + } + } + intent_target = { save_scope_as = 1070_target } + } + random_list = { + 50 = { # all goes well + modifier = { + scope:host = { + employs_court_position = master_of_hunt_court_position + } + add = 15 + } + modifier = { + exists = scope:m_hunt + add = 15 + } + modifier = { + scope:host = { + has_trait = lifestyle_hunter + } + add = 25 + } + modifier = { + scope:host = { + has_trait = diligent + } + add = 20 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_good + } + } + add = 20 + } + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_normal + } + } + add = 5 + } + add_character_flag = 1070_exotic_fiends_good + } + 50 = { # a beast escapes! + modifier = { + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + add = 30 + } + modifier = { + scope:host = { + has_trait = arrogant + } + add = 20 + } + modifier = { + scope:host = { + has_trait = lazy + } + add = 15 + } + add_character_flag = 1070_exotic_fiends_bad + if = { + limit = { + this = scope:host + } + stress_impact = { + arrogant = major_stress_impact_gain + ambitious = major_stress_impact_gain + diligent = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + } + } + } + } + + #Option A: a worthy show + option = { + name = ep2_wedding.1070.a + trigger = { has_character_flag = 1070_exotic_fiends_good } + scope:activity = { + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_good_entertainment_opinion + } + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_entertain_log + tags = { good } + score = 20 + character = scope:host + + # Effect + scope:host = { add_prestige = medium_prestige_gain } + } + } + stress_impact = { + base = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + #Option E: I can do better + option = { + name = ep2_wedding.1070.e + flavor = ep2_wedding.1070.e.tt + trigger = { + has_character_flag = 1070_exotic_fiends_good + } + scope:activity = { + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_good_entertainment_opinion + } + } + } + duel = { + skill = prowess + value = high_skill_rating + # Success: you make the beasts do your bid! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1070.e.success + send_interface_toast = { + title = ep2_wedding.1070.e.tt.success + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_charm_success_log + tags = { good } + score = 20 + character = root + + # Effect + root = { + add_character_modifier = { + modifier = ep2_beastmaster_modifier + years = 20 + } + add_prestige = medium_prestige_gain + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != root + } + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 25 + } + } + } + root = { + stress_impact = { + base = minor_stress_impact_loss + brave = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + arrogant = major_stress_impact_loss + ambitious = major_stress_impact_loss + } + } + } + } + # Failure: the beasts disagree with you + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1070.e.failure + send_interface_toast = { + title = ep2_wedding.1070.e.tt.failure + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_charm_failure_log + tags = { bad } + score = 20 + character = root + + # Effect + root = { + random_list = { + 20 = { + custom_tooltip = ep2_wedding.1070.e.tt.failure_1 + scope:activity = { + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != root + } + add_opinion = { + target = root + modifier = laughingstock_opinion + } + } + } + } + 50 = { + increase_wounds_effect = { REASON = wild_animal } + } + 30 = { + trigger = { + NOT = { has_trait = maimed } + } + apply_maimed_trait_and_modifier_effect = yes + } + 30 = { + trigger = { + NOT = { has_trait = one_eyed } + } + add_trait = one_eyed + } + 30 = { + trigger = { + NOT = { has_trait = one_legged } + } + add_trait = one_legged + } + } + } + } + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + lazy = major_stress_impact_gain + content = major_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 75 + } + modifier = { + has_trait = ambitious + add = 50 + } + modifier = { + has_trait = stubborn + add = 50 + } + modifier = { + has_trait = lazy + add = -75 + } + modifier = { + has_trait = content + add = -50 + } + } + } + + #Option B: jump in to save the day! + option = { + name = ep2_wedding.1070.b + trigger = { + has_character_flag = 1070_exotic_fiends_bad + NOT = { exists = scope:1070_target } + } + duel = { + skill = prowess + value = high_skill_rating + # Success: you calm down the beasts + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1070.b.success + send_interface_toast = { + title = ep2_wedding.1070.b.tt.success + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_calmed_success_log + tags = { good } + score = 20 + character = root + + # Effect + root = { + add_character_modifier = { + modifier = ep2_beastmaster_modifier + years = 20 + } + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != root + } + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 25 + } + } + } + root = { + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + lifestyle_hunter = medium_stress_impact_loss + brave = major_stress_impact_loss + gregarious = major_stress_impact_loss + arrogant = major_stress_impact_loss + } + } + } + } + # Failure: the beasts disagree with you + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1070.b.failure + send_interface_toast = { + title = ep2_wedding.1070.e.tt.failure + left_icon = root + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_calmed_failure_log + tags = { good } + score = 20 + character = root + + # Effect + root = { + random_list = { + 50 = { + increase_wounds_effect = { REASON = wild_animal } + } + 30 = { + trigger = { + NOT = { has_trait = maimed } + } + apply_maimed_trait_and_modifier_effect = yes + } + 30 = { + trigger = { + NOT = { has_trait = one_eyed } + } + add_trait = one_eyed + } + 30 = { + trigger = { + NOT = { has_trait = one_legged } + } + add_trait = one_legged + } + } + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + lifestyle_hunter = medium_stress_impact_gain + lazy = medium_stress_impact_gain + craven = major_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 50 + } + modifier = { + has_trait = brave + add = 75 + } + modifier = { + has_trait = compassionate + add = 25 + } + modifier = { + has_trait = lifestyle_hunter + add = 25 + } + modifier = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 50 } + add = 25 + } + modifier = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 } + add = 25 + } + modifier = { + has_trait = lazy + add = -75 + } + modifier = { + has_trait = craven + add = -100 + } + } + } + + #Option G: jump in to save the intent target! + option = { + name = ep2_wedding.1070.g + trigger = { + has_character_flag = 1070_exotic_fiends_bad + exists = scope:1070_target + NOT = { has_activity_intent = murder_attendee_intent } + } + duel = { + skill = prowess + value = high_skill_rating + # Success: you calm down the beasts + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1070.g.success + send_interface_toast = { + title = ep2_wedding.1070.g.tt.success + left_icon = scope:1070_target + set_relation_friend = { reason = friend_wedding_saved_from_beasts target = scope:1070_target } + if = { + limit = { has_activity_intent = woo_attendee_intent } + progress_towards_lover_effect = { + REASON = friend_wedding_saved_from_beasts + CHARACTER = scope:1070_target + OPINION = default_lover_opinion + } + } + else_if = { + limit = { + has_activity_intent = diplomatic_intent + intent_target = scope:1070_target + } + add_hook = { + type = indebted_hook + target = scope:1070_target + } + create_alliance = { + target = scope:1070_target + allied_through_owner = root + allied_through_target = scope:1070_target + } + scope:1070_target = { + add_opinion = { + target = root + modifier = event_negotiated_alliance_opinion + } + } + complete_activity_intent = yes + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_rescue_success_log + tags = { good } + score = 20 + character = root + target = scope:1070_target + + # Effect + root = { + add_character_modifier = { + modifier = ep2_beastmaster_modifier + years = 20 + } + } + scope:1070_target = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 40 + } + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + NOR = { + this = root + this = scope:1070_target + } + } + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 25 + } + } + } + root = { + stress_impact = { + base = minor_stress_impact_loss + ambitious = medium_stress_impact_loss + lifestyle_hunter = medium_stress_impact_loss + brave = major_stress_impact_loss + gregarious = major_stress_impact_loss + arrogant = major_stress_impact_loss + } + } + } + } + # Failure: the beasts disagree with you + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1070.g.failure + send_interface_toast = { + title = ep2_wedding.1070.g.tt.failure + left_icon = root + right_icon = scope:1070_target + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_rescue_failure_log + tags = { bad } + score = 20 + character = root + target = scope:1070_target + + # Effect + root = { + random_list = { + 50 = { + increase_wounds_effect = { REASON = wild_animal } + } + 30 = { + trigger = { + NOT = { has_trait = maimed } + } + apply_maimed_trait_and_modifier_effect = yes + } + 30 = { + trigger = { + NOT = { has_trait = one_eyed } + } + add_trait = one_eyed + } + 30 = { + trigger = { + NOT = { has_trait = one_legged } + } + add_trait = one_legged + + } + } + } + scope:1070_target = { increase_wounds_effect = { REASON = wild_animal } } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + lifestyle_hunter = medium_stress_impact_gain + lazy = medium_stress_impact_gain + craven = major_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 50 + } + modifier = { + has_trait = brave + add = 75 + } + modifier = { + has_trait = compassionate + add = 25 + } + modifier = { + has_trait = lifestyle_hunter + add = 25 + } + modifier = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 50 } + add = 25 + } + modifier = { + hunt_lifestyle_track_greater_equal_trigger = { TRACK = hunter GREATER_EQUAL = 100 } + add = 25 + } + modifier = { + has_trait = lazy + add = -75 + } + modifier = { + has_trait = craven + add = -100 + } + } + } + + #Option H: let the beasts kill your target + option = { + name = ep2_wedding.1070.h + trigger = { + has_character_flag = 1070_exotic_fiends_bad + exists = scope:1070_target + has_activity_intent = murder_attendee_intent + } + reason = activity_intent + scope:1070_target = { + duel = { + skill = prowess + value = high_skill_rating + # Success: they survive + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1070.h.survive + root = { + send_interface_toast = { + title = ep2_wedding.1070.h.tt.survive + left_icon = scope:1070_target + stress_impact = { + ambitious = minor_stress_impact_gain + callous = minor_stress_impact_gain + deceitful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + sadistic = major_stress_impact_gain + } + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_murder_survive_log + tags = { intent murder } + score = 50 + character = scope:1070_target + } + } + } + # Failure: the beasts kill them + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1070.h.kill + root = { + complete_activity_intent = yes + send_interface_toast = { + title = ep2_wedding.1070.h.tt.kill + left_icon = scope:1070_target + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_murder_kill_log + tags = { intent murder } + score = 50 + character = scope:1070_target + + # Effect + scope:1070_target = { + death = { death_reason = death_wild_animal } + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + } + stress_impact = { + compassionate = major_stress_impact_gain + ambitious = minor_stress_impact_loss + callous = minor_stress_impact_loss + deceitful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + vengeful = medium_stress_impact_loss + sadistic = major_stress_impact_loss + } + } + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + add = -75 + } + modifier = { + has_trait = lazy + add = 25 + } + modifier = { + has_trait = craven + add = 100 + } + modifier = { + has_trait = deceitful + add = 100 + } + } + } + + #Option C: call master of hunt + option = { + name = ep2_wedding.1070.c + trigger = { + has_character_flag = 1070_exotic_fiends_bad + exists = scope:m_hunt + this = scope:host + } + duel = { + skill = prowess + value = average_skill_rating + 50 = { + #Master of hunt knows what they are doing + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1070.c.success + send_interface_toast = { + title = ep2_wedding.1070.c.tt.success + left_icon = scope:m_hunt + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_calmed_success_log + tags = { good } + score = 20 + character = scope:m_hunt + + # Effect + scope:m_hunt = { + add_character_modifier = { + modifier = ep2_beastmaster_modifier + years = 20 + } + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_good_entertainment_opinion + } + } + } + stress_impact = { + base = minor_stress_impact_loss + } + } + } + 50 = { + #Why are you paying this guy again?? + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1070.c.failure + send_interface_toast = { + title = ep2_wedding.1070.c.tt.failure + left_icon = scope:m_hunt + scope:host = { + remove_character_modifier = hunt_captive_beast_modifier + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_master_failure_log + tags = { bad } + score = 20 + character = scope:m_hunt + + # Effect + scope:m_hunt = { increase_wounds_effect = { REASON = wild_animal } } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + } + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + } + } + + #Option F: GUARDS!! + option = { + name = ep2_wedding.1070.f + trigger = { + has_character_flag = 1070_exotic_fiends_bad + this = scope:host + NOT = { exists = scope:m_hunt } + } + scope:host = { + remove_character_modifier = hunt_captive_beast_modifier + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_guards_log + tags = { bad } + score = 10 + character = scope:host + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + } + ai_chance = { + base = 100 + } + } + + #Option D: run and hide! + option = { + name = ep2_wedding.1070.d + flavor = ep2_wedding.1070.d.tt + trigger = { + has_character_flag = 1070_exotic_fiends_bad + this != scope:host + } + scope:activity = { + add_activity_log_entry = { + key = wedding_beasts_fled_log + tags = { bad } + score = 10 + character = scope:host + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != scope:host + } + add_opinion = { + target = scope:host + modifier = wedding_scary_entertainment_opinion + } + } + every_attending_character = { + custom = custom.every_attending_character + limit = { + this != root + } + add_opinion = { + target = root + modifier = coward_opinion + } + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + brave = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + add = 50 + } + modifier = { + has_trait = shy + add = 75 + } + modifier = { + has_trait = reclusive + add = 150 + } + } + } + + after = { + remove_character_flag = busy_in_banquet_event + if = { + limit = { + exists = scope:m_hunt + } + scope:m_hunt = { remove_character_flag = busy_in_banquet_event } + } + } +} + +################################################## +# A Match Made In... ? +# by Claudia Baldassi +# ep2_wedding.1090 +################################################## + +# Matchmaking Intent: push a couple together + +scripted_trigger ep2_wedding_1090_good_match_trigger = { + is_ai = yes + location = root.location + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + exists = betrothed + AND = { + exists = root.intent_target.var:wedding_no_match + this = root.intent_target.var:wedding_no_match + } + has_character_flag = busy_in_banquet_event + is_close_or_extended_family_of = root.intent_target + } + trigger_if = { + limit = { + is_female = yes + } + age < marriage_female_fertility_cutoff_age_value + } +} + +ep2_wedding.1090 = { + type = activity_event + title = ep2_wedding.1090.t + desc = { + desc = ep2_wedding.1090.desc + first_valid = { + triggered_desc = { + trigger = { + intent_target = { has_variable = wedding_good_match } + } + desc = ep2_wedding.1090.desc_already_matched + } + desc = ep2_wedding.1090.desc_new_match + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = schadenfreude + } + center_portrait = { + character = scope:1090_target + animation = flirtation_left + } + right_portrait = { + character = scope:1090_match + animation = flirtation + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + has_activity_intent = matchmaking_intent + + intent_target.location ?= root.location + location = scope:activity.activity_location + + intent_target = { NOT = { has_character_flag = busy_in_banquet_event } } + + OR = { + intent_target = { has_variable = wedding_good_match } + scope:activity = { + any_attending_character = { + ep2_wedding_1090_good_match_trigger = yes + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + intent_target = { has_variable = wedding_good_match } + add = 4 + } + } + + immediate = { + add_character_flag = busy_in_banquet_event + intent_target = { + save_scope_as = 1090_target + add_character_flag = busy_in_banquet_event + } + if = { + limit = { + scope:1090_target = { has_variable = wedding_good_match } + } + scope:1090_target.var:wedding_good_match = { + save_scope_as = 1090_match + } + } + else = { + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_1090_good_match_trigger = yes + } + save_scope_as = 1090_match + } + } + } + scope:1090_match = { add_character_flag = busy_in_banquet_event } + } + + #Option A: push them together + option = { + name = ep2_wedding.1090.a + scope:1090_target = { + duel = { + skill = diplomacy + target = scope:1090_match + 50 = { # success - get a betrothal + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.1090.a.success + root = { + send_interface_toast = { + title = ep2_wedding.1080.a.success.tt + left_icon = scope:1090_target + right_icon = scope:1090_match + scope:activity = { + add_activity_log_entry = { + key = wedding_matchmade_success_log + tags = { betrothal } + score = 50 + character = scope:1090_target + target = scope:1090_match + + # Effect + scope:1090_target = { create_betrothal = scope:1090_match } + scope:1090_match = { + add_opinion = { + target = scope:1090_target + modifier = impressed_opinion + opinion = 20 + } + if = { + limit = { + scope:1090_match = { can_set_relation_lover_trigger = { CHARACTER = scope:1090_target } } + } + random = { + chance = 10 + scope:1090_match = { + set_relation_lover = { reason = lover_wedding_matchmaking target = scope:1090_target } + } + } + } + } + root = { add_prestige = minor_prestige_gain } + } + } + } + if = { + limit = { has_activity_intent = matchmaking_intent } + complete_activity_intent = yes + } + } + } + 50 = { # failure - you'll have to start again with someone else + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.1090.a.failure + send_interface_toast = { + title = ep2_wedding.1080.a.failure.tt + left_icon = scope:1090_target + right_icon = scope:1090_match + scope:activity = { + add_activity_log_entry = { + key = wedding_matchmade_failure_log + tags = { betrothal } + score = 50 + character = scope:1090_target + target = scope:1090_match + } + } + stress_impact = { + base = minor_stress_impact_gain + } + } + scope:1090_target = { + set_variable = { + name = wedding_no_match + value = scope:1090_match + } + } + } + } + } + ai_chance = { + base = 200 + } + } + + #Option B: no deal + option = { + name = ep2_wedding.1090.b + scope:1090_target = { + set_variable = { + name = wedding_no_match + value = scope:1090_match + } + } + scope:1090_target = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = fickle + add = 25 + } + } + } + + after = { + remove_character_flag = busy_in_banquet_event + scope:1090_match = { remove_character_flag = busy_in_banquet_event } + scope:1090_target = { remove_character_flag = busy_in_banquet_event } + } +} + +# WEDDING NIGHT EVENTS + +################################################## +# That Cursed Table +# by Claudia Baldassi +# ep2_wedding.1060 +################################################## + +# Inspired by Matilda of Tuscany's second wedding: a younger/meeker husband is too intimidated + +ep2_wedding.1060 = { + type = activity_event + title = ep2_wedding.1060.t + desc = ep2_wedding.1060.desc + theme = wedding_night_activity + left_portrait = { + character = root + animation = disgust + } + right_portrait = { + character = scope:spouse_2 + animation = shame + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity.special_guest:spouse_2 = { + is_ai = yes + is_male = yes + NOT = { has_character_flag = busy_in_wnight_event } + } + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_1 = { + NOT = { has_relation_lover = scope:activity.special_guest:spouse_2 } + } + + OR = { + # is weaker + scope:activity.special_guest:spouse_1 = { + tier_difference = { + target = scope:activity.special_guest:spouse_2 + value >= 2 + } + } + # is younger + scope:activity.special_guest:spouse_2.age <= scope:activity.special_guest:spouse_1.age_minus_10 + # has "difficulties" + scope:activity.special_guest:spouse_2 = { + OR = { + fertility <= low_fertility + has_trait = infertile + NOT = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_1 } + } + } + } + } + + weight_multiplier = { + base = 1 + + modifier = { + scope:activity.special_guest:spouse_1 = { + tier_difference = { + target = scope:activity.special_guest:spouse_2 + value > 2 + } + } + add = 2 + } + modifier = { + scope:activity.special_guest:spouse_2.age <= scope:activity.special_guest:spouse_1.age_minus_25 + add = 3 + } + modifier = { + scope:activity.special_guest:spouse_2 = { + NOT = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_1 } + } + add = 3 + } + } + + immediate = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = spouse_1 + add_character_flag = busy_in_wnight_event + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = spouse_2 + add_character_flag = busy_in_wnight_event + } + } + + #Option A: *Fine* - triggers follow up + option = { + name = ep2_wedding.1060.a + flavor = ep2_wedding.1060.a.tt + trigger_event = { + id = ep2_wedding.1061 + days = 3 + } + stress_impact = { + base = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + patient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = impatient + add = 75 + } + modifier = { + has_trait = lustful + add = 75 + } + modifier = { + has_trait = arrogant + add = 75 + } + } + } + + #Option B: be accepting + option = { + name = ep2_wedding.1060.b + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:spouse_2 + } + if = { + limit = { + can_set_relation_soulmate_trigger = { CHARACTER = scope:spouse_2 } + } + random = { + chance = 5 + set_relation_soulmate = { reason = soulmate_wedding_accepting_partner target = scope:spouse_2 } + # Achievements + player_succeeded_at_a_thousand_and_one_nights_achievement_effect = yes + } + } + scope:spouse_1 = { remove_character_flag = busy_in_wnight_event } + scope:spouse_2 = { remove_character_flag = busy_in_wnight_event } + stress_impact = { + impatient = medium_stress_impact_gain + lustful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + patient = medium_stress_impact_loss + humble = medium_stress_impact_loss + chaste = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + add = 75 + } + modifier = { + has_trait = patient + add = 75 + } + modifier = { + has_trait = chaste + add = 75 + } + } + } +} + +# Follow up event: you have emptied the room except for a bare table - spouse reaction + +ep2_wedding.1061 = { + type = activity_event + title = ep2_wedding.1060.t + desc = { + desc = ep2_wedding.1061.desc + first_valid = { + triggered_desc = { + trigger = { + scope:spouse_2 = { has_character_flag = 1061_success } + } + desc = ep2_wedding.1061.desc_1 #It goes well + } + desc = ep2_wedding.1061.desc_2 #Still nothing + } + } + theme = wedding_night_activity + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:spouse_2 + animation = shame + } + + trigger = { + exists = scope:activity + } + + immediate = { + random_list = { + 30 = { + # he gets over it + modifier = { + scope:spouse_2 = { + NOT = { has_trait = impotent } + } + add = 10 + } + modifier = { + scope:spouse_2 = { + NOT = { fertility <= low_fertility } + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = arrogant + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = lustful + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = brave + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = gregarious + } + add = 10 + } + modifier = { + scope:spouse_2 = { + NOT = { is_attracted_to_gender_of = scope:spouse_1 } + } + factor = 0 + } + scope:spouse_2 = { add_character_flag = 1061_success } + } + 70 = { + #he really doesn't get over it + modifier = { + scope:spouse_2 = { + has_trait = impotent + } + add = 30 + } + modifier = { + scope:spouse_2 = { + fertility <= low_fertility + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = shy + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = chaste + } + add = 20 + } + scope:spouse_2 = { add_character_flag = 1061_not_success } + } + } + add_character_flag = is_naked + } + + #Option A: All good then! + option = { + name = ep2_wedding.1061.a + trigger = { + scope:spouse_2 = { has_character_flag = 1061_success } + } + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_challenging_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_challenging_spouse_opinion + } + } + scope:spouse_2 = { + add_character_modifier = { + modifier = wedding_nagging_spouse_modifier + years = 10 + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:spouse_2 + } + stress_impact = { + base = minor_stress_impact_loss + lustful = medium_stress_impact_loss + } + } + + #Option B: kick them out and denounce them! + option = { + name = ep2_wedding.1061.b + trigger = { + scope:spouse_2 = { has_character_flag = 1061_not_success } + } + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_cruel_spouse_opinion + } + add_character_modifier = { + modifier = wedding_accused_impotency_modifier + years = 10 + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_very_bad_fertility = scope:spouse_1 + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_useless_spouse_opinion + } + } + stress_impact = { + calm = minor_stress_impact_gain + patient = medium_stress_impact_gain + chaste = medium_stress_impact_gain + compassionate = major_stress_impact_gain + vengeful = minor_stress_impact_loss + callous = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 30 + } + modifier = { + has_trait = callous + add = 50 + } + modifier = { + has_trait = sadistic + add = 30 + } + modifier = { + has_trait = lustful + add = 50 + } + modifier = { + has_trait = wrathful + add = 50 + } + modifier = { + has_trait = impatient + add = 50 + } + } + } + + #Option C: be patient + option = { + name = ep2_wedding.1061.c + trigger = { + scope:spouse_2 = { has_character_flag = 1061_not_success } + } + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:spouse_2 + } + stress_impact = { + arrogant = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + lustful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = calm + add = 30 + } + modifier = { + has_trait = patient + add = 50 + } + modifier = { + has_trait = compassionate + add = 75 + } + } + + } + + after = { + if = { + limit = { + scope:spouse_2 = { has_character_flag = 1061_success } + } + scope:spouse_2 = { remove_character_flag = 1061_success } + } + else_if = { + limit = { + scope:spouse_2 = { has_character_flag = 1061_not_success } + } + scope:spouse_2 = { remove_character_flag = 1061_not_success } + } + scope:spouse_1 = { remove_character_flag = busy_in_wnight_event } + scope:spouse_2 = { remove_character_flag = busy_in_wnight_event } + remove_character_flag = is_naked + } +} + +# Inverted event: it's you who have problems - spouse's reaction + +ep2_wedding.1065 = { + type = activity_event + title = ep2_wedding.1060.t + desc = ep2_wedding.1065.desc + theme = wedding_night_activity + left_portrait = { + character = root + animation = shame + } + right_portrait = { + character = scope:spouse_2 + animation = disgust + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + scope:activity.special_guest:spouse_1 = { is_male = yes } + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_1 = { + NOT = { has_relation_lover = scope:activity.special_guest:spouse_2 } + } + scope:activity.special_guest:spouse_2 = { + is_ai = yes + NOT = { has_character_flag = busy_in_wnight_event } + } + + OR = { + # is weaker + scope:activity.special_guest:spouse_2 = { + tier_difference = { + target = root + value >= 2 + } + } + # is younger + age <= scope:activity.special_guest:spouse_2.age_minus_10 + # has difficulties + fertility <= low_fertility + has_trait = infertile + NOT = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_2 } + } + } + + weight_multiplier = { + base = 1 + + modifier = { + scope:activity.special_guest:spouse_2 = { + tier_difference = { + target = root + value > 2 + } + } + add = 2 + } + modifier = { + age <= scope:activity.special_guest:spouse_2.age_minus_25 + add = 3 + } + modifier = { + NOT = { is_attracted_to_gender_of = scope:activity.special_guest:spouse_2 } + add = 3 + } + } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + scope:spouse_1 = { add_character_flag = busy_in_wnight_event } + scope:spouse_2 = { add_character_flag = busy_in_wnight_event } + } + + #Option A: It's a curse! + option = { + name = ep2_wedding.1065.a + flavor = ep2_wedding.1065.a.tt + trigger_event = { + id = ep2_wedding.1066 + days = 3 + } + stress_impact = { + honest = medium_stress_impact_gain + lustful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + deceitful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + add = 50 + } + modifier = { + has_trait = arrogant + add = 50 + } + modifier = { + has_trait = lustful + add = 50 + } + modifier = { + has_character_modifier = bp1_superstition_modifier + add = 50 + } + } + } + + #Option B: Sorry... + option = { + name = ep2_wedding.1065.b + random_list = { + 50 = { #they are understanding + modifier = { + scope:spouse_2 = { + has_trait = compassionate + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = calm + } + add = 10 + } + modifier = { + scope:spouse_2 = { + has_trait = patient + } + add = 20 + } + send_interface_toast = { + title = ep2_wedding.1065.b1 + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:spouse_2 + } + } + } + 50 = { #they are not + modifier = { + scope:spouse_2 = { + has_trait = callous + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = lustful + } + add = 30 + } + modifier = { + scope:spouse_2 = { + has_trait = impatient + } + add = 20 + } + modifier = { + scope:spouse_2 = { + has_trait = wrathful + } + add = 10 + } + send_interface_toast = { + title = ep2_wedding.1065.b2 + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_useless_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_cruel_spouse_opinion + } + } + add_character_modifier = { + modifier = wedding_accused_impotency_modifier + years = 10 + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_very_bad_fertility = scope:spouse_2 + } + } + } + } + scope:spouse_1 = { remove_character_flag = busy_in_wnight_event } + scope:spouse_2 = { remove_character_flag = busy_in_wnight_event } + stress_impact = { + deceitful = medium_stress_impact_gain + honest = medium_stress_impact_loss + humble = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = humble + add = 50 + } + modifier = { + has_trait = honest + add = 50 + } + } + } +} + +# Follow up event: your spouse has emptied the room except for a bare table + +ep2_wedding.1066 = { + type = activity_event + title = ep2_wedding.1060.t + desc = { + desc = ep2_wedding.1066.desc + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = 1066_success + } + desc = ep2_wedding.1066.desc_1 #It goes well + } + desc = ep2_wedding.1066.desc_2 #Still nothing + } + } + theme = wedding_night_activity + left_portrait = { + character = root + animation = shame + } + right_portrait = { + character = scope:spouse_2 + animation = anger + } + + trigger = { + exists = scope:activity + } + + immediate = { + random_list = { + 30 = { + # you get over it + modifier = { + NOT = { has_trait = impotent } + add = 10 + } + modifier = { + NOT = { fertility <= low_fertility } + add = 10 + } + modifier = { + has_trait = arrogant + add = 10 + } + modifier = { + has_trait = lustful + add = 20 + } + modifier = { + has_trait = brave + add = 10 + } + modifier = { + has_trait = gregarious + add = 10 + } + modifier = { + NOT = { is_attracted_to_gender_of = scope:spouse_2 } + factor = 0 + } + add_character_flag = 1066_success + } + 70 = { + #you really don't get over it + modifier = { + has_trait = impotent + add = 30 + } + modifier = { + fertility <= low_fertility + add = 20 + } + modifier = { + has_trait = shy + add = 20 + } + modifier = { + has_trait = chaste + add = 20 + } + add_character_flag = 1066_not_success + } + } + scope:spouse_2 = { + add_character_flag = is_naked + } + } + + #Option A: I feel better + option = { + name = ep2_wedding.1066.a + trigger = { + has_character_flag = 1066_success + } + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_challenging_spouse_opinion + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:spouse_2 + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_challenging_spouse_opinion + } + } + add_character_modifier = { + modifier = wedding_nagging_spouse_modifier + years = 10 + } + stress_impact = { + base = minor_stress_impact_loss + lustful = medium_stress_impact_loss + } + } + + #Option B: ...Still nothing + option = { + name = ep2_wedding.1066.b + trigger = { + has_character_flag = 1066_not_success + } + random_list = { + 50 = { #hey don't take it well + modifier = { + scope:spouse_2 = { has_trait = arrogant } + add = 10 + } + modifier = { + scope:spouse_2 = { has_trait = callous } + add = 20 + } + modifier = { + scope:spouse_2 = { has_trait = sadistic } + add = 25 + } + modifier = { + scope:spouse_2 = { has_trait = lustful } + add = 25 + } + modifier = { + scope:spouse_2 = { has_trait = wrathful } + add = 25 + } + modifier = { + scope:spouse_2 = { has_trait = impatient } + add = 25 + } + send_interface_toast = { + title = ep2_wedding.1066.b_1 + left_icon = scope:spouse_2 + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_useless_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_cruel_spouse_opinion + } + } + add_character_modifier = { + modifier = wedding_accused_impotency_modifier + years = 10 + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_very_bad_fertility = scope:spouse_2 + } + stress_impact = { + base = minor_stress_impact_gain + } + } + } + 50 = { #they take it well + modifier = { + scope:spouse_2 = { has_trait = calm } + add = 10 + } + modifier = { + scope:spouse_2 = { has_trait = patient } + add = 25 + } + modifier = { + scope:spouse_2 = { has_trait = compassionate } + add = 40 + } + send_interface_toast = { + title = ep2_wedding.1066.b_2 + left_icon = scope:spouse_2 + scope:spouse_2 = { + add_opinion = { + target = root + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + is_ai = yes + } + add_opinion = { + target = scope:spouse_2 + modifier = wedding_understanding_spouse_opinion + } + } + if = { + limit = { + scope:spouse_2 = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:spouse_2 + } + stress_impact = { + base = minor_stress_impact_loss + } + } + } + } + } + after = { + if = { + limit = { + has_character_flag = 1066_success + } + remove_character_flag = 1066_success + } + else_if = { + limit = { + has_character_flag = 1066_not_success + } + remove_character_flag = 1066_not_success + } + scope:spouse_1 = { remove_character_flag = busy_in_wnight_event } + scope:spouse_2 = { + remove_character_flag = busy_in_wnight_event + remove_character_flag = is_naked + } + } +} + +################################################## +# One More Goblet +# by Claudia Baldassi +# ep2_wedding.1110 +################################################## + +# Non-spouses: someone gets extremely drunk/doesn't want to leave + +scripted_trigger ep2_wedding_1110_valid_drunk_trigger = { + is_adult = yes + is_ai = yes + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + this = scope:host + has_character_flag = busy_in_wnight_event + } + drinks_alcohol_trigger = yes +} + +ep2_wedding.1110 = { + type = activity_event + title = ep2_wedding.1110.t + desc = { + desc = ep2_wedding.1110.desc_intro + desc = ep2_wedding.1110.desc + triggered_desc = { + trigger = { + root = scope:host + } + desc = ep2_wedding.1110.desc_host + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = disgust + } + right_portrait = { + character = scope:1110_drunk + animation = wedding_drunk + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + NOR = { + scope:activity.special_guest:spouse_1 ?= root + scope:activity.special_guest:spouse_2 ?= root + } + scope:host ?= { #There must be alcohol at the party! + drinks_alcohol_trigger = yes + } + scope:activity ?= { + any_attending_character = { + ep2_wedding_1110_valid_drunk_trigger = yes + } + NOT = { has_variable = has_had_1110_event } + } + } + + weight_multiplier = { + base = 1 + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1110_valid_drunk_trigger = yes + has_trait = drunkard + } + } + add = 10 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1110_valid_drunk_trigger = yes + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + } + } + add = 3 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1110_valid_drunk_trigger = yes + has_trait = gregarious + } + } + add = 2 + } + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_1110_valid_drunk_trigger = yes + has_trait = drunkard + } + alternative_limit = { + ep2_wedding_1110_valid_drunk_trigger = yes + has_trait = gregarious + } + alternative_limit = { + ep2_wedding_1110_valid_drunk_trigger = yes + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + } + alternative_limit = { + ep2_wedding_1110_valid_drunk_trigger = yes + } + save_scope_as = 1110_drunk + add_character_flag = busy_in_wnight_event + } + set_variable = has_had_1110_event + } + add_character_flag = busy_in_wnight_event + } + + #Option B: Kick them out (host only) + option = { + name = ep2_wedding.1110.b + trigger = { root = scope:host } + flavor = ep2_wedding.1110.b.tt + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_eject_log + tags = { bad } + score = 25 + character = root + target = scope:1110_drunk + + # Effect + root = { + progress_towards_rival_effect = { + REASON = rival_kicked_out + CHARACTER = scope:1110_drunk + OPINION = -30 + } + add_prestige = minor_prestige_gain + add_character_modifier = { + modifier = wedding_severe_host_modifier + years = 20 + } + scope:1110_drunk = { remove_from_activity = scope:activity } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + patient = medium_stress_impact_gain + drunkard = major_stress_impact_gain + just = minor_stress_impact_loss + impatient = minor_stress_impact_loss + callous = minor_stress_impact_loss + temperate = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + has_trait = compassionate + add = -25 + } + modifier = { + has_trait = patient + add = -50 + } + modifier = { + has_trait = gregarious + add = -50 + } + modifier = { + has_trait = temperate + add = 100 + } + } + } + + #Option C: If you can't fight them, join them! + option = { + name = ep2_wedding.1110.c + trigger = { drinks_alcohol_trigger = yes } + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_fool_log + tags = { bad } + score = 25 + character = root + target = scope:1110_drunk + + # Effect + root = { + progress_towards_friend_effect = { + REASON = friend_drinking_buddies + CHARACTER = scope:1110_drunk + OPINION = 10 + } + if = { + limit = { + NOT = { + has_trait = drunkard + } + } + random = { + chance = 5 + add_trait = drunkard + } + } + add_character_modifier = { + modifier = wedding_social_drinker_modifier + years = 20 + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + gregarious = medium_stress_impact_loss + drunkard = major_stress_impact_loss + temperate = major_stress_impact_gain + } + + ai_chance = { + base = 50 + modifier = { + has_trait = drunkard + add = 200 + } + modifier = { + has_trait = gregarious + add = 75 + } + modifier = { + has_trait = temperate + add = -75 + } + } + } + + #Option A: Judge them hard + option = { + name = ep2_wedding.1110.a + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_refusal_log + tags = { bad } + score = 25 + character = scope:1110_drunk + + # Effect + root = { + reverse_add_opinion = { + target = scope:1110_drunk + modifier = annoyed_opinion + opinion = -15 + } + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = temperate + add = 50 + } + ai_value_modifier = { + ai_energy = -0.5 + } + } + } + + after = { + remove_character_flag = busy_in_wnight_event + scope:1110_drunk = { remove_character_flag = busy_in_wnight_event } + } +} + +################################################## +# One More Goblet +# by Claudia Baldassi +# ep2_wedding.1111 +################################################## + +# Non-spouses: you get extremely drunk/don't want to leave + +scripted_trigger ep2_wedding_1111_valid_drunk_trigger = { + is_adult = yes + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + has_character_flag = busy_in_wnight_event + } + drinks_alcohol_trigger = yes +} + +ep2_wedding.1111 = { + type = activity_event + title = ep2_wedding.1110.t + desc = { + desc = ep2_wedding.1110.desc_intro + desc = ep2_wedding.1111.desc + triggered_desc = { + trigger = { + root = scope:host + } + desc = ep2_wedding.1111.desc_host + } + desc = ep2_wedding.1111.desc_conclusion + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = wedding_drunk + } + right_portrait = { + character = scope:1111_other + animation = disgust + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + + ep2_wedding_1111_valid_drunk_trigger = yes + + scope:host = { #There must be alcohol at the party! + drinks_alcohol_trigger = yes + } + scope:activity = { + NOT = { has_variable = has_had_1110_event } + } + NOR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + trigger_if = { + limit = { + this = scope:host + } + scope:activity = { + any_attending_character = { + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + is_adult = yes + is_ai = yes + NOT = { has_character_flag = busy_in_wnight_event } + } + } + } + } + + weight_multiplier = { + base = 0.5 + modifier = { + has_trait = drunkard + add = 10 + } + modifier = { + has_trait = gregarious + add = 2 + } + modifier = { + is_ai = yes + factor = 0.1 + } + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + add = 5 + } + } + + immediate = { + add_character_flag = busy_in_wnight_event + scope:activity = { + set_variable = has_had_1110_event + } + if = { + limit = { + NOR = { + this = scope:host + scope:host = { + OR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + } + } + scope:host = { + add_character_flag = busy_in_wnight_event + save_scope_as = 1111_other + } + } + else = { + scope:activity = { + random_attending_character = { + limit = { + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + is_adult = yes + is_ai = yes + NOT = { has_character_flag = busy_in_wnight_event } + } + save_scope_as = 1111_other + add_character_flag = busy_in_wnight_event + } + } + } + } + + #Option B: not sorry + option = { + name = ep2_wedding.1111.b + add_character_modifier = { + modifier = wedding_social_drinker_modifier + years = 20 + } + random_list = { + 30 = { #join me! + trigger = { + scope:1111_other = { drinks_alcohol_trigger = yes } + } + modifier = { + scope:1111_other = { has_trait = drunkard } + add = 200 + } + modifier = { + scope:1111_other = { has_trait = gregarious } + add = 70 + } + modifier = { + scope:1111_other = { has_trait = wrathful } + add = -50 + } + desc = ep2_wedding.1111.b.1 + send_interface_toast = { + title = ep2_wedding.1111.b.1.tt + left_icon = scope:1111_other + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_fool_log + tags = { bad } + score = 25 + character = root + target = scope:1111_other + + # Effect + root = { + progress_towards_friend_effect = { + REASON = friend_drinking_buddies + CHARACTER = scope:1111_other + OPINION = 10 + } + } + } + } + } + } + 70 = { #you get kicked out! + trigger = { + scope:1111_other = scope:host + } + modifier = { + scope:1111_other = { has_trait = patient } + add = -30 + } + modifier = { + scope:1111_other = { has_trait = compassionate } + add = -25 + } + modifier = { + scope:1111_other = { has_trait = forgiving } + add = -30 + } + modifier = { + scope:1111_other = { has_trait = wrathful } + add = 50 + } + desc = ep2_wedding.1111.b.2 + send_interface_toast = { + title = ep2_wedding.1111.b.2.tt + left_icon = scope:1111_other + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_eject_log + tags = { bad } + score = 10 + + character = scope:1111_other + target = root + + #Effect + root = { remove_from_activity = scope:activity } + scope:1111_other ={ + progress_towards_rival_effect = { + REASON = rival_kicked_out + CHARACTER = root + OPINION = -30 + } + } + } + } + } + } + 50 = { #you get judged - harshly + trigger = { + scope:1111_other != scope:host + } + desc = ep2_wedding.1111.b.3 + send_interface_toast = { + title = ep2_wedding.1111.b.3.tt + left_icon = scope:1111_other + reverse_add_opinion = { + target = scope:1111_other + modifier = annoyed_opinion + opinion = -20 + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_reprimand_log + tags = { bad } + score = 10 + + character = root + } + } + } + } + if = { + limit = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + } + stress_impact = { + base = minor_stress_impact_loss + } + } + else = { + stress_impact = { + humble = medium_stress_impact_gain + temperate = major_stress_impact_gain + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + add = 75 + } + modifier = { + has_trait = drunkard + add = 75 + } + modifier = { + has_trait = humble + add = -50 + } + modifier = { + has_trait = temperate + add = -75 + } + modifier = { + OR = { + has_activity_intent = reduce_stress_intent + has_activity_intent = banquet_mischief_intent + } + opinion = { + target = scope:host + value < neutral_opinion + } + add = 100 + } + } + } + + #Option A: sorry + option = { + name = ep2_wedding.1111.a + scope:activity = { + add_activity_log_entry = { + key = wedding_goblet_reprimand_log + tags = { bad } + score = 25 + character = root + + # Effect + root = { + reverse_add_opinion = { + target = scope:1111_other + modifier = respect_opinion + opinion = 15 + } + stress_impact = { + arrogant = medium_stress_impact_gain + drunkard = medium_stress_impact_gain + } + } + } + } + ai_chance = { + base = 200 + modifier = { + opinion = { + target = scope:host + value > low_positive_opinion + } + add = 100 + } + modifier = { + has_trait = arrogant + add = -75 + } + modifier = { + has_trait = drunkard + add = -75 + } + } + } + + after = { + remove_character_flag = busy_in_wnight_event + scope:1111_other = { remove_character_flag = busy_in_wnight_event } + } +} + + +################################################## +# Why Would You Marry Someone Like Me? +# by Luke Bean +# ep2_wedding.1300 +################################################## + +scripted_trigger ep2_wedding_1300_appearance_insecurity_trigger = { + OR = { + AND = { + is_female = yes + has_trait = giant + } + has_trait = one_eyed + has_trait = scarred + has_trait = one_legged + has_trait = disfigured + has_trait = scaly + has_trait = albino + has_trait = dwarf + has_trait = hunchbacked + has_trait = maimed + has_trait = spindly + has_trait = beauty_bad_1 + has_trait = beauty_bad_2 + has_trait = beauty_bad_3 + } +} + +scripted_trigger ep2_wedding_1300_voice_insecurity_trigger = { + OR = { + has_trait = lisping + has_trait = stuttering + has_trait = wheezing + } +} + +ep2_wedding.1300 = { + type = activity_event + title = ep2_wedding.1300.t + desc = { + desc = ep2_wedding.1300.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:insecurity = flag:appearance } + desc = ep2_wedding.1300.desc_appearance + } + triggered_desc = { + trigger = { scope:insecurity = flag:dark_past } + desc = ep2_wedding.1300.desc_dark_past + } + triggered_desc = { + trigger = { scope:insecurity = flag:voice } + desc = ep2_wedding.1300.desc_voice + } + triggered_desc = { + trigger = { scope:insecurity = flag:lowborn } + desc = ep2_wedding.1300.desc_lowborn + } + } + desc = ep2_wedding.1300.desc_outro + } + theme = wedding_night_activity + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:spouse_2 + animation = worry + } + + cooldown = { years = 10 } + + trigger = { + has_ep2_dlc_trigger = yes + root = scope:activity.special_guest:spouse_1 + scope:activity.special_guest:spouse_2 = { + is_alive = yes + NOR = { + has_trait = arrogant + any_relation = { type = lover this = root } + any_relation = { type = best_friend this = root } + } + OR = { + ep2_wedding_1300_appearance_insecurity_trigger = yes + has_any_shunned_or_criminal_trait_in_faith_trigger = { + CHARACTER = scope:activity.special_guest:spouse_2 + FAITH = scope:activity.special_guest:spouse_2.faith + } + ep2_wedding_1300_voice_insecurity_trigger = yes + is_lowborn = yes + } + } + } + + weight_multiplier = { + base = 2 + modifier = { + has_activity_intent = woo_attendee_intent + intent_target = scope:activity.special_guest:spouse_2 + add = 3 + } + } + + immediate = { + root = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + add_character_flag = busy_in_wnight_event + scope:spouse_2 = { + add_character_flag = busy_in_wnight_event + add_character_flag = is_naked + } + if = { + limit = { + scope:spouse_2 = { + ep2_wedding_1300_appearance_insecurity_trigger = yes + } + } + save_scope_value_as = { + name = insecurity + value = flag:appearance + } + } + else_if = { + limit = { + has_any_shunned_or_criminal_trait_in_faith_trigger = { + CHARACTER = scope:spouse_2 + FAITH = scope:spouse_2.faith + } + } + save_scope_value_as = { + name = insecurity + value = flag:dark_past + } + } + else_if = { + limit = { + scope:spouse_2 = { + ep2_wedding_1300_voice_insecurity_trigger = yes + } + } + save_scope_value_as = { + name = insecurity + value = flag:voice + } + } + else_if = { + limit = { + scope:spouse_2 = { + is_lowborn = yes + } + } + save_scope_value_as = { + name = insecurity + value = flag:lowborn + } + } + if = { + limit = { + scope:spouse_2 = { + OR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + has_trait = ambitious + has_trait = shrewd + intrigue >= high_skill_rating + diplomacy >= high_skill_rating + stewardship >= high_skill_rating + martial >= high_skill_rating + learning >= high_skill_rating + } + } + } + save_scope_value_as = { + name = mind_of_a_ruler + value = yes + } + } + add_character_flag = is_naked + } + + # I chose you for your virtue + option = { + name = ep2_wedding.1300.virtue + custom_tooltip = ep2_wedding.1300.virtue.tt #This option is available because SPOUSE is a virtuous PERSON + custom_tooltip = ep2_wedding.1300.followup.tt + trigger = { + scope:spouse_2 = { num_virtuous_traits >= 1 } + NOR = { + scope:spouse_2 = { num_sinful_traits >= 1 } + has_any_shunned_or_criminal_trait_in_faith_trigger = { + CHARACTER = scope:spouse_2 + FAITH = scope:spouse_2.faith + } + } + } + + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.a + show_chance = no + scope:spouse_1 = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + sadistic = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + cynical = minor_stress_impact_gain + just = minor_stress_impact_loss + chaste = minor_stress_impact_loss + zealous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_zeal = 0.5 + } + modifier = { + has_trait = impatient + add = -30 + } + modifier = { + has_trait = wrathful + add = -30 + } + modifier = { + has_trait = sadistic + add = -30 + } + modifier = { + has_trait = cynical + add = -80 + } + } + save_scope_value_as = { + name = reassurance + value = flag:virtue + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + + # I need someone like you to rule by my side + option = { + name = ep2_wedding.1300.rule_together + custom_tooltip = ep2_wedding.1300.rule_together.tt #This option is available because SPOUSE has the mind of a ruler + custom_tooltip = ep2_wedding.1300.followup.tt + + trigger = { + exists = scope:mind_of_a_ruler + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.a + show_chance = no + scope:spouse_1 = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + lazy = minor_stress_impact_gain + content = minor_stress_impact_gain + fickle = medium_stress_impact_gain + just = medium_stress_impact_loss + diligent = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + has_trait = content + add = -30 + } + modifier = { + has_trait = lazy + add = -80 + } + modifier = { + has_trait = arrogant + add = -80 + } + } + save_scope_value_as = { + name = reassurance + value = flag:rule_together + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + +# This marriage is practical for both of us + option = { + name = ep2_wedding.1300.practical + custom_tooltip = ep2_wedding.1300.followup.tt + trigger = { + NOR = { #This is purely so that you don't get a seven-option event if you marry a beautiful fertile genius with a lisp + has_trait = beauty_good_1 + has_trait = beauty_good_2 + has_trait = beauty_good_3 + } + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.a + show_chance = no + scope:spouse_1 = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + arbitrary = minor_stress_impact_gain + zealous = minor_stress_impact_gain + diligent = minor_stress_impact_loss + callous = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + } + modifier = { + has_trait = arbitrary + add = -30 + } + modifier = { + has_trait = zealous + add = -30 + } + } + save_scope_value_as = { + name = reassurance + value = flag:practical + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + + # Stop whining, I'm making you a TITLE + option = { + name = ep2_wedding.1300.stop_whining + custom_tooltip = ep2_wedding.1300.followup.tt + + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_trait = wrathful + has_trait = impatient + has_trait = arrogant + } + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + calm = minor_stress_impact_gain + sadistic = minor_stress_impact_loss + callous = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + impatient = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + has_trait = compassionate + add = -80 + } + modifier = { + has_trait = calm + add = -50 + } + } + save_scope_value_as = { + name = reassurance + value = flag:stop_whining + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + + # I understand how you feel + option = { + name = ep2_wedding.1300.understanding + custom_tooltip = ep2_wedding.1300.followup.tt + + trigger = { + OR = { + has_trait = reclusive + has_trait = shy + has_trait = depressed_1 + has_trait = depressed_genetic + ep2_wedding_1300_appearance_insecurity_trigger = yes + ep2_wedding_1300_voice_insecurity_trigger = yes + } + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.a + show_chance = no + scope:spouse_1 = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + calm = minor_stress_impact_loss + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + impatient = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + has_trait = compassionate + add = -80 + } + modifier = { + has_trait = calm + add = -50 + } + } + save_scope_value_as = { + name = reassurance + value = flag:understanding + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + + # You're the most beautiful PERSON in the world + option = { + name = ep2_wedding.1300.beauty + custom_tooltip = ep2_wedding.1300.beauty.tt #This option is available because SPOUSE is renowned for THEIR looks + custom_tooltip = ep2_wedding.1300.followup.tt + + trigger = { + scope:spouse_2 = { + OR = { + has_trait = beauty_good_1 + has_trait = beauty_good_2 + has_trait = beauty_good_3 + } + } + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.a + show_chance = no + scope:spouse_1 = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + chaste = minor_stress_impact_gain + lustful = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.25 + } + modifier = { + has_trait = chaste + add = -50 + } + } + save_scope_value_as = { + name = reassurance + value = flag:beauty + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + + # You will give me many strong heirs + option = { + name = ep2_wedding.1300.fertility + custom_tooltip = ep2_wedding.1300.fertility.tt #This option is available because SPOUSE has the right qualities to be a prolific PARENT + custom_tooltip = ep2_wedding.1300.followup.tt + + trigger = { + scope:spouse_2 = { + OR = { + has_trait = physique_good_1 + has_trait = physique_good_2 + has_trait = physique_good_3 + has_trait = fecund + has_trait = lustful + } + } + } + show_as_tooltip = { + random_list = { + 10 = { + desc = ep2_wedding.1300.followup.b + show_chance = no + } + 10 = { + desc = ep2_wedding.1300.followup.c + show_chance = no + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + } + } + } + stress_impact = { + chaste = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + lustful = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -0.5 + ai_rationality = 0.5 + } + modifier = { + has_trait = chaste + add = -50 + } + modifier = { + has_trait = compassionate + add = -50 + } + } + save_scope_value_as = { + name = reassurance + value = flag:fertility + } + scope:spouse_2 = { + trigger_event = { + id = ep2_wedding.1301 + } + } + } + after = { + remove_character_flag = is_naked + scope:spouse_2 = { + remove_character_flag = is_naked + } + } +} + +ep2_wedding.1301 = { #Spouse response + type = activity_event + title = ep2_wedding.1301.t + desc = { + desc = ep2_wedding.1301.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:insecurity = flag:appearance } + desc = ep2_wedding.1301.desc_appearance + } + triggered_desc = { + trigger = { scope:insecurity = flag:dark_past } + desc = ep2_wedding.1301.desc_dark_past + } + triggered_desc = { + trigger = { scope:insecurity = flag:voice } + desc = ep2_wedding.1301.desc_voice + } + triggered_desc = { + trigger = { scope:insecurity = flag:lowborn } + desc = ep2_wedding.1301.desc_lowborn + } + } + desc = ep2_wedding.1301.desc_midtro + first_valid = { + triggered_desc = { + trigger = { scope:reassurance = flag:virtue } + desc = ep2_wedding.1301.desc_virtue + } + triggered_desc = { + trigger = { scope:reassurance = flag:rule_together } + desc = ep2_wedding.1301.desc_rule_together + } + triggered_desc = { + trigger = { scope:reassurance = flag:practical } + desc = ep2_wedding.1301.desc_practical + } + triggered_desc = { + trigger = { scope:reassurance = flag:stop_whining } + desc = ep2_wedding.1301.desc_stop_whining + } + triggered_desc = { + trigger = { scope:reassurance = flag:understanding } + desc = ep2_wedding.1301.desc_understanding + } + triggered_desc = { + trigger = { scope:reassurance = flag:beauty } + desc = ep2_wedding.1301.desc_beauty + } + triggered_desc = { + trigger = { scope:reassurance = flag:fertility } + desc = ep2_wedding.1301.desc_fertility + } + } + desc = ep2_wedding.1301.desc_outro + } + theme = wedding_night_activity + left_portrait = { + character = scope:spouse_1 + animation = thinking + } + right_portrait = { + character = root + animation = worry + } + + immediate = { + add_character_flag = is_naked + scope:spouse_1 = { + add_character_flag = is_naked + } + } + + option = { #I want to be worthy of your love... + name = ep2_wedding.1301.love + trigger = { + is_attracted_to_gender_of = scope:spouse_1 + NOR = { + scope:reassurance = flag:fertility + scope:reassurance = flag:stop_whining + scope:reassurance = flag:practical + } + } + scope:spouse_1 = { + send_interface_toast = { + title = ep2_wedding.1301.outcome.love + left_icon = scope:spouse_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_whyme_love_log + tags = { good } + score = 25 + character = scope:spouse_1 + target = scope:spouse_2 + + # Effect + scope:spouse_1 = { + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = scope:spouse_2 + can_set_relation_lover_trigger = { CHARACTER = scope:spouse_2 } + } + set_relation_lover = { + reason = lover_shared_insecurity + target = scope:spouse_2 + } + complete_activity_intent = yes + } + else = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + scope:spouse_2 = { + add_character_modifier = { + modifier = wedding_soothed_insecurity_modifier + years = 15 + } + } + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.25 + } + modifier = { + scope:reassurance = flag:understanding + add = 30 + } + modifier = { + scope:reassurance = flag:beauty + add = 15 + } + modifier = { + scope:spouse_1 = { has_trait = compassionate } + add = 20 + } + modifier = { + scope:spouse_1 = { attraction >= low_positive_attraction } + add = 20 + } + modifier = { + scope:spouse_1 = { attraction >= medium_positive_attraction } + add = 30 + } + modifier = { + scope:spouse_1 = { attraction >= high_positive_attraction } + add = 50 + } + modifier = { + scope:spouse_1 = { attraction <= low_negative_attraction } + add = -20 + } + modifier = { + scope:spouse_1 = { attraction <= medium_negative_attraction } + add = -30 + } + modifier = { + scope:spouse_1 = { attraction <= high_negative_attraction } + add = -50 + } + } + } + + option = { #I want to trust you... + name = ep2_wedding.1301.trust + trigger = { + NOR = { + scope:reassurance = flag:fertility + scope:reassurance = flag:stop_whining + } + } + scope:spouse_1 = { + send_interface_toast = { + title = ep2_wedding.1301.outcome.trust + left_icon = scope:spouse_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_whyme_trust_log + tags = { good } + score = 25 + character = scope:spouse_1 + target = scope:spouse_2 + + # Effect + scope:spouse_1 = { + if = { + limit = { + has_activity_intent = woo_attendee_intent + intent_target = scope:spouse_2 + can_set_relation_lover_trigger = { CHARACTER = scope:spouse_2 } + } + set_relation_lover = { + reason = lover_shared_insecurity + target = scope:spouse_2 + } + complete_activity_intent = yes + } + else = { + progress_towards_lover_effect = { + CHARACTER = scope:spouse_2 + REASON = lover_shared_insecurity + OPINION = default_lover_opinion + } + } + } + scope:spouse_2 = { + add_character_modifier = { + modifier = wedding_soothed_insecurity_modifier + years = 15 + } + } + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.25 + } + modifier = { + scope:reassurance = flag:rule_together + add = 30 + } + modifier = { + scope:reassurance = flag:virtue + add = 30 + } + modifier = { + scope:spouse_1 = { has_trait = honest } + add = 30 + } + modifier = { + scope:spouse_1 = { num_virtuous_traits >= 1 } + add = 20 + } + } + } + + option = { #I'm being silly + name = ep2_wedding.1301.silly + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + } + modifier = { + scope:reassurance = flag:practical + add = 30 + } + modifier = { + scope:reassurance = flag:fertility + add = 30 + } + modifier = { + scope:reassurance = flag:rule_together + add = 10 + } + } + scope:spouse_1 = { + send_interface_toast = { + title = ep2_wedding.1301.outcome.silly + left_icon = scope:spouse_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_whyme_silly_log + tags = { bad } + score = 25 + character = scope:spouse_1 + target = scope:spouse_2 + + # Effect + scope:spouse_2 = { + add_character_modifier = { + modifier = wedding_practical_marriage_modifier + years = 15 + } + } + } + } + } + } + } + + option = { #Misunderstood + name = ep2_wedding.1301.misunderstood + + ai_chance = { + base = 120 + ai_value_modifier = { + ai_energy = -0.25 + } + modifier = { + scope:reassurance = flag:practical + add = 5 + } + modifier = { + scope:reassurance = flag:fertility + add = 10 + } + modifier = { + scope:reassurance = flag:stop_whining + add = 20 + } + } + scope:spouse_1 = { + send_interface_toast = { + title = ep2_wedding.1301.outcome.misunderstood + left_icon = scope:spouse_2 + scope:activity = { + add_activity_log_entry = { + key = wedding_whyme_misunderstood_log + tags = { bad } + score = 25 + character = scope:spouse_1 + target = scope:spouse_2 + + # Effect + scope:spouse_1 = { + progress_towards_rival_effect = { + REASON = rival_shared_insecurity + CHARACTER = scope:spouse_2 + OPINION = -20 + } + } + scope:spouse_2 = { + add_character_modifier = { + modifier = wedding_insecure_marriage_modifier + years = 15 + } + } + } + } + } + } + } + + after = { + remove_character_flag = busy_in_wnight_event + remove_character_flag = is_naked + scope:spouse_1 = { + remove_character_flag = busy_in_wnight_event + remove_character_flag = is_naked + } + } +} + + + +################################################## +# A Friend Is Monopolizing Your Attention +# by Luke Bean +# ep2_wedding.1310 +################################################## + +scripted_trigger ep2_wedding_1310_wedding_friend_trigger = { + any_relation = { type = friend this = root } + is_adult = yes + is_ai = yes + NOR ={ + AND = { + this = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } # If the spouses are friends, that's adorable but incompatible with this event + AND = { + this = scope:activity.special_guest:spouse_2 + root = scope:activity.special_guest:spouse_1 + } + } +} + +ep2_wedding.1310 = { + type = activity_event + title = ep2_wedding.1310.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + this = scope:spouse_1 + this = scope:spouse_2 + } + } + desc = ep2_wedding.1310.desc_spouse + } + triggered_desc = { + trigger = { + this = scope:host + } + desc = ep2_wedding.1310.desc_host + } + desc = ep2_wedding.1310.desc_guest + } + } + + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = laugh + } + center_portrait = { + character = scope:other_guest + animation = disapproval + } + right_portrait = { + character = scope:friend + animation = wedding_drunk + } + + lower_right_portrait = scope:other_spouse + + cooldown = { years = 10 } + + trigger = { + has_ep2_dlc_trigger = yes + scope:activity = { + any_attending_character = { + ep2_wedding_1310_wedding_friend_trigger = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + has_trait = shy + add = 1 + } + modifier = { + has_trait = lifestyle_reveler + add = 1 + } + modifier = { + scope:activity = { exists = var:lovers_wedding } + add = -1 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = 1 + } + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse_2 } + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_1310_wedding_friend_trigger = yes + } + save_scope_as = friend + } + } + if = { + limit = { + #If you're one of the spouses + OR = { + this = scope:spouse_1 + this = scope:spouse_2 + } + } + if = { + limit = { this = scope:spouse_1 } + #The person judging you will probably be a close relative of your new spouse, but could also be the spouse themselves + scope:spouse_2 = { save_scope_as = other_spouse } + random_list = { + 100 = { + trigger = { + scope:activity = { + any_attending_character = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + is_close_family_of = scope:spouse_2 + } + } + } + scope:activity = { + random_attending_character = { + limit = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + is_close_family_of = scope:spouse_2 + } + save_scope_as = other_guest + } + } + } + 50 = { + scope:spouse_2 = { save_scope_as = other_guest } + } + } + } + else = { + scope:spouse_1 = { save_scope_as = other_spouse } + random_list = { + 100 = { + trigger = { + scope:activity = { + any_attending_character = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + is_close_family_of = scope:spouse_1 + } + } + } + scope:activity = { + random_attending_character = { + limit = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + is_close_family_of = scope:spouse_1 + } + save_scope_as = other_guest + } + } + } + 50 = { + scope:spouse_1 = { save_scope_as = other_guest } + } + } + } + } + else_if = { + limit = { this = scope:host } # If you are the host, the judgy guest can be either spouse or any of their close family + random_list = { + 100 = { + trigger = { + NOT = { + scope:spouse_1 = { + any_relation = { + type = friend + this = root + } + } + } + } + scope:spouse_1 = { save_scope_as = other_guest } + } + 100 = { + trigger = { NOT = { scope:spouse_2 = { any_relation = { type = friend this = root } } } } + scope:spouse_2 = { save_scope_as = other_guest } + } + 100 = { + trigger = { + scope:activity = { + any_attending_character = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + OR = { + is_close_family_of = scope:spouse_1 + is_close_family_of = scope:spouse_2 + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + OR = { + is_close_family_of = scope:spouse_1 + is_close_family_of = scope:spouse_2 + } + } + save_scope_as = other_guest + } + } + } + 1 = { + scope:activity = { random_attending_character = { save_scope_as = other_guest } } #In case you're friends with both spouses and their entire families, I guess. + } + } + } + else = { + random_list = { + 10 = { + trigger = { NOT = { scope:spouse_1 = { any_relation = { type = friend this = root } } } } #Same options as if you're the host, but much less likely to grab the spouses + scope:spouse_1 = { save_scope_as = other_guest } + } + 10 = { + trigger = { NOT = { scope:spouse_2 = { any_relation = { type = friend this = root } } } } + scope:spouse_2 = { save_scope_as = other_guest } + } + 100 = { + trigger = { + scope:activity = { + any_attending_character = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + OR = { + is_close_family_of = scope:spouse_1 + is_close_family_of = scope:spouse_2 + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + NOT = { + any_relation = { type = friend this = root } + any_relation = { type = friend this = scope:friend } + this = root + this = scope:friend + } + is_adult = yes + is_ai = yes + OR = { + is_close_family_of = scope:spouse_1 + is_close_family_of = scope:spouse_2 + } + } + save_scope_as = other_guest + } + } + } + 1 = { + scope:activity = { random_attending_character = { save_scope_as = other_guest } } + } + } + } + } + + # What a joy to have FRIEND here with me! + option = { + name = ep2_wedding.1310.a + scope:activity = { + add_activity_log_entry = { + key = wedding_banquet_bond_log + tags = { good } + score = 25 + character = root + target = scope:friend + + # Effect + root = { + if = { + limit = { + can_set_relation_best_friend_trigger = { CHARACTER = scope:friend } + } + set_relation_best_friend = { reason = best_friend_great_time_at_wedding copy_reason = friend target = scope:friend } + } + if = { + limit = { + OR = { + this = scope:spouse_1 + this = scope:spouse_2 + this = scope:host + } + } + reverse_add_opinion = { + target = scope:other_guest + modifier = insult_opinion + opinion = -30 + } + } + stress_impact = { + base = medium_stress_impact_loss + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.1 + } + modifier = { + has_trait = lustful + add = -15 + } + modifier = { + has_trait = gregarious + add = -25 + } + } + } + + # OTHER GUEST, come join us! + option = { + name = ep2_wedding.1310.b + random_list = { + 50 = { #Third person befriends you both + desc = ep2_wedding.1310.b.newfriends + compatibility_modifier = { + who = scope:friend + compatibility_target = scope:other_guest + multiplier = 3 + max = 50 + min = -30 + } + send_interface_toast = { + title = ep2_wedding.1310.b.newfriends + left_icon = scope:other_guest + scope:activity = { + add_activity_log_entry = { + key = wedding_cannot_escape_friends_log + tags = { good } + score = 25 + character = root + target = scope:other_guest + + # Effect + root = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:other_guest } + } + set_relation_friend = { + reason = friend_great_time_at_wedding + target = scope:other_guest + province = root.location + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + } + } + scope:friend = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:other_guest } + } + set_relation_friend = { + reason = friend_great_time_at_wedding + target = scope:other_guest + province = root.location + } + } + } + } + } + } + } + 50 = { #Everyone has a good time + desc = ep2_wedding.1310.b.goodtime + compatibility_modifier = { + who = scope:friend + compatibility_target = scope:other_guest + multiplier = 2 + max = 35 + min = -35 + } + send_interface_toast = { + title = ep2_wedding.1310.b.goodtime + left_icon = scope:other_guest + scope:activity = { + add_activity_log_entry = { + key = wedding_cannot_escape_goodtime_log + tags = { betrothal } + score = 25 + character = root + target = scope:other_guest + + # Effect + root = { + reverse_add_opinion = { + target = scope:other_guest + modifier = friendliness_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:friend + modifier = friendliness_opinion + opinion = 30 + } + stress_impact = { + gregarious = minor_stress_impact_loss + } + } + } + } + } + } + 40 = { #Everyone has a bad time + desc = ep2_wedding.1310.b.badtime + compatibility_modifier = { + who = scope:friend + compatibility_target = scope:other_guest + multiplier = -3 + max = 60 + min = -9 + } + send_interface_toast = { + title = ep2_wedding.1310.b.badtime + left_icon = scope:other_guest + scope:activity = { + add_activity_log_entry = { + key = wedding_cannot_escape_badtime_log + tags = { betrothal } + score = 25 + character = root + target = scope:other_guest + + #Effect + if = { + limit = { + scope:friend = { can_set_relation_rival_trigger = { CHARACTER = scope:other_guest } } + } + scope:friend = { + set_relation_rival = { + target = scope:other_guest + reason = rival_bad_time_at_wedding + } + } + } + root = { + stress_impact = { + base = minor_stress_impact_gain + } + } + } + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + } + modifier = { + has_trait = gregarious + add = 20 + } + modifier = { + has_trait = shy + add = -75 + } + } + } + + # Let's sneak out so we can talk properly! + option = { + name = ep2_wedding.1310.c + scope:activity = { + add_activity_log_entry = { + key = wedding_cannot_escape_sneak_log + tags = { betrothal } + score = 25 + character = root + target = scope:friend + + # Effect + root = { + if = { + limit = { NOT = { has_trait = confider } } + add_trait = confider + } + else = { + add_stress = major_stress_impact_loss + } + } + scope:other_guest = { + if = { + limit = { + OR = { + this = scope:spouse_1 + this = scope:spouse_2 + } + } + progress_towards_rival_effect = { + REASON = rival_dishonored_wedding_banquet + CHARACTER = root + OPINION = 0 + } + } + else = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -30 + } + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -0.5 + } + modifier = { + has_trait = shy + add = 20 + } + modifier = { + has_trait = gregarious + add = -50 + } + } + } + + option = { # You must excuse me, my friend. + name = ep2_wedding.1310.d + flavor = ep2_wedding.1310.d.tt + scope:activity = { + add_activity_log_entry = { + key = wedding_cannot_escape_excuse_log + tags = { betrothal } + score = 25 + character = root + target = scope:other_guest + + # Effect + scope:other_guest = { + progress_towards_friend_effect = { + REASON = friend_great_time_at_wedding + CHARACTER = root + OPINION = 0 + } + } + } + } + stress_impact = { + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + } + modifier = { + has_trait = gregarious + add = -20 + } + } + } +} + +###################################### +# A Rival Seeks Forgiveness +# by Luke Bean +# ep2_wedding.1320 +###################################### + +scripted_trigger ep2_wedding_1320_forgiving_rival_trigger = { + is_adult = yes + is_ai = yes + any_relation = { type = rival this = root } + NOR = { + has_character_flag = busy_in_wnight_event + has_trait = vengeful + has_trait = arrogant + any_relation = { type = nemesis this = root } + } + OR = { + has_trait = forgiving + has_trait = humble + has_trait = compassionate + AND = { + has_trait = zealous + this.faith = { trait_is_virtue = forgiving } + } + trait_compatibility = { + target = root + value >= medium_positive_trait_compatibility # We're not so different, you and I... + } + } + NOR = { + AND = { + root = scope:activity.special_guest:spouse_1 # Never triggers for rival spouses + this = scope:activity.special_guest:spouse_2 + } + AND = { + root = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } +} + +ep2_wedding.1320 = { + type = activity_event + title = ep2_wedding.1320.t + desc = { + desc = ep2_wedding.1320.desc_intro + first_valid = { + triggered_desc = { + trigger = { + scope:role = flag:host + scope:rival_role = flag:spouse + } + desc = ep2_wedding.1320.desc_host_vs_spouse + } + triggered_desc = { + trigger = { + scope:role = flag:host + scope:rival_role = flag:guest + } + desc = ep2_wedding.1320.desc_host_vs_guest + } + triggered_desc = { + trigger = { + scope:role = flag:spouse + scope:rival_role = flag:guest + } + desc = ep2_wedding.1320.desc_spouse_vs_guest + } + triggered_desc = { + trigger = { + scope:role = flag:guest + scope:rival_role = flag:host + } + desc = ep2_wedding.1320.desc_guest_vs_host + } + triggered_desc = { + trigger = { + scope:role = flag:guest + scope:rival_role = flag:spouse + } + desc = ep2_wedding.1320.desc_guest_vs_spouse + } + triggered_desc = { + trigger = { + scope:role = flag:spouse + scope:rival_role = flag:host + } + desc = ep2_wedding.1320.desc_spouse_vs_host + } + desc = ep2_wedding.1320.desc_guest_vs_guest + } + desc = ep2_wedding.1320.desc_outro + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:rival + animation = shame + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + scope:activity = { + any_attending_character = { + ep2_wedding_1320_forgiving_rival_trigger = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + OR = { + root = scope:host + scope:host = { + ep2_wedding_1320_forgiving_rival_trigger = yes + } + } + add = 5 # Very, very likely to happen if one rival invited and the other accepted + } + modifier = { + OR = { + root = scope:activity.special_guest:spouse_1 + scope:activity.special_guest:spouse_2 = { ep2_wedding_1320_forgiving_rival_trigger = yes } + } + add = 3 # Much more likely to happen on the occasion of one of the rivals' weddings + } + modifier = { + has_trait = forgiving ### More likely to happen if the rival thinks root is the sort of person who might forgive them + add = 1 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1320_forgiving_rival_trigger = yes + has_trait = forgiving + } + } + add = 1 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1320_forgiving_rival_trigger = yes + has_trait = humble + } + } + add = 1 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1320_forgiving_rival_trigger = yes + has_trait = compassionate + } + } + add = 1 + } + modifier = { + scope:activity = { + any_attending_character = { + ep2_wedding_1320_forgiving_rival_trigger = yes + has_trait = zealous + faith = { trait_is_virtue = forgiving } + } + } + add = 1 + } + } + + immediate = { + scope:activity = { + random_attending_character = { + limit = { + ep2_wedding_1320_forgiving_rival_trigger = yes + OR = { + has_trait = forgiving + has_trait = humble + has_trait = compassionate + AND = { + has_trait = zealous + faith = { trait_is_virtue = forgiving } + } + } + } + alternative_limit = { + ep2_wedding_1320_forgiving_rival_trigger = yes + } + save_scope_as = rival + } + } + if = { + limit = { + root = scope:host + } + save_scope_value_as = { + name = role + value = flag:host + } + } + else_if = { + limit = { + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + save_scope_value_as = { + name = role + value = flag:spouse + } + } + else = { + save_scope_value_as = { + name = role + value = flag:guest + } + } + if = { + limit = { + scope:rival = scope:host + } + save_scope_value_as = { + name = rival_role + value = flag:host + } + } + else_if = { + limit = { + OR = { + scope:rival = scope:activity.special_guest:spouse_1 + scope:rival = scope:activity.special_guest:spouse_2 + } + } + save_scope_value_as = { + name = rival_role + value = flag:spouse + } + } + else = { + save_scope_value_as = { + name = rival_role + value = flag:guest + } + } + } + + # Embrace RIVAL and let bygones be bygones! + option = { + name = ep2_wedding.1320.a + scope:activity = { + add_activity_log_entry = { + key = wedding_embraced_rival_log + tags = { rival } + score = 25 + character = root + target = scope:rival + + #Effect + root = { + remove_relation_rival = scope:rival + random_list = { + 80 = { + send_interface_toast = { + title = ep2_wedding.1320.a.friendliness + left_icon = scope:rival + reverse_add_opinion = { + target = scope:rival + modifier = friendliness_opinion + opinion = 30 + } + } + } + 20 = { + compatibility_modifier = { + who = root + compatibility_target = scope:rival + multiplier = 3 + max = 50 + min = -30 + } + send_interface_toast = { + title = ep2_wedding.1320.a.friend + left_icon = scope:rival + set_relation_friend = { reason = friend_reconciled_at_wedding target = scope:rival } + } + } + } + } + } + } + stress_impact = { + vengeful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + forgiving = massive_stress_impact_loss + compassionate = major_stress_impact_loss + gregarious = minor_stress_impact_loss + humble = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.2 + ai_compassion = 0.5 + ai_sociability = 0.2 + } + modifier = { + has_trait = vengeful + add = -100 + } + modifier = { + has_trait = arrogant + add = -50 + } + modifier = { + has_trait = forgiving + add = 100 + } + } + } + + # Hurl a DISH in RIVAL's face. + option = { + name = ep2_wedding.1320.b + scope:activity = { + add_activity_log_entry = { + key = wedding_dished_rival_log + tags = { rival } + score = 25 + character = root + target = scope:rival + + # Effect + root = { + add_dread = minor_dread_gain + } + } + } + random_list = { + 100 = { + desc = ep2_wedding.1310.b.nowound + send_interface_toast = { + title = ep2_wedding.1310.b.nowound + left_icon = scope:rival + reverse_add_opinion = { + target = scope:rival + modifier = angry_opinion + opinion = -50 + } + } + } + 30 = { + desc = ep2_wedding.1310.b.wound + trigger = { + can_set_relation_nemesis_trigger = { CHARACTER = scope:rival } + } + send_interface_toast = { + title = ep2_wedding.1310.b.wound + left_icon = scope:rival + scope:rival = { increase_wounds_effect = { REASON = fight } } + set_relation_nemesis = { reason = nemesis_spurned_reconciliation_at_wedding target = scope:rival } + } + } + 30 = { + desc = ep2_wedding.1310.b.wound + trigger = { + NOT = { can_set_relation_nemesis_trigger = { CHARACTER = scope:rival } } + } + send_interface_toast = { + title = ep2_wedding.1310.b.wound + left_icon = scope:rival + scope:rival = { increase_wounds_effect = { REASON = fight } } + } + } + } + if = { + limit = { + has_activity_intent = banquet_mischief_intent + } + stress_impact = { + base = minor_stress_impact_loss + vengeful = major_stress_impact_loss + } + } + else = { + stress_impact = { + vengeful = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + forgiving = massive_stress_impact_gain + compassionate = major_stress_impact_gain + gregarious = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.5 + ai_compassion = -0.5 + } + modifier = { + has_trait = wrathful + add = 30 + } + modifier = { + has_trait = impatient + add = 30 + } + } + } + + # What's forgiveness worth to you? + option = { + name = ep2_wedding.1320.c + + duel = { + target = scope:rival + skill = diplomacy + 25 = { + desc = ep2_wedding.1310.c.hook + trigger = { + can_add_hook = { + target = scope:rival + type = favor_hook + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = ep2_wedding.1310.c.hook + left_icon = scope:rival + scope:activity = { + add_activity_log_entry = { + key = wedding_hooked_rival_log + tags = { rival } + score = 25 + character = root + target = scope:rival + + # Effect + root = { + remove_relation_rival = scope:rival + add_hook = { + target = scope:rival + type = favor_hook + } + } + } + } + } + } + 30 = { + desc = ep2_wedding.1310.c.apology + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + send_interface_toast = { + title = ep2_wedding.1310.c.apology + left_icon = scope:rival + scope:activity = { + add_activity_log_entry = { + key = wedding_apology_rival_log + tags = { rival } + score = 25 + character = root + target = scope:rival + + # Effect + root = { + remove_relation_rival = scope:rival + add_prestige = medium_prestige_value + } + } + } + } + } + 35 = { + desc = ep2_wedding.1310.c.refusal + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = ep2_wedding.1310.c.refusal + left_icon = scope:rival + scope:activity = { + add_activity_log_entry = { + key = wedding_refusal_rival_log + tags = { rival } + score = 25 + character = root + target = scope:rival + + # Effect + root = { + reverse_add_opinion = { + target = scope:rival + modifier = angry_opinion + opinion = -50 + } + } + } + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + has_trait = ambitious + add = 10 + } + } + } + + #Ignore RIVAL until they leave. + option = { + name = ep2_wedding.1320.d + add_prestige = minor_prestige_gain + scope:rival = { add_prestige = minor_prestige_loss } + reverse_add_opinion = { + target = scope:rival + modifier = angry_opinion + opinion = -20 + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + stress_impact = { + base = minor_stress_impact_loss + } + } + ai_chance = { + base = 80 + modifier = { + has_activity_intent = reduce_stress_intent + add = 50 + } + ai_value_modifier = { + ai_energy = -0.5 + } + } + } +} + +############################################## +# We Were Lovers Before The Wedding +# by Luke Bean +# ep2_wedding.1330 +############################################## + +scripted_trigger ep2_wedding_1330_doubts_own_fidelity_trigger = { + OR = { + has_trait = lustful + has_trait = seducer + has_trait = rakish + any_relation = { + type = lover + this != scope:spouse + } + } +} + +ep2_wedding.1330 = { + type = activity_event + title = ep2_wedding.1330.t + desc = ep2_wedding.1330.desc + theme = wedding_night_activity + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:spouse + animation = flirtation + } + + cooldown = { years = 10 } + + trigger = { + has_ep2_dlc_trigger = yes + scope:activity = { exists = var:lovers_wedding } + OR = { + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + + weight_multiplier = { + base = 100 + } + + immediate = { + if = { + limit = { root = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = spouse } + } + else_if = { + limit = { root = scope:activity.special_guest:spouse_2 } + scope:activity.special_guest:spouse_1 = { save_scope_as = spouse } + } + if = { + limit = { + any_relation = { type = soulmate this != scope:spouse } + } + random_relation = { + type = soulmate + limit = { this != scope:spouse } + save_scope_as = soulmate + } + } + } + + # I love this MAN beyond words + option = { + name = ep2_wedding.1330.a + trigger = { + can_set_relation_soulmate_trigger = { CHARACTER = scope:spouse } + } + + set_relation_soulmate = { + reason = soulmate_married_my_lover + copy_reason = lover + target = scope:spouse + } + # Achievements + player_succeeded_at_a_thousand_and_one_nights_achievement_effect = yes + + stress_impact = { + seducer = medium_stress_impact_gain + rakish = medium_stress_impact_gain + deceitful = minor_stress_impact_gain + chaste = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.25 + } + modifier = { + has_trait = callous + add = -20 + } + } + } + + # I will never need anyone else but HIM + option = { + name = ep2_wedding.1330.b + trigger = { + ep2_wedding_1330_doubts_own_fidelity_trigger = no + } + + add_character_modifier = { + modifier = wedding_wants_to_be_faithful_modifier + years = 20 + } + + stress_impact = { + fickle = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.25 + } + modifier = { + has_trait = chaste + add = 20 + } + } + } + + # I will be faithful. I will change my ways! + option = { + name = ep2_wedding.1330.c + trigger = { + OR = { + has_trait = rakish + any_relation = { + type = lover + this != scope:spouse + } + } + } + + add_character_modifier = { + modifier = wedding_wants_to_be_faithful_modifier + years = 20 + } + if = { + limit = { has_trait = rakish } + random_list = { + 50 = { + send_interface_toast = { + title = ep2_wedding.1330.c.rakish.success + remove_trait = rakish + add_stress = major_stress_impact_gain + } + } + 50 = { + send_interface_toast = { + title = ep2_wedding.1330.c.rakish.failure + add_stress = minor_stress_impact_gain + } + } + } + } + every_relation ?= { + type = lover + limit = { this != scope:spouse } + save_temporary_scope_as = lover + if = { + limit = { scope:lover = { is_ai = no } } + scope:lover = { + send_interface_toast = { + title = ep2_wedding.1330.c.breakup + left_icon = root + root = { remove_relation_lover = scope:lover } + } + } + } + else = { root = { remove_relation_lover = scope:lover } } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.25 + ai_honor = 0.25 + } + modifier = { + has_trait = lustful # lustful will avoid this option UNLESS... + add = -30 + } + modifier = { + has_trait = lustful + has_trait = compassionate # ...they have a reason to feel bad about it. + add = 80 + } + modifier = { + has_trait = lustful + has_trait = just + add = 60 + } + modifier = { + has_trait = lustful + has_trait = honest + add = 60 + } + modifier = { + has_trait = lustful + has_trait = zealous + root.faith = { trait_is_virtue = chaste } + add = 80 + } + } + } + + # I wonder if HE's into... that one thing? + option = { + name = ep2_wedding.1330.d + trigger = { + is_deviant_trigger = yes + NOR = { + faith = { has_doctrine_parameter = deviancy_accepted } + scope:spouse = { is_deviant_trigger = yes } + } + } + + if = { + limit = { any_secret = { type = secret_deviant NOT = { is_known_by = scope:spouse } } } + every_secret = { type = secret_deviant reveal_to = scope:spouse } + } + + hidden_effect = { + if = { + limit = { scope:spouse = { NOT = { any_secret = { type = secret_deviant } } } } + random_list = { + 70 = { + send_interface_toast = { + title = ep2_wedding.1330.d.yuck + left_icon = scope:spouse + reverse_add_opinion = { + target = scope:spouse + modifier = disgusted_opinion + opinion = -15 + } + } + } + 30 = { + compatibility_modifier = { + who = root + compatibility_target = scope:spouse + multiplier = 3 + max = 50 + min = -30 + } + modifier = { + scope:spouse = { has_trait = lustful } + add = 50 + } + modifier = { + scope:spouse = { has_trait = chaste } + add = -50 + } + send_interface_toast = { + title = ep2_wedding.1330.d.yum + left_icon = scope:spouse + scope:spouse = { add_secret = { type = secret_deviant } } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 15 + } + } + } + } + } + if = { + limit = { scope:spouse = { any_secret = { type = secret_deviant NOT = { is_known_by = root } } } } + send_interface_toast = { + title = ep2_wedding.1330.d.yeahmetoo + left_icon = scope:spouse + scope:spouse = { every_secret = { type = secret_deviant reveal_to = root } } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 15 + } + } + } + } + + show_as_tooltip = { + random_list = { + 1 = { + desc = ep2_wedding.1330.d.yuck.tt + show_chance = no + reverse_add_opinion = { + target = scope:spouse + modifier = disgusted_opinion + opinion = -15 + } + } + 1 = { + desc = ep2_wedding.1330.d.yum.tt + show_chance = no + scope:spouse = { add_secret = { type = secret_deviant } } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 15 + } + } + 1 = { + desc = ep2_wedding.1330.d.yeahmetoo.tt + show_chance = no + custom_tooltip = ep2_wedding.1330.d.confession.tt + } + } + } + + ai_chance = { + base = 120 + ai_value_modifier = { + ai_boldness = 0.25 + } + modifier = { + has_trait = lustful + add = 20 + } + } + } + + # How could I have done this to SOULMATE? + option = { + name = ep2_wedding.1330.e + trigger = { + exists = scope:soulmate + } + + remove_relation_lover = scope:spouse + reverse_add_opinion = { + target = scope:soulmate + modifier = love_opinion + opinion = 100 + } + + stress_impact = { + base = major_stress_impact_loss + stubborn = medium_stress_impact_gain + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 90 + ai_value_modifier = { + ai_honor = 0.25 + ai_boldness = -0.25 + ai_rationality = -0.5 + } + modifier = { + has_trait = fickle + add = 30 + } + modifier = { + has_trait = arbitrary + add = 10 + } + } + } + + # Am I really HIS only love? + option = { + name = ep2_wedding.1330.f + hidden_effect = { + random_list = { + 100 = { # Mind at ease + send_interface_toast = { + title = ep2_wedding.1330.f.mindatease + left_icon = scope:spouse + add_character_modifier = { + modifier = wedding_mind_at_ease_modifier + days = 3650 + } + } + } + 100 = { # Lingering doubts + modifier = { + scope:spouse = { has_trait = deceitful } + add = 30 + } + modifier = { + scope:spouse = { has_trait = lustful } + add = 20 + } + modifier = { + scope:spouse = { has_trait = honest } + add = -30 + } + modifier = { + scope:spouse = { has_trait = chaste } + add = -50 + } + modifier = { + has_trait = paranoid + add = 50 + } + modifier = { + has_trait = trusting + add = -60 + } + + send_interface_toast = { + title = ep2_wedding.1330.f.lingeringdoubts + left_icon = scope:spouse + add_character_modifier = { + modifier = wedding_lingering_doubts_modifier + days = 3650 + } + } + } + 100 = { # Confess all + trigger = { scope:spouse = { any_secret = { type = secret_lover NOT = { is_known_by = root } } } } + modifier = { + scope:spouse = { has_trait = honest } + add = 200 + } + modifier = { + scope:spouse = { has_trait = compassionate } + add = 20 + } + modifier = { + scope:spouse = { has_trait = just } + add = 40 + } + modifier = { + scope:spouse = { has_trait = deceitful } + add = -100 + } + modifier = { + scope:spouse = { has_trait = callous } + add = -20 + } + modifier = { + scope:spouse = { has_trait = sadistic } # "The LOOK on your face!" + add = 20 + } + send_interface_toast = { + title = ep2_wedding.1330.f.confession + left_icon = scope:spouse + scope:spouse = { every_secret = { type = secret_lover limit = { NOT = { is_known_by = root } } reveal_to = root } } + } + } + } + } + show_as_tooltip = { + random_list = { + 1 = { + desc = ep2_wedding.1330.f.lingeringdoubts.tt + show_chance = no + add_character_modifier = { + modifier = wedding_lingering_doubts_modifier + days = 3650 + } + } + 1 = { + desc = ep2_wedding.1330.f.mindatease.tt + show_chance = no + add_character_modifier = { + modifier = wedding_mind_at_ease_modifier + days = 3650 + } + } + 1 = { + desc = ep2_wedding.1330.f.confession.desc + show_chance = no + custom_tooltip = ep2_wedding.1330.f.confession.tt + } + } + } + stress_impact = { + trusting = minor_stress_impact_gain + } + + ai_chance = { + base = 90 + modifier = { + has_trait = paranoid + add = 50 + } + } + } + + # Finally, we have no need to hide our love! + option = { + name = ep2_wedding.1330.g + + stress_impact = { + base = medium_stress_impact_loss + honest = major_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.5 + } + modifier = { + has_trait = honest + add = 50 + } + } + } +} + +################################################## +# Condolences On Your Wedding +# by Luke Bean +# ep2_wedding.1340 +################################################## + +scripted_trigger ep2_wedding_1340_marriage_cynic_trigger = { + is_ai = yes + OR = { + any_spouse = { # dislikes a spouse + OR = { + reverse_opinion = { + target = prev + value <= low_negative_opinion + } + has_relation_rival = prev + } + } + any_memory = { memory_type = spouse_committed_adultery } # has been cheated on + AND = { # has been divorced + any_former_spouse = { } + NOT = { + any_memory = { memory_type = spouse_died } + } + } + } +} + +scripted_trigger ep2_wedding_1340_unusual_hobbies_trigger = { + OR = { + AND = { + has_trait = lustful + any_relation = { + type = lover + this != scope:intended + } + } + has_trait = seducer + has_trait = torturer + has_trait = rakish + has_trait = cannibal + any_secret = { type = secret_cannibal } + has_trait = witch + any_secret = { type = secret_witch } + } +} + +scripted_effect ep2_wedding_1340_add_confidence = { + if = { + limit = { + this = { is_female = yes } + } + add_character_modifier = wedding_confident_bride + } + else = { add_character_modifier = wedding_confident_groom } +} + +ep2_wedding.1340 = { + type = activity_event + title = ep2_wedding.1340.t + desc = { + desc = ep2_wedding.1340.desc.intro + random_valid = { + triggered_desc = { + trigger = { + exists = scope:disliked_spouse + scope:cynic = { + NOR = { + has_trait = lustful + has_trait = seducer + has_trait = rakish + } + } + } + desc = ep2_wedding.1340.desc.dislikes_spouse + } + triggered_desc = { + trigger = { + exists = scope:disliked_spouse + scope:cynic = { + OR = { # dislikes a spouse and has a lust-related trait + has_trait = lustful + has_trait = seducer + has_trait = rakish + } + } + } + desc = ep2_wedding.1340.desc.dislikes_spouse_lustful + } + triggered_desc = { + trigger = { + scope:cynic = { + AND = { # has been divorced + any_former_spouse = { } + NOT = { + any_memory = { + memory_type = spouse_died + } + } + } + } + exists = scope:divorced_spouse + } + desc = ep2_wedding.1340.desc.divorced + } + triggered_desc = { + trigger = { # has been cheated on + NOT = { exists = scope:adulterous_spouse } # separate loc if they can name them + scope:cynic = { + any_memory = { + memory_type = spouse_committed_adultery + } + } + } + desc = ep2_wedding.1340.desc.cheated_on + } + triggered_desc = { + trigger = { + exists = scope:adulterous_spouse + } + desc = ep2_wedding.1340.desc.cheated_on_alt + } + } + desc = ep2_wedding.1340.desc.outro + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:cynic + animation = eyeroll + } + lower_center_portrait = scope:intended + + cooldown = { years = 15 } + + weight_multiplier = { + base = 1 + modifier = { # more likely to happen if close family member is cynical about marriage + root = { + any_close_family_member = { + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + ep2_wedding_1340_marriage_cynic_trigger = yes + } + } + add = 3 + } + modifier = { # also more likely to happen with a friend + root = { + any_relation = { + type = friend + is_alive = yes + is_ai = yes + is_participant_in_activity = scope:activity + ep2_wedding_1340_marriage_cynic_trigger = yes + } + } + add = 3 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = 2 + } + } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + location = scope:activity.activity_location + OR = { + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_2 = root + } + scope:activity = { + any_attending_character = { + ep2_wedding_1340_marriage_cynic_trigger = yes + } + } + } + + immediate = { + add_character_flag = busy_in_wgathering_event + root = { save_scope_as = nervous_spouse } + if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = intended + } + } + else = { + scope:activity.special_guest:spouse_1 = { + save_scope_as = intended + } + } + scope:activity = { + random_attending_character = { + limit = { ep2_wedding_1340_marriage_cynic_trigger = yes } + weight = { + base = 1 + modifier = { # much more likely to be cynical friend or family + factor = 100 + has_relation_friend = root + } + modifier = { + factor = 100 + is_close_family_of = root + } + modifier = { # helps if their personality disposes them to be cynical about marriage + factor = 3 + OR = { + has_trait = cynical + has_trait = lustful + } + } + } + save_scope_as = cynic + add_character_flag = busy_in_wgathering_event + if = { # if cynic dislikes a current spouse, mention them by name + limit = { + any_spouse = { + OR = { + reverse_opinion = { + target = prev + value <= 0 + } + has_relation_rival = prev + } + } + } + random_spouse = { + limit = { + OR = { + reverse_opinion = { + target = prev + value <= 0 + } + has_relation_rival = prev + } + } + save_scope_as = disliked_spouse + } + } + if = { # if cynic has a memory of adultery about a living spouse, mention them + limit = { + any_memory = { + memory_type = spouse_committed_adultery + } + } + every_spouse = { + save_temporary_scope_as = temp_spouse + prev = { + every_memory = { + memory_type = spouse_committed_adultery + if = { + limit = { has_memory_participant = scope:temp_spouse } + scope:temp_spouse = { save_scope_as = adulterous_spouse } + } + } + } + } + every_former_spouse = { + save_temporary_scope_as = temp_spouse + prev = { + every_memory = { + memory_type = spouse_committed_adultery + if = { + limit = { has_memory_participant = scope:temp_spouse } + scope:temp_spouse = { save_scope_as = adulterous_spouse } + } + } + } + } + } + if = { + limit = { + AND = { + any_former_spouse = { } + NOT = { + any_memory = { + memory_type = spouse_died + } + } + } + } + random_former_spouse = { save_scope_as = divorced_spouse } + } + } + } + } + + option = { # SPOUSE is perfect for me. + name = ep2_wedding.1340.a + flavor = ep2_wedding.1340.a.tt + random_list = { + 40 = { + compatibility_modifier = { + who = root + compatibility_target = scope:intended + multiplier = 3 + max = 100 + min = -20 + } + modifier = { + scope:intended = { + attraction >= low_positive_attraction + } + factor = 1.2 + } + modifier = { + attraction <= low_negative_attraction + factor = 0.8 + } + send_interface_toast = { + title = ep2_wedding.1340.a.success + ep2_wedding_1340_add_confidence = yes + add_stress = medium_stress_impact_loss + } + } + 20 = { + send_interface_toast = { + title = ep2_wedding.1340.a.failure + add_character_modifier = wedding_jitters + add_stress = minor_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + } + } + + option = { # Don't worry, I'll have my hobbies! + name = ep2_wedding.1340.b + flavor = ep2_wedding.1340.b.tt + trigger = { ep2_wedding_1340_unusual_hobbies_trigger = no } + random_list = { + 15 = { + modifier = { + has_trait = lifestyle_gardener + add = 70 + } + modifier = { + has_trait = lifestyle_reveler + add = 70 + } + modifier = { + has_trait = lifestyle_hunter + add = 70 + } + modifier = { + has_trait = lifestyle_poet + add = 70 + } + modifier = { + has_trait = lifestyle_blademaster + add = 40 + } + modifier = { + has_trait = lifestyle_herbalist + add = 40 + } + modifier = { + has_trait = lifestyle_mystic + add = 40 + } + modifier = { + has_trait = lifestyle_physician + add = 40 + } + modifier = { + has_trait = athletic + add = 40 + } + modifier = { + has_trait = journaller + add = 40 + } + send_interface_toast = { + title = ep2_wedding.1340.b.success + ep2_wedding_1340_add_confidence = yes + add_stress = medium_stress_impact_loss + } + } + 30 = { + send_interface_toast = { + title = ep2_wedding.1340.b.failure + add_character_modifier = wedding_jitters + add_stress = minor_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = lifestyle_gardener + add = 70 + } + modifier = { + has_trait = lifestyle_reveler + add = 70 + } + modifier = { + has_trait = lifestyle_hunter + add = 70 + } + modifier = { + has_trait = lifestyle_poet + add = 70 + } + modifier = { + has_trait = lifestyle_blademaster + add = 40 + } + modifier = { + has_trait = lifestyle_herbalist + add = 40 + } + modifier = { + has_trait = lifestyle_mystic + add = 40 + } + modifier = { + has_trait = lifestyle_physician + add = 40 + } + modifier = { + has_trait = athletic + add = 40 + } + modifier = { + has_trait = journaller + add = 40 + } + } + } + + option = { # Don't worry, I'll have my... hobbies. + name = ep2_wedding.1340.c + flavor = ep2_wedding.1340.c.tt + trigger = { ep2_wedding_1340_unusual_hobbies_trigger = yes } + random_list = { + 0 = { + modifier = { + has_trait = lustful + any_relation = { + type = lover + this != scope:intended + } + add = 20 + } + modifier = { + has_trait = seducer + add = 20 + } + modifier = { + has_trait = torturer + add = 20 + } + modifier = { + has_trait = rakish + add = 20 + } + modifier = { + OR = { + any_secret = { type = secret_cannibal } + has_trait = cannibal + } + add = 20 + } + modifier = { + is_witch_trigger = yes + add = 20 + } + send_interface_toast = { + title = ep2_wedding.1340.c.success + ep2_wedding_1340_add_confidence = yes + add_stress = medium_stress_impact_loss + } + } + 10 = { + send_interface_toast = { + title = ep2_wedding.1340.c.failure + add_character_modifier = wedding_jitters + add_stress = minor_stress_impact_gain + } + } + } + ai_chance = { + base = 150 + modifier = { + has_trait = seducer + add = 20 + } + modifier = { + has_trait = torturer + add = 20 + } + modifier = { + has_trait = rakish + add = 20 + } + modifier = { + OR = { + any_secret = { type = secret_cannibal } + has_trait = cannibal + } + add = 20 + } + modifier = { + is_witch_trigger = yes + add = 20 + } + } + } + + option = { # Please, I know all about marriage! + name = ep2_wedding.1340.d + flavor = { + first_valid = { + triggered_desc = { + trigger = { + number_of_current_and_former_spouses > 1 + } + desc = ep2_wedding.1340.d.tt.more + } + triggered_desc = { + trigger = { + number_of_current_and_former_spouses > 0 + } + desc = ep2_wedding.1340.d.tt.once + } + desc = ep2_wedding.1340.d.tt.never + } + } + random_list = { + 10 = { + modifier = { + number_of_current_and_former_spouses > 0 + add = 10 + } + modifier = { + number_of_current_and_former_spouses > 1 + add = 20 + } + modifier = { + number_of_current_and_former_spouses > 2 + add = 30 + } + send_interface_toast = { + title = ep2_wedding.1340.d.success + ep2_wedding_1340_add_confidence = yes + add_stress = medium_stress_impact_loss + } + } + 20 = { + send_interface_toast = { + title = ep2_wedding.1340.d.failure + add_character_modifier = wedding_jitters + add_stress = minor_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + } + } + + option = { # Get out of my face, you bitter wretch. + name = ep2_wedding.1340.e + trigger = { has_trait = wrathful } + stress_impact = { + base = medium_stress_impact_loss + } + reverse_add_opinion = { + target = scope:cynic + modifier = insulted_opinion + opinion = -30 + } + ai_chance = { + base = 300 + } + } + + option = { # ...will it really be that bad? + name = ep2_wedding.1340.f + trigger = { + NOT = { has_trait = wrathful } + } + add_character_modifier = wedding_jitters + ai_chance = { + base = 50 + } + } + + after = { + remove_character_flag = busy_in_wgathering_event + scope:cynic = { remove_character_flag = busy_in_wgathering_event } + } +} + +################################################## +# Lost For Words +# by Luke Bean +# ep2_wedding.1350 +################################################## + +scripted_trigger ep2_wedding_1350_caring_relative_trigger = { + is_ai = yes + is_close_family_of = root + NOR = { + is_child_of = root + is_grandchild_of = root + has_trait = callous + has_trait = sadistic + this = root + } + opinion = { + target = root + value >= 40 + } +} + +ep2_wedding.1350 = { + type = activity_event + title = ep2_wedding.1350.t + desc = ep2_wedding.1350.desc.intro + theme = wedding_ceremony_activity + center_portrait = { + character = root + animation = personality_compassionate + } + right_portrait = { + character = scope:caring_relative + animation = admiration + } + + cooldown = { years = 15 } + + weight_multiplier = { + base = 1 + modifier = { # much more likely to happen if root has wedding jitters + root = { + has_character_modifier = wedding_jitters + } + add = 5 + } + modifier = { + has_activity_intent = reduce_stress_intent + add = 2 + } + } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + location = scope:activity.activity_location + OR = { + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_2 = root + } + scope:activity = { + any_attending_character = { + ep2_wedding_1350_caring_relative_trigger = yes + } + } + } + + immediate = { + scope:activity = { + random_attending_character = { + limit = { ep2_wedding_1350_caring_relative_trigger = yes } + weight = { + base = 10 + modifier = { + add = 10 + is_parent_of = root + } + modifier = { + add = 5 + is_sibling_of = root + } + modifier = { + factor = 2 + has_trait = compassionate + } + } + save_scope_as = caring_relative + } + } + } + + option = { # Enjoy a quiet moment together. + name = ep2_wedding.1350.a + stress_impact = { + base = medium_stress_impact_loss + } + reverse_add_opinion = { + target = scope:caring_relative + modifier = love_opinion + opinion = 15 + } + if = { + limit = { has_character_modifier = wedding_jitters } + remove_character_modifier = wedding_jitters + ep2_wedding_1340_add_confidence = yes # replace wedding_jitters with confidence + } + ai_chance = { + base = 100 + modifier = { + has_character_modifier = wedding_jitters + add = 50 + } + } + } + + option = { # Tell RELATIVE how much it means to have them here. + name = ep2_wedding.1350.b + progress_towards_friend_effect = { + CHARACTER = scope:caring_relative + OPINION = 20 + REASON = friend_supportive_at_wedding + } + ai_chance = { + base = 100 + } + } +} + +############################ +## Wedding Banquet Events +## 2000-2999 +## by Veronica Pazos +############################ + +# Diplomatic Intent: You ask a friend of your target's for info about them + +scripted_trigger ep2_wedding_2000_valid_friend = { + feast_default_adult_participant_trigger = yes + drinks_alcohol_trigger = yes + OR = { #they know the person + is_close_family_or_spouse_of_root_trigger = yes + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root.intent_target } + } + NOT = { is_spouse_of = root } + NOT = { is_close_family_of = root } +} + +scripted_trigger ep2_wedding_2000_is_valiant = { + OR = { + has_lifestyle = martial_lifestyle + prowess >= high_skill_rating + martial >= high_skill_rating + has_trait = brave + has_trait = reckless + has_trait = gallant + has_trait = wrathful + has_trait = overseer + has_trait = strategist + has_trait = lifestyle_hunter + has_trait = lifestyle_blademaster + } +} + +scripted_trigger ep2_wedding_2000_is_nerd = { + OR = { + has_lifestyle = learning_lifestyle + learning >= high_skill_rating + has_trait = theologian + has_trait = scholar + has_trait = diligent + has_trait = shrewd + } +} + +scripted_trigger ep2_wedding_2000_is_social = { + OR = { + has_lifestyle = diplomacy_lifestyle + diplomacy >= high_skill_rating + has_trait = lifestyle_reveler + has_trait = gregarious + has_trait = august + has_trait = diplomat + has_trait = drunkard + has_trait = trusting + has_trait = compassionate + } +} + +scripted_trigger ep2_wedding_2000_is_fishy = { + OR = { + has_lifestyle = intrigue_lifestyle + intrigue >= high_skill_rating + has_trait = callous + has_trait = cynical + has_trait = arbitrary + has_trait = deceitful + has_trait = schemer + has_trait = torturer + has_trait = greedy + has_trait = vengeful + has_trait = ambitious + has_trait = disloyal + } +} + +scripted_trigger ep2_wedding_2000_is_lustful = { + OR = { + has_trait = lustful + has_trait = seducer + has_trait = rakish + has_trait = fornicator + has_trait = adulterer + has_trait = sodomite + has_trait = deviant + } +} + +ep2_wedding.2000 = { + type = activity_event + title = ep2_wedding.2000.t + desc = { + desc = ep2_wedding.2000.desc.intro + random_valid = { + triggered_desc = { + trigger = { + OR = { + intent_target = { + ep2_wedding_2000_is_lustful = yes + } + AND = { + intent_target = { + ep2_wedding_2000_is_lustful = no + } + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + } + } + desc = ep2_wedding.2000.desc.lustful + } + triggered_desc = { + trigger = { + OR = { + intent_target = { + ep2_wedding_2000_is_nerd = yes + } + AND = { + intent_target = { + ep2_wedding_2000_is_nerd = no + } + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + } + } + desc = ep2_wedding.2000.desc.nerd + } + triggered_desc = { + trigger = { + OR = { + intent_target = { + ep2_wedding_2000_is_valiant = yes + } + AND = { + intent_target = { + ep2_wedding_2000_is_valiant = no + } + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + } + } + desc = ep2_wedding.2000.desc.valiant + } + triggered_desc = { + trigger = { + OR = { + intent_target = { + ep2_wedding_2000_is_social = yes + } + AND = { + intent_target = { + ep2_wedding_2000_is_social = no + } + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + } + } + desc = ep2_wedding.2000.desc.social + } + triggered_desc = { + trigger = { + OR = { + intent_target = { + ep2_wedding_2000_is_fishy = yes + } + AND = { + intent_target = { + ep2_wedding_2000_is_fishy = no + } + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + } + } + desc = ep2_wedding.2000.desc.fishy + } + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + ep2_wedding_2000_is_fishy = yes + } + animation = scheme + } + animation = admiration + } + right_portrait = { + character = scope:target_friend + animation = drink_goblet + } + lower_center_portrait = scope:diplo_target + + cooldown = { years = 5 } + + trigger = { + has_ep2_dlc_trigger = yes + has_activity_intent = diplomatic_intent + intent_target = { #there's something we can say of them + is_alive = yes + OR = { + ep2_wedding_2000_is_valiant = yes + ep2_wedding_2000_is_nerd = yes + ep2_wedding_2000_is_social = yes + ep2_wedding_2000_is_fishy = yes + ep2_wedding_2000_is_lustful = yes + } + } + scope:activity = { #there's someone that knows the person + any_attending_character = { + ep2_wedding_2000_valid_friend = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + scope:activity = { #there's a guy that's best friends with target + any_attending_character = { + has_relation_best_friend = root.intent_target + } + } + } + modifier = { + factor = 1.5 + scope:activity = { #their soulmate is around + any_attending_character = { + has_relation_soulmate = root.intent_target + } + } + } + } + + immediate = { + scope:activity = { #there's someone that knows the person + random_attending_character = { + limit = { + ep2_wedding_2000_valid_friend = yes + } + save_scope_as = target_friend + } + } + intent_target = { save_scope_as = diplo_target } + } + + #Awesome, let's go! + option = { + name = ep2_wedding.2000.a + custom_tooltip = ep2_wedding.2000.a.tt + trigger_event = ep2_wedding.2001 + stress_impact = { + lazy = medium_stress_impact_gain + patient = medium_stress_impact_gain + shy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = patient + has_trait = shy + } + } + } + } + + #Are they... lying? + option = { + name = ep2_wedding.2000.b + duel = { + skill = intrigue + target = scope:target_friend + 50 = { #they were lying, you catch them + desc = ep2_wedding.2000.b.success + show_chance = no + modifier = { + add = 20 + scope:target_friend = { + ep2_wedding_2000_is_fishy = yes + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 5 + } + send_interface_toast = { + title = ep2_wedding.2000.b.success + left_icon = root + custom_tooltip = ep2_wedding.2000.b.success.tt + set_variable = { + name = wbanquet_friend_insight_var + value = scope:diplo_target + } + add_intrigue_skill = 1 + if = { + limit = { has_lifestyle = intrigue_lifestyle } + add_intrigue_lifestyle_xp = minor_lifestyle_experience + } + } + } + 50 = { #they weren't lying + desc = ep2_wedding.2000.b.failure + show_chance = no + modifier = { + add = 50 + scope:target_friend = { + has_trait = honest + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + send_interface_toast = { + title = ep2_wedding.2000.b.failure + left_icon = scope:target_friend + scope:target_friend = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -5 + } + } + } + } + } + stress_impact = { + reclusive = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = reclusive + } + } + } +} + +ep2_wedding.2001 = { + type = activity_event + title = ep2_wedding.2001.t + desc = ep2_wedding.2001.desc + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + ep2_wedding_2000_is_fishy = yes + } + animation = scheme + } + animation = admiration + } + right_portrait = { + character = scope:diplo_target + triggered_animation = { + trigger = { + drinks_alcohol_trigger = yes + } + animation = drink_goblet + } + animation = happiness + } + + lower_center_portrait = scope:target_friend + + #Lustful + option = { + name = ep2_wedding.2001.a + set_local_variable = ep2_wedding_lustful_var + ai_chance = { + base = 100 + modifier = { + factor = 2 + ep2_wedding_2000_is_lustful = yes + } + } + } + + #Nerd + option = { + name = { + trigger = { + NOT = { has_trait = dull } + capital_province = { + geographical_region = world_europe + } + } + text = ep2_wedding.2001.b + } + name = ep2_wedding.2001.b.dull + flavor = { + triggered_desc = { + trigger = { + NOT = { has_trait = dull } + } + desc = ep2_wedding.2001.b.flavor + } + } + set_local_variable = ep2_wedding_nerd_var + ai_chance = { + base = 100 + modifier = { + factor = 2 + ep2_wedding_2000_is_nerd = yes + } + } + } + + #Valiant + option = { + name = ep2_wedding.2001.c + set_local_variable = ep2_wedding_valiant_var + ai_chance = { + base = 100 + modifier = { + factor = 2 + ep2_wedding_2000_is_valiant = yes + } + } + } + + #Social + option = { + name = ep2_wedding.2001.d + set_local_variable = ep2_wedding_social_var + ai_chance = { + base = 100 + modifier = { + factor = 2 + ep2_wedding_2000_is_social = yes + } + } + } + + #Fishy + option = { + name = ep2_wedding.2001.e + set_local_variable = ep2_wedding_fishy_var + ai_chance = { + base = 100 + modifier = { + factor = 2 + ep2_wedding_2000_is_fishy = yes + } + } + } + + after = { + scope:diplo_target = { + hidden_effect = { + if = { + limit = { + OR = { + AND = { + ep2_wedding_2000_is_lustful = yes + has_local_variable = ep2_wedding_lustful_var + } + AND = { + ep2_wedding_2000_is_nerd = yes + has_local_variable = ep2_wedding_nerd_var + } + AND = { + ep2_wedding_2000_is_valiant = yes + has_local_variable = ep2_wedding_valiant_var + } + AND = { + ep2_wedding_2000_is_social = yes + has_local_variable = ep2_wedding_social_var + } + AND = { + ep2_wedding_2000_is_fishy = yes + has_local_variable = ep2_wedding_fishy_var + } + } + } + set_local_variable = ep2_wedding_2000_got_it_right + } + } + } + random_list = { + 5 = { + trigger = { + scope:diplo_target = { activity_wedding_diplomatic_intent_impressible_target = yes } + } + desc = ep2_wedding.2000.after.subjugate + show_chance = no + send_interface_toast = { + title = ep2_wedding.2000.after.subjugate + left_icon = scope:diplo_target + custom_tooltip = { + text = ep2_wedding.2000.after.subjugate.tt + complete_activity_intent = yes + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = title_change + add_claim_on_loss = no + } + scope:diplo_target = { + change_liege = { + liege = root + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + } + } + } + 10 = { + desc = ep2_wedding.2000.after.alliance + show_chance = no + send_interface_toast = { + title = ep2_wedding.2000.after.alliance + left_icon = scope:diplo_target + custom_tooltip = { + text = ep2_wedding.2000.after.alliance.tt + complete_activity_intent = yes + create_alliance = { + target = scope:diplo_target + allied_through_owner = root + allied_through_target = scope:diplo_target + } + scope:diplo_target = { + add_opinion = { + target = root + modifier = event_negotiated_alliance_opinion + } + } + } + } + } + 10 = { + desc = ep2_wedding.2000.after.friends + show_chance = no + send_interface_toast = { + title = ep2_wedding.2000.after.friends + left_icon = scope:diplo_target + progress_towards_friend_effect = { + CHARACTER = scope:diplo_target + OPINION = 15 + REASON = friend_wedding + } + } + } + 20 = { #only possible if you messed up + trigger = { + NOT = { has_local_variable = ep2_wedding_2000_got_it_right } + } + desc = ep2_wedding.2000.after.insult + show_chance = no + send_interface_toast = { + title = ep2_wedding.2000.after.insult.short + left_icon = scope:diplo_target + reverse_add_opinion = { + target = scope:diplo_target + modifier = insult_opinion + opinion = -10 + } + } + } + } + } +} + +############################ +## Wedding Night Events +## 3000-3999 +## by Veronica Pazos and Joe Parkin +############################ + +# Both spouses are shy/nervous and bond over something else + +scripted_trigger ep2_wedding.is_valid_shy = { + OR = { + AND = { + age <= 19 #they're young + NOT = { has_trait = lustful } + } + has_trait = shy + has_trait = craven + has_trait = depressed_1 + has_trait = depressed_genetic + has_trait = reclusive + has_trait = chaste + } +} + +ep2_wedding.3000 = { + type = activity_event + title = ep2_wedding.3000.t + desc = ep2_wedding.3000.desc + theme = wedding_night_activity + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:my_spouse + animation = shame + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are a spouse and shy + AND = { + root = scope:activity.special_guest:spouse_1 + ep2_wedding.is_valid_shy = yes + } + AND = { + root = scope:activity.special_guest:spouse_2 + ep2_wedding.is_valid_shy = yes + } + } + OR = { #and they are a spouse and shy; you also don't have a lover relationship already + scope:activity.special_guest:spouse_1 = { + this != root + NOT = { has_relation_lover = root } + ep2_wedding.is_valid_shy = yes + } + scope:activity.special_guest:spouse_2 = { + this != root + NOT = { has_relation_lover = root } + ep2_wedding.is_valid_shy = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + has_trait = shy + } + } + + immediate = { + if = { + limit = { + scope:activity.special_guest:spouse_1 = { this != root } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = my_spouse + } + } + else = { + scope:activity.special_guest:spouse_2 = { + save_scope_as = my_spouse + } + } + add_character_flag = { #doesn't make sense for you to have sexy times after this + flag = busy_in_wnight_event + days = 90 + } + } + + #Let's go for a walk + option = { + name = ep2_wedding.3000.a + custom_tooltip = ep2_wedding.3000.tt + random_list = { + 50 = { #they like it + desc = ep2_wedding.3000.a.success + show_chance = no + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = lifestyle_herbalist + has_trait = lifestyle_gardener + } + } + } + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = impatient + has_trait = diligent + } + } + } + send_interface_toast = { + title = ep2_wedding.3000.a.success + left_icon = scope:my_spouse + scope:activity = { + add_activity_log_entry = { + key = ep2_wedding_3000_log_a + tags = { good } + score = 20 + character = root + target = scope:my_spouse + + # Effect + root = { + if = { + limit = { + NOT = { has_relation_friend = scope:my_spouse } + } + set_relation_friend = { + target = scope:my_spouse + reason = lover_wnight_walk + } + } + else_if = { + limit = { + NOT = { has_relation_lover = scope:my_spouse } + } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_walk + OPINION = default_lover_opinion + } + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 15 + } + } + } + add_opinion = { + target = scope:my_spouse + modifier = wnight_common_things_opinion + } + } + } + } + } + } + 50 = { #they dont + desc = ep2_wedding.3000.a.failure + show_chance = no + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = lazy + has_trait = patient + } + } + } + send_interface_toast = { + title = ep2_wedding.3000.a.failure + left_icon = scope:my_spouse + scope:my_spouse = { + add_opinion = { + target = root + modifier = bored_opinion + opinion = -10 + } + } + add_opinion = { + target = scope:my_spouse + modifier = wnight_nothing_in_common_opinion + } + } + } + } + stress_impact = { + lazy = medium_stress_impact_gain + patient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = patient + } + } + } + } + + #Do you like... things? Talk about something else + option = { + name = ep2_wedding.3000.b + custom_tooltip = ep2_wedding.3000.tt + random_list = { + 50 = { #they like it + desc = ep2_wedding.3000.b.success + show_chance = no + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = patient + has_trait = calm + } + } + } + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = gregarious + has_trait = trusting + } + } + } + send_interface_toast = { + title = ep2_wedding.3000.b.success + left_icon = scope:my_spouse + scope:activity = { + add_activity_log_entry = { + key = ep2_wedding_3000_log_b + tags = { good } + score = 20 + character = root + target = scope:my_spouse + + # Effect + root = { + if = { + limit = { + NOT = { has_relation_friend = scope:my_spouse } + } + set_relation_friend = { + target = scope:my_spouse + reason = lover_wnight_talk + } + } + else_if = { + limit = { NOT = { has_relation_lover = scope:my_spouse } } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_talk + OPINION = default_lover_opinion + } + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 5 + } + } + } + add_opinion = { + target = scope:my_spouse + modifier = wnight_common_things_opinion + } + } + } + } + } + } + 50 = { #they dont + desc = ep2_wedding.3000.b.failure + show_chance = no + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = shy + has_trait = reclusive + } + } + } + modifier = { + add = 50 + scope:my_spouse = { + OR = { + has_trait = lisping + has_trait = stuttering + } + } + } + send_interface_toast = { + title = ep2_wedding.3000.b.failure + left_icon = scope:my_spouse + scope:my_spouse = { + add_opinion = { + target = root + modifier = bored_opinion + opinion = -10 + } + } + add_opinion = { + target = scope:my_spouse + modifier = wnight_nothing_in_common_opinion + } + } + } + } + stress_impact = { + reclusive = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = reclusive + } + } + } + + #Let's just sleep + option = { + name = ep2_wedding.3000.c + scope:my_spouse = { + add_opinion = { + target = root + modifier = friendliness_opinion + opinion = 5 + } + } + stress_impact = { + impatient = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = gregarious + } + } + } + } +} + +# Spouse with a secret has a breakdown and confesses their secret + +ep2_wedding.3010 = { + type = activity_event + title = ep2_wedding.3010.t + desc = { + desc = ep2_wedding.3010.desc.intro + first_valid = { #some vague flavour in case you choose the option to not hear about it (you still know the secret in the tooltip + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_murder + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.murder + } + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_murder_attempt + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.murder_attempt + } + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_cannibal + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.cannibal + } + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_deviant + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.deviant + } + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_witch + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.witch + } + triggered_desc = { + trigger = { + scope:my_spouse = { + any_secret = { + type = secret_non_believer + NOT = { is_known_by = root } + } + } + } + desc = ep2_wedding.3010.desc.non_believer + } + desc = ep2_wedding.3010.desc.fallback + } + } + theme = wedding_night_activity + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:my_spouse + animation = grief + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + OR = { #the other spouse has a secret + scope:activity.special_guest:spouse_1 = { + this != root + any_secret = { + NOT = { is_known_by = root } + } + } + scope:activity.special_guest:spouse_2 = { + this != root + any_secret = { + NOT = { is_known_by = root } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + has_trait = shy + } + } + + immediate = { + if = { + limit = { + scope:activity.special_guest:spouse_1 = { this != root } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = my_spouse + } + } + else = { + scope:activity.special_guest:spouse_2 = { + save_scope_as = my_spouse + } + } + scope:my_spouse = { + random_secret = { + limit = { NOT = { is_known_by = root } } + save_scope_as = secret_to_reveal + } + } + } + + #You can trust me + option = { + name = ep2_wedding.3010.a + scope:activity = { + add_activity_log_entry = { + key = wedding_confession_log + tags = { good } + score = 25 + character = root + target = scope:my_spouse + + # Effect + root = { + scope:secret_to_reveal = { reveal_to = root } + if = { + limit = { NOT = { has_relation_lover = scope:my_spouse } } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_secret_accepted + OPINION = default_lover_opinion + } + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = grateful_opinion + opinion = 5 + } + } + scope:my_spouse = { + if = { + limit = { + NOT = { has_character_modifier = wnight_confider_modifier } + } + add_character_modifier = { + modifier = wnight_confider_modifier + years = 10 + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = grateful_opinion + opinion = 15 + } + } + } + } + root = { + stress_impact = { #intended to be a very stressful moment + calm = medium_stress_impact_gain + content = medium_stress_impact_gain + diligent = medium_stress_impact_gain + temperate = medium_stress_impact_gain + paranoid = major_stress_impact_gain #they can hurt you + just = major_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = content + has_trait = diligent + has_trait = temperate + has_trait = paranoid + has_trait = just + } + } + } + } + + #I don't wanna hear the rest + option = { + name = ep2_wedding.3010.b + add_character_modifier = { + modifier = wnight_clear_conscience_modifier + years = 10 + } + stress_impact = { + deceitful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = deceitful + } + } + } + + #confess YOUR secret + option = { + name = ep2_wedding.3010.c + trigger = { + any_secret = { + NOT = { is_known_by = scope:my_spouse } + } + } + if = { + limit = { NOT = { has_relation_lover = scope:my_spouse } } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_secret_shared + OPINION = 20 + } + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } + if = { + limit = { + scope:my_spouse = { + NOT = { has_character_modifier = wnight_confider_modifier } + } + } + scope:my_spouse = { + add_character_modifier = { + modifier = wnight_confider_modifier + years = 10 + } + } + } + stress_impact = { + deceitful = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + scope:activity = { + add_activity_log_entry = { + key = wedding_confession_joint_log + tags = { good } + score = 25 + character = root + target = scope:my_spouse + + # Effect + root = { + scope:secret_to_reveal = { reveal_to = root } + random_secret = { + limit = { NOT = { is_known_by = scope:my_spouse } } + reveal_to = scope:my_spouse + } + if = { + limit = { NOT = { has_relation_soulmate = scope:my_spouse } } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_secret_shared + OPINION = 20 + } + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = grateful_opinion + opinion = 20 + } + } + if = { + limit = { + scope:my_spouse = { + NOT = { has_character_modifier = wnight_confider_modifier } + } + } + scope:my_spouse = { + add_character_modifier = { + modifier = wnight_confider_modifier + years = 10 + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = grateful_opinion + opinion = 20 + } + } + } + } + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = deceitful + has_trait = paranoid + } + } + } + } +} + +# You find out that your spouse fancies the other gender + +scripted_effect ep2_wedding.3020.reveal_secret_effect = { + if = { + limit = { + scope:my_spouse = { + any_secret = { + type = secret_homosexual + NOT = { is_known_by = root } + } + } + } + scope:my_spouse = { + random_secret = { + type = secret_homosexual + limit = { + NOT = { is_known_by = root } + } + reveal_to = root + } + } + } +} + +ep2_wedding.3020 = { + type = activity_event + title = ep2_wedding.3020.t + desc = ep2_wedding.3020.desc + theme = wedding_night_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { NOT = { is_attracted_to_gender_of = scope:my_spouse } } + animation = disbelief + } + animation = stress + } + right_portrait = { + character = scope:my_spouse + animation = worry + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + OR = { #the other spouse doesn't fancy you + scope:activity.special_guest:spouse_1 = { + this != root + NOT = { is_attracted_to_gender_of = root } + } + scope:activity.special_guest:spouse_2 = { + this != root + NOT = { is_attracted_to_gender_of = root } + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + if = { + limit = { + scope:activity.special_guest:spouse_1 = { this != root } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = my_spouse + } + } + else = { + scope:activity.special_guest:spouse_2 = { + save_scope_as = my_spouse + } + } + add_character_flag = { #doesn't make sense for you to have sexy times after this revelation + flag = busy_in_wnight_event + days = 90 + } + } + + #Well... not my problem + option = { + name = ep2_wedding.3020.a + stress_impact = { + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = patient + } + } + } + } + + #I get it - comfort them + option = { + name = ep2_wedding.3020.b + ep2_wedding.3020.reveal_secret_effect = yes + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:my_spouse } + } + set_relation_friend = { + reason = friend_wnight_homosexual + target = scope:my_spouse + } + } + if = { + limit = { + scope:my_spouse = { + NOT = { has_character_modifier = wnight_confider_modifier } + } + } + scope:my_spouse = { + add_character_modifier = { + modifier = wnight_confider_modifier + years = 10 + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + stress_impact = { + lustful = medium_stress_impact_gain + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = callous + } + } + } + } + + #You're also NOT attracted to them + option = { + name = ep2_wedding.3020.c + trigger = { + NOT = { is_attracted_to_gender_of = scope:my_spouse } + } + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:my_spouse } + } + set_relation_friend = { + reason = friend_wnight_homosexual_both + target = scope:my_spouse + } + } + if = { + limit = { + scope:my_spouse = { + NOT = { has_character_modifier = wnight_confider_modifier } + } + } + scope:my_spouse = { + add_character_modifier = { + modifier = wnight_confider_modifier + years = 10 + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + ep2_wedding.3020.reveal_secret_effect = yes + ai_chance = { + base = 100 + modifier = { + factor = 2 + NOT = { is_attracted_to_gender_of = scope:my_spouse } + } + } + } +} + +# Spouse gives you a cute memento to remember this night + +ep2_wedding.3030 = { + type = activity_event + title = ep2_wedding.3030.t + desc = ep2_wedding.3030.desc + theme = wedding_night_activity + center_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = seducer + has_trait = lustful + has_trait = rakish + } + } + animation = flirtation_left + } + animation = love + } + right_portrait = { + character = scope:my_spouse + animation = flirtation + } + artifact = { + target = scope:love_memento + position = lower_center_portrait + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + OR = { #the other spouse likes you in any way + scope:activity.special_guest:spouse_1 = { + this != root + OR = { + has_any_good_relationship_with_root_trigger = yes + opinion = { + target = root + value >= default_friend_opinion #15 + } + } + } + scope:activity.special_guest:spouse_2 = { + this != root + OR = { + has_any_good_relationship_with_root_trigger = yes + opinion = { + target = root + value >= default_friend_opinion #15 + } + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 1.5 + OR = { + scope:activity.special_guest:spouse_1 = { + this != root + has_relation_lover = root + } + scope:activity.special_guest:spouse_2 = { + this != root + has_relation_lover = root + } + } + } + modifier = { + factor = 2 + OR = { + scope:activity.special_guest:spouse_1 = { + this != root + has_relation_soulmate = root + } + scope:activity.special_guest:spouse_2 = { + this != root + has_relation_soulmate = root + } + } + } + } + + immediate = { + save_scope_as = itsa_me_scope #used in the artifact description + if = { + limit = { + scope:activity.special_guest:spouse_1 = { this != root } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = my_spouse + } + } + else = { + scope:activity.special_guest:spouse_2 = { + save_scope_as = my_spouse + } + } + hidden_effect_new_object = { + generate_romantic_trinket_effect = { OWNER = scope:my_spouse } + if = { + # Checks required for error suppression + limit = { exists = scope:romantic_trinket } + scope:romantic_trinket = { + save_scope_as = love_memento + set_artifact_description = love_memento_desc + } + } + } + create_character_memory = { + type = wedding_night_trinket + participants = { + spouse_1 = root + spouse_2 = scope:my_spouse + } + } + if = { + limit = { + any_character_artifact = { + artifact_slot_type = miscellaneous + this != scope:love_memento + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:my_spouse } + } + } + random_character_artifact = { + limit = { + artifact_slot_type = miscellaneous + this != scope:love_memento + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:my_spouse } + } + save_scope_as = my_love_memento + } + } + add_character_flag = is_naked + scope:my_spouse = { + add_character_flag = is_naked + } + } + + #I shall cherish this + option = { + name = ep2_wedding.3030.a + #get a bonus to court schemes targetting them + custom_tooltip = ep2_wedding.3030.a.tt + set_variable = { + name = wnight_court_memento_var + value = scope:my_spouse + } + custom_tooltip = ep2_wedding.3030.artifact_tt + scope:love_memento = { + add_artifact_history = { + type = given + actor = scope:my_spouse + recipient = root + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 10 + } + } + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + stress_impact = { + base = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + } + } + else = { + stress_impact = { + paranoid = medium_stress_impact_gain + } + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = paranoid + } + } + } + } + + #I shall cherish /you/ + option = { + name = ep2_wedding.3030.b + #get a bonus to seduce schemes targetting them + custom_tooltip = ep2_wedding.3030.b.tt + set_variable = { + name = wnight_seduce_memento_var + value = scope:my_spouse + } + custom_tooltip = ep2_wedding.3030.artifact_tt + scope:love_memento = { + add_artifact_history = { + type = given + actor = scope:my_spouse + recipient = root + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 10 + } + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = paranoid + } + } + } + } + + #I have something for you too! + option = { + name = ep2_wedding.3030.c + trigger = { + exists = scope:my_love_memento + } + scope:love_memento = { set_owner = root } + scope:my_love_memento = { set_owner = scope:my_spouse } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_very_good_fertility = scope:my_spouse + } + else_if = { + limit = { + NOT = { has_relation_lover = scope:my_spouse } + } + progress_towards_lover_effect = { + CHARACTER = scope:my_spouse + REASON = lover_wnight_gifts + OPINION = default_lover_opinion + } + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 15 + } + } + } + stress_impact = { + greedy = medium_stress_impact_gain + lustful = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = lustful + has_trait = paranoid + } + } + } + } + + #Reject it + option = { + name = ep2_wedding.3030.d + trigger = { + has_trait = paranoid + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -10 + } + } + } + stress_impact = { + base = major_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + after = { + remove_character_flag = is_naked + scope:my_spouse = { + remove_character_flag = is_naked + } + } +} + +# Your spouse and you are having a nice time when the bed catches fire + +ep2_wedding.3040 = { + type = activity_event + title = ep2_wedding.3040.t + desc = ep2_wedding.3040.desc + theme = wedding_night_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = brave + has_trait = reckless + } + } + animation = anger + } + animation = fear + } + right_portrait = { + character = scope:my_spouse + animation = shock + } + + cooldown = { years = 10 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + scope:activity = { + has_activity_option = { + category = wedding_option_decoration + option = wedding_decoration_bad + } + } + #This is to check if you've been cheap in general + OR = { + scope:activity = { + has_activity_option = { + category = wedding_option_entertainment + option = wedding_entertainment_bad + } + } + scope:activity = { + has_activity_option = { + category = wedding_option_food + option = wedding_food_bad + } + } + } + trigger_if = { + limit = { + root = scope:activity.special_guest:spouse_1 + } + #the other spouse likes you at least a tiny bit so you were having fun before the fire + scope:activity.special_guest:spouse_2 = { + OR = { + has_any_good_relationship_with_root_trigger = yes + opinion = { + target = root + value >= 0 + } + } + is_attracted_to_gender_of = root + } + # And you like them too + root = { + is_attracted_to_gender_of = scope:activity.special_guest:spouse_2 + } + } + trigger_else = { + #the other spouse likes you at least a tiny bit so you were having fun before the fire + scope:activity.special_guest:spouse_1 = { + OR = { + has_any_good_relationship_with_root_trigger = yes + opinion = { + target = root + value >= 0 + } + } + is_attracted_to_gender_of = root + } + # And you like them too + root = { + is_attracted_to_gender_of = scope:activity.special_guest:spouse_1 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + has_trait = reckless #you wouldn't pay attention to the candles + } + modifier = { + scope:activity.special_guest:spouse_1 = { + has_relation_lover = scope:activity.special_guest:spouse_2 + } + add = 1 + } + } + + immediate = { + if = { + limit = { + scope:activity.special_guest:spouse_1 = { this != root } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = my_spouse + } + } + else = { + scope:activity.special_guest:spouse_2 = { + save_scope_as = my_spouse + } + } + add_character_flag = is_naked + scope:my_spouse = { + add_character_flag = is_naked + } + } + + #Save them! + option = { + name = ep2_wedding.3040.a + duel = { + skill = prowess + value = average_skill_rating + 50 = { #you save them + desc = ep2_wedding.3040.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 0.5 + } + send_interface_toast = { + title = ep2_wedding.3040.a.success + left_icon = root + right_icon = scope:my_spouse + } + } + 50 = { #you get injured + desc = ep2_wedding.3040.a.failure + send_interface_toast = { + title = ep2_wedding.3040.a.failure + left_icon = root + right_icon = scope:my_spouse + increase_wounds_no_death_effect = { REASON = fire } + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 5 + } + } + } + stress_impact = { + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = craven + } + } + } + } + + #Save yourself + option = { + name = ep2_wedding.3040.b + random_list = { + 50 = { #spouse saves themselves + desc = ep2_wedding.3040.b.success + show_chance = no + send_interface_toast = { + title = ep2_wedding.3040.b.success + left_icon = scope:my_spouse + } + } + 50 = { #spouse gets injured + desc = ep2_wedding.3040.b.failure + show_chance = no + send_interface_toast = { + title = ep2_wedding.3040.b.failure + left_icon = scope:my_spouse + scope:my_spouse = { + increase_wounds_no_death_effect = { REASON = fire } + } + } + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + else = { + scope:my_spouse = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + just = minor_stress_impact_gain + brave = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = just + has_trait = brave + } + } + } + } + + #MY BODY IS MY WEAPON + option = { + name = ep2_wedding.3040.c + trigger = { has_lifestyle = martial_lifestyle } + duel = { + skill = prowess + value = average_skill_rating + 70 = { #you save them + desc = ep2_wedding.3040.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 0.5 + } + send_interface_toast = { + title = ep2_wedding.3040.c.success + left_icon = root + add_prowess_skill = 1 + } + } + 30 = { #you get injured + desc = ep2_wedding.3040.a.failure + send_interface_toast = { + title = ep2_wedding.3040.a.failure + left_icon = root + increase_wounds_no_death_effect = { REASON = fire } + add_prestige = minor_prestige_loss + } + } + } + if = { + limit = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value < 100 + } + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = tournament_hastiludes_xp_gain_medium_value + } + } + else = { + add_martial_lifestyle_xp = medium_lifestyle_xp + } + #no fertility gain because you're doing for yourself + stress_impact = { + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + craven = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = brave + has_trait = reckless + } + } + modifier = { + factor = 1.5 + has_lifestyle = martial_lifestyle + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = callous + has_trait = sadistic + } + } + } + } + + #Are you trying to kill your spouse? + option = { + name = ep2_wedding.3040.d + flavor = ep2_wedding.3040.d.flavor + trigger = { + has_activity_intent = murder_attendee_intent + scope:my_spouse = { is_ai = yes } + intent_target = scope:my_spouse + } + reason = activity_intent + random_list = { + 50 = { #spouse saves themselves + desc = ep2_wedding.3040.d.success + show_chance = no + send_interface_toast = { #but they know + title = ep2_wedding.3040.d.success + left_icon = scope:my_spouse + attempted_murder_opinion_effect = { + VICTIM = scope:my_spouse + MURDERER = root + } + add_secret = { + type = secret_murder_attempt + target = scope:my_spouse + } + } + } + 50 = { #spouse dies + desc = ep2_wedding.3040.d.failure + show_chance = no + send_interface_toast = { + title = ep2_wedding.3040.d.failure + left_icon = scope:my_spouse + custom_tooltip = ep2_wedding.wedding_intent.success.tt + unknown_murder_effect = { + VICTIM = scope:my_spouse + MURDERER = root + REASON = death_burned + } + set_variable = just_widowed_var + complete_activity_intent = yes + } + give_nickname = nick_the_just_widowed + } + } + } + after = { + remove_character_flag = is_naked + scope:my_spouse = { + remove_character_flag = is_naked + } + } +} + +# Non-spouse: Use the Wedding Night phase where almost no one is around to kill your target +# episode 1: CHANDELIER EXTRAVAGANZA + +ep2_wedding.3050 = { + type = activity_event + title = ep2_wedding.3050.t + desc = ep2_wedding.3050.desc + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:intent_victim + animation = drink_goblet + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + NOR = { #you are not one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + has_activity_intent = murder_attendee_intent #you're trying to kill someone + intent_target = { is_alive = yes } #they're not dead yet + intent_target = { #you're not trying to kill the spouses + NOR = { + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + OR = { + has_trait = callous + has_trait = deceitful + has_trait = sadistic + } + } + modifier = { #more likely for them to stay behind + factor = 1.5 + intent_target ?= { + OR = { + has_trait = drunkard + has_trait = gregarious + has_trait = lifestyle_reveler + } + } + } + } + + immediate = { + intent_target = { save_scope_as = intent_victim } + } + + #Kill them immediately + option = { + name = ep2_wedding.3050.a + duel = { + skill = prowess + value = average_skill_rating + 70 = { #you kill them + desc = ep2_wedding.3050.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = ep2_wedding.3050.a.success + left_icon = scope:intent_victim + custom_tooltip = ep2_wedding.wedding_intent.success.tt + unknown_murder_effect = { + VICTIM = scope:intent_victim + MURDERER = root + REASON = death_accident + } + } + complete_activity_intent = yes + } + 30 = { #they catch you + desc = ep2_wedding.3050.a.failure + send_interface_toast = { + title = ep2_wedding.3050.a.failure + left_icon = root + right_icon = scope:intent_victim + attempted_murder_opinion_effect = { + VICTIM = scope:intent_victim + MURDERER = root + } + add_secret = { + type = secret_murder_attempt + target = scope:intent_victim + } + random_secret = { + type = secret_murder_attempt + limit = { + secret_target = scope:intent_victim + } + expose_secret = scope:intent_victim + } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + patient = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = patient + has_trait = compassionate + has_trait = deceitful + has_trait = calm + } + } + } + } + + #Use the chandelier + option = { + name = ep2_wedding.3050.b + duel = { + skill = intrigue + value = average_skill_rating + 40 = { #you kill them + desc = ep2_wedding.3050.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = ep2_wedding.3050.b.success + left_icon = scope:intent_victim + custom_tooltip = ep2_wedding.wedding_intent.success.tt + unknown_murder_effect = { + VICTIM = scope:intent_victim + MURDERER = root + REASON = death_accident + } + } + complete_activity_intent = yes + } + 60 = { #they suspect + desc = ep2_wedding.3050.b.failure + send_interface_toast = { + title = ep2_wedding.3050.b.failure + left_icon = root + right_icon = scope:intent_victim + scope:intent_victim = { + add_opinion = { + target = root + modifier = suspicion_opinion + opinion = -5 + } + } + add_secret = { + type = secret_murder_attempt + target = scope:intent_victim + } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + craven = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = wrathful + has_trait = vengeful + has_trait = craven + has_trait = compassionate + has_trait = impatient + } + } + } + } + + #Not now, not now... + option = { + name = ep2_wedding.3050.c + custom_tooltip = ep2_wedding.3050.c.tt + set_variable = { + name = wnight_chandelier_murder_var + value = scope:intent_victim + } + stress_impact = { + wrathful = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = wrathful + has_trait = impatient + } + } + } + } +} + +# Either you or spouse doesn't want to take part in bedding ceremony + +scripted_trigger ep2_wedding_3200_is_shy_trigger = { + OR = { + has_trait = shy + has_trait = reclusive + has_trait = craven + has_trait = paranoid + } + NOT = { has_trait = gregarious } +} + +scripted_trigger ep2_wedding_bedding_ceremony_witness_trigger = { + is_adult = yes + NOR = { + this = root + this = scope:my_spouse + scope:bedding_witness_1 ?= this + scope:bedding_witness_2 ?= this + } + OR = { + scope:host.cp:councillor_court_chaplain ?= this + is_close_family_of = root + is_close_family_of = scope:my_spouse + has_relation_friend = root + has_relation_friend = scope:my_spouse + any_court_position_employer = { this = root } + any_court_position_employer = { this = scope:my_spouse } + } +} + +scripted_effect ep2_wedding_bedding_ceremony_witness_effect = { + hidden_effect = { + while = { + count = 3 + scope:activity = { + if = { + limit = { + any_attending_character = { ep2_wedding_bedding_ceremony_witness_trigger = yes } + } + random_attending_character = { + limit = { ep2_wedding_bedding_ceremony_witness_trigger = yes } + weight = { + base = 1 + modifier = { + scope:host.cp:councillor_court_chaplain ?= this + add = 1000 + } + modifier = { + has_trait = lifestyle_reveler + add = 25 + } + modifier = { + has_trait = gregarious + add = 25 + } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = scope:my_spouse } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = scope:my_spouse } + } + if = { + limit = { exists = scope:bedding_witness_2 } + save_scope_as = bedding_witness_3 + } + else_if = { + limit = { exists = scope:bedding_witness_1 } + save_scope_as = bedding_witness_2 + } + else = { save_scope_as = bedding_witness_1 } + add_to_list = bedding_witnesses + } + } + } + } + } +} + +ep2_wedding.3200 = { + type = activity_event + title = ep2_wedding.3200.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:shy_both ?= this } + desc = ep2_wedding.3200.both + } + triggered_desc = { + trigger = { scope:shy_spouse ?= this } + desc = ep2_wedding.3200.self + } + desc = ep2_wedding.3200.other + } + } + theme = wedding_night_activity + left_portrait = { + character = root + outfit_tags = { nightgown } + triggered_animation = { + trigger = { + OR = { + scope:shy_spouse ?= this + exists = scope:shy_both + } + } + animation = worry + } + animation = disapproval + } + right_portrait = { + character = scope:my_spouse + outfit_tags = { nightgown } + triggered_animation = { + trigger = { scope:shy_spouse ?= this } + animation = worry + } + triggered_animation = { + trigger = { exists = scope:shy_both } + animation = stress + } + animation = disapproval + } + lower_left_portrait = scope:bedding_witness_1 + lower_center_portrait = scope:bedding_witness_2 + lower_right_portrait = scope:bedding_witness_3 + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + scope:activity.special_guest:spouse_1 ?= this + scope:activity.special_guest:spouse_2 ?= this + } + OR = { + scope:activity.special_guest:spouse_1 ?= { + NOT = { has_trait = gregarious } + } + scope:activity.special_guest:spouse_2 ?= { + NOT = { has_trait = gregarious } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + scope:activity.special_guest:spouse_1 = { ep2_wedding_3200_is_shy_trigger = yes } + } + modifier = { + factor = 2 + scope:activity.special_guest:spouse_2 = { ep2_wedding_3200_is_shy_trigger = yes } + } + } + + immediate = { + # Identify root + if = { + limit = { root = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = my_spouse } + } + else = { + scope:activity.special_guest:spouse_1 = { save_scope_as = my_spouse } + } + # Determine shy beddiness + if = { + limit = { + ep2_wedding_3200_is_shy_trigger = yes + scope:my_spouse = { ep2_wedding_3200_is_shy_trigger = yes } + } + save_scope_as = shy_both + } + else_if = { + limit = { ep2_wedding_3200_is_shy_trigger = yes } + save_scope_as = shy_spouse + } + else = { + scope:my_spouse = { save_scope_as = shy_spouse } + } + # Save witnesses + ep2_wedding_bedding_ceremony_witness_effect = yes + } + + #Bar the doors + option = { + name = ep2_wedding.3200.a + flavor = ep2_wedding.3200.a.flavor + trigger = { + # Has door privileges + OR = { + location.county.holder = root + highest_held_title_tier > scope:my_spouse.highest_held_title_tier + } + } + scope:activity = { + add_activity_log_entry = { + key = wedding_barred_bedding_log + character = root + target = scope:my_spouse + + # Effect + root = { + add_character_modifier = { + modifier = wedding_barred_doors_modifier + years = 5 + } + if = { + limit = { scope:shy_spouse ?= this } + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = -20 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = 20 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 75 + } + } + } + } + } + every_in_list = { + list = bedding_witnesses + custom = ep2_wedding_witnesses_tt + add_opinion = { + target = root + modifier = wedding_barred_bedding_doors_opinion + opinion = -10 + } + if = { + limit = { exists = scope:shy_both } + add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = -10 + } + } + } + stress_impact = { + shy = minor_stress_impact_loss + reclusive = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + craven = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + gregarious = miniscule_stress_impact_gain + trusting = miniscule_stress_impact_gain + brave = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_boldness = 1 + ai_sociability = -1 + } + } + } + + #Convince to bar + option = { + name = ep2_wedding.3200.c + trigger = { + OR = { + scope:shy_spouse ?= this + exists = scope:shy_both + } + NOR = { + location.county.holder = root + highest_held_title_tier > scope:my_spouse.highest_held_title_tier + } + } + duel = { + skill = diplomacy + target = scope:my_spouse + 40 = { #they accept + desc = ep2_wedding.3200.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + factor = 2 + exists = scope:shy_both + } + send_interface_toast = { + title = ep2_wedding.3200.c.success + left_icon = scope:my_spouse + scope:activity = { + add_activity_log_entry = { + key = wedding_barred_bedding_log + character = root + target = scope:my_spouse + + # Effect + root = { + add_character_modifier = { + modifier = wedding_barred_doors_modifier + years = 5 + } + if = { + limit = { scope:shy_spouse ?= this } + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = 10 + } + } + else = { + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = 20 + } + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 25 + } + } + } + } + every_in_list = { + list = bedding_witnesses + custom = ep2_wedding_witnesses_tt + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = -10 + } + if = { + limit = { exists = scope:shy_both } + add_opinion = { + target = scope:my_spouse + modifier = wedding_barred_bedding_doors_opinion + opinion = -10 + } + } + } + stress_impact = { + shy = minor_stress_impact_loss + reclusive = medium_stress_impact_loss + paranoid = minor_stress_impact_loss + craven = minor_stress_impact_loss + } + } + } + 60 = { #they refuse + desc = ep2_wedding.3200.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = ep2_wedding.3200.c.failure + left_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_forced_bedding_ceremony_opinion + opinion = -10 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + stress_impact = { + shy = miniscule_stress_impact_gain + reclusive = minor_stress_impact_gain + paranoid = miniscule_stress_impact_gain + craven = miniscule_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_boldness = 0.5 + ai_sociability = -1 + } + } + } + + #Convince to take part + option = { + name = ep2_wedding.3200.d + trigger = { + NOT = { scope:shy_spouse ?= root } + } + duel = { + skill = diplomacy + target = scope:my_spouse + 40 = { # + desc = ep2_wedding.3200.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = ep2_wedding.3200.d.success + left_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_caved_to_bedding_opinion + opinion = 10 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 75 + } + } + } + 60 = { # + desc = ep2_wedding.3200.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = ep2_wedding.3200.d.failure + left_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_forced_bedding_ceremony_opinion + opinion = -10 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + } + } + } + stress_impact = { + stubborn = miniscule_stress_impact_gain + compassionate = minor_stress_impact_loss + callous = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } + + #Force to take part + option = { + name = ep2_wedding.3200.e + trigger = { scope:shy_spouse ?= scope:my_spouse } + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_forced_bedding_ceremony_opinion + opinion = -10 + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 20 + } + stress_impact = { + gregarious = medium_stress_impact_loss + zealous = medium_stress_impact_loss + diligent = medium_stress_impact_loss + callous = minor_stress_impact_loss + fickle = miniscule_stress_impact_gain + compassionate = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -0.5 + ai_boldness = 0.5 + ai_sociability = 1 + } + } + } + + #Do your duty + option = { + name = ep2_wedding.3200.b + trigger = { scope:shy_spouse ?= this } + if = { + limit = { + NOT = { exists = scope:shy_both } + } + reverse_add_opinion = { + target = scope:my_spouse + modifier = wedding_caved_to_bedding_opinion + opinion = 20 + } + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 20 + } + stress_impact = { + shy = minor_stress_impact_gain + reclusive = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + craven = minor_stress_impact_gain + gregarious = medium_stress_impact_loss + zealous = medium_stress_impact_loss + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_sociability = 0.5 + } + } + } +} + +scripted_trigger wedding_3300_flavor_character_trigger = { + is_participant_in_activity = scope:activity + NOR = { + this = scope:my_spouse + this = root + } +} + +ep2_wedding.3300 = { + type = activity_event + title = ep2_wedding.3300.t + desc = { + desc = ep2_wedding.3300.opening + # Ceremony flavor 1 + first_valid = { + triggered_desc = { + trigger = { + scope:officiant ?= { is_clergy = yes } + } + desc = ep2_wedding.3300.blessing + } + triggered_desc = { + trigger = { exists = scope:officiant } + desc = ep2_wedding.3300.decorate + } + desc = ep2_wedding.3300.flowers + } + # Ceremony flavor 2 + first_valid = { + triggered_desc = { + trigger = { + drinks_alcohol_trigger = yes + scope:my_spouse = { drinks_alcohol_trigger = yes } + } + desc = ep2_wedding.3300.wine + } + desc = ep2_wedding.3300.anointing + } + # Spouse flavor + first_valid = { + triggered_desc = { + trigger = { has_relation_lover = scope:my_spouse } + desc = ep2_wedding.3300.lover + } + triggered_desc = { + trigger = { has_relation_friend = scope:my_spouse } + desc = ep2_wedding.3300.friend + } + triggered_desc = { + trigger = { + OR = { + has_relation_rival = scope:my_spouse + reverse_opinion = { target = scope:my_spouse value < -50 } + } + } + desc = ep2_wedding.3300.hatred + } + triggered_desc = { + trigger = { + OR = { + has_relation_rival = scope:my_spouse + reverse_opinion = { target = scope:my_spouse value < -10 } + } + } + desc = ep2_wedding.3300.unfriendly + } + triggered_desc = { + trigger = { + OR = { + has_relation_rival = scope:my_spouse + reverse_opinion = { target = scope:my_spouse value >= 25 } + } + } + desc = ep2_wedding.3300.friendly + } + desc = ep2_wedding.3300.polite + } + # Party flavor + random_valid = { + triggered_desc = { + trigger = { scope:jester.employer ?= root } + desc = ep2_wedding.3300.jester_self + } + triggered_desc = { + trigger = { + exists = scope:jester + scope:jester.employer != root + } + desc = ep2_wedding.3300.jester + } + triggered_desc = { + trigger = { + scope:friend ?= { has_relation_friend = root } + } + desc = ep2_wedding.3300.other_friend_self + } + triggered_desc = { + trigger = { + exists = scope:friend + NOT = { + scope:friend = { has_relation_friend = root } + } + } + desc = ep2_wedding.3300.other_friend + } + triggered_desc = { + trigger = { + scope:other_spouse ?= { is_spouse_of = root } + } + desc = ep2_wedding.3300.other_spouse_self + } + triggered_desc = { + trigger = { + exists = scope:other_spouse + NOT = { + scope:other_spouse ?= { is_spouse_of = root } + } + } + desc = ep2_wedding.3300.other_spouse + } + triggered_desc = { + trigger = { + scope:family ?= { is_close_family_of = root } + } + desc = ep2_wedding.3300.family_self + } + triggered_desc = { + trigger = { + scope:family ?= { is_close_family_of = scope:my_spouse } + } + desc = ep2_wedding.3300.family + } + desc = ep2_wedding.3300.fallback + } + } + theme = wedding_night_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_relation_rival = scope:my_spouse + opinion = { target = scope:my_spouse value < -50 } + } + } + animation = dismissal + } + triggered_animation = { + trigger = { + OR = { + has_relation_lover = scope:my_spouse + opinion = { target = scope:my_spouse value >= 25 } + } + } + animation = flirtation_left + } + animation = idle + } + right_portrait = { + character = scope:my_spouse + triggered_animation = { + trigger = { + OR = { + has_relation_rival = root + opinion = { target = root value < -10 } + } + } + animation = disapproval + } + triggered_animation = { + trigger = { + OR = { + has_relation_lover = root + opinion = { target = root value >= 25 } + } + } + animation = flirtation + } + animation = idle + } + lower_left_portrait = scope:bedding_witness_1 + lower_center_portrait = scope:bedding_witness_2 + lower_right_portrait = scope:bedding_witness_3 + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + OR = { #you are one of the spouses + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } + } + + immediate = { + # Identify root + if = { + limit = { root = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = my_spouse } + } + else = { + scope:activity.special_guest:spouse_1 = { save_scope_as = my_spouse } + } + check_officiant_effect = yes + scope:activity.var:officiant ?= { save_scope_as = officiant } + # Save witnesses + ep2_wedding_bedding_ceremony_witness_effect = yes + # Save jester + if = { + limit = { + employs_court_position = court_jester_court_position + court_position:court_jester_court_position ?= { wedding_3300_flavor_character_trigger = yes } + } + court_position:court_jester_court_position = { save_scope_as = jester } + } + else_if = { + limit = { + scope:my_spouse = { + employs_court_position = court_jester_court_position + court_position:court_jester_court_position ?= { wedding_3300_flavor_character_trigger = yes } + } + } + scope:my_spouse.court_position:court_jester_court_position = { save_scope_as = jester } + } + else_if = { + limit = { + scope:host = { + employs_court_position = court_jester_court_position + court_position:court_jester_court_position ?= { wedding_3300_flavor_character_trigger = yes } + } + } + scope:host.court_position:court_jester_court_position = { save_scope_as = jester } + } + # Save friend + if = { + limit = { + any_relation = { + type = friend + wedding_3300_flavor_character_trigger = yes + } + } + random_relation = { + type = friend + limit = { wedding_3300_flavor_character_trigger = yes } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = other_friend + } + } + else_if = { + limit = { + scope:my_spouse = { + any_relation = { + type = friend + wedding_3300_flavor_character_trigger = yes + } + } + } + scope:my_spouse = { + random_relation = { + type = friend + limit = { wedding_3300_flavor_character_trigger = yes } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = other_friend + } + } + } + # Save other spouse + if = { + limit = { + any_spouse = { wedding_3300_flavor_character_trigger = yes } + } + random_spouse = { + limit = { wedding_3300_flavor_character_trigger = yes } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = other_spouse + } + } + else_if = { + limit = { + scope:my_spouse = { + any_spouse = { wedding_3300_flavor_character_trigger = yes } + } + } + scope:my_spouse = { + random_spouse = { + limit = { wedding_3300_flavor_character_trigger = yes } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = other_spouse + } + } + } + # Save family + random_list = { + 10 = { + trigger = { + any_in_list = { + list = bedding_witnesses + is_close_family_of = root + } + } + random_in_list = { + list = bedding_witnesses + limit = { is_close_family_of = root } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = family + } + } + 10 = { + trigger = { + any_in_list = { + list = bedding_witnesses + is_close_family_of = scope:my_spouse + } + } + random_in_list = { + list = bedding_witnesses + limit = { is_close_family_of = scope:my_spouse } + weight = { + base = 1 + modifier = { add = ai_sociability } + modifier = { add = ai_boldness } + } + save_scope_as = family + } + } + } + # Save scopes for portraits + if = { + limit = { + exists = scope:jester + scope:jester != scope:bedding_witness_1 + } + scope:jester = { save_scope_as = bedding_witness_1 } + } + else_if = { + limit = { + exists = scope:other_friend + scope:other_friend != scope:bedding_witness_1 + } + scope:other_friend = { save_scope_as = bedding_witness_1 } + } + else_if = { + limit = { + exists = scope:other_spouse + scope:other_spouse != scope:bedding_witness_1 + } + scope:other_spouse = { save_scope_as = bedding_witness_1 } + } + else_if = { + limit = { + exists = scope:family + scope:family != scope:bedding_witness_1 + } + scope:family = { save_scope_as = bedding_witness_1 } + } + add_character_flag = is_naked + scope:my_spouse = { + add_character_flag = is_naked + } + } + + #Hurry up! + option = { + name = ep2_wedding.3300.a + random_list = { + 1 = { + desc = ep2_wedding.3300.a.success + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = 1 + } + modifier = { add = attraction } + modifier = { + scope:my_spouse = { has_trait = trusting } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = humble } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.a.success + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = feast_had_good_time_together_opinion + opinion = 10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 75 + } + } + } + 1 = { + desc = ep2_wedding.3300.a.failure + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = -1 + } + modifier = { + scope:my_spouse = { has_trait = paranoid } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = arrogant } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.a.failure + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = disgusted_opinion + opinion = -10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + } + } + } + stress_impact = { + impatient = minor_stress_impact_loss + rakish = minor_stress_impact_loss + lustful = minor_stress_impact_loss + chaste = miniscule_stress_impact_gain + humble = miniscule_stress_impact_gain + craven = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:my_spouse + multiplier = 1 + } + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 1 + ai_compassion = 0.5 + } + } + } + + #Tired + option = { + name = ep2_wedding.3300.b + random_list = { + 1 = { + desc = ep2_wedding.3300.b.success + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = 0.5 + } + modifier = { + scope:my_spouse = { has_trait = compassionate } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = lustful } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.b.success + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = insulted_opinion + opinion = -10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + } + } + 1 = { + desc = ep2_wedding.3300.b.failure + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = -0.5 + } + modifier = { + scope:my_spouse = { has_trait = chaste } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = callous } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.b.failure + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = relieved_opinion + opinion = 10 + } + } + } + } + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + compassionate = miniscule_stress_impact_gain + lustful = miniscule_stress_impact_gain + rakish = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:my_spouse + multiplier = -1 + } + ai_value_modifier = { + ai_boldness = 0.5 + ai_compassion = -1 + ai_sociability = -1 + } + } + } + + #Need more wine + option = { + name = ep2_wedding.3300.c + trigger = { drinks_alcohol_trigger = yes } + random_list = { + 1 = { + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = 0.25 + } + modifier = { + scope:my_spouse = { has_trait = gluttonous } + factor = 1.25 + } + modifier = { + scope:my_spouse = { has_trait = shy } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.c.success + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = relieved_opinion + opinion = 10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 75 + } + } + } + 1 = { + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = -0.25 + } + modifier = { + scope:my_spouse = { drinks_alcohol_trigger = no } + factor = 2 + } + modifier = { + scope:my_spouse = { has_trait = temperate } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = gregarious } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.c.failure + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = insulted_opinion + opinion = -10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + } + } + } + stress_impact = { + drunkard = minor_stress_impact_loss + honest = minor_stress_impact_loss + temperate = miniscule_stress_impact_gain + compassionate = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:my_spouse + multiplier = -0.5 + } + ai_value_modifier = { + ai_boldness = 0.5 + ai_compassion = -0.5 + ai_sociability = 0.5 + } + } + } + + #I'll do it, but I won't like it + option = { + name = ep2_wedding.3300.d + trigger = { + OR = { + has_relation_rival = scope:my_spouse + opinion = { + target = scope:my_spouse + value < -10 + } + } + } + random_list = { + 1 = { + desc = ep2_wedding.3300.d.success + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = 0.5 + } + modifier = { add = attraction } + modifier = { add = scope:my_spouse.attraction } + modifier = { + scope:my_spouse = { has_trait = lustful } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.d.success + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = feast_had_good_time_together_opinion + opinion = 10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 75 + } + } + } + 1 = { + desc = ep2_wedding.3300.d.failure + opinion_modifier = { + who = scope:my_spouse + opinion_target = root + multiplier = -0.5 + } + modifier = { + scope:my_spouse = { has_trait = shy } + factor = 1.5 + } + modifier = { + scope:my_spouse = { has_trait = chaste } + factor = 1.5 + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3300.d.failure + left_icon = root + right_icon = scope:my_spouse + reverse_add_opinion = { + target = scope:my_spouse + modifier = seduce_bad_time_opinion + opinion = -10 + } + if = { + limit = { + scope:my_spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_bad_fertility = scope:my_spouse + } + had_sex_with_effect = { + CHARACTER = scope:my_spouse + PREGNANCY_CHANCE = 5 + } + } + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + fickle = miniscule_stress_impact_gain + arrogant = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:my_spouse + multiplier = 0.5 + } + ai_value_modifier = { + ai_honor = 0.5 + ai_boldness = -0.5 + ai_sociability = 0.5 + } + } + } + after = { + remove_character_flag = is_naked + scope:my_spouse = { + remove_character_flag = is_naked + } + } +} + +scripted_trigger wedding_3400_shared_trigger = { + is_adult = yes + is_participant_in_activity = scope:activity + NOR = { + this = root + has_any_scripted_relation = root + scope:activity.special_guest:spouse_1 ?= this + scope:activity.special_guest:spouse_2 ?= this + is_child_of = root + is_nibling_of = root + is_uncle_or_aunt_of = root + is_sibling_of = root + is_parent_of = root + is_grandparent_of = root + is_great_grandparent_of = root + is_grandchild_of = root + is_great_grandchild_of = root + } +} + +scripted_trigger wedding_3400_suitor_trigger = { + age < 50 + is_participant_in_activity = scope:activity + is_attracted_to_gender_of = $SUITOR$ + age >= $SUITOR$.age_minus_25 + age < $SUITOR$.age_plus_25 + OR = { + is_married = no + allowed_more_spouses = yes + trigger_if = { + limit = { is_female = yes } + faith = { has_doctrine = doctrine_adultery_women_accepted } + root.faith = { has_doctrine = doctrine_adultery_women_accepted } + $SUITOR$.faith = { has_doctrine = doctrine_adultery_women_accepted } + + } + trigger_else = { + faith = { has_doctrine = doctrine_adultery_men_accepted } + root.faith = { has_doctrine = doctrine_adultery_men_accepted } + $SUITOR$.faith = { has_doctrine = doctrine_adultery_men_accepted } + } + } +} + +scripted_effect wedding_3400_save_relative_effect = { + save_scope_as = other_family_spouse + random_close_or_extended_family_member = { + limit = { + is_close_family_of = scope:other_family_spouse + wedding_3400_shared_trigger = yes + save_temporary_scope_as = other_relative_temp + } + alternative_limit = { + wedding_3400_shared_trigger = yes + save_temporary_scope_as = other_relative_temp + } + weight = { + base = 1 + wedding_similiar_family_member_modifier = yes + modifier = { + add = 50 + scope:my_family_spouse = { + any_close_family_member = { + wedding_3400_suitor_trigger = { SUITOR = scope:other_relative_temp } + save_temporary_scope_as = family_suitor_temp + } + } + wedding_3400_suitor_trigger = { SUITOR = scope:family_suitor_temp } + } + } + save_scope_as = other_family_relative + } +} + +scripted_effect wedding_3400_knowledge_effect = { + random_list = { + 0 = { + trigger = { diplomacy < $OTHER$.diplomacy } + modifier = { add = $OTHER$.diplomacy } + add_diplomacy_skill = 1 + } + 0 = { + trigger = { martial < $OTHER$.martial } + modifier = { add = $OTHER$.martial } + add_martial_skill = 1 + } + 0 = { + trigger = { stewardship < $OTHER$.stewardship } + modifier = { add = $OTHER$.stewardship } + add_stewardship_skill = 1 + } + 0 = { + trigger = { intrigue < $OTHER$.intrigue } + modifier = { add = $OTHER$.intrigue } + add_intrigue_skill = 1 + } + 0 = { + trigger = { learning < $OTHER$.learning } + modifier = { add = $OTHER$.learning } + add_learning_skill = 1 + } + } +} + +ep2_wedding.3400 = { + type = activity_event + title = ep2_wedding.3400.t + desc = { + desc = ep2_wedding.3400.opening + first_valid = { + triggered_desc = { + trigger = { drinks_alcohol_trigger = yes } + desc = ep2_wedding.3400.drink_self + } + triggered_desc = { + trigger = { can_be_hashishiyah = yes } + desc = ep2_wedding.3400.hashish_self + } + desc = ep2_wedding.3400.fallback_self + } + first_valid = { + triggered_desc = { + trigger = { + scope:other_family_relative = { drinks_alcohol_trigger = yes } + } + desc = ep2_wedding.3400.drink + } + triggered_desc = { + trigger = { + scope:other_family_relative = { can_be_hashishiyah = yes } + } + desc = ep2_wedding.3400.hashish + } + desc = ep2_wedding.3400.fallback + } + random_valid = { + triggered_desc = { + trigger = { + scope:other_family_relative = { + drinks_alcohol_trigger = yes + NOR = { + is_child_of = scope:my_family_spouse + is_sibling_of = scope:my_family_spouse + is_parent_of = scope:my_family_spouse + is_grandparent_of = scope:my_family_spouse + } + } + } + desc = ep2_wedding.3400.drink_family + } + triggered_desc = { + trigger = { + scope:other_family_relative = { + drinks_alcohol_trigger = no + NOR = { + is_child_of = scope:my_family_spouse + is_sibling_of = scope:my_family_spouse + is_parent_of = scope:my_family_spouse + is_grandparent_of = scope:my_family_spouse + } + } + } + desc = ep2_wedding.3400.family + } + triggered_desc = { + trigger = { + exists = house + exists = scope:other_family_relative.house + house != scope:other_family_relative.house + scope:other_family_relative = { drinks_alcohol_trigger = yes } + } + desc = ep2_wedding.3400.drink_house + } + triggered_desc = { + trigger = { + exists = house + exists = scope:other_family_relative.house + house != scope:other_family_relative.house + scope:other_family_relative = { drinks_alcohol_trigger = no } + } + desc = ep2_wedding.3400.house + } + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + drinks_alcohol_trigger = yes + NOT = { has_trait = temperate } + } + animation = drink_goblet + } + animation = happiness + } + right_portrait = { + character = scope:other_family_relative + triggered_animation = { + trigger = { + drinks_alcohol_trigger = yes + NOT = { has_trait = temperate } + } + animation = toast_goblet + } + animation = laugh + } + lower_right_portrait = scope:activity.special_guest:spouse_1 + lower_center_portrait = scope:my_family_suitor + lower_left_portrait = scope:activity.special_guest:spouse_2 + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + is_adult = yes + # Spouse 1 and 2 are not root + NOR = { + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_2 = root + } + # Spouse 1 is related to root and someone related to Spouse 2 is kicking around + trigger_if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_2 = { + any_close_or_extended_family_member = { wedding_3400_shared_trigger = yes } + } + } + # Spouse 2 is related to root and someone related to Spouse 1 is kicking around + trigger_else_if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 } + scope:activity.special_guest:spouse_1 = { + any_close_or_extended_family_member = { wedding_3400_shared_trigger = yes } + } + } + # No dice + trigger_else = { always = no } + } + + immediate = { + # Save someone related to Spouse 2 + save_scope_as = my_family_relative + if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_1 = { save_scope_as = my_family_spouse } + scope:activity.special_guest:spouse_2 = { wedding_3400_save_relative_effect = yes } + } + # Save someone related to Spouse 1 + else = { + scope:activity.special_guest:spouse_2 = { save_scope_as = my_family_spouse } + scope:activity.special_guest:spouse_1 = { wedding_3400_save_relative_effect = yes } + } + # Save suitor if relevant + if = { + limit = { + any_close_family_member = { + wedding_3400_suitor_trigger = { SUITOR = scope:other_family_relative } + save_temporary_scope_as = family_suitor_temp + } + scope:other_family_relative = { + wedding_3400_suitor_trigger = { SUITOR = scope:family_suitor_temp } + } + } + random_close_family_member = { + limit = { + wedding_3400_suitor_trigger = { SUITOR = scope:other_family_relative } + save_temporary_scope_as = family_suitor_temp + scope:other_family_relative = { + wedding_3400_suitor_trigger = { SUITOR = scope:family_suitor_temp } + } + } + weight = { + base = 1 + modifier = { + add = 50 + age >= scope:other_family_relative.age_minus_5 + age < scope:other_family_relative.age_plus_5 + } + modifier = { + add = 25 + age >= scope:other_family_relative.age_minus_10 + age < scope:other_family_relative.age_plus_10 + } + modifier = { add = attraction } + } + save_scope_as = my_family_suitor + } + } + } + + #Oh lemme bore you + option = { + name = ep2_wedding.3400.a + send_interface_toast = { + title = ep2_wedding.3400.tt + left_icon = root + right_icon = scope:other_family_relative + wedding_3400_knowledge_effect = { OTHER = scope:other_family_relative } + scope:other_family_relative = { + wedding_3400_knowledge_effect = { OTHER = root } + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + diligent = minor_stress_impact_loss + content = miniscule_stress_impact_gain + lazy = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + #Family matchmaker + option = { + name = ep2_wedding.3400.b + trigger = { exists = scope:my_family_suitor } + random_list = { + 10 = { + desc = ep2_wedding.3400.b.success + opinion_modifier = { + who = scope:my_family_suitor + opinion_target = scope:other_family_relative + multiplier = 0.5 + } + send_interface_toast = { + title = ep2_wedding.3400.b.tt + left_icon = scope:other_family_relative + right_icon = scope:my_family_suitor + scope:other_family_relative = { + progress_towards_lover_effect = { + CHARACTER = scope:my_family_suitor + REASON = lover_wedding_relation_suitor + OPINION = default_lover_opinion + } + } + } + } + 10 = { + desc = ep2_wedding.3400.b.failure + opinion_modifier = { + who = scope:my_family_suitor + opinion_target = scope:other_family_relative + multiplier = -0.5 + } + send_interface_toast = { + title = ep2_wedding.3400.b.failure + left_icon = scope:other_family_relative + right_icon = scope:my_family_suitor + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + trusting = minor_stress_impact_loss + callous = miniscule_stress_impact_gain + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:my_family_suitor + multiplier = 0.5 + } + opinion_modifier = { + opinion_target = scope:other_family_relative + multiplier = 0.5 + } + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #More wine! + option = { + name = { + trigger = { drinks_alcohol_trigger = yes } + text = ep2_wedding.3400.c.drink + } + name = { + trigger = { drinks_alcohol_trigger = no } + text = ep2_wedding.3400.c.hashish + } + trigger = { + OR = { + drinks_alcohol_trigger = yes + can_be_hashishiyah = yes + } + } + add_prestige = medium_prestige_gain + if = { + limit = { has_trait = lifestyle_reveler } + add_trait_xp = { + trait = lifestyle_reveler + value = medium_trait_xp + } + } + else = { add_trait = lifestyle_reveler } + if = { + limit = { drinks_alcohol_trigger = yes } + if = { + limit = { + NOT = { has_trait = drunkard } + } + random = { + chance = 1 + add_trait = drunkard + } + stress_impact = { + base = minor_stress_impact_loss + drunkard = minor_stress_impact_loss + lifestyle_reveler = minor_stress_impact_loss + lazy = minor_stress_impact_loss + temperate = miniscule_stress_impact_gain + diligent = miniscule_stress_impact_gain + } + } + + } + else_if = { + limit = { can_be_hashishiyah = yes } + random = { + chance = 1 + add_trait = hashishiyah + } + stress_impact = { + base = minor_stress_impact_loss + hashishiyah = minor_stress_impact_loss + lifestyle_reveler = minor_stress_impact_loss + lazy = minor_stress_impact_loss + temperate = miniscule_stress_impact_gain + diligent = miniscule_stress_impact_gain + } + } + ai_chance = { + base = 50 + modifier = { + has_trait = drunkard + add = 50 + } + modifier = { + has_trait = hashishiyah + add = 50 + } + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = -0.5 + } + } + } + + #Befriend + option = { + name = ep2_wedding.3400.d + trigger = { + OR = { + NOT = { exists = scope:my_family_suitor } + NOT = { is_attracted_to_gender_of = scope:other_family_relative } + } + } + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:other_family_relative + OPINION = default_friend_opinion + } + stress_impact = { + gregarious = minor_stress_impact_loss + humble = minor_stress_impact_loss + shy = miniscule_stress_impact_gain + arrogant = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:other_family_relative + multiplier = 1 + } + ai_value_modifier = { + ai_sociability = 1 + } + modifier = { + num_of_relation_friend >= 2 + factor = 0 + } + } + } + + #Woo + option = { + name = ep2_wedding.3400.e + trigger = { + is_attracted_to_gender_of = scope:other_family_relative + NOT = { has_trait = celibate } + } + duel = { + skill = intrigue + value = medium_skill_rating + 10 = { + desc = ep2_wedding.3400.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = 5 + has_trait = seducer + } + modifier = { add = attraction } + modifier = { + add = 50 + scope:other_family_relative = { + would_attempt_to_seduce_trigger = { CHARACTER = root } + } + } + send_interface_toast = { + title = ep2_wedding.3400.e.success + progress_towards_lover_effect = { + REASON = lover_wedding_relation_bond + CHARACTER = scope:other_family_relative + OPINION = default_lover_opinion + } + if = { + limit = { + might_cheat_on_every_partner_trigger = yes + scope:other_family_relative = { might_cheat_on_every_partner_trigger = yes } + } + had_sex_with_effect = { + CHARACTER = scope:other_family_relative + PREGNANCY_CHANCE = pregnancy_chance + } + } + } + min = 5 + } + 10 = { + desc = ep2_wedding.3400.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = 50 + NOT = { + scope:other_family_relative = { + would_attempt_to_seduce_trigger = { CHARACTER = root } + } + } + } + min = 5 + send_interface_toast = { + title = ep2_wedding.3400.e.failure + reverse_add_opinion = { + target = scope:other_family_relative + modifier = disgusted_opinion + opinion = -10 + } + } + } + } + stress_impact = { + lustful = minor_stress_impact_loss + rakish = minor_stress_impact_loss + chaste = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:other_family_relative + multiplier = 1 + } + ai_value_modifier = { + ai_boldness = 0.5 + ai_sociability = 0.5 + } + modifier = { + num_of_relation_lover >= 2 + factor = 0 + } + modifier = { + NOT = { + would_attempt_to_seduce_trigger = { CHARACTER = scope:other_family_relative } + } + factor = 0 + } + } + } +} + +ep2_wedding.3410 = { + type = activity_event + title = ep2_wedding.3410.t + desc = { + desc = ep2_wedding.3410.opening + first_valid = { + triggered_desc = { # Double trouble + trigger = { exists = scope:double_jealousy } + desc = ep2_wedding.3410.double + } + triggered_desc = { # Primary spouse + trigger = { + OR = { + has_relation_lover = scope:jealousy_focus + any_secret = { + type = secret_lover + secret_target = scope:jealousy_focus + } + } + } + desc = ep2_wedding.3410.lover + } + triggered_desc = { # Primary spouse + trigger = { primary_spouse ?= scope:jealousy_focus } + desc = ep2_wedding.3410.primary + } + desc = ep2_wedding.3410.secondary + } + first_valid = { + triggered_desc = { # Double trouble + trigger = { exists = scope:double_jealousy } + desc = ep2_wedding.3410.double_opinion + } + triggered_desc = { # Primary spouse + trigger = { + reverse_opinion = { + target = scope:jealousy_focus + value >= 25 + } + } + desc = ep2_wedding.3410.positive_opinion + } + triggered_desc = { # Primary spouse + trigger = { + reverse_opinion = { + target = scope:jealousy_focus + value <= 0 + } + } + desc = ep2_wedding.3410.negative_opinion + } + desc = ep2_wedding.3410.indifferent_opinion + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + exists = scope:double_jealousy + AND = { + NOT = { exists = scope:double_jealousy } + reverse_opinion = { + target = scope:jealousy_focus + value > 0 + } + } + } + } + animation = stress + } + animation = war_over_win + } + lower_right_portrait = scope:jealousy_focus + lower_left_portrait = scope:jealousy_usurper + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + is_adult = yes + # Spouse 1 and 2 are not root + NOR = { + scope:activity.special_guest:spouse_1 = root + scope:activity.special_guest:spouse_2 = root + } + # Has an intimate relationship with a spouse + OR = { + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_1 + } + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_2 + } + has_relation_lover = scope:activity.special_guest:spouse_1 + has_relation_lover = scope:activity.special_guest:spouse_2 + is_spouse_of = scope:activity.special_guest:spouse_1 + is_spouse_of = scope:activity.special_guest:spouse_2 + } + } + + immediate = { + # Check for double + if = { + limit = { + OR = { + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_1 + } + has_relation_lover = scope:activity.special_guest:spouse_1 + is_spouse_of = scope:activity.special_guest:spouse_1 + } + OR = { + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_2 + } + has_relation_lover = scope:activity.special_guest:spouse_2 + is_spouse_of = scope:activity.special_guest:spouse_2 + } + } + save_scope_as = double_jealousy + } + # Save jealous focus, or preferred + hidden_effect = { + random_list = { + 1 = { + trigger = { + OR = { + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_1 + } + has_relation_lover = scope:activity.special_guest:spouse_1 + is_spouse_of = scope:activity.special_guest:spouse_1 + } + } + opinion_modifier = { + opinion_target = scope:activity.special_guest:spouse_1 + multiplier = 1 + } + scope:activity.special_guest:spouse_1 = { save_scope_as = jealousy_focus } + scope:activity.special_guest:spouse_2 = { save_scope_as = jealousy_usurper } + } + 1 = { + trigger = { + OR = { + any_secret = { + type = secret_lover + secret_target = scope:activity.special_guest:spouse_2 + } + has_relation_lover = scope:activity.special_guest:spouse_2 + is_spouse_of = scope:activity.special_guest:spouse_2 + } + } + opinion_modifier = { + opinion_target = scope:activity.special_guest:spouse_2 + multiplier = 1 + } + scope:activity.special_guest:spouse_2 = { save_scope_as = jealousy_focus } + scope:activity.special_guest:spouse_1 = { save_scope_as = jealousy_usurper } + } + } + } + } + + #Make a scene + option = { + name = ep2_wedding.3410.a + flavor = ep2_wedding.3410.a.flavor + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:jealousy_focus + modifier = ruined_wedding_night_opinion + opinion = -15 + } + reverse_add_opinion = { + target = scope:jealousy_usurper + modifier = ruined_wedding_night_opinion + opinion = -15 + } + if = { + limit = { + any_secret = { + type = secret_lover + secret_target = scope:jealousy_focus + } + } + scope:jealousy_usurper = { + every_close_family_member = { + custom = every_usurper_close_family_tt + add_opinion = { + target = scope:jealousy_focus + modifier = revealed_lover_wedding_night_opinion + opinion = -20 + } + add_opinion = { + target = root + modifier = ruined_wedding_night_opinion + opinion = -10 + } + } + } + } + expose_lover_secret_or_run_consequence_effect = { + TARGET = scope:jealousy_focus + EXPOSER = root + } + stress_impact = { + base = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + calm = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_vengefulness = 0.5 + ai_boldness = 0.5 + } + modifier = { + any_secret = { + type = secret_lover + secret_target = scope:jealousy_usurper + } + factor = 0.5 + } + } + } + + #Plot murder + option = { + name = ep2_wedding.3410.b + trigger = { + NOR = { + any_secret = { + type = secret_lover + secret_target = scope:jealousy_usurper + } + has_relation_lover = scope:jealousy_usurper + is_scheming_against = { target = scope:jealousy_usurper } + } + can_start_scheme = { + type = murder + target_character = scope:jealousy_usurper + } + } + start_scheme = { + target_character = scope:jealousy_usurper + type = murder + } + random_scheme = { + type = murder + limit = { + scheme_target_character = scope:jealousy_usurper + } + add_scheme_modifier = { type = wedding_consorts_envy_modifier } + } + custom_tooltip = ep2_wedding.3410.b.tt + stress_impact = { + vengeful = minor_stress_impact_loss + zealous = miniscule_stress_impact_gain + just = miniscule_stress_impact_gain + forgiving = miniscule_stress_impact_gain + } + ai_chance = { + base = 75 + opinion_modifier = { + opinion_target = scope:jealousy_usurper + multiplier = -1 + } + ai_value_modifier = { + ai_energy = 1 + ai_vengefulness = 1 + ai_boldness = 1 + } + } + } + + #Fed up with focus + option = { + name = ep2_wedding.3410.c + trigger = { + OR = { + has_relation_lover = scope:jealousy_focus + has_relation_lover = scope:jealousy_usurper + } + } + if = { + limit = { has_relation_lover = scope:jealousy_focus } + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:jealousy_focus + modifier = insulted_opinion + opinion = -20 + } + } + lose_lover_effect = { LOVER = scope:jealousy_focus } + } + if = { + limit = { has_relation_lover = scope:jealousy_usurper } + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:jealousy_focus + modifier = insulted_opinion + opinion = -20 + } + } + lose_lover_effect = { LOVER = scope:jealousy_usurper } + } + stress_impact = { + fickle = minor_stress_impact_loss + base = miniscule_stress_impact_gain + stubborn = miniscule_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = 1 + ai_boldness = 0.5 + } + } + } + + #Fine by me + option = { + name = ep2_wedding.3410.d + add_character_modifier = { + modifier = wedding_old_news_modifier + years = 5 + } + stress_impact = { + humble = minor_stress_impact_loss + content = minor_stress_impact_loss + arrogant = miniscule_stress_impact_gain + ambitious = miniscule_stress_impact_gain + } + ai_chance = { + base = 50 + opinion_modifier = { + opinion_target = scope:jealousy_focus + multiplier = -1 + } + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } +} + +ep2_wedding.3420 = { + type = activity_event + title = ep2_wedding.3420.t + desc = { + desc = ep2_wedding.3420.opening + random_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = gluttonous + has_trait = comfort_eater + } + exists = scope:wedding_eat + } + desc = ep2_wedding.3420.eat + } + triggered_desc = { + trigger = { + OR = { + has_trait = drunkard + has_trait = hashishiyah + has_trait = lifestyle_reveler + } + exists = scope:wedding_drink + } + desc = ep2_wedding.3420.drink + } + triggered_desc = { + trigger = { + OR = { + has_trait = lustful + has_trait = rakish + } + exists = scope:wedding_lech + } + desc = ep2_wedding.3420.lech + } + triggered_desc = { + trigger = { + OR = { + has_trait = greedy + has_trait = avaricious + } + exists = scope:wedding_steal + } + desc = ep2_wedding.3420.steal + } + triggered_desc = { + trigger = { + OR = { + has_trait = shy + has_trait = reclusive + } + exists = scope:wedding_flee + } + desc = ep2_wedding.3420.flee + } + triggered_desc = { + trigger = { + OR = { + has_trait = generous + has_trait = improvident + } + exists = scope:wedding_charity + } + desc = ep2_wedding.3420.charity + } + triggered_desc = { + trigger = { + OR = { + has_trait = gregarious + has_trait = trusting + } + exists = scope:wedding_social + } + desc = ep2_wedding.3420.social + } + triggered_desc = { + trigger = { + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = august + } + exists = scope:wedding_posture + } + desc = ep2_wedding.3420.posture + } + triggered_desc = { + trigger = { + OR = { + has_trait = honest + has_trait = contrite + } + exists = scope:wedding_blab + scope:blab_guest = root + } + desc = ep2_wedding.3420.blab_self + } + triggered_desc = { + trigger = { + OR = { + has_trait = honest + has_trait = contrite + } + exists = scope:wedding_blab + } + desc = ep2_wedding.3420.blab + } + triggered_desc = { + trigger = { + OR = { + has_trait = deceitful + has_trait = schemer + } + exists = scope:wedding_scheme + } + desc = ep2_wedding.3420.scheme + } + triggered_desc = { + trigger = { + OR = { + has_trait = compassionate + has_trait = generous + } + exists = scope:wedding_help + } + desc = ep2_wedding.3420.help + } + triggered_desc = { + trigger = { + OR = { + has_trait = compassionate + has_trait = zealous + } + exists = scope:wedding_pray + } + desc = ep2_wedding.3420.pray + } + } + desc = ep2_wedding.3420.closing + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:social_guest + trigger = { exists = scope:wedding_social } + animation = happiness + } + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + is_adult = yes + exists = scope:activity + } + + immediate = { + scope:activity = { + # Blab scopes + random_attending_character = { + limit = { + any_targeting_secret = { + OR = { + is_known_by = root + secret_owner = root + } + } + } + save_scope_as = blab_guest + random_targeting_secret = { + limit = { is_known_by = root } + alternative_limit = { secret_owner = root } + save_scope_as = blab_secret + } + } + # Scheme scopes + random_attending_character = { + limit = { + OR = { + any_secret = { + NOR = { + is_known_by = root + secret_owner ?= root + secret_target ?= root + } + } + any_targeting_secret = { + NOR = { + is_known_by = root + secret_owner ?= root + secret_target ?= root + } + } + } + } + weight = { + base = 100 + modifier = { + factor = 0.1 + scope:blab_guest ?= this + } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = scheme_guest + hidden_effect = { + random_list = { + 1 = { + trigger = { + any_secret = { + NOR = { + is_known_by = root + secret_owner = root + trigger_if = { + limit = { exists = scope:scheme_target } + secret_target = root + } + } + } + } + random_secret = { + limit = { + NOR = { + is_known_by = root + secret_owner = root + trigger_if = { + limit = { exists = scope:scheme_target } + secret_target = root + } + } + } + save_scope_as = scheme_secret + } + } + 1 = { + trigger = { + any_targeting_secret = { + NOR = { + is_known_by = root + secret_owner = root + trigger_if = { + limit = { exists = scope:scheme_target } + secret_target = root + } + } + } + } + random_targeting_secret = { + limit = { + NOR = { + is_known_by = root + secret_owner = root + trigger_if = { + limit = { exists = scope:scheme_target } + secret_target = root + } + } + } + save_scope_as = scheme_secret + } + } + } + } + } + # Social scopes + random_attending_character = { + limit = { + NOR = { + this = root + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + has_any_scripted_relation = root + } + opinion = { + target = root + value > -25 + } + } + weight = { + base = 50 + modifier = { + scope:blab_guest ?= this + factor = 0.1 + } + modifier = { + scope:scheme_guest ?= this + factor = 0.1 + } + modifier = { + has_trait = gregarious + add = 25 + } + modifier = { + has_trait = lifestyle_reveler + add = 25 + } + modifier = { + trait_compatibility = { + target = root + value >= low_positive_trait_compatibility + } + add = 25 + } + modifier = { + trait_compatibility = { + target = root + value >= medium_positive_trait_compatibility + } + add = 25 + } + modifier = { + trait_compatibility = { + target = root + value >= high_positive_trait_compatibility + } + add = 25 + } + modifier = { + sex_same_as = root + add = 50 + } + modifier = { + age >= root.age_minus_10 + age < root.age_plus_10 + add = 25 + } + modifier = { + age >= root.age_minus_5 + age < root.age_plus_5 + add = 25 + } + } + save_scope_as = social_guest + } + # Help scopes + random_attending_character = { + limit = { + NOR = { + this = root + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + } + weight = { + base = 50 + modifier = { + scope:blab_guest ?= this + factor = 0.1 + } + modifier = { + scope:scheme_guest ?= this + factor = 0.1 + } + modifier = { + scope:social_guest ?= this + factor = 0.1 + } + modifier = { + OR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + add = 25 + } + modifier = { + is_healthy = no + add = 25 + } + modifier = { + age >= 50 + add = 25 + } + modifier = { + is_close_family_of = root + factor = 2 + } + modifier = { + ai_energy <= low_negative_ai_value + add = 25 + } + modifier = { + ai_energy <= medium_negative_ai_value + add = 25 + } + modifier = { + ai_energy <= high_negative_ai_value + add = 25 + } + modifier = { + current_weight >= overweight_value + add = 25 + } + modifier = { + age > 30 + add = 25 + } + modifier = { + age > 60 + add = 25 + } + } + save_scope_as = help_guest + } + } + hidden_effect = { + while = { + count = 4 + random_list = { + 10 = { # Eat + trigger = { + NOR = { + exists = scope:wedding_eat + has_trait = inappetetic + } + } + modifier = { + has_trait = temperate + add = -20 + } + modifier = { + has_trait = gluttonous + add = 10 + } + modifier = { + has_trait = comfort_eater + add = 10 + } + modifier = { + has_trait = lazy + add = 10 + } + modifier = { + add = { + value = ai_energy + multiply = -1 + } + } + save_scope_as = wedding_eat + } + 10 = { # Drink + trigger = { + NOT = { exists = scope:wedding_drink } + } + modifier = { + has_trait = temperate + add = -20 + } + modifier = { + has_trait = drunkard + add = 10 + } + modifier = { + has_trait = hashishiyah + add = 10 + } + modifier = { + has_trait = lifestyle_reveler + add = 10 + } + modifier = { + has_trait = lazy + add = 10 + } + modifier = { + add = { + value = ai_energy + multiply = -1 + } + } + save_scope_as = wedding_drink + } + 10 = { # Lech + trigger = { + NOT = { exists = scope:wedding_lech } + would_attempt_to_seduce_married_trigger = yes + is_eunuch_trigger = no + NOR = { + has_trait = celibate + has_trait = devoted + } + } + modifier = { + has_trait = chaste + add = -20 + } + modifier = { + has_trait = lustful + add = 10 + } + modifier = { + has_trait = rakish + add = 10 + } + modifier = { + add = { + value = ai_sociability + multiply = 0.5 + } + } + modifier = { + add = { + value = ai_honor + multiply = -0.5 + } + } + save_scope_as = wedding_lech + } + 10 = { # Steal + trigger = { + NOT = { exists = scope:wedding_steal } + exists = root.capital_province + NOT = { scope:activity.activity_location ?= root.capital_province } + OR = { + has_trait = greedy + has_trait = avaricious + gold < 0 + ai_honor < low_positive_honor + } + } + modifier = { + has_trait = generous + add = -20 + } + modifier = { + has_trait = greedy + add = 10 + } + modifier = { + has_trait = arbitrary + add = 10 + } + modifier = { + has_trait = avaricious + add = 10 + } + modifier = { add = ai_greed } + modifier = { + add = { + value = ai_honor + multiply = -1 + } + } + save_scope_as = wedding_steal + } + 10 = { # Flee + trigger = { + NOT = { exists = scope:wedding_flee } + OR = { + has_trait = shy + has_trait = reclusive + has_trait = paranoid + has_trait = impatient + } + } + modifier = { + has_trait = gregarious + add = -20 + } + modifier = { + has_trait = brave + add = -20 + } + modifier = { + has_trait = trusting + add = -20 + } + modifier = { + has_trait = shy + add = 10 + } + modifier = { + has_trait = paranoid + add = 10 + } + modifier = { + has_trait = craven + add = 10 + } + modifier = { + has_trait = reclusive + add = 10 + } + modifier = { + has_trait = impatient + add = 10 + } + modifier = { + add = { + value = ai_boldness + multiply = -1 + } + } + save_scope_as = wedding_flee + } + 10 = { # Charity + trigger = { + NOT = { exists = scope:wedding_charity } + } + modifier = { + has_trait = greedy + add = -20 + } + modifier = { + has_trait = avaricious + add = -20 + } + modifier = { + has_trait = callous + add = -20 + } + modifier = { + has_trait = sadistic + add = -20 + } + modifier = { + has_trait = generous + add = 10 + } + modifier = { + has_trait = improvident + add = 10 + } + modifier = { + add = { + value = ai_greed + multiply = -1 + } + add = { + value = ai_zeal + multiply = 0.5 + } + } + save_scope_as = wedding_charity + } + 10 = { # Social + trigger = { + NOT = { exists = scope:wedding_social } + exists = scope:social_guest + } + modifier = { + has_trait = shy + add = -20 + } + modifier = { + has_trait = reclusive + add = -20 + } + modifier = { + has_trait = gregarious + add = 10 + } + modifier = { + has_trait = confider + add = 10 + } + modifier = { add = ai_sociability } + save_scope_as = wedding_social + } + 10 = { # Posture + trigger = { + NOT = { exists = scope:wedding_posture } + } + modifier = { + has_trait = humble + add = -20 + } + modifier = { + has_trait = content + add = -20 + } + modifier = { + has_trait = arrogant + add = 10 + } + modifier = { + has_trait = ambitious + add = 10 + } + modifier = { + has_trait = august + add = 10 + } + modifier = { + add = { + value = ai_boldness + multiply = 0.5 + } + } + save_scope_as = wedding_posture + } + 10 = { # Blab + trigger = { + NOT = { exists = scope:wedding_blab } + exists = scope:blab_guest + exists = scope:blab_secret + } + modifier = { + has_trait = deceitful + add = -20 + } + modifier = { + has_trait = honest + add = 10 + } + modifier = { + has_trait = contrite + add = 10 + } + modifier = { + add = { + value = ai_honor + multiply = 0.5 + } + } + save_scope_as = wedding_blab + } + 10 = { # Scheme + trigger = { + NOT = { exists = scope:wedding_scheme } + } + modifier = { + has_trait = honest + add = -20 + } + modifier = { + has_trait = contrite + add = -20 + } + modifier = { + has_trait = deceitful + add = 10 + } + modifier = { + has_trait = schemer + add = 10 + } + modifier = { + add = { + value = ai_honor + multiply = -1 + } + } + save_scope_as = wedding_scheme + } + 10 = { # Help + trigger = { + NOT = { exists = scope:wedding_help } + exists = scope:help_guest + } + modifier = { + has_trait = callous + add = -20 + } + modifier = { + has_trait = sadistic + add = -20 + } + modifier = { + has_trait = compassionate + add = 10 + } + modifier = { + has_trait = generous + add = 10 + } + modifier = { add = ai_compassion } + save_scope_as = wedding_help + } + 10 = { # Pray + trigger = { + NOT = { exists = scope:wedding_pray } + OR = { + is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 + is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 + has_trait = devoted + has_trait = zealous + } + } + modifier = { + has_trait = cynical + add = -20 + } + modifier = { + has_trait = callous + add = -20 + } + modifier = { + has_trait = zealous + add = 10 + } + modifier = { + has_trait = compassionate + add = 10 + } + modifier = { add = ai_zeal } + modifier = { + add = { + value = ai_compassion + multiply = 0.5 + } + } + save_scope_as = wedding_pray + } + } + } + } + } + + #Eat + option = { + name = ep2_wedding.3420.a + trigger = { exists = scope:wedding_eat } + trait = gluttonous + trait = comfort_eater + target_weight_modifier_effect = { VALUE = 2 } + stress_impact = { + gluttonous = medium_stress_impact_loss + comfort_eater = medium_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_energy = 1 + ai_vengefulness = 1 + ai_boldness = 1 + } + } + } + + #Drink + option = { + name = ep2_wedding.3420.b + trigger = { exists = scope:wedding_drink } + trait = drunkard + trait = hashishiyah + trait = lifestyle_reveler + if = { + limit = { + NOT = { has_trait = lifestyle_reveler } + } + add_trait = lifestyle_reveler + } + else = { + add_trait_xp = { + trait = lifestyle_reveler + value = medium_trait_xp + } + } + stress_impact = { + base = minor_stress_impact_loss + drunkard = medium_stress_impact_loss + hashishiyah = medium_stress_impact_loss + lifestyle_reveler = medium_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = 1 + ai_boldness = 0.5 + } + } + } + + #Lech + option = { + name = ep2_wedding.3420.c + trigger = { exists = scope:wedding_lech } + trait = lustful + trait = rakish + if = { + limit = { + NOT = { is_attracted_to_men = yes } + } + had_sex_with_unknown_effect = { GENDER = female } + } + else = { + had_sex_with_unknown_effect = { GENDER = male } + } + stress_impact = { + lustful = medium_stress_impact_loss + rakish = medium_stress_impact_loss + chaste = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Steal + option = { + name = ep2_wedding.3420.d + trigger = { exists = scope:wedding_steal } + trait = greedy + trait = avaricious + add_gold = { 10 25 } + stress_impact = { + greedy = medium_stress_impact_loss + avaricious = medium_stress_impact_loss + generous = medium_stress_impact_gain + just = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Flee + option = { + name = ep2_wedding.3420.e + trigger = { exists = scope:wedding_flee } + trait = shy + trait = reclusive + add_prestige = miniscule_prestige_loss + stress_impact = { + impatient = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + shy = medium_stress_impact_loss + reclusive = medium_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_vengefulness = 0.5 + ai_boldness = 0.5 + } + } + } + + #Charity + option = { + name = ep2_wedding.3420.f + trigger = { exists = scope:wedding_charity } + trait = generous + trait = improvident + remove_short_term_gold = { 10 25 } + add_piety = minor_piety_gain + stress_impact = { + generous = medium_stress_impact_loss + improvident = medium_stress_impact_loss + greedy = minor_stress_impact_gain + avaricious = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Socialize + option = { + name = ep2_wedding.3420.g + trigger = { exists = scope:wedding_social } + trait = gregarious + trait = trusting + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:social_guest + OPINION = default_friend_opinion + } + stress_impact = { + gregarious = medium_stress_impact_loss + trusting = medium_stress_impact_loss + shy = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Posture + option = { + name = ep2_wedding.3420.h + trigger = { exists = scope:wedding_posture } + trait = arrogant + trait = ambitious + add_prestige = minor_prestige_gain + stress_impact = { + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + humble = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Blab + option = { + name = ep2_wedding.3420.i + trigger = { exists = scope:wedding_blab } + trait = honest + trait = contrite + if = { + limit = { + root != scope:blab_guest + } + reverse_add_opinion = { + target = scope:blab_guest + modifier = exposed_my_secret_opinion + } + } + scope:blab_secret = { expose_secret = root } + stress_impact = { + honest = medium_stress_impact_loss + contrite = medium_stress_impact_loss + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Scheme + option = { + name = ep2_wedding.3420.j + trigger = { exists = scope:wedding_scheme } + trait = deceitful + trait = schemer + remove_short_term_gold = { 10 25 } + random = { + chance = 50 + custom_tooltip = ep2_wedding.3420.j.tt + hidden_effect = { + if = { + limit = { exists = scope:scheme_secret } + send_interface_toast = { + title = secret_discovered_toast + scope:scheme_secret = { reveal_to = root } + } + } + } + } + stress_impact = { + deceitful = medium_stress_impact_loss + schemer = medium_stress_impact_loss + honest = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Help + option = { + name = { + text = ep2_wedding.3420.k.health + trigger = { + scope:help_guest = { is_healthy = no } + } + } + name = { + text = ep2_wedding.3420.k.drink + trigger = { + scope:help_guest = { + OR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + } + } + } + name = { + text = ep2_wedding.3420.k.fallback + trigger = { + scope:help_guest = { + is_healthy = yes + NOR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + } + } + } + trigger = { exists = scope:wedding_help } + trait = compassionate + flavor = ep2_wedding.3420.k.flavor + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:help_guest + OPINION = default_friend_opinion + } + stress_impact = { + compassionate = medium_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } + + #Pray + option = { + name = ep2_wedding.3420.l + trigger = { exists = scope:wedding_pray } + trait = zealous + add_piety = minor_piety_gain + stress_impact = { + compassionate = minor_stress_impact_loss + zealous = medium_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + ai_vengefulness = -1 + } + } + } +} + +scripted_trigger wedding_3500_shared_trigger = { + is_adult = yes + is_participant_in_activity = scope:activity + NOR = { + this = root + scope:my_family_relative ?= this + scope:my_family_relative_1 ?= this + scope:my_family_relative_2 ?= this + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } +} + +scripted_trigger wedding_3500_same_relation_spouse_trigger = { + is_$RELATION$_of = scope:my_family_spouse + scope:my_family_relative_1 = { is_$RELATION$_of = scope:my_family_spouse } + scope:my_family_relative_2 = { is_$RELATION$_of = scope:my_family_spouse } +} + +scripted_trigger ep2_wedding_3500_relations_spouse_shared_trigger = { + OR = { + wedding_3500_same_relation_spouse_trigger = { RELATION = great_grandchild } + wedding_3500_same_relation_spouse_trigger = { RELATION = grandchild } + wedding_3500_same_relation_spouse_trigger = { RELATION = child } + wedding_3500_same_relation_spouse_trigger = { RELATION = great_grandparent } + wedding_3500_same_relation_spouse_trigger = { RELATION = grandparent } + wedding_3500_same_relation_spouse_trigger = { RELATION = sibling } + wedding_3500_same_relation_spouse_trigger = { RELATION = nibling } + wedding_3500_same_relation_spouse_trigger = { RELATION = uncle_or_aunt } + wedding_3500_same_relation_spouse_trigger = { RELATION = cousin } + } +} + +scripted_trigger ep2_wedding_3500_same_relation_root_trigger = { + scope:my_family_relative_1 = { is_$RELATION$_of = root } + scope:my_family_relative_2 = { is_$RELATION$_of = root } +} + +scripted_trigger ep2_wedding_3500_relations_root_shared_trigger = { + OR = { + ep2_wedding_3500_same_relation_root_trigger = { RELATION = great_grandchild } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = grandchild } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = child } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = great_grandparent } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = grandparent } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = sibling } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = nibling } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = uncle_or_aunt } + ep2_wedding_3500_same_relation_root_trigger = { RELATION = cousin } + } +} + +scripted_effect wedding_3500_save_family_effect = { + scope:activity.special_guest:$SPOUSE$ = { save_scope_as = my_family_spouse } + if = { + limit = { scope:my_family_spouse = scope:activity.special_guest:spouse_1 } + scope:activity.special_guest:spouse_2 = { save_scope_as = other_family_spouse } + } + else = { + scope:activity.special_guest:spouse_1 = { save_scope_as = other_family_spouse } + } + while = { + count = 2 + random_close_or_extended_family_member = { + limit = { + trigger_if = { + limit = { + root = { is_close_family_of = scope:my_family_spouse } + } + is_close_family_of = scope:my_family_spouse + } + trigger_else = { is_extended_family_of = scope:my_family_spouse } + wedding_3500_shared_trigger = yes + NOR = { + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + alternative_limit = { + wedding_3500_shared_trigger = yes + NOR = { + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + weight = { + base = 1 + wedding_family_member_compatibility_modifier = yes + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + } + if = { + limit = { exists = scope:my_family_relative_1 } + save_scope_as = my_family_relative_2 + } + else = { save_scope_as = my_family_relative_1 } + } + } +} + +scripted_trigger ep2_wedding_3500_active_bedroom_trigger = { + scope:my_family_spouse = { + is_eunuch_trigger = no + NOT = { has_trait = celibate } + } + scope:other_family_spouse = { + is_eunuch_trigger = no + NOT = { has_trait = celibate } + } +} + +scripted_trigger ep2_wedding_3500_dislikes_fornicators_trigger = { + scope:other_family_spouse = { + OR = { + has_trait = fornicator + has_trait = adulterer + } + } + scope:my_family_spouse = { + OR = { + has_trait = fornicator + has_trait = adulterer + } + } + trigger_if = { + limit = { + scope:other_family_spouse = { is_female = yes } + } + faith = { + NOT = { has_doctrine = doctrine_adultery_women_accepted } + } + } + trigger_else = { + faith = { + NOT = { has_doctrine = doctrine_adultery_men_accepted } + } + } +} + +ep2_wedding.3500 = { + type = activity_event + title = ep2_wedding.3500.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:my_family_relative_1 = { sex_same_as = scope:my_family_relative_2 } + ep2_wedding_3500_relations_root_shared_trigger = yes + } + desc = ep2_wedding.3500.intro_plural + } + desc = ep2_wedding.3500.intro + } + desc = ep2_wedding.3500.intro_connector + first_valid = { + # BOTH + triggered_desc = { + trigger = { ep2_wedding_3500_relations_spouse_shared_trigger = yes } + desc = ep2_wedding.3500.relation_shared + } + desc = ep2_wedding.3500.relation + } + first_valid = { + # Personal concerns + triggered_desc = { + trigger = { + scope:my_family_relative_1 = { + OR = { + ep2_wedding_3500_dislikes_fornicators_trigger = yes + has_imprisonment_reason = scope:other_family_spouse + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + } + desc = { + random_valid = { + triggered_desc = { + trigger = { # Fornicator or adulterer trait, and not accepted in faith + scope:my_family_relative_1 = { ep2_wedding_3500_dislikes_fornicators_trigger = yes } + } + desc = ep2_wedding.3500.fornicator + } + triggered_desc = { + trigger = { + scope:my_family_relative_1 = { has_imprisonment_reason = scope:other_family_spouse } + NOT = { + scope:my_family_relative_1 = { has_imprisonment_reason = scope:my_family_spouse } + } + } + desc = ep2_wedding.3500.criminal + } + triggered_desc = { + trigger = { + OR = { + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + desc = ep2_wedding.3500.dislike + } + } + } + } + # Political concerns + triggered_desc = { + trigger = { + exists = scope:other_family_spouse.house + exists = scope:my_family_spouse.house + OR = { + scope:other_family_spouse.dynasty.dynasty_prestige_level < scope:my_family_spouse.dynasty.dynasty_prestige_level + scope:other_family_spouse.house.house_head ?= { + is_ruler = yes + OR = { + any_neighboring_top_liege_realm_owner = {scope:my_family_spouse.house.house_head.liege ?= this } + AND = { + exists = liege + scope:my_family_spouse.house.house_head.liege ?= liege + } + } + } + AND = { + NOT = { + scope:my_family_relative_1 = { has_trait = cynical } + } + scope:my_family_spouse.faith = { + NOR = { + this = scope:other_family_spouse.faith + faith_hostility_level = { + target = scope:other_family_spouse.faith + value = 0 # Accepted + } + } + } + } + } + } + desc = { + random_valid = { + triggered_desc = { + trigger = { + scope:other_family_spouse.dynasty.dynasty_prestige_level < scope:my_family_spouse.dynasty.dynasty_prestige_level + } + desc = ep2_wedding.3500.renown + } + triggered_desc = { + trigger = { + scope:other_family_spouse.house.house_head ?= { + is_ruler = yes + OR = { + any_neighboring_top_liege_realm_owner = {scope:my_family_spouse.house.house_head.liege ?= this } + AND = { + exists = liege + scope:my_family_spouse.house.house_head.liege ?= liege + } + } + } + } + desc = ep2_wedding.3500.realms + } + triggered_desc = { + trigger = { + NOT = { + scope:my_family_relative_1 = { has_trait = cynical } + } + scope:my_family_spouse.faith = { + NOR = { + this = scope:other_family_spouse.faith + faith_hostility_level = { + target = scope:other_family_spouse.faith + value = 0 # Accepted + } + } + } + } + desc = ep2_wedding.3500.faith + } + } + } + } + # Petty concerns + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:other_family_spouse = { is_healthy = no } + scope:my_family_spouse = { is_healthy = yes } + scope:my_family_relative_1 = { is_healthy = yes } + } + desc = ep2_wedding.3500.health + } + triggered_desc = { + trigger = { + scope:other_family_spouse.ai_boldness > low_positive_boldness + scope:my_family_spouse.ai_boldness < low_negative_boldness + scope:my_family_relative_1.ai_boldness < low_negative_boldness + } + desc = ep2_wedding.3500.bold + } + triggered_desc = { + trigger = { + scope:other_family_spouse.ai_boldness < low_negative_boldness + scope:my_family_spouse.ai_boldness > low_positive_boldness + scope:my_family_relative_1.ai_boldness > low_positive_boldness + } + desc = ep2_wedding.3500.shy + } + triggered_desc = { + trigger = { + scope:other_family_spouse.ai_honor < low_positive_honor + scope:my_family_relative_1.ai_honor >= low_positive_honor + } + desc = ep2_wedding.3500.dishonorable + } + triggered_desc = { + trigger = { + scope:my_family_spouse.age <= scope:other_family_spouse.age_minus_10 + ep2_wedding_3500_active_bedroom_trigger = yes + } + desc = ep2_wedding.3500.old + } + triggered_desc = { + trigger = { + scope:my_family_spouse.age >= scope:other_family_spouse.age_plus_10 + ep2_wedding_3500_active_bedroom_trigger = yes + } + desc = ep2_wedding.3500.young + } + triggered_desc = { + trigger = { + ep2_wedding_3500_active_bedroom_trigger = yes + scope:other_family_spouse = { has_trait = beauty_bad } + NOR = { + scope:my_family_spouse = { has_trait = beauty_bad } + scope:my_family_relative_1 = { has_trait = beauty_bad } + } + } + desc = ep2_wedding.3500.beauty + } + triggered_desc = { + trigger = { + NOR = { + AND = { + scope:other_family_spouse = { is_healthy = no } + scope:my_family_spouse = { is_healthy = yes } + scope:my_family_relative_1 = { is_healthy = yes } + } + AND = { + scope:other_family_spouse.ai_boldness > low_positive_boldness + scope:my_family_spouse.ai_boldness < low_negative_boldness + scope:my_family_relative_1.ai_boldness < low_negative_boldness + } + AND = { + scope:other_family_spouse.ai_boldness < low_negative_boldness + scope:my_family_spouse.ai_boldness > low_positive_boldness + scope:my_family_relative_1.ai_boldness > low_positive_boldness + } + AND = { + scope:other_family_spouse.ai_honor < low_positive_honor + scope:my_family_relative_1.ai_honor >= low_positive_honor + } + AND = { + ep2_wedding_3500_active_bedroom_trigger = yes + OR = { + scope:my_family_spouse.age <= scope:other_family_spouse.age_plus_10 + scope:my_family_spouse.age >= scope:other_family_spouse.age_minus_10 + AND = { + scope:other_family_spouse = { has_trait = beauty_bad } + NOR = { + scope:my_family_spouse = { has_trait = beauty_bad } + scope:my_family_relative_1 = { has_trait = beauty_bad } + } + } + } + } + + } + } + desc = ep2_wedding.3500.fallback + } + } + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:my_family_relative_2 = { + ep2_wedding_3500_dislikes_fornicators_trigger = yes + has_imprisonment_reason = scope:other_family_spouse + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + desc = ep2_wedding.3500.agree + } + triggered_desc = { + trigger = { + exists = scope:my_family_spouse + scope:other_family_spouse.house.house_head = { is_allied_to = scope:my_family_spouse.house.house_head } + } + desc = ep2_wedding.3500.alliance + } + triggered_desc = { + trigger = { + OR = { + AND = { + scope:other_family_spouse = { has_trait = beauty_bad } + scope:my_family_spouse = { + NOT = { has_trait = beauty_bad } + } + } + AND = { + scope:other_family_spouse = { is_healthy = no } + scope:my_family_spouse = { is_healthy = yes } + } + } + } + desc = ep2_wedding.3500.compromise + } + desc = ep2_wedding.3500.time + } + } + theme = marriage + override_background = { reference = feast } + left_portrait = { + character = scope:my_family_relative_1 + animation = worry + } + center_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:my_family_relative_2 + animation = thinking + } + lower_right_portrait = scope:activity.special_guest:spouse_1 + lower_left_portrait = scope:activity.special_guest:spouse_2 + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + is_adult = yes + # Spouse 1 and 2 are not root + NOR = { + scope:activity.special_guest:spouse_1 ?= root + scope:activity.special_guest:spouse_2 ?= root + } + # More relatives of your family's spouse are about + trigger_if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 } + NOR = { + has_relation_rival = scope:activity.special_guest:spouse_1 + opinion = { + target = scope:activity.special_guest:spouse_1 + value <= -25 + } + } + scope:activity.special_guest:spouse_1 = { + any_close_or_extended_family_member = { + count >= 2 + wedding_3500_shared_trigger = yes + NOR = { + has_relation_rival = scope:activity.special_guest:spouse_2 + opinion = { + target = scope:activity.special_guest:spouse_2 + value <= -25 + } + } + } + } + } + trigger_else_if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_2 } + NOR = { + has_relation_rival = scope:activity.special_guest:spouse_2 + opinion = { + target = scope:activity.special_guest:spouse_2 + value <= -25 + } + } + scope:activity.special_guest:spouse_2 = { + any_close_or_extended_family_member = { + count >= 2 + wedding_3500_shared_trigger = yes + NOR = { + has_relation_rival = scope:activity.special_guest:spouse_2 + opinion = { + target = scope:activity.special_guest:spouse_2 + value <= -25 + } + } + } + } + } + # No dice + trigger_else = { always = no } + } + + immediate = { + save_scope_as = my_family_relative + # Save family members related to spouse + hidden_effect = { + if = { + limit = { is_close_or_extended_family_of = scope:activity.special_guest:spouse_1 } + wedding_3500_save_family_effect = { SPOUSE = spouse_1 } + } + else = { + wedding_3500_save_family_effect = { SPOUSE = spouse_2 } + } + } + } + + # Agree + option = { + name = ep2_wedding.3500.a + trigger = { exists = scope:my_family_relative_1 } + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:my_family_relative_1 + OPINION = default_friend_opinion + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + } + } + } + + # Rebuff + option = { + name = ep2_wedding.3500.b + trigger = { + scope:my_family_relative_2 ?= { + NOR = { + ep2_wedding_3500_dislikes_fornicators_trigger = yes + has_imprisonment_reason = scope:other_family_spouse + has_relation_rival = scope:other_family_spouse + opinion = { + target = scope:other_family_spouse + value <= -25 + } + } + } + } + progress_towards_friend_effect = { + REASON = friend_wedding_relation_bond + CHARACTER = scope:my_family_relative_2 + OPINION = default_friend_opinion + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.5 + } + } + } + + #It matters not + option = { + name = ep2_wedding.3500.d + add_prestige = minor_prestige_gain + stress_impact = { + compassionate = miniscule_stress_impact_gain + content = miniscule_stress_impact_gain + callous = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -0.5 + } + } + } + + #It is in god's hands now + option = { + name = ep2_wedding.3500.e + add_piety = minor_prestige_gain + stress_impact = { + cynical = miniscule_stress_impact_gain + diligent = miniscule_stress_impact_gain + zealous = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.5 + } + } + } +} + +############################ +## Wedding Ceremony Events +## 4000-4999 +## by Veronica Pazos +############################ + +scripted_trigger ep2_wedding_4000_valid_betrothed = { + feast_default_adult_participant_trigger = yes #includes is_ai = yes + can_marry_character_trigger = { CHARACTER = root.intent_target } + NOR = { + age < root.intent_target.age_minus_10 + age > root.intent_target.age_plus_10 + } +} + +# Non-spouse: Matchmaking Intent - This wedding is so cool, you guys should also get married + +ep2_wedding.4000 = { + type = activity_event + title = ep2_wedding.4000.t + desc = { + desc = ep2_wedding.4000.desc.intro + first_valid = { + triggered_desc = { + trigger = { + scope:matchmaked_scope = { + exists = var:wedding_good_match + var:wedding_good_match = scope:objective_scope + } + } + desc = ep2_wedding.4000.desc.good_match + } + triggered_desc = { + trigger = { + scope:matchmaked_scope = { + exists = var:wedding_no_match + var:wedding_no_match = scope:objective_scope + } + } + desc = ep2_wedding.4000.desc.no_match + } + } + } + theme = wedding_ceremony_activity + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:matchmaked_scope + animation = personality_rational + } + lower_center_portrait = scope:objective_scope + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + NOT = { has_variable = had_ep2_wedding_matchmaking_event_var } + NOR = { #you are not one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + has_activity_intent = matchmaking_intent #you're trying to matchmake someone + intent_target = { is_alive = yes } #they're not dead yet + scope:activity = { #there's someone to pair them with + any_attending_character = { + ep2_wedding_4000_valid_betrothed = yes + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + intent_target = { save_scope_as = matchmaked_scope } + scope:activity = { + random_attending_character = { + limit = { ep2_wedding_4000_valid_betrothed = yes } + save_scope_as = objective_scope + } + } + set_variable = { + name = had_ep2_wedding_matchmaking_event_var + days = 90 #enough to not affect this wedding + } + } + + #Go for it + option = { + name = ep2_wedding.4000.a + duel = { + skill = diplomacy + target = scope:matchmaked_scope + 50 = { # success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = 20 + attraction >= medium_positive_attraction + } + modifier = { + add = 30 + attraction >= high_positive_attraction + } + desc = ep2_wedding.4000.a.success + send_interface_toast = { + title = ep2_wedding.4000.a.success + left_icon = scope:matchmaked_scope + right_icon = scope:objective_scope + scope:activity = { + add_activity_log_entry = { + key = ep2_wedding_4000_log_success + character = root + target = scope:matchmaked_scope + + # Effect + root = { custom_tooltip = ep2_wedding.wedding_intent.success.tt } + scope:matchmaked_scope = { create_betrothal = scope:objective_scope } + } + } + } + complete_activity_intent = yes + } + 50 = { # fail + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.4000.a.failure + send_interface_toast = { + title = ep2_wedding.4000.a.failure + left_icon = scope:matchmaked_scope + add_prestige = minor_prestige_loss + scope:matchmaked_scope = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -10 + } + } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + patient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = patient + } + } + } + } + + #Be subtle + option = { + name = ep2_wedding.4000.b + duel = { + skill = intrigue + target = scope:matchmaked_scope + 30 = { # success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.4000.b.success + send_interface_toast = { + title = ep2_wedding.4000.b.success + left_icon = scope:matchmaked_scope + right_icon = scope:objective_scope + scope:activity = { + add_activity_log_entry = { + key = ep2_wedding_4000_log_success + character = root + target = scope:matchmaked_scope + + # Effect + custom_tooltip = ep2_wedding.wedding_intent.success.tt + scope:matchmaked_scope = { create_betrothal = scope:objective_scope } + } + } + } + complete_activity_intent = yes + } + 70 = { # fail + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.4000.a.failure + send_interface_toast = { + title = ep2_wedding.4000.a.failure + left_icon = scope:matchmaked_scope + scope:matchmaked_scope = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -10 + } + } + } + } + } + stress_impact = { + brave = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = brave + has_trait = impatient + } + } + } + } + + #Nahhh + option = { + name = ep2_wedding.4000.c + ai_chance = { + base = 100 + modifier = { + factor = 1.25 + OR = { + has_trait = callous + has_trait = sadistic + } + } + modifier = { + factor = 0 + scope:matchmaked_scope = { + trait_compatibility = { + target = scope:objective_scope + value >= high_positive_trait_compatibility + } + } + } + } + } +} + +# Host: Gain Renown Intent - Bring a white animal to the Banquet to flex (it's painted) + +scripted_trigger ep2_wedding_2010_impressed = { + OR = { #what kind of people would be impressed by a legendary animal? + has_trait = gregarious + has_trait = brave + has_trait = lifestyle_reveler + has_trait = lifestyle_hunter + has_trait = drunkard + has_trait = gallant #white animals were a pretty chivalrous thing to find/hunt + } +} + +ep2_wedding.2010 = { + type = activity_event + title = ep2_wedding.2010.t + desc = { + desc = ep2_wedding.2010.desc.intro + first_valid = { + triggered_desc = { + trigger = { + OR = { #you are one of the spouses + root = scope:activity.special_guest:spouse_1 + root = scope:activity.special_guest:spouse_2 + } + } + desc = ep2_wedding.2010.desc_spouse + } + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + animation = personality_rational + } + + cooldown = { years = 5 } + + trigger = { + this = scope:host #you're the host + has_activity_intent = diplomatic_intent + intent_target = { ep2_wedding_2010_impressed = yes } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + has_trait = deceitful + } + modifier = { + factor = 0.5 + has_trait = honest + } + } + + immediate = { + select_local_animal_effect = { TYPE = big } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling + intent_target = { + add_to_list = ep2_wedding_2010_impressed_list + save_scope_as = diplo_target + } + if = { + limit = { + scope:activity = { #there's someone else to impress + any_attending_character = { + feast_default_adult_participant_trigger = yes + NOR = { + this = root + this = root.intent_target + } + ep2_wedding_2010_impressed = yes + } + } + } + scope:activity = { + every_attending_character = { + limit = { + feast_default_adult_participant_trigger = yes + NOR = { + this = root + this = root.intent_target + } + ep2_wedding_2010_impressed = yes + } + add_to_list = ep2_wedding_2010_impressed_list + } + } + } + } + + #Yeah + option = { + name = ep2_wedding.2010.a + custom_tooltip = ep2_wedding.2010.a.tt + every_in_list = { + list = ep2_wedding_2010_impressed_list + custom = ep2_wedding.2010.impressed_list + add_opinion = { + modifier = wbanquet_white_animal_opinion + target = root + opinion = 20 + } + } + #Does anyone suspect? + hidden_effect = { + if = { + limit = { + scope:diplo_target = { + feast_default_adult_participant_trigger = yes + OR = { + has_trait = cynical + has_trait = callous + } + has_any_good_relationship_with_root_trigger = no + } + } + random_list = { + 50 = { #they don't notice + remove_variable = animal_type + if = { + limit = { + scope:diplo_target = { activity_wedding_diplomatic_intent_impressible_target = yes } + } + send_interface_toast = { + title = ep2_wedding.2000.after.subjugate + left_icon = scope:diplo_target + custom_tooltip = { + text = ep2_wedding.2000.after.subjugate.tt + complete_activity_intent = yes + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = title_change + add_claim_on_loss = no + } + scope:diplo_target = { + change_liege = { + liege = root + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + } + } + } + } + 50 = { #they do + trigger_event = ep2_wedding.2011 + } + } + } + else_if = { + limit = { + scope:activity = { + any_attending_character = { + feast_default_adult_participant_trigger = yes + OR = { + has_trait = cynical + has_trait = callous + } + has_any_good_relationship_with_root_trigger = no + } + } + } + random_list = { + 50 = { #they don't notice + remove_variable = animal_type + } + 50 = { #they do + trigger_event = ep2_wedding.2011 + } + } + } + } + remove_short_term_gold = minor_gold_value + stress_impact = { + greedy = medium_stress_impact_gain + honest = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + short_term_gold <= minor_gold_value + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = honest + } + } + } + } + + #Nah + option = { + name = ep2_wedding.2010.b + remove_variable = animal_type + stress_impact = { + gallant = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + lifestyle_reveler = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = gallant + has_trait = gregarious + has_trait = lifestyle_reveler + } + } + modifier = { + factor = 1.25 + has_trait = deceitful + } + } + } +} + +# Follow up: You get called out + +ep2_wedding.2011 = { + type = activity_event + title = ep2_wedding.2011.t + desc = ep2_wedding.2011.desc + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = wrathful + has_trait = vengeful + has_trait = callous + has_trait = brave + } + } + animation = anger + } + animation = stress + } + right_portrait = { + character = scope:doubting_guest + animation = schadenfreude + } + + immediate = { + scope:activity = { + random_attending_character = { + limit = { + feast_default_adult_participant_trigger = yes + OR = { + has_trait = cynical + has_trait = callous + } + has_any_good_relationship_with_root_trigger = no + } + save_scope_as = doubting_guest + } + } + } + + #Confess + option = { + name = ep2_wedding.2011.a + add_prestige = minor_prestige_loss + add_piety = minor_piety_gain + scope:doubting_guest = { + add_opinion = { + target = root + opinion = 10 + modifier = pleased_opinion + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + deceitful = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = honest + } + } + } + } + + #Double down + option = { + name = ep2_wedding.2011.b + duel = { #they believe you + skill = intrigue + target = scope:doubting_guest + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + factor = 2 + scope:doubting_guest = { + OR = { + has_trait = trusting + has_trait = loyal + } + } + } + desc = ep2_wedding.2011.b.success + send_interface_toast = { + left_icon = scope:doubting_guest + title = ep2_wedding.2011.b.success + custom_tooltip = ep2_wedding.wedding_intent.success.tt + complete_activity_intent = yes + } + } + 50 = { #they don't + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.2011.b.failure + send_interface_toast = { + left_icon = scope:doubting_guest + title = ep2_wedding.2011.b.failure + scope:doubting_guest = { + add_opinion = { + target = root + opinion = -10 + modifier = annoyed_opinion + } + } + } + } + } + stress_impact = { + trusting = medium_stress_impact_gain + just = medium_stress_impact_gain + honest = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = trusting + has_trait = just + } + } + } + } + + after = { + remove_variable = animal_type + } +} + +# Spouse/Non-spouse: Someone is dangerously close to a well of wine + +scripted_trigger ep2_wedding_2020_would_fall_trigger = { + is_adult = yes + is_alive = yes + feast_default_adult_participant_trigger = yes + drinks_alcohol_trigger = yes + OR = { + has_trait = lifestyle_reveler + has_trait = drunkard + has_trait = gregarious + has_trait = arbitrary + } +} + +ep2_wedding.2020 = { + type = activity_event + title = ep2_wedding.2020.t + desc = ep2_wedding.2020.desc + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_activity_intent = banquet_mischief_intent + has_trait = callous + has_trait = sadistic + has_trait = deceitful + } + } + animation = scheme + } + animation = worry + } + right_portrait = { + character = scope:drunk_guest + animation = drink_goblet + } + + cooldown = { years = 5 } + + trigger = { + #DLC check. + has_ep2_dlc_trigger = yes + this != scope:host + scope:activity = { + any_attending_character = { + ep2_wedding_2020_would_fall_trigger = yes + } + has_activity_option = { + category = wedding_option_food + option = wedding_food_good + } + NOT = { + has_variable = has_had_2020_event + } + } + scope:activity = { NOT = { has_variable = ep2_wedding_2020_well_var } } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + has_activity_intent = banquet_mischief_intent + } + modifier = { + factor = 2 + scope:activity = { + any_attending_character = { + has_trait = drunkard + } + } + } + modifier = { + is_ai = yes + factor = 0.1 + } + } + + immediate = { + scope:activity = { + set_variable = ep2_wedding_2020_well_var + random_attending_character = { + limit = { + ep2_wedding_2020_would_fall_trigger = yes + } + weight = { + base = 1 + modifier = { + add = 50 + has_trait = drunkard + } + } + save_scope_as = drunk_guest + } + set_variable = has_had_2020_event + } + } + + #Tell them + option = { + name = ep2_wedding.2020.a + duel = { + skill = diplomacy + target = scope:drunk_guest + 50 = { #they listen to you + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.2020.a.success + send_interface_toast = { + left_icon = scope:drunk_guest + title = ep2_wedding.2020.a.success + progress_towards_friend_effect = { + REASON = friend_wbanquet_saved_from_well + CHARACTER = scope:drunk_guest + OPINION = 20 + } + add_piety = minor_piety_gain + } + } + 50 = { #they fall down + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.2020.a.failure + send_interface_toast = { + left_icon = scope:drunk_guest + title = ep2_wedding.2020.a.failure + scope:drunk_guest = { + add_prestige = minor_prestige_loss + increase_wounds_effect = { REASON = fall } + } + } + } + } + stress_impact = { + deceitful = medium_stress_impact_gain + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = deceitful + has_trait = callous + has_trait = sadistic + } + } + } + } + + #Don't + option = { + name = ep2_wedding.2020.b + random_list = { + 50 = { #they don't fall + desc = ep2_wedding.2020.b.success + send_interface_toast = { + left_icon = scope:drunk_guest + title = ep2_wedding.2020.b.success + #nothing happens + } + } + 50 = { #they fall down + modifier = { + factor = 2 + scope:drunk_guest = { has_trait = drunkard } + } + desc = ep2_wedding.2020.a.failure + send_interface_toast = { + left_icon = scope:drunk_guest + title = ep2_wedding.2020.a.failure + add_stress = major_stress_impact_loss + scope:drunk_guest = { + add_prestige = minor_prestige_loss + increase_wounds_effect = { REASON = fall } + } + } + } + } + stress_impact = { + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = compassionate + } + } + } + + #Crash Wedding Intent - Push them + option = { + name = ep2_wedding.2020.c + trigger = { + OR = { + has_activity_intent = banquet_mischief_intent + AND = { + has_activity_intent = murder_attendee_intent + intent_target = scope:drunk_guest + } + } + } + reason = activity_intent + duel = { + skill = prowess + target = scope:drunk_guest + 50 = { #you push them + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep2_wedding.2020.c.success + send_interface_toast = { + left_icon = scope:drunk_guest + title = ep2_wedding.2020.c.success + custom_tooltip = ep2_wedding.wedding_intent.success.tt + add_stress = major_stress_impact_loss + scope:drunk_guest = { + add_prestige = minor_prestige_loss + increase_wounds_effect = { REASON = fall } + } + complete_activity_intent = yes + } + } + 50 = { #they kick you back + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.2020.c.failure + send_interface_toast = { + left_icon = root + right_icon = scope:drunk_guest + title = ep2_wedding.2020.c.failure + increase_wounds_effect = { REASON = fight } + } + } + 10 = { #they die + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep2_wedding.2020.c.death + send_interface_toast = { + left_icon = root + right_icon = scope:drunk_guest + title = ep2_wedding.2020.c.death + scope:drunk_guest = { + death = { death_reason = death_accident } + } + known_murder_effect = { + VICTIM = scope:drunk_guest + MURDERER = root + EXPOSER = root + } + } + } + } + stress_impact = { + calm = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = forgiving + has_trait = compassionate + } + } + } + } +} diff --git a/events/dlc/ep3/ep3_contract_events.txt b/events/dlc/ep3/ep3_contract_events.txt new file mode 100644 index 00000000..4bf641c6 --- /dev/null +++ b/events/dlc/ep3/ep3_contract_events.txt @@ -0,0 +1,10220 @@ +################################################### +## EP3 Contract Events +## +################################################### + +namespace = ep3_contract_event + +scripted_effect set_contract_scopes_effect = { + scope:task_contract.task_contract_taker ?= { + save_scope_as = task_contract_taker + } + scope:task_contract.task_contract_employer ?= { + save_scope_as = task_contract_employer + } + if = { + limit = { + exists = scope:task_contract.task_contract_destination + } + scope:task_contract.task_contract_destination = { + save_scope_as = task_contract_destination + } + } + else = { + scope:task_contract.var:task_contract_destination ?= { + save_scope_as = task_contract_destination + } + } + if = { + limit = { + exists = scope:task_contract.task_contract_target + } + scope:task_contract.task_contract_target ?= { + save_scope_as = task_contract_target + } + } + else = { + scope:task_contract.var:task_contract_target ?= { + save_scope_as = task_contract_target + } + } + scope:task_contract.var:task_contract_war ?= { + save_scope_as = task_contract_war + } + if = { + limit = { + exists = scope:task_contract.var:task_contract_object + } + scope:task_contract.var:task_contract_object = { + save_scope_as = task_contract_object + } + } + if = { + limit = { + exists = scope:task_contract.var:escorted_artifact + } + scope:task_contract.var:escorted_artifact = { + save_scope_as = escorted_artifact + } + } + if = { + limit = { + exists = scope:task_contract.var:escorted_gold + } + scope:task_contract.var:escorted_gold = { + save_scope_as = escorted_gold + } + } + if = { + limit = { + exists = scope:task_contract.var:escorted_story + } + scope:task_contract.var:escorted_story = { + save_scope_as = escorted_story + } + } +} + +scripted_effect start_contract_travel_without_domicile = { + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_destinations = all + } +} +scripted_effect start_contract_travel_with_domicile = { + start_travel_plan = { + destination = scope:task_contract_destination + travel_with_domicile = yes + return_trip = no + on_arrival_destinations = all + } +} + +#taking a transport contract - triggered after you take a transport contract +ep3_contract_event.0001 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + desc = ep3_contract_event.0001.t_vip + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + desc = ep3_contract_event.0001.t_child + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + desc = ep3_contract_event.0001.t_explorer + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + desc = ep3_contract_event.0001.t_artifact + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + desc = ep3_contract_event.0001.t_gold + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + desc = ep3_contract_event.0001.t_animal + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + desc = ep3_contract_event.0001.t_construction + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + desc = ep3_contract_event.0001.desc_intro_explorer + } + desc = ep3_contract_event.0001.desc + } + #desc for the explorer contract type for differrent point of interests types + first_valid = { + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_martial } + desc = ep3_contract_event.0001.desc_special_buildings_martial + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_learning } + desc = ep3_contract_event.0001.desc_special_buildings_learning + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_religious } + desc = ep3_contract_event.0001.desc_special_buildings_religious + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_diplomatic } + desc = ep3_contract_event.0001.desc_special_buildings_diplomatic + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:grand_city } + desc = ep3_contract_event.0001.desc_grand_city + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_wonder } + desc = ep3_contract_event.0001.desc_special_buildings_wonder + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:special_buildings_economic } + desc = ep3_contract_event.0001.desc_special_buildings_economic + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:mausoleum_at_halicarnassus } + desc = ep3_contract_event.0001.desc_mausoleum_at_halicarnassus + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:lighthouse_of_alexandria } + desc = ep3_contract_event.0001.desc_lighthouse_of_alexandria + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:natural_feature } + desc = ep3_contract_event.0001.desc_natural_feature + } + triggered_desc = { + trigger = { scope:task_contract.var:travel_reason ?= flag:capitals } + desc = ep3_contract_event.0001.desc_capitals + } + } + first_valid = { + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + desc = ep3_contract_event.0001.desc_vip + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + desc = ep3_contract_event.0001.desc_child + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + desc = ep3_contract_event.0001.desc_explorer + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + desc = ep3_contract_event.0001.desc_artifact + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + desc = ep3_contract_event.0001.desc_gold + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + desc = ep3_contract_event.0001.desc_animal + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + desc = ep3_contract_event.0001.desc_construction + } + } + } + theme = landless_adventurer + override_background = { reference = terrain } + #task_contract_taker, you + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + animation = personality_honorable + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + animation = personality_compassionate + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + animation = interested_left + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + animation = personality_bold + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + animation = stunned + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + animation = love + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + animation = personality_rational + } + } + #character you have to escort, if exists + right_portrait = { + character = scope:right_portrait + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + animation = personality_rational + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + animation = clutching_toy + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + animation = eccentric + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + animation = personality_compassionate + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + animation = personality_compassionate + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + animation = personality_compassionate + } + triggered_animation = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + animation = personality_bold + } + } + #character giving you the contract, if it's not the chracter you have to escort + lower_right_portrait = { + trigger = { + NOR = { + scope:task_contract_object ?= scope:task_contract_target + scope:task_contract_object ?= scope:task_contract_employer + } + } + character = scope:task_contract_employer + } + #character you have to go to, if exists + lower_left_portrait = { + trigger = { + exists = scope:task_contract_target + scope:task_contract_target != scope:task_contract_employer + } + character = scope:task_contract_target + } + #artifact you have to escort, if exists + artifact = { + trigger = { exists = scope:escorted_artifact } + target = scope:escorted_artifact + position = lower_center_portrait + } + + immediate = { + set_contract_scopes_effect = yes + if = { + limit = { + exists = scope:task_contract_object + } + scope:task_contract_object = { + save_scope_as = right_portrait + } + } + else = { + scope:task_contract_employer = { + save_scope_as = right_portrait + } + } + } + + #take the contract and start the travel without domicile + option = { + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + text = ep3_contract_event.0001.vip + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + text = ep3_contract_event.0001.child + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + text = ep3_contract_event.0001.explorer + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + text = ep3_contract_event.0001.artifact + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + text = ep3_contract_event.0001.gold + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + text = ep3_contract_event.0001.animal + } + name = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + text = ep3_contract_event.0001.construction + } + scope:task_contract = { + switch = { + trigger = has_task_contract_type + #escorting a VIP + laamp_transport_vip = { + custom_tooltip = ep3_contract_event.0001.tt_vip + scope:task_contract_object = { + visit_court_of = root + add_character_flag = blocked_from_leaving + } + root = { + start_contract_travel_without_domicile = yes + } + } + #escorting a ward to guardian + laamp_transport_ward = { + custom_tooltip = ep3_contract_event.0001.tt_ward + scope:task_contract_object = { + visit_court_of = root + add_character_flag = blocked_from_leaving + } + root = { + start_contract_travel_without_domicile = yes + } + } + #escorting a random pool character to a random point of interest + laamp_transport_explorer = { + custom_tooltip = ep3_contract_event.0001.tt_explorer + scope:task_contract_object = { + if = { + limit = { + is_landed = no + } + visit_court_of = root + add_character_flag = blocked_from_leaving + } + } + root = { + start_contract_travel_without_domicile = yes + } + } + #escorting an artifact + laamp_transport_artifact = { + custom_tooltip = ep3_contract_event.0001.tt_artifact + scope:escorted_artifact = { + set_owner = root + set_variable = { + name = ungiftable + } + } + root = { + start_contract_travel_without_domicile = yes + } + } + #escorting a large sum of money + laamp_transport_gold = { + custom_tooltip = ep3_contract_event.0001.tt_gold + scope:task_contract_employer = { + pay_treasury_or_gold = { + target = root + value = scope:escorted_gold + } + } + root = { + start_contract_travel_without_domicile = yes + } + } + #escorting a dog or a cat + laamp_transport_animal = { + custom_tooltip = ep3_contract_event.0001.tt_animal + scope:task_contract_employer = { + if = { + limit = { + scope:escorted_story ?= { story_type = story_cycle_pet_dog } + } + transfer_dog_story_cycle_to_effect = { + CHARACTER = root + STORY = scope:escorted_story + } + } + else = { + transfer_cat_story_cycle_to_effect = { + CHARACTER = root + STORY = scope:escorted_story + } + } + } + root = { + start_contract_travel_without_domicile = yes + } + } + #delivering materials for holding construcion + laamp_construction_contract = { + custom_tooltip = ep3_contract_event.0001.tt_construction + root = { + start_contract_travel_without_domicile = yes + } + } + } + } + #AI should always try to complete the contract + ai_chance = { + base = 1 + } + } + #take the contract and start the travel with domicile + option = { + name = ep3_contract_event.0001.with_domicile + scope:task_contract = { + switch = { + trigger = has_task_contract_type + #escorting a VIP + laamp_transport_vip = { + custom_tooltip = ep3_contract_event.0001.tt_vip + scope:task_contract_object = { + visit_court_of = root + add_character_flag = blocked_from_leaving + } + root = { + start_contract_travel_with_domicile = yes + } + } + #escorting a ward to guardian + laamp_transport_ward = { + custom_tooltip = ep3_contract_event.0001.tt_ward + scope:task_contract_object = { + visit_court_of = root + add_character_flag = blocked_from_leaving + } + root = { + start_contract_travel_with_domicile = yes + } + } + #escorting a random pool character to a random point of interest + laamp_transport_explorer = { + custom_tooltip = ep3_contract_event.0001.tt_explorer + scope:task_contract_object = { + if = { + limit = { + is_landed = no + } + visit_court_of = root + add_character_flag = blocked_from_leaving + } + } + root = { + start_contract_travel_with_domicile = yes + } + } + #escorting an artifact + laamp_transport_artifact = { + custom_tooltip = ep3_contract_event.0001.tt_artifact + scope:escorted_artifact = { + set_owner = root + set_variable = { + name = ungiftable + } + } + root = { + start_contract_travel_with_domicile = yes + } + } + #escorting a large sum of money + laamp_transport_gold = { + custom_tooltip = ep3_contract_event.0001.tt_gold + scope:task_contract_employer = { + pay_treasury_or_gold = { + target = root + value = scope:escorted_gold + } + } + root = { + start_contract_travel_with_domicile = yes + } + } + #escorting a dog or a cat + laamp_transport_animal = { + custom_tooltip = ep3_contract_event.0001.tt_animal + scope:task_contract_employer = { + if = { + limit = { + scope:escorted_story ?= { story_type = story_cycle_pet_dog } + } + transfer_dog_story_cycle_to_effect = { + CHARACTER = root + STORY = scope:escorted_story + } + } + else = { + transfer_cat_story_cycle_to_effect = { + CHARACTER = root + STORY = scope:escorted_story + } + } + } + root = { + start_contract_travel_with_domicile = yes + } + } + #delivering materials for holding construcion + laamp_construction_contract = { + custom_tooltip = ep3_contract_event.0001.tt_construction + root = { + start_contract_travel_with_domicile = yes + } + } + } + } + custom_tooltip = ep3_contract_event.0001.with_domicile.tt + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +scripted_trigger 0002_is_applicable_contract_trigger = { + OR = { + has_task_contract_group = laamp_contracts_transport_group + #Treasure Map Contract + AND = { + root = { has_variable = ep3_laamp_decision_1000_is_excavating } + exists = var:contract_treasure_location + } + } +} + +#Event adding relevant characters to your travel entourage if you have an active transport contract +ep3_contract_event.0002 = { + hidden = yes + trigger = { + has_government = landless_adventurer_government + } + immediate = { + every_character_active_contract = { + limit = { + 0002_is_applicable_contract_trigger = yes + save_temporary_scope_as = temp_contract + #task_contract_taker ?= root + root.current_travel_plan = { + #Treasure Map Contract + trigger_if = { + limit = { + scope:temp_contract = { exists = var:contract_treasure_location } + } + OR = { + final_destination_province ?= scope:temp_contract.var:contract_treasure_location + next_destination_province = scope:temp_contract.var:contract_treasure_location + any_future_path_location = { + this = scope:temp_contract.var:contract_treasure_location + } + } + } + trigger_else = { + OR = { + final_destination_province ?= scope:temp_contract.var:task_contract_destination + next_destination_province = scope:temp_contract.var:task_contract_destination + any_future_path_location = { + this = scope:temp_contract.var:task_contract_destination + } + } + } + } + } + var:task_contract_object ?= { add_to_list = task_contract_companions } + #Treasure Map Contract, add the scraggly old employer + if = { + limit = { has_task_contract_type = laamp_treasure_map_contract } + task_contract_employer = { add_to_list = task_contract_companions } + } + } + every_courtier_or_guest = { + limit = { + is_travelling = no + } + add_to_list = task_contract_companions + } + every_in_list = { + list = task_contract_companions + root.current_travel_plan = { add_companion = prev } + } + } +} + +#Raid for Captives contract starting a war +ep3_contract_event.0003 = { + type = character_event + title = ep3_contract_event.0003.t + desc = ep3_contract_event.0003.desc + theme = war + #task_contract_taker, you + left_portrait = { + character = root + animation = personality_compassionate + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + } + + #take the contract and start raiding + option = { + name = ep3_contract_event.0003.a + start_war = { + cb = ep3_laamp_raid_contract_cb + target = scope:task_contract_target + } + random_character_war = { + limit = { + using_cb = ep3_laamp_raid_contract_cb + primary_attacker = root + primary_defender = scope:task_contract_target + } + save_scope_as = new_war + } + scope:task_contract = { + set_variable = { + name = task_contract_war + value = scope:new_war + } + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +#Raid for Captives - complete contract letter event, triggered in the cb on war end +ep3_contract_event.0004 = { + type = letter_event + sender = scope:task_contract_employer + opening = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract_outcome ?= flag:failure } + desc = ep3_contract_event.0004.opening_failure + } + desc = ep3_contract_event.0004.opening + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract_outcome ?= flag:failure } + desc = ep3_contract_event.0004.desc_failure + } + desc = ep3_contract_event.0004.desc + } + } + + immediate = { + if = { + limit = { + scope:task_contract_outcome ?= flag:failure + } + add_prestige = task_contract_failure_prestige_loss_full_value + reverse_add_opinion = { + opinion = -50 + modifier = hate_opinion + target = scope:task_contract_employer + } + } + else = { + scope:task_contract_employer = { + custom_tooltip = ep3_contract_event.0004.success + every_prisoner = { + limit = { + has_character_flag = captured_in_ep3_laamp_raid_contract_cb + } + #doing this here instead of in the war effects to show a neat list of the prisoners in the tooltip + add_opinion = { + modifier = abductor_opinion + target = root + years = 5 + } + root = { + if = { + limit = { NOT = { exists = local_var:temp_ransom } } + set_local_variable = { + name = temp_ransom + value = prev.ransom_cost + } + } + else = { + change_local_variable = { + name = temp_ransom + add = prev.ransom_cost + } + } + } + remove_character_flag = captured_in_ep3_laamp_raid_contract_cb + } + } + } + } + + option = { + name = { + trigger = { scope:task_contract_outcome ?= flag:failure } + text = ep3_contract_event.0004.b + } + name = { + trigger = { NOT = { exists = scope:task_contract_outcome } } + text = ep3_contract_event.0004.a + } + if = { + limit = { + scope:task_contract_outcome ?= flag:failure + } + } + else = { + add_gold = { + value = local_var:temp_ransom + if = { + limit = { + domicile = { has_domicile_parameter = camp_improved_mercenary_contract_rewards } + } + multiply = camp_improved_mercenary_contract_rewards_value + } + if = { + limit = { + has_perk = hard_rule_perk + } + multiply = adventurer_hard_rule_contract_rewards_value + } + } + if = { + limit = { + faith != scope:defender.faith + } + add_piety = minor_piety_gain + } + } + } +} + +#Treasure Hunting Contract - start event +ep3_contract_event.0005 = { + type = character_event + title = ep3_contract_event.0005.t + desc = ep3_contract_event.0005.desc + theme = travel + + left_portrait = { + character = root + animation = personality_compassionate + } + lower_right_portrait = { + character = scope:task_contract_employer + } + + immediate = { + } + + #go on a treasure hunting travel, opens decision to set target location + option = { + name = ep3_contract_event.0005.a + custom_tooltip = ep3_contract_event.0005.a_tt + decision:treasure_hunting_contract_decision = { + open_view_data = { + view = decision_detail + player = root + } + } + #AI should always try to complete the contract + ai_chance = { + base = 1 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +#Treasure Hunting Contract - event triggered when you reach a location chosen in the decision +ep3_contract_event.0006 = { + type = character_event + title = ep3_contract_event.0006.t + desc = { + desc = ep3_contract_event.0006.desc + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + desc = ep3_contract_event.0006.desc_locals_temple + } + triggered_desc = { + trigger = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + desc = ep3_contract_event.0006.desc_locals_city + } + triggered_desc = { + trigger = { + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + desc = ep3_contract_event.0006.desc_locals_castle + } + desc = ep3_contract_event.0006.desc_locals + } + } + theme = travel + left_portrait = { + character = root + animation = eavesdrop + } + right_portrait = { + character = scope:local_1 + animation = debating + } + lower_left_portrait = { + character = scope:local_ruler + } + lower_right_portrait = { + trigger = { exists = scope:local_2 } + character = scope:local_2 + } + #artifact you find + artifact = { + target = scope:newly_created_artifact + position = lower_center_portrait + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + reference = corridor_night + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + reference = market + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + reference = temple + } + override_background = { + trigger = { + scope:task_contract_destination = { + NOR = { + has_holding_type = castle_holding + has_holding_type = city_holding + has_holding_type = church_holding + } + } + } + reference = tavern + } + + trigger = { + any_character_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + var:task_contract_destination ?= root.location + } + } + + immediate = { + random_character_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + limit = { + var:task_contract_destination ?= root.location + } + save_scope_as = task_contract + } + scope:task_contract.var:task_contract_destination = { + save_scope_as = task_contract_destination + county.holder = { + save_scope_as = local_ruler + } + } + scope:task_contract.task_contract_employer = { + save_scope_as = inspiration_owner + save_scope_as = task_contract_employer + } + if = { + limit = { + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + if = { + limit = { + any_pool_character = { + province = scope:task_contract_destination + is_available_healthy_ai_adult = yes + } + } + random_pool_character = { + province = scope:task_contract_destination + limit = { + is_available_healthy_ai_adult = yes + } + save_scope_as = local_1 + } + } + else = { + create_character = { + template = fp1_trade_partner_priest + location = scope:task_contract_destination + culture = scope:task_contract_destination.county.culture + faith = scope:task_contract_destination.county.faith + #Set up the scope + save_scope_as = local_1 + } + } + inspiration_adventure_create_artifact_effect = { + OWNER = scope:local_1 + CREATOR = scope:local_1 + } + } + else_if = { + limit = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + if = { + limit = { + any_pool_character = { + province = scope:task_contract_destination + is_available_healthy_ai_adult = yes + } + } + random_pool_character = { + province = scope:task_contract_destination + limit = { + is_available_healthy_ai_adult = yes + } + save_scope_as = local_1 + } + } + else = { + create_character = { + template = merchant_template + location = scope:task_contract_destination + culture = scope:task_contract_destination.county.culture + faith = scope:task_contract_destination.county.faith + #Set up the scope + save_scope_as = local_1 + } + } + inspiration_adventure_create_artifact_effect = { + OWNER = scope:local_1 + CREATOR = scope:local_1 + } + } + else = { + if = { + limit = { + any_pool_character = { + province = scope:task_contract_destination + is_available_healthy_ai_adult = yes + } + } + random_pool_character = { + province = scope:task_contract_destination + limit = { + is_available_healthy_ai_adult = yes + } + save_scope_as = local_1 + } + } + else = { + create_character = { + template = fp3_tomb_raider + location = scope:task_contract_destination + culture = scope:task_contract_destination.county.culture + faith = scope:task_contract_destination.county.faith + #Set up the scope + save_scope_as = local_1 + } + } + if = { + limit = { + any_pool_character = { + province = scope:task_contract_destination + is_available_healthy_ai_adult = yes + this != scope:local_1 + } + } + random_pool_character = { + province = scope:task_contract_destination + limit = { + is_available_healthy_ai_adult = yes + this != scope:local_1 + } + save_scope_as = local_2 + } + } + else = { + create_character = { + template = fp3_tomb_raider + location = scope:task_contract_destination + culture = scope:task_contract_destination.county.culture + faith = scope:task_contract_destination.county.faith + #Set up the scope + save_scope_as = local_2 + } + } + if = { + limit = { + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + inspiration_adventure_create_artifact_effect = { + OWNER = scope:local_ruler + CREATOR = scope:local_ruler + } + } + else = { + inspiration_adventure_create_artifact_effect = { + OWNER = scope:local_1 + CREATOR = scope:local_1 + } + } + } + #Don't need no "Lost Court Artifact to [...]" errors for this + scope:newly_created_artifact = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 2 + } + } + } + + #go with the locals - castle only + option = { + name = ep3_contract_event.0006.castle + trigger = { + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + reason = castle_holding + duel = { + skills = { diplomacy intrigue } + target = scope:local_1 + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 50 + } + desc = ep3_contract_event.0006.castle_won + save_scope_value_as = { + name = success_reason + value = flag:castle + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + min = -49 + } + modifier = { + exists = scope:local_2 + add = scope:local_2.intrigue + add = scope:local_2.diplomacy + } + desc = ep3_contract_event.0006.castle_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.castle_lost + desc = ep3_contract_event.0006.castle_lost_desc + left_icon = root + right_icon = scope:local_1 + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #prove you're pious - church only + option = { + name = ep3_contract_event.0006.church + trigger = { + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + reason = church_holding + random_list = { + 4 = { + modifier = { + add = root.piety_level + } + modifier = { + add = root.num_virtuous_traits + } + modifier = { + add = { + value = root.num_sinful_traits + multiply = -1 + } + } + modifier = { + add = root.learning + } + desc = ep3_contract_event.0006.church_won + save_scope_value_as = { + name = success_reason + value = flag:church + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + 4 = { + modifier = { + add = scope:local_1.piety_level + } + modifier = { + add = scope:local_1.num_virtuous_traits + } + modifier = { + add = { + value = scope:local_1.num_sinful_traits + multiply = -1 + } + } + desc = ep3_contract_event.0006.church_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.church_lost + desc = ep3_contract_event.0006.church_lost_desc + left_icon = root + right_icon = scope:local_1 + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + } + } + } + stress_impact = { + cynical = minor_stress_impact_gain + zealous = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #barter for lower price - city only + option = { + name = ep3_contract_event.0006.city + trigger = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + reason = city_holding + random_list = { + 1 = { + modifier = { + add = root.prestige_level + } + modifier = { + add = root.dynasty.dynasty_prestige_level + } + modifier = { + add = root.stewardship + } + desc = ep3_contract_event.0006.city_won + save_scope_value_as = { + name = success_reason + value = flag:city + } + pay_short_term_gold = { + target = scope:local_1 + gold = minor_gold_value + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + 1 = { + modifier = { + add = scope:local_1.prestige_level + } + modifier = { + add = scope:local_1.dynasty.dynasty_prestige_level + } + desc = ep3_contract_event.0006.city_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.city_lost + desc = ep3_contract_event.0006.city_lost_desc + left_icon = root + right_icon = scope:local_1 + } + } + } + stress_impact = { + generous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + modifier = { + factor = 0 + short_term_gold < minor_gold_value + } + } + } + #try to buy it - always + option = { + name = ep3_contract_event.0006.buy + if = { + limit = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + pay_short_term_gold = { + target = scope:local_1 + gold = major_gold_value + } + save_scope_value_as = { + name = success_reason + value = flag:buy + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + else = { + duel = { + skill = stewardship + target = scope:local_1 + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + max = 50 + } + desc = ep3_contract_event.0006.buy_won + pay_short_term_gold = { + target = scope:local_1 + gold = major_gold_value + } + save_scope_value_as = { + name = success_reason + value = flag:buy + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + min = -49 + } + modifier = { + exists = scope:local_2 + add = scope:local_2.stewardship + } + desc = ep3_contract_event.0006.buy_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.buy_lost + desc = ep3_contract_event.0006.buy_lost_desc + left_icon = root + right_icon = scope:local_1 + pay_short_term_gold = { + target = scope:local_1 + gold = major_gold_value + } + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + } + } + } + } + stress_impact = { + greedy = minor_stress_impact_gain + generous = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + modifier = { + factor = 0 + short_term_gold < major_gold_value + } + } + } + #intimidate them - freebooters and swords-for-hire only + option = { + name = ep3_contract_event.0006.intimidate + trigger = { + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_mercenaries + } + } + reason = purpose_brigands_and_mercenaries + duel = { + skills = { intrigue prowess } + target = scope:local_1 + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 50 + } + desc = ep3_contract_event.0006.intimidate_won + save_scope_value_as = { + name = success_reason + value = flag:intimidate + } + trigger_event = ep3_contract_event.0007 + show_as_tooltip = { + scope:newly_created_artifact = { + set_owner = root + } + } + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + min = -49 + } + modifier = { + exists = scope:local_2 + add = scope:local_2.intrigue + add = scope:local_2.prowess + } + desc = ep3_contract_event.0006.intimidate_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.intimidate_lost + desc = ep3_contract_event.0006.intimidate_lost_desc + left_icon = root + right_icon = scope:local_1 + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + wrathful = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #hit the local library - scholars and legitimists only + option = { + name = ep3_contract_event.0006.library + trigger = { + OR = { + has_realm_law = camp_purpose_scholars + has_realm_law = camp_purpose_legitimists + } + } + reason = purpose_legitimists_and_scholars + duel = { + skill = learning + value = decent_skill_rating + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 50 + } + desc = ep3_contract_event.0006.library_won + save_scope_value_as = { + name = success_reason + value = flag:library + } + hidden_effect = { + destroy_artifact = scope:newly_created_artifact + } + custom_tooltip = ep3_contract_event.0006.library.tt + trigger_event = ep3_contract_event.0007 + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_contract_event.0006.library_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.library_lost + desc = ep3_contract_event.0006.library_lost_desc + left_icon = root + hidden_effect = { + if = { + limit = { + exists = scope:newly_created_artifact + } + destroy_artifact = scope:newly_created_artifact + } + } + } + } + } + stress_impact = { + impatient = minor_stress_impact_gain + patient = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #go on your own - wanderers and explorers only + option = { + name = ep3_contract_event.0006.explore + trigger = { + OR = { + has_realm_law = camp_purpose_wanderers + has_realm_law = camp_purpose_explorers + } + } + reason = purpose_explorers_and_wanderers + duel = { + skills = { diplomacy martial } + value = decent_skill_rating + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 50 + } + desc = ep3_contract_event.0006.explore_won + save_scope_value_as = { + name = success_reason + value = flag:explore + } + hidden_effect = { + destroy_artifact = scope:newly_created_artifact + } + custom_tooltip = ep3_contract_event.0006.explore.tt + trigger_event = ep3_contract_event.0007 + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_contract_event.0006.explore_lost_desc + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0006.explore_lost + desc = ep3_contract_event.0006.explore_lost_desc + left_icon = root + hidden_effect = { + if = { + limit = { + exists = scope:newly_created_artifact + } + destroy_artifact = scope:newly_created_artifact + } + } + } + } + } + stress_impact = { + impatient = minor_stress_impact_gain + patient = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } +} + +scripted_effect change_treasure_type = { + scope:newly_created_artifact = { + if = { + limit = { + OR = { + exists = scope:cupboard + exists = scope:ark_covenant + exists = scope:throne + exists = scope:necklace_artifact + exists = scope:armor_artifact + exists = scope:weapon_artifact + exists = scope:regalia_artifact + #exists = scope:box + #exists = scope:skull + #exists = scope:goblet + #exists = scope:animal_hide_size + exists = scope:tapestry + } + } + #do nothing, as they should already have the correct type + } + else_if = { + limit = { + OR = { + has_variable = ascalon + has_variable = staff_kakusandha + has_variable = zomorrodnegar + has_variable = aruval + has_variable = sword_cid + has_variable = sword_of_muhammad + has_variable = mmaagha_kamalu + has_variable = sword_attila + } + } + reforge_artifact = { type = regalia } + } + else_if = { + limit = { has_variable = iron_crown } + reforge_artifact = { type = helmet } + } + else_if = { + limit = { artifact_type = pedestal } + reforge_artifact = { type = miscellaneous } + } + set_owner = root + } +} + +#Treasure Hunting Contract - event triggered if you find an artifact in previous event ep3_contract_event.0006 to decide if you want to keep the artifact for yourself or complete the contract +ep3_contract_event.0007 = { + type = character_event + title = ep3_contract_event.0007.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:success_reason = flag:castle + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + desc = ep3_contract_event.0007.desc_castle_castle + } + triggered_desc = { + trigger = { + scope:success_reason = flag:church + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + desc = ep3_contract_event.0007.desc_church_church + } + triggered_desc = { + trigger = { + scope:success_reason = flag:city + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + desc = ep3_contract_event.0007.desc_city_city + } + triggered_desc = { + trigger = { + scope:success_reason = flag:buy + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + desc = ep3_contract_event.0007.desc_castle_buy + } + triggered_desc = { + trigger = { + scope:success_reason = flag:buy + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + desc = ep3_contract_event.0007.desc_city_buy + } + triggered_desc = { + trigger = { + scope:success_reason = flag:buy + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + desc = ep3_contract_event.0007.desc_church_buy + } + triggered_desc = { + trigger = { + scope:success_reason = flag:intimidate + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + desc = ep3_contract_event.0007.desc_castle_intimidate + } + triggered_desc = { + trigger = { + scope:success_reason = flag:intimidate + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + desc = ep3_contract_event.0007.desc_city_intimidate + } + triggered_desc = { + trigger = { + scope:success_reason = flag:intimidate + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + desc = ep3_contract_event.0007.desc_church_intimidate + } + triggered_desc = { + trigger = { scope:success_reason = flag:library } + desc = ep3_contract_event.0007.desc_library + } + triggered_desc = { + trigger = { scope:success_reason = flag:explore } + desc = ep3_contract_event.0007.desc_explore + } + } + } + theme = travel + + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:local_1 + trigger = { + NOR = { + scope:success_reason = flag:library + scope:success_reason = flag:explore + } + } + animation = rage + } + lower_left_portrait = { + character = scope:task_contract_employer + } + lower_right_portrait = { + trigger = { + exists = scope:local_2 + NOR = { + scope:success_reason = flag:library + scope:success_reason = flag:explore + } + } + character = scope:local_2 + } + #artifact you find + artifact = { + target = scope:newly_created_artifact + position = lower_center_portrait + } + + override_background = { + trigger = { + OR = { + scope:success_reason = flag:library + scope:success_reason = flag:explore + } + } + reference = wilderness + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = castle_holding + } + } + reference = corridor_night + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + reference = market + } + override_background = { + trigger = { + scope:task_contract_destination = { + has_holding_type = church_holding + } + } + reference = temple + } + override_background = { + trigger = { + scope:task_contract_destination = { + NOR = { + has_holding_type = castle_holding + has_holding_type = city_holding + has_holding_type = church_holding + } + } + } + reference = tavern + } + + immediate = { + random_courtier = { + limit = { + is_adult = yes + } + save_scope_as = follower + } + if = { + limit = { + OR = { + scope:success_reason = flag:library + scope:success_reason = flag:explore + } + } + inspiration_adventure_create_artifact_effect = { + OWNER = root + CREATOR = root + } + add_gold = major_gold_value + } + if = { + limit = { + scope:success_reason = flag:city + } + change_treasure_type = yes + scope:newly_created_artifact = { + set_owner = root + } + inspiration_adventure_create_artifact_effect = { + OWNER = scope:local_1 + CREATOR = scope:local_1 + } + } + } + + #give it back to locals so they join you + option = { + name = ep3_contract_event.0007.castle + trigger = { + scope:success_reason = flag:castle + } + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + add_courtier = scope:local_1 + add_courtier = scope:local_2 + + stress_impact = { + greedy = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + } + #AI should always complete the contract + ai_chance = { + base = 0 + } + } + #pay them more so they join you + option = { + name = ep3_contract_event.0007.castle_buy + trigger = { + scope:success_reason = flag:buy + scope:task_contract_destination = { + has_holding_type = city_holding + } + } + pay_short_term_gold = { + target = scope:local_2 + gold = major_gold_value + } + add_courtier = scope:local_1 + add_courtier = scope:local_2 + + stress_impact = { + greedy = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + } + #AI should always complete the contract + ai_chance = { + base = 0 + } + } + #Buy everything for yourself + option = { + name = ep3_contract_event.0007.city_city + trigger = { + scope:success_reason = flag:city + } + pay_short_term_gold = { + target = scope:local_1 + gold = major_gold_value + } + change_treasure_type = yes + scope:newly_created_artifact = { + set_owner = scope:local_1 + } + + stress_impact = { + content = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + #AI should always complete the contract + ai_chance = { + base = 0 + } + } + #after all, why wouldn't I take it for myself? + option = { + name = ep3_contract_event.0007.a + if = { + limit = { + NOT = { scope:success_reason = flag:city } + } + change_treasure_type = yes + } + if = { + limit = { + scope:success_reason = flag:castle + } + set_relation_rival = { + target = scope:local_1 + reason = rival_stole_artifact + } + set_relation_rival = { + target = scope:local_2 + reason = rival_stole_artifact + } + } + + stress_impact = { + content = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + #AI should always complete the contract + ai_chance = { + base = 0 + } + } + #give it back to task_contract_employer to complete the contract + option = { + name = ep3_contract_event.0007.b + scope:newly_created_artifact = { + set_owner = scope:task_contract_employer + } + scope:task_contract = { + complete_task_contract = success_standard + } + if = { + limit = { + scope:success_reason = flag:castle + } + set_relation_rival = { + target = scope:local_1 + reason = rival_stole_artifact + } + set_relation_rival = { + target = scope:local_2 + reason = rival_stole_artifact + } + } + #AI should always complete the contract + ai_chance = { + base = 10 + } + } + after = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:local_ruler } + scope:success_reason = flag:castle + } + progress_towards_rival_effect = { + REASON = rival_stole_artifact + CHARACTER = scope:local_ruler + OPINION = default_rival_opinion + } + } + } +} + +#Join war contract - joining the war +ep3_contract_event.0008 = { + type = character_event + title = ep3_contract_event.0008.t + desc = ep3_contract_event.0008.desc + theme = war + #task_contract_taker, you + left_portrait = { + character = root + animation = inspect_weapon + } + right_portrait = { + character = scope:commander + animation = personality_callous + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + random_knight = { + save_scope_as = commander + } + } + scope:commander = { + add_character_flag = need_military_outfit + } + } + + #take the contract and join the war + option = { + name = ep3_contract_event.0008.a + highlight_portrait = scope:task_contract_employer + scope:task_contract_war = { + hidden_effect = { set_called_to = root } + if = { + limit = { + is_attacker = scope:task_contract_employer + } + add_attacker = root + } + else = { + add_defender = root + } + } + custom_tooltip = join_war_contract.employer_military_strength + custom_tooltip = join_war_contract.target_military_strength + #AI should always complete the contract + ai_chance = { + base = 10 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + after = { + scope:commander = { + remove_character_flag = need_military_outfit + } + } +} + +#Reclaim Artifact contract - start event +ep3_contract_event.0009 = { + type = character_event + title = ep3_contract_event.0009.t + desc = ep3_contract_event.0009.desc + theme = intrigue + #task_contract_taker, you + left_portrait = { + character = root + animation = scheme + } + #character giving you the contract + right_portrait = { + character = scope:task_contract_employer + animation = bribing + } + #character you have to steal from + lower_right_portrait = { + character = scope:task_contract_target + } + #artifact you have to steal + artifact = { + target = scope:task_contract_object + position = lower_center_portrait + } + + immediate = { + set_contract_scopes_effect = yes + } + #take the contract and start scheme to steal the artifact + option = { + name = ep3_contract_event.0009.a + custom_tooltip = ep3_contract_event.0009.open_start_stealing_back_artifact + if = { + limit = { + is_ai = yes + } + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = steal_back_artifact + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_thief + AGENT_2 = agent_thief + # Speed. + AGENT_3 = agent_infiltrator + AGENT_4 = agent_infiltrator + # Secrecy. + AGENT_5 = agent_lookout + } + scope:new_scheme ?= { + set_variable = { + name = target_artifact + value = scope:task_contract_object + } + } + } + else = { + open_interaction_window = { + interaction = start_stealing_back_artifact + actor = root + recipient = scope:task_contract_target + } + } + #AI should always complete the contract + ai_chance = { + base = 10 + } + } + #take the contract, but only unlock the steal artifact interaction + option = { + name = ep3_contract_event.0009.b + #AI should always complete the contract + ai_chance = { + base = 0 + } + } +} + +#transport contract completion event - triggered whenever you have an active transport contract and pass through a contract location +ep3_contract_event.0011 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + desc = ep3_contract_event.0011.t_vip + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + desc = ep3_contract_event.0011.t_child + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + desc = ep3_contract_event.0011.t_explorer + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + desc = ep3_contract_event.0011.t_artifact + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + desc = ep3_contract_event.0011.t_gold + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + desc = ep3_contract_event.0011.t_animal + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + desc = ep3_contract_event.0011.t_construction + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_vip } } + desc = ep3_contract_event.0011.desc_vip + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_ward } } + desc = { + desc = ep3_contract_event.0011.desc_ward + first_valid = { + triggered_desc = { + trigger = { scope:ward_too_old ?= yes } + desc = ep3_contract_event.0011.desc_ward_too_old + } + triggered_desc = { + trigger = { scope:ward_limit ?= yes } + desc = ep3_contract_event.0011.desc_ward_limit + } + desc = ep3_contract_event.0011.desc_ward_accepted + } + } + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_explorer } } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract.var:travel_reason = { + OR = { + flag:capitals ?= this + flag:grand_city ?= this + flag:mausoleum_at_halicarnassus ?= this + flag:lighthouse_of_alexandria ?= this + } + } + } + desc = ep3_contract_event.0011.desc_explorer_other + } + desc = ep3_contract_event.0011.desc_explorer_building + } + } + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_artifact } } + desc = ep3_contract_event.0011.desc_artifact + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_gold } } + desc = ep3_contract_event.0011.desc_gold + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_transport_animal } } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract.var:escorted_story ?= { story_type = story_cycle_pet_dog } + scope:hates_pets ?= yes + } + desc = ep3_contract_event.0011.desc_animal_dog_hate + } + triggered_desc = { + trigger = { scope:task_contract.var:escorted_story ?= { story_type = story_cycle_pet_dog } } + desc = ep3_contract_event.0011.desc_animal_dog_love + } + triggered_desc = { + trigger = { + scope:task_contract.var:escorted_story ?= { story_type = story_cycle_pet_cat } + scope:hates_pets ?= yes + } + desc = ep3_contract_event.0011.desc_animal_cat_hate + } + triggered_desc = { + trigger = { scope:task_contract.var:escorted_story ?= { story_type = story_cycle_pet_cat } } + desc = ep3_contract_event.0011.desc_animal_cat_love + } + } + } + } + triggered_desc = { + trigger = { scope:task_contract = { has_task_contract_type = laamp_construction_contract } } + desc = ep3_contract_event.0011.desc_construction + } + } + } + theme = landless_adventurer + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + trigger = { exists = scope:task_contract_target } + character = scope:task_contract_target + animation = personality_compassionate + } + lower_right_portrait = { + trigger = { + exists = scope:task_contract_employer + NOT = { scope:task_contract_target ?= scope:task_contract_employer } + } + character = scope:task_contract_employer + } + lower_left_portrait = { + trigger = { + exists = scope:task_contract_object + NOR = { + scope:task_contract_target = scope:task_contract_object + scope:task_contract_employer = scope:task_contract_object + } + } + character = scope:task_contract_object + } + artifact = { + trigger = { exists = scope:escorted_artifact } + target = scope:escorted_artifact + position = lower_center_portrait + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract = { + switch = { + trigger = has_task_contract_type + laamp_transport_vip = { + root.current_travel_plan = { remove_character = scope:task_contract_object } + scope:task_contract_object = { + remove_variable = blocked_from_leaving + visit_court_of = scope:task_contract_target + } + } + laamp_transport_ward = { + root.current_travel_plan = { remove_character = scope:task_contract_object } + if = { + limit = { + scope:task_contract_object = { + is_adult = yes + } + } + save_scope_value_as = { + name = ward_too_old + value = yes + } + } + else_if = { + limit = { + scope:task_contract_target = { + num_of_relation_ward > 1 + } + } + save_scope_value_as = { + name = ward_limit + value = yes + } + } + else = { + scope:task_contract_object = { + if = { + limit = { + any_relation = { + type = guardian + } + } + random_relation = { + type = guardian + save_scope_as = old_guardian + } + remove_guardian_effect = { + GUARDIAN = scope:old_guardian + WARD = scope:task_contract_object + RETURN_WARD = no + HIDE_OPINION = no + } + } + remove_variable = blocked_from_leaving + visit_court_of = scope:task_contract_target + set_relation_guardian = scope:task_contract_target + save_scope_as = ward + scope:task_contract_target = { + save_scope_as = guardian + } + scope:task_contract_employer = { + save_scope_as = ward_liege + } + trigger_event = { on_action = on_ward_arrive_at_guardian } + } + } + scope:task_contract_object = { + progress_towards_friend_effect = { + REASON = friend_random_fallback + CHARACTER = root + OPINION = default_friend_opinion + } + } + } + laamp_transport_explorer = { + root.current_travel_plan = { remove_character = scope:task_contract_object } + scope:task_contract_object = { + remove_variable = blocked_from_leaving + save_scope_as = task_contract_target + } + } + laamp_transport_artifact = { + scope:escorted_artifact = { + set_owner = scope:task_contract_target + set_variable = { + name = ungiftable + } + } + } + laamp_transport_gold = { + root = { + pay_treasury_or_gold = { + target = scope:task_contract_target + value = scope:task_contract.var:escorted_gold + } + } + scope:task_contract_employer = { + if = { + limit = { + can_add_hook = { + target = scope:task_contract_target + type = indebted_hook + } + } + add_hook = { + target = scope:task_contract_target + type = indebted_hook + } + } + } + } + laamp_transport_animal = { + #give them the whole story cycle for pets + if = { + limit = { + scope:escorted_story = { story_type = story_cycle_pet_dog } + } + root = { + transfer_dog_story_cycle_to_effect = { + CHARACTER = scope:task_contract_target + STORY = scope:escorted_story + } + } + } + else = { + root = { + transfer_cat_story_cycle_to_effect = { + CHARACTER = scope:task_contract_target + STORY = scope:escorted_story + } + } + scope:escorted_story = { + set_variable = { + name = gifted_pet_story + value = scope:task_contract_employer + } + } + } + scope:task_contract_target = { + if = { + limit = { #"What am I supposed to do with this??" + OR = { + has_personality_malicious_trigger = yes + AND = { + scope:escorted_story = { story_type = story_cycle_pet_cat } + has_character_modifier = cat_story_allergy_modifier + } + AND = { + scope:escorted_story = { story_type = story_cycle_pet_dog } + faith = { religion_tag = islam_religion } + } + } + } + save_scope_value_as = { + name = hates_pets + value = yes + } + add_opinion = { + target = scope:task_contract_employer + modifier = dumped_animal_on_me_opinion + } + } + else = { + add_opinion = { + target = scope:task_contract_employer + modifier = grateful_opinion + opinion = 15 + } + } + } + } + laamp_construction_contract = { + scope:task_contract_destination = { + county = { + add_county_modifier = { + modifier = massive_construction_efforts_modifier + years = 5 + } + } + } + } + } + } + } + + option = { + name = ep3_contract_event.0011.a + trigger = { + scope:task_contract = { + has_task_contract_type = laamp_construction_contract + } + } + add_character_modifier = ep3_construction_contract_modifier + custom_tooltip = ep3_contract_event.0011.construction_invalidation + show_as_tooltip = { + custom_tooltip = ep3_contract_event.0011.construction_reward + scope:task_contract = { complete_task_contract = success_critical } + } + if = { + limit = { + current_travel_plan ?= { + is_travel_with_domicile = no + } + } + current_travel_plan ?= { + abort_travel_plan = yes + } + save_scope_value_as = { + name = provision_to_gold_conversion_value + value = { + value = root.domicile.provision_cost_to_owner + add = root.domicile.provisions + } + } + if = { + limit = { + scope:provision_to_gold_conversion_value < 0 + } + domicile = { + change_provisions = { + value = 0 + subtract = root.domicile.provisions + } + } + add_gold = { + value = scope:provision_to_gold_conversion_value + multiply = 0.1 + } + } + else = { + domicile = { + change_provisions = root.domicile.provision_cost_to_owner + } + } + } + #AI should have a small chance to move the domicile + ai_chance = { + base = 2 + } + } + + option = { + name = ep3_contract_event.0011.b + trigger = { + scope:task_contract = { + has_task_contract_type = laamp_transport_explorer + task_contract_employer = { + is_landed = no + } + } + } + add_courtier = scope:task_contract_object + current_travel_plan = { + add_companion = scope:task_contract_object + } + #AI should be willing to take more people, as it's probably their best bet to get them + ai_chance = { + base = 20 + } + } + + option = { + name = ep3_contract_event.0011.c + trigger = { scope:ward_limit ?= yes } + duel = { + skill = diplomacy + value = scope:task_contract_target.diplomacy + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:task_contract_target = { + random_relation = { + type = ward + save_scope_as = current_ward + } + remove_guardian_effect = { + GUARDIAN = scope:task_contract_target + WARD = scope:current_ward + RETURN_WARD = yes + HIDE_OPINION = yes + } + } + scope:task_contract_object = { + remove_variable = blocked_from_leaving + visit_court_of = scope:task_contract.var:task_contract_target + set_relation_guardian = scope:task_contract.var:task_contract_target + save_scope_as = ward + scope:task_contract.var:task_contract_target = { + save_scope_as = guardian + } + scope:task_contract.var:task_contract_employer = { + save_scope_as = ward_liege + } + trigger_event = { on_action = on_ward_arrive_at_guardian } + } + save_scope_value_as = { + name = ward_limit + value = no + } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + scope:task_contract_target = { + add_opinion = { + target = root + modifier = insulted_opinion + opinion = -20 + } + } + } + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + option = { + name = { + trigger = { + any_task_contract = { + save_temporary_scope_as = temp_contract + task_contract_taker ?= { + this = root + } + root.current_travel_plan = { + any_future_path_location = { + this = scope:temp_contract.task_contract_destination + } + } + } + } + text = ep3_contract_event.0011.d_continue + } + name = { + trigger = { + always = yes + } + text = ep3_contract_event.0011.d_end + } + if = { + limit = { + scope:task_contract = { + has_task_contract_type = laamp_construction_contract + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + #AI should always complete the contract + ai_chance = { + base = 1 + modifier = { + add = 1000 + #AI should keep going if other contracts are on the travel path + any_task_contract = { + save_temporary_scope_as = temp_contract + task_contract_taker ?= { + this = root + } + root.current_travel_plan = { + any_future_path_location = { + this = scope:temp_contract.task_contract_destination + } + } + } + } + } + } + + after = { + scope:task_contract = { + switch = { + trigger = has_task_contract_type + laamp_transport_vip = { + if = { + limit = { + var:task_contract_object ?= { + is_alive = no + } + } + complete_task_contract = failure_standard + } + else_if = { + limit = { + time_since_contract_taken > 360 + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = success_critical + } + } + laamp_transport_artifact = { + if = { + limit = { + OR = { + NOT = { exists = scope:task_contract.var:escorted_artifact } + scope:task_contract.var:escorted_artifact ?= { + artifact_durability < 1 + } + } + } + complete_task_contract = transport_destroyed + } + else_if = { + limit = { + time_since_contract_taken > 360 + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = success_critical + } + } + laamp_transport_gold = { + complete_task_contract = success_standard + } + laamp_transport_ward = { + if = { + limit = { + OR = { + scope:ward_limit ?= yes + scope:ward_too_old ?= yes + } + } + complete_task_contract = failure_standard + } + else = { + complete_task_contract = success_standard + } + } + laamp_transport_explorer = { + if = { + limit = { + time_since_contract_taken > 360 + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = success_critical + } + } + laamp_transport_animal = { + complete_task_contract = success_standard + } + } + } + } +} + +#transport contract invalidated - triggered whenever a transport contract is invalidated for any reason +#on_invalidation has to specify scope:task_contract_invalidation_reason +ep3_contract_event.0012 = { + type = letter_event + opening = { + triggered_desc = { + trigger = { + OR = { + scope:task_contract_invalidation_reason = flag:escortee_dead + scope:task_contract_invalidation_reason = flag:pet_dead + } + } + desc = ep3_contract_event.0012.opening_angry + } + triggered_desc = { + trigger = { + OR = { + scope:task_contract_invalidation_reason = flag:employer_dead + scope:task_contract_invalidation_reason = flag:target_dead + scope:task_contract_invalidation_reason = flag:prisoner_free + scope:task_contract_invalidation_reason = flag:not_vassal + scope:task_contract_invalidation_reason = flag:unlanded_employer_is_imprisoned + scope:task_contract_invalidation_reason = flag:faction_disbanded + } + } + desc = ep3_contract_event.0012.opening + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:employer_dead } + desc = ep3_contract_event.0012.desc_employer_dead + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:target_dead } + desc = ep3_contract_event.0012.desc_target_dead + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:escortee_dead } + desc = ep3_contract_event.0012.desc_escortee_dead + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:pet_dead } + desc = ep3_contract_event.0012.desc_pet_dead + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:prisoner_free } + desc = ep3_contract_event.0012.desc_prisoner_free + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:not_vassal } + desc = ep3_contract_event.0012.desc_not_vassal + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:unlanded_employer_is_imprisoned } + desc = ep3_contract_event.0012.desc_unlanded_employer_is_imprisoned + } + triggered_desc = { + trigger = { scope:task_contract_invalidation_reason = flag:faction_disbanded } + desc = ep3_contract_event.0012.desc_faction_disbanded + } + } + } + sender = scope:sender + immediate = { + if = { + limit = { + exists = current_travel_plan + NOT = { exists = scope:travel_destination } + } + current_travel_plan.final_destination_province = { + save_scope_as = travel_destination + } + } + #For those with heirs + if = { + limit = { exists = scope:employer_heir } + scope:employer_heir = { save_scope_as = sender } + } + #Or just the employer, straight up + else = { + scope:task_contract_employer = { save_scope_as = sender } + } + #Remove the treasure map + if = { + limit = { + var:invalidated_task_contract_type = flag:laamp_treasure_map_contract + } + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + hidden_effect = { destroy_artifact = this } + } + #Remove the employer from your camp + if = { + limit = { + scope:task_contract_employer = { is_courtier_of = root } + } + remove_courtier_or_guest = scope:task_contract_employer + } + #Mysterious + custom_tooltip = treasure_map_disappeared.tt + } + #stuff that would be nice to see in tooltip, but is already executed in on_invalidation + show_as_tooltip = { + if = { + limit = { + scope:task_contract_object ?= { is_alive = yes } + } + scope:task_contract_object = { return_to_court = yes } + } + } + switch = { + trigger = scope:task_contract_invalidation_reason + #employer or target died, get gold compensation + flag:employer_dead = { add_gold = task_contract_invalidated_gold_gain_value } + flag:target_dead = { add_gold = task_contract_invalidated_gold_gain_value } + #character or pet you were suppose to escort died + flag:escortee_dead = { + add_prestige = task_contract_failure_prestige_loss_full_value + scope:task_contract_employer = { + progress_towards_rival_effect = { + REASON = rival_escortee_died + CHARACTER = root + OPINION = default_rival_opinion + } + } + } + flag:pet_dead = { + add_prestige = task_contract_failure_prestige_loss_full_value + scope:task_contract_employer = { + progress_towards_rival_effect = { + REASON = rival_escortee_died + CHARACTER = root + OPINION = default_rival_opinion + } + } + } + flag:prisoner_free = { add_gold = task_contract_invalidated_gold_gain_value } + flag:unlanded_employer_is_imprisoned = { + #Nothing for you. They're unlanded. + } + flag:not_vassal = { + add_gold = task_contract_invalidated_gold_gain_value + } + flag:faction_disbanded = { + add_gold = task_contract_invalidated_gold_gain_value + } + } + } + #Let's head home + option = { + name = { + trigger = { + OR = { + scope:task_contract_invalidation_reason = flag:employer_dead + scope:task_contract_invalidation_reason = flag:target_dead + scope:task_contract_invalidation_reason = flag:prisoner_free + scope:task_contract_invalidation_reason = flag:not_vassal + scope:task_contract_invalidation_reason = flag:faction_disbanded + } + } + text = ep3_contract_event.0012.a + } + name = { + trigger = { + OR = { + scope:task_contract_invalidation_reason = flag:escortee_dead + scope:task_contract_invalidation_reason = flag:pet_dead + scope:task_contract_invalidation_reason = flag:unlanded_employer_is_imprisoned + } + } + text = ep3_contract_event.0012.b + } + return_home = yes + ai_chance = { + base = 10 + } + } + #Keep going + option = { + name = ep3_contract_event.0012.c + trigger = { exists = scope:travel_destination } + ai_chance = { + base = 0 + } + } + after = { + remove_variable = invalidated_task_contract_type + } +} + +#Join war contract success/failure = triggered when war ends in war_on_actions +ep3_contract_event.0013 = { + type = letter_event + sender = scope:task_contract_employer + opening = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract_reward = flag:success_standard } + desc = ep3_contract_event.0013.opening_success + } + triggered_desc = { + trigger = { scope:task_contract_reward = flag:failure_standard } + desc = ep3_contract_event.0013.opening_failure + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:task_contract_reward = flag:success_standard } + desc = ep3_contract_event.0013.desc_success + } + triggered_desc = { + trigger = { scope:task_contract_reward = flag:failure_standard } + desc = ep3_contract_event.0013.desc_failure + } + } + } + + immediate = { + #save scopes for ep3_hire_laamp_mercs_payment_value scripted value to work + save_scope_as = laamp_temp + scope:task_contract_employer = { + save_scope_as = employer + } + save_scope_value_as = { + name = war_contribution_value + value = "scope:war.war_contribution(scope:laamp_temp)" + } + } + option = { + name = ep3_contract_event.0013.a + trigger = { scope:task_contract_reward = flag:success_standard } + scope:task_contract_employer = { + pay_treasury_or_gold = { + target = scope:task_contract_taker + value = scope:laamp_temp.ep3_hire_laamp_mercs_payment_value + } + } + scope:laamp_temp = { + if = { + limit = { + faith != scope:task_contract.var:task_contract_target.faith + } + add_piety = { + value = "scope:war.war_contribution(scope:laamp_temp)" + divide = 100 + min = minor_piety_gain + max = massive_piety_gain + } + } + } + ai_chance = { + base = 1 + } + } + option = { + name = ep3_contract_event.0013.b + trigger = { scope:task_contract_reward = flag:failure_standard } + + ai_chance = { + base = 1 + } + } +} + +#Protect Heritage - start event to help getting a title revocation rights vassal contract +ep3_contract_event.0020 = { + type = character_event + title = ep3_contract_event.0020.t + desc = ep3_contract_event.0020.desc + theme = intrigue + #contract_taker, you + left_portrait = { + character = root + animation = personality_compassionate + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + } + + #use hook + option = { + name = ep3_contract_event.0020.a + trigger = { + has_hook = scope:task_contract_target + } + show_as_unavailable = { + NOT = { has_hook = scope:task_contract_target } + } + reason = hook + remove_hook = { target = scope:task_contract_target } + scope:task_contract_employer = { + vassal_contract_set_obligation_level = { + type = title_revocation_rights + level = 1 + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + #intrigue + option = { + name = ep3_contract_event.0020.b + trigger = { + OR = { + has_realm_law = camp_purpose_wanderers + has_realm_law = camp_purpose_explorers + } + } + reason = purpose_explorers_and_wanderers + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_intrigue_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_thug + AGENT_2 = agent_shill + AGENT_3 = agent_wrangler + # Speed. + AGENT_4 = agent_infiltrator + AGENT_5 = agent_socialite + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0020.agents_intrigue + custom_tooltip = ep3_contract_event.0020.tt + } + #martial + option = { + name = ep3_contract_event.0020.c + trigger = { + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_mercenaries + } + } + reason = purpose_brigands_and_mercenaries + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_martial_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_muscle + AGENT_2 = agent_thug + AGENT_3 = agent_bodyguard + # Speed. + AGENT_4 = agent_footpad + AGENT_5 = agent_tracker + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0020.agents_martial + custom_tooltip = ep3_contract_event.0020.tt + } + #learning + option = { + name = ep3_contract_event.0020.d + trigger = { + OR = { + has_realm_law = camp_purpose_scholars + has_realm_law = camp_purpose_legitimists + } + } + reason = purpose_legitimists_and_scholars + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_learning_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_bailiff + AGENT_2 = agent_scribe + AGENT_3 = agent_diplomat + # Speed. + AGENT_4 = agent_theologian + AGENT_5 = agent_justiciar_speed + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0020.agents_learning + custom_tooltip = ep3_contract_event.0020.tt + } + #diplomacy - always + option = { + name = ep3_contract_event.0020.e + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_diplomacy_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_diplomat + AGENT_2 = agent_shill + AGENT_3 = agent_scribe + # Speed. + AGENT_4 = agent_socialite + AGENT_5 = agent_herald + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0020.agents_diplomacy + custom_tooltip = ep3_contract_event.0020.tt + } +} + +#Reward the Faithful - start event to help getting a religious rights vassal contract +ep3_contract_event.0021 = { + type = character_event + title = ep3_contract_event.0021.t + desc = ep3_contract_event.0021.desc + theme = intrigue + #contract_taker, you + left_portrait = { + character = root + animation = personality_compassionate + } + #character giving you the contract + right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_right_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + } + + #use hook + option = { + name = ep3_contract_event.0021.a + trigger = { + has_hook = scope:task_contract_target + } + show_as_unavailable = { + NOT = { has_hook = scope:task_contract_target } + } + reason = hook + remove_hook = { target = scope:task_contract_target } + scope:task_contract_employer = { + vassal_contract_set_obligation_level = { + type = religious_rights + level = 1 + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + #intrigue + option = { + name = ep3_contract_event.0021.b + trigger = { + OR = { + has_realm_law = camp_purpose_wanderers + has_realm_law = camp_purpose_explorers + } + } + reason = purpose_explorers_and_wanderers + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_intrigue_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_thug + AGENT_2 = agent_shill + AGENT_3 = agent_wrangler + # Speed. + AGENT_4 = agent_infiltrator + AGENT_5 = agent_socialite + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0021.agents_intrigue + custom_tooltip = ep3_contract_event.0021.tt + } + #martial + option = { + name = ep3_contract_event.0021.c + trigger = { + OR = { + has_realm_law = camp_purpose_brigands + has_realm_law = camp_purpose_mercenaries + } + } + reason = purpose_brigands_and_mercenaries + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_martial_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_muscle + AGENT_2 = agent_thug + AGENT_3 = agent_bodyguard + # Speed. + AGENT_4 = agent_footpad + AGENT_5 = agent_tracker + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0021.agents_martial + custom_tooltip = ep3_contract_event.0021.tt + } + #learning + option = { + name = ep3_contract_event.0021.d + trigger = { + OR = { + has_realm_law = camp_purpose_scholars + has_realm_law = camp_purpose_legitimists + } + } + reason = purpose_legitimists_and_scholars + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_learning_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_bailiff + AGENT_2 = agent_scribe + AGENT_3 = agent_diplomat + # Speed. + AGENT_4 = agent_theologian + AGENT_5 = agent_justiciar_speed + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0021.agents_learning + custom_tooltip = ep3_contract_event.0021.tt + } + #diplomacy - always + option = { + name = ep3_contract_event.0021.e + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = protect_minority_vassal_contract_diplomacy_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_diplomat + AGENT_2 = agent_shill + AGENT_3 = agent_scribe + # Speed. + AGENT_4 = agent_socialite + AGENT_5 = agent_herald + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + trigger_event = laamp_extra_contract_schemes.0001 + custom_tooltip = ep3_contract_event.0021.agents_diplomacy + custom_tooltip = ep3_contract_event.0021.tt + } +} + +#Contract to scheme a Prison Break - starting event +ep3_contract_event.0030 = { + type = character_event + title = ep3_contract_event.0030.t + desc = ep3_contract_event.0030.desc + theme = intrigue + #contract_taker, you + left_portrait = { + character = root + animation = eyeroll + } + #contract_object, character to rescue from prison + right_portrait = { + character = scope:task_contract_employer + animation = bribing + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_object + } + #the imprisoner + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + } + + #use hook + option = { + name = ep3_contract_event.0030.a + trigger = { + has_hook = scope:task_contract_target + } + show_as_unavailable = { + NOT = { has_hook = scope:task_contract_target } + } + reason = hook + remove_hook = { target = scope:task_contract_target } + scope:task_contract = { + complete_task_contract = success_standard + } + #AI should always try to complete the contract + ai_chance = { + base = 100 + } + } + #prison break + option = { + name = ep3_contract_event.0030.b + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = laamp_prison_break_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_thief + AGENT_2 = agent_thug + # Speed. + AGENT_3 = agent_infiltrator + # Secrecy. + AGENT_4 = agent_lookout + AGENT_5 = agent_decoy + } + scope:task_contract.scheme = { + save_scope_as = scheme + } + custom_tooltip = ep3_contract_event.0030.agents + trigger_event = laamp_extra_contract_schemes.0011 + #AI should always try to complete the contract + ai_chance = { + base = 1 + } + } + #prison break + option = { + name = ep3_contract_event.0030.c + custom_tooltip = ep3_contract_event.0030.c.tt + reverse_add_opinion = { + modifier = angry_opinion + opinion = -10 + target = scope:task_contract_employer + } + + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +#Are we actually traveling towards the treasure now? +scripted_trigger 0040_traveling_towards_treasure_with_domicile_trigger = { + has_variable = ep3_laamp_decision_1000_is_excavating + current_travel_plan ?= { + is_travel_with_domicile = yes + OR = { + next_destination_province = scope:task_contract_destination + final_destination_province = scope:task_contract_destination + } + } +} + +#Your Treasure Map broke! +ep3_contract_event.0040 = { + type = character_event + title = ep3_contract_event.0040.t + desc = ep3_contract_event.0040.desc + theme = travel + left_portrait = { + character = root + animation = shock + } + immediate = { + #Save scopes + random_character_task_contract = { + task_contract_type = laamp_treasure_map_contract + save_scope_as = task_contract + } + scope:task_contract = { + task_contract_employer = { save_scope_as = task_contract_employer } + var:contract_treasure_location = { save_scope_as = treasure_map_contract_destination } + } + #Remove treasure map + destroy_artifact = scope:decayed_artifact + #Don't need you anymore, go away + #move_to_pool = scope:task_contract_employer + scope:task_contract_employer = { select_and_move_to_pool_effect = yes } + } + #Back home we go + option = { + name = { + trigger = { exists = current_travel_plan } + text = ep3_contract_event.0040.a_travel + } + name = ep3_contract_event.0040.a + #Haven't paid up? + if = { + limit = { 0040_traveling_towards_treasure_with_domicile_trigger = no } + #Then back home we go + return_home = yes + } + else = { + #Keep doing what you're doing + } + ai_chance = { + base = 10 + } + } + #Otherwise possibly stay in place + option = { + name = ep3_contract_event.0040.b + trigger = { 0040_traveling_towards_treasure_with_domicile_trigger = yes } + #Show 'em what happened + show_as_tooltip = { + domicile ?= { move_domicile = root.location } + } + #No point in traveling without the map + current_travel_plan ?= { abort_travel_plan = yes } + ai_chance = { + base = 2 + } + } +} + +#Employer died or became incapable while in your camp +ep3_contract_event.0041 = { + type = character_event + title = { + first_valid = { + #Dead + triggered_desc = { + trigger = { + scope:task_contract_employer = { is_alive = no } + } + desc = ep3_contract_event.0041.t_dead + } + #Incapable + triggered_desc = { + trigger = { + scope:task_contract_employer = { has_trait = incapable } + } + desc = ep3_contract_event.0041.t_incapable + } + } + } + desc = { + first_valid = { + #Dead + triggered_desc = { + trigger = { + scope:task_contract_employer = { is_alive = no } + } + desc = ep3_contract_event.0041.desc_dead + } + #Incapable + triggered_desc = { + trigger = { + scope:task_contract_employer = { has_trait = incapable } + } + desc = ep3_contract_event.0041.desc_incapable + } + } + desc = ep3_contract_event.0041.desc_outro + } + theme = travel + override_background = { reference = ep3_relaxing_tent } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:task_contract_employer + #Dead + triggered_animation = { + trigger = { is_alive = no } + animation = dead + } + #Incapable + animation = shiver + } + immediate = { + #Scopes are carried over from when the event triggers in the invalidation block of the laamp_treasure_map_contract + scope:task_contract_destination = { save_scope_as = travel_destination } + #Wait, what just happened? + scope:task_contract_employer = { + if = { + limit = { is_alive = no } + #Repurposing old loc strings... + save_scope_as = target + custom_tooltip = seize_realm_target_died_tt + } + else = { custom_tooltip = treasure_map_employer_is_incapable.tt } + } + #Remove the treasure map + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + save_scope_as = 0041_treasure_map + hidden_effect = { destroy_artifact = this } + } + #Very mysterious + custom_tooltip = treasure_map_disappeared.tt + #Mention that it invalidated + custom_tooltip = contract_invalidated_desc + } + #Staying. Here. + option = { + name = ep3_contract_event.0041.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_employer = { is_alive = no } + } + desc = ep3_contract_event.0041.a.flavor_dead + } + triggered_desc = { + trigger = { + scope:task_contract_employer = { has_trait = incapable } + } + desc = ep3_contract_event.0041.a.flavor_incapable + } + } + } + #No point in traveling without the map + return_home = yes + } + #Already paid for my domicile to travel. We're continuing! + option = { + name = travel_danger_events.1011.c + trigger = { 0040_traveling_towards_treasure_with_domicile_trigger = yes } + } + after = { remove_variable ?= ep3_laamp_decision_1000_is_excavating } +} + +scripted_trigger 0045_artifact_will_be_reforged_trigger = { + OR = { + #Variables + has_variable = ascalon + has_variable = staff_kakusandha + has_variable = zomorrodnegar + has_variable = aruval + has_variable = sword_cid + has_variable = sword_of_muhammad + has_variable = mmaagha_kamalu + has_variable = sword_attila + has_variable = iron_crown + has_variable = crown_of_justinian + has_variable = angelica_ring + #Types + artifact_type = scepter_pedestal + artifact_type = brooch_pedestal + artifact_type = necklace_pedestal + artifact_type = pedestal + artifact_type = sculpture + artifact_type = goblet + artifact_type = jug + artifact_type = urn + } +} + +#You have accepted the Treasure Map contract - the employer tags along - starting event +ep3_contract_event.0043 = { + type = character_event + title = ep3_contract_event.0043.t + desc = ep3_contract_event.0043.desc + theme = travel + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_trait = gallowsbait + has_trait = greedy + } + animation = personality_dishonorable + } + animation = personality_rational + } + right_portrait = { + character = scope:task_contract_employer + animation = ecstasy + } + artifact = { + trigger = { exists = scope:0043_treasure_map } + target = scope:0043_treasure_map + position = lower_center_portrait + } + immediate = { + #Save scopes + random_character_task_contract = { + task_contract_type = laamp_treasure_map_contract + save_scope_as = task_contract + } + scope:task_contract.task_contract_employer = { save_scope_as = task_contract_employer } + show_as_tooltip = { add_courtier = scope:task_contract_employer } + scope:task_contract_employer = { + reverse_add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + #This should always exist + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + save_scope_as = 0043_treasure_map + } + } + #Do it now - open Decisions screen + option = { + name = ep3_contract_event.0043.a + custom_tooltip = ep3_contract_event.0043.a.tt + #Decisions!! + decision:treasure_map_contract_decision = { + open_view_data = { + view = decision_detail + player = root + } + } + } + #Yeah, yeah, I'll get to it... + option = { + name = ep3_contract_event.0043.b + } +} + +#Pre-filter because on_arrival_event doesn't respect event triggers :scree: +ep3_contract_event.0044 = { + hidden = yes + + immediate = { + if = { + limit = { + has_variable = ep3_laamp_decision_1000_is_excavating + any_character_task_contract = { task_contract_type = laamp_treasure_map_contract } + } + trigger_event = ep3_contract_event.0045 + } + else = { + #Nothing. Zilch. Zip. Nada. + } + } +} + +#You find the Treasure. Do you keep it? +ep3_contract_event.0045 = { + type = character_event + title = ep3_contract_event.0045.t + desc = { + first_valid = { + #Historical artifact + triggered_desc = { + trigger = { exists = scope:treasure_artifact_historical } + desc = ep3_contract_event.0045.desc_artifact_historical + } + #jewelry + triggered_desc = { + trigger = { exists = scope:treasure_artifact_jewelry } + desc = ep3_contract_event.0045.desc_artifact_jewelry + } + #Great amount of gold + triggered_desc = { + trigger = { exists = scope:treasure_gold_great } + desc = ep3_contract_event.0045.desc_gold_great + } + #Mediocre amount of gold + triggered_desc = { + trigger = { exists = scope:treasure_gold_mediocre } + desc = ep3_contract_event.0045.desc_gold_mediocre + } + #Poor amount of gold + triggered_desc = { + trigger = { exists = scope:treasure_gold_poor } + desc = ep3_contract_event.0045.desc_gold_poor + } + #Nice view - oasis + triggered_desc = { + trigger = { + exists = scope:treasure_riches_in_scenery + exists = scope:is_dry_region + } + desc = ep3_contract_event.0045.desc_riches_in_scenery_dry + } + #Nice view - spring + triggered_desc = { + trigger = { + exists = scope:treasure_riches_in_scenery + NOT = { exists = scope:is_dry_region } + } + desc = ep3_contract_event.0045.desc_riches_in_scenery + } + #Fallback + desc = ep3_contract_event.0045.desc_pillaged + } + } + theme = landless_adventurer + #Literally anything else but that adventurer tent + override_background = { reference = terrain } + #The treasure of beautiful nature + override_background = { + trigger = { + exists = scope:treasure_riches_in_scenery + NOT = { exists = scope:is_dry_region } + } + reference = ce1_legendary_spring + } + #The desert version + override_background = { + trigger = { + exists = scope:treasure_riches_in_scenery + exists = scope:is_dry_region + } + reference = ce1_legendary_oasis + } + #A cave! + override_background = { + trigger = { + OR = { + exists = scope:treasure_gold_great + exists = scope:treasure_gold_mediocre + exists = scope:treasure_gold_poor + } + } + reference = fp3_cave + } + left_portrait = { + character = root + #Nice view + triggered_animation = { + trigger = { exists = scope:treasure_riches_in_scenery } + animation = shock + } + #Poor amount of gold + triggered_animation = { + trigger = { + has_trait = greedy + exists = scope:treasure_gold_poor + } + animation = personality_cynical + } + triggered_animation = { + trigger = { exists = scope:treasure_pillaged } + animation = disapproval + } + triggered_animation = { + trigger = { has_trait = gallowsbait } + animation = personality_dishonorable + } + animation = thinking + } + artifact = { + trigger = { exists = scope:0045_display_artifact } + target = scope:0045_display_artifact + position = lower_center_portrait + } + trigger = { + has_variable = ep3_laamp_decision_1000_is_excavating + any_character_task_contract = { task_contract_type = laamp_treasure_map_contract } + } + immediate = { + #Save scopes + random_character_task_contract = { + task_contract_type = laamp_treasure_map_contract + save_scope_as = task_contract + } + scope:task_contract.task_contract_employer = { save_scope_as = task_contract_employer } + scope:task_contract.var:contract_treasure_location = { save_scope_as = excavation_location } + #This should always exist + random_character_artifact = { + limit = { has_variable = 1025_treasure_map } + save_scope_as = 0045_treasure_map + } + #What did we find? + random_list = { + #Historical artifact + 1 = { + trigger = { is_ai = no } + #What artifact? + hidden_effect_new_object = { + generate_historical_artifact_based_on_location_effect = { LOCATION = scope:excavation_location } + scope:newly_created_artifact = { save_scope_as = treasure_artifact_historical } + } + create_character_memory = { type = treasure_map_memory } + scope:new_memory ?= { + set_variable = { + name = treasure_map_historical_artifact + value = scope:treasure_artifact_historical + } + set_variable = { + name = treasure_map_historical_artifact_location + value = scope:excavation_location + } + if = { + limit = { + exists = var:treasure_map_historical_artifact + exists = var:treasure_map_historical_artifact_location + } + #To prevent 'unused except in loc' errors :catto: + } + } + #Note that it has a historical artifact, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = has_unique_historical_artifact + value = scope:treasure_artifact_historical + } + } + } + #Jewelry + 5 = { + #Generate jewelry + hidden_effect_new_object = { + random_pool_character = { + province = root.location + limit = { is_available_adult = yes } + save_scope_as = 0045_smith + } + if = { + limit = { + NOT = { exists = scope:0045_smith } + } + create_character = { + template = generic_peasant_character + location = root.location + dynasty = none + culture = root.location.culture + faith = root.location.faith + save_scope_as = 0045_smith + } + } + random_list = { + 10 = { set_artifact_rarity_illustrious = yes } + 20 = { set_artifact_rarity_famed = yes } + 40 = { set_artifact_rarity_masterwork = yes } + } + random_list = { + 50 = { + create_artifact_brooch_effect = { + OWNER = scope:0045_smith + SMITH = scope:0045_smith + } + } + 50 = { + create_artifact_ring_effect = { + OWNER = scope:0045_smith + SMITH = scope:0045_smith + } + } + 50 = { + create_artifact_necklace_effect = { + OWNER = scope:0045_smith + SMITH = scope:0045_smith + } + } + } + #Finalization + scope:newly_created_artifact ?= { + add_scaled_artifact_modifier_prestige_effect = yes + #Don't need no notification about this + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 2 + } + save_scope_as = treasure_artifact_jewelry + set_owner = root + } + } + #Note that it is jewelry, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = has_jewelry_artifact + value = scope:treasure_artifact_jewelry + } + } + } + #Great amount of gold + 20 = { + save_scope_as = treasure_gold_great + save_scope_value_as = { + name = 0045_gold_gained + value = { + value = major_gold_laamps_value + multiply = 2 + } + } + #Note that it is Great, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = treasure_gold_great + value = scope:0045_gold_gained + } + } + } + #Mediocre amount of gold + 20 = { + save_scope_as = treasure_gold_mediocre + save_scope_value_as = { + name = 0045_gold_gained + value = major_gold_laamps_value + } + #Note that it is Mediocre, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = treasure_gold_mediocre + value = scope:0045_gold_gained + } + } + } + #Poor amount of gold + 30 = { + save_scope_as = treasure_gold_poor + save_scope_value_as = { + name = 0045_gold_gained + value = { + value = medium_gold_laamps_value + divide = 2 + } + } + #Note that it is Poor, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = treasure_gold_poor + value = scope:0045_gold_gained + } + } + } + #Nice view + 30 = { + trigger = { + NOT = { has_character_modifier = divine_springs_modifier } + } + #Pretty divine, innit + if = { + limit = { + has_trait = pilgrim + has_trait_xp = { + trait = pilgrim + value < 100 + } + } + add_trait_xp = { + trait = pilgrim + value = { + integer_range = { + min = small_lifestyle_random_xp_mid + max = small_lifestyle_random_xp_high + } + } + } + } + else = { + stress_impact = { + base = medium_stress_impact_loss + zealous = minor_stress_impact_loss + } + } + save_scope_as = treasure_riches_in_scenery + create_character_memory = { type = treasure_map_memory } + scope:new_memory ?= { + set_variable = { + name = treasure_map_divine_scenery + value = scope:excavation_location + } + if = { + limit = { exists = var:treasure_map_divine_scenery } + #To prevent 'unused except in loc' errors :catto: + } + } + #Note that it is scenic, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = has_scenic_riches + value = flag:yes + } + } + } + #Someone beat you to it + 20 = { + save_scope_as = treasure_pillaged + save_scope_value_as = { + name = 0045_gold_gained + value = minor_gold_laamps_value + } + #Note that it is Pillaged, for the Contract Success Reward + scope:task_contract = { + set_variable = { + name = treasure_pillaged + value = scope:0045_gold_gained + } + } + } + } + #Oasis, not spring + if = { + limit = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = drylands + } + } + } + save_scope_as = is_dry_region + } + #Display the artifact + scope:treasure_artifact_historical ?= { save_scope_as = 0045_display_artifact } + scope:treasure_artifact_jewelry ?= { save_scope_as = 0045_display_artifact } + } + #Let Employer know + option = { + name = { + text = { + first_valid = { + #Historical Artifact + triggered_desc = { + trigger = { exists = scope:treasure_artifact_historical } + desc = ep3_contract_event.0045.a_artifact_historical + } + #Alright + triggered_desc = { + trigger = { + OR = { + exists = scope:treasure_artifact_jewelry + exists = scope:treasure_gold_great + exists = scope:treasure_gold_mediocre + exists = scope:treasure_riches_in_scenery + } + } + desc = ep3_contract_event.0045.a + } + #Meh + triggered_desc = { + trigger = { + OR = { + exists = scope:treasure_gold_poor + exists = scope:treasure_pillaged + } + } + desc = ep3_contract_event.0045.a_pillaged + } + } + } + } + #We don't really care if the map breaks at this point + scope:task_contract = { set_variable = 0045_used_map } + #Trigger the concluding event + trigger_event = ep3_contract_event.0050 + #You're doing the right thing + stress_impact = { + base = minor_stress_impact_loss + honest = medium_stress_impact_loss + greedy = minor_stress_impact_gain + } + } + #Keep it for yourself + option = { + name = { + text = { + first_valid = { + #Historical Artifact + triggered_desc = { + trigger = { exists = scope:treasure_artifact_historical } + desc = ep3_contract_event.0045.b_artifact_historical + } + #Alright + triggered_desc = { + trigger = { + OR = { + exists = scope:treasure_artifact_jewelry + exists = scope:treasure_gold_great + exists = scope:treasure_gold_mediocre + } + } + desc = ep3_contract_event.0045.b + } + #Meh + triggered_desc = { + trigger = { + OR = { + exists = scope:treasure_gold_poor + exists = scope:treasure_pillaged + } + } + desc = ep3_contract_event.0045.b_pillaged + } + } + } + } + #... just... doesn't make sense + trigger = { + NOT = { exists = scope:treasure_riches_in_scenery } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + scope:treasure_artifact_historical ?= { 0045_artifact_will_be_reforged_trigger = yes } + } + desc = ep3_contract_event.0045.b.flavor_reforged + } + desc = ep3_contract_event.0045.b.flavor + } + } + #Historical artifact: Change it to something useful. + if = { + limit = { exists = scope:treasure_artifact_historical } + scope:treasure_artifact_historical = { + if = { + limit = { + OR = { + has_variable = ascalon + has_variable = staff_kakusandha + has_variable = zomorrodnegar + has_variable = aruval + has_variable = sword_cid + has_variable = sword_of_muhammad + has_variable = mmaagha_kamalu + has_variable = sword_attila + artifact_type = scepter_pedestal + } + } + reforge_artifact = { type = regalia } + } + else_if = { + limit = { + OR = { + has_variable = iron_crown + has_variable = crown_of_justinian + } + } + reforge_artifact = { type = helmet } + } + else_if = { + limit = { has_variable = angelica_ring } + reforge_artifact = { type = ring } + } + else_if = { + limit = { artifact_type = brooch_pedestal } + reforge_artifact = { type = brooch } + } + else_if = { + limit = { artifact_type = necklace_pedestal } + reforge_artifact = { type = necklace } + } + else_if = { + limit = { + OR = { + artifact_type = pedestal + artifact_type = sculpture + artifact_type = goblet + artifact_type = jug + artifact_type = urn + } + } + reforge_artifact = { type = miscellaneous } + } + } + show_as_tooltip = { + scope:treasure_artifact_historical = { set_owner = root } + } + } + else_if = { + limit = { exists = scope:treasure_artifact_jewelry } + show_as_tooltip = { + scope:treasure_artifact_jewelry = { set_owner = root } + } + } + else = { add_short_term_gold = scope:0045_gold_gained } + #Get rid of the contract + scope:task_contract = { complete_task_contract = failure_standard } + #Off ye go + remove_courtier_or_guest = scope:task_contract_employer + #You stole a historical treasure + if = { + limit = { exists = scope:treasure_artifact_historical } + #Shame on you + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_major_gain + XP_MAX = gallowsbait_xp_massive_gain + } + stress_impact = { + base = major_stress_impact_gain + honest = minor_stress_impact_gain + greedy = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + } + #You stole something significant + else_if = { + limit = { + OR = { + exists = scope:treasure_artifact_jewelry + exists = scope:treasure_gold_great + } + } + #Shame on you + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_major_gain + } + stress_impact = { + base = medium_stress_impact_gain + honest = minor_stress_impact_gain + greedy = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + } + #Or not + else = { + #Ehh petty theft + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MIN = gallowsbait_xp_minor_gain + XP_MAX = gallowsbait_xp_minor_gain + } + stress_impact = { + base = minor_stress_impact_gain + honest = minor_stress_impact_gain + greedy = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + } + ai_chance = { + base = 0 + } + } +} + +#Back at the employer. Fork over the treasure +ep3_contract_event.0050 = { + type = character_event + title = ep3_contract_event.0050.t + desc = { + first_valid = { + #Historical artifact + triggered_desc = { + trigger = { exists = scope:treasure_artifact_historical } + desc = ep3_contract_event.0050.desc_artifact_historical + } + #jewelry artifact + triggered_desc = { + trigger = { exists = scope:treasure_artifact_jewelry } + desc = ep3_contract_event.0050.desc_artifact_jewelry + } + #Gold + triggered_desc = { + trigger = { + OR = { + exists = scope:treasure_gold_great + exists = scope:treasure_gold_mediocre + exists = scope:treasure_gold_poor + } + } + desc = ep3_contract_event.0050.desc_gold + } + #Scenic + triggered_desc = { + trigger = { exists = scope:treasure_riches_in_scenery } + desc = ep3_contract_event.0050.desc_scenic + } + #Pillaged + desc = ep3_contract_event.0050.desc_pillaged + } + } + theme = inspiration_complete + override_background = { reference = ep3_relaxing_tent } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = greedy } + animation = personality_cynical + } + animation = flirtation + } + right_portrait = { + character = scope:task_contract_employer + #Historical artifact + triggered_animation = { + trigger = { exists = scope:treasure_artifact_historical } + animation = disbelief + } + #Scenic + triggered_animation = { + trigger = { exists = scope:treasure_riches_in_scenery } + animation = wedding_happy_cry + } + #Pillaged + triggered_animation = { + trigger = { exists = scope:treasure_pillaged } + animation = sadness + } + animation = happiness + } + artifact = { + trigger = { exists = scope:0045_display_artifact } + target = scope:0045_display_artifact + position = lower_center_portrait + } + immediate = { + + } + #Fork it over + option = { + name = ep3_contract_event.0050.a + scope:task_contract = { complete_task_contract = success_standard } + if = { + limit = { exists = scope:treasure_riches_in_scenery } + #Perma modifier + add_character_modifier = { modifier = divine_springs_modifier } + } + #Ya did the right thing, son + stress_impact = { honest = minor_stress_impact_loss } + ai_chance = { + base = 10 + } + } + after = { + #Off ye go + remove_courtier_or_guest = scope:task_contract_employer + } +} + +#To remove the variable for those who go into the travel planner but then decide not to travel to the Excavation Site +ep3_contract_event.0055 = { + hidden = yes + + trigger = { has_variable = ep3_laamp_decision_1000_is_planning_excavation_trip } + + immediate = { + remove_variable ?= ep3_laamp_decision_1000_is_planning_excavation_trip + #Is it our active contract? + random_character_task_contract = { + limit = { has_variable = contract_treasure_location } + save_scope_as = task_contract + } + #Are we going to the destination? + if = { + limit = { + any_character_active_contract = { task_contract_type = laamp_treasure_map_contract } + current_travel_plan ?= { + any_future_path_location = { this = scope:task_contract.var:contract_treasure_location } + } + } + set_variable = ep3_laamp_decision_1000_is_excavating + } + } +} + +#Help Claimant start a war contract +ep3_contract_event.0060 = { + type = character_event + title = ep3_contract_event.0060.t + desc = ep3_contract_event.0060.desc + theme = war + #task_contract_taker, you + left_portrait = { + character = root + animation = personality_bold + } + #commander, an envoy from employer + right_portrait = { + character = scope:commander + animation = storyteller + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + random_knight = { + save_scope_as = commander + } + } + } + + #take the contract and start the claim war + option = { + name = ep3_contract_event.0060.a + scope:task_contract_employer = { + start_war = { + cb = claim_cb + target = scope:task_contract_target + claimant = scope:task_contract_employer + target_title = scope:task_contract.var:task_contract_title + } + #needs a custom tooltip as the war doesn't exist yet + custom_tooltip = ep3_contract_event.0060.join_war + random_character_war = { + limit = { + using_cb = claim_cb + primary_attacker = scope:task_contract_employer + primary_defender = scope:task_contract_target + } + save_scope_as = task_contract_war + } + } + scope:task_contract = { + set_variable = { + name = task_contract_war + value = scope:task_contract_war + } + } + scope:task_contract_war ?= { + hidden_effect = { set_called_to = root } + add_attacker = root + } + + + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +#Join Faction - intro +ep3_contract_event.0070 = { + type = character_event + title = ep3_contract_event.0070.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_faction = { + faction_is_type = nation_fracturing_faction + } + } + desc = ep3_contract_event.0070.desc_nation_fracturing_faction + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_faction = { + faction_is_type = liberty_faction + } + } + desc = ep3_contract_event.0070.desc_liberty_faction + } + triggered_desc = { + trigger = { + scope:task_contract_faction = { + faction_is_type = independence_faction + } + } + desc = ep3_contract_event.0070.desc_independence_faction + } + triggered_desc = { + trigger = { + scope:task_contract_faction = { + faction_is_type = claimant_faction + } + } + desc = ep3_contract_event.0070.desc_claimant_faction + } + desc = ep3_contract_event.0070.desc_fallback_faction + } + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_employer = { + vassal_contract_has_flag = obligation_high_taxes + } + } + desc = ep3_contract_event.0070.desc_liege_taxes + } + triggered_desc = { + trigger = { + scope:task_contract_employer = { + vassal_contract_has_flag = obligation_high_levies + } + } + desc = ep3_contract_event.0070.desc_liege_levies + } + triggered_desc = { + trigger = { + scope:task_contract_target.culture != scope:task_contract_employer.culture + } + desc = ep3_contract_event.0070.desc_liege_culture + } + triggered_desc = { + trigger = { + scope:task_contract_target.faith != scope:task_contract_employer.faith + } + desc = ep3_contract_event.0070.desc_liege_faith + } + desc = ep3_contract_event.0070.desc_liege_fallback + } + } + } + desc = ep3_contract_event.0070.desc_outro + } + theme = war + #task_contract_taker, you + left_portrait = { + character = root + animation = inspect_weapon + } + #commander, an envoy from employer + right_portrait = { + character = scope:commander + animation = storyteller + } + #character giving you the contract + lower_right_portrait = { + character = scope:task_contract_employer + } + #character you have to fight in a war + lower_left_portrait = { + character = scope:task_contract_target + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + random_knight = { + save_scope_as = commander + } + } + scope:task_contract_target = { + random_held_title = { + title_tier < kingdom + limit = { + trigger_if = { + limit = { + root.prestige_level > 3 + } + tier >= tier_duchy + } + tier >= tier_county + this != scope:task_contract_target.primary_title + this != scope:task_contract_target.primary_title.title_capital_county + } + weight = { + base = 1 + modifier = { + add = 100 + root = { + has_claim_on = prev + } + } + } + save_scope_as = promised_title + } + } + scope:task_contract.var:task_contract_faction = { + save_scope_as = task_contract_faction + } + } + + #take the contract and start the claim war, if they promise you land afterwards + option = { + name = ep3_contract_event.0070.a + trigger = { + custom_description = { + text = adventurer_not_famous_trigger_tt + value = 3 + prestige_level >= 3 + } + exists = scope:promised_title + } + show_as_unavailable = { + exists = scope:promised_title + } + join_faction_forced = { + faction = scope:task_contract.var:task_contract_faction + forced_by = scope:task_contract.task_contract_employer + years = 1 + } + # Give me land + scope:task_contract = { + set_variable = { + name = task_contract_title + value = scope:promised_title + } + } + show_as_tooltip = { + custom_tooltip = task_contract_tab_success + + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change_vassal + } + scope:promised_title = { + change_title_holder = { + holder = scope:task_contract.task_contract_taker + change = scope:title_change_vassal + take_baronies = no + } + } + resolve_title_and_vassal_change = scope:title_change_vassal + } + open_view = { + view = factions_window + player = root + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + modifier = { + add = 1000 + has_claim_on = scope:promised_title + } + modifier = { + add = 20 + has_realm_law = camp_purpose_legitimists + } + } + } + #take the contract and start the claim war + option = { + name = ep3_contract_event.0070.b + join_faction_forced = { + faction = scope:task_contract.var:task_contract_faction + forced_by = scope:task_contract.task_contract_employer + years = 1 + } + open_view = { + view = factions_window + player = root + } + + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + set_variable = { + name = suppress_invalidation_event + value = yes + } + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +### Help out in a council task contract + +scripted_effect set_council_scopes_effect = { + scope:task_contract = { + var:task_contract_councillor = { + save_scope_as = task_contract_councillor + } + var:task_contract_councillor_liege = { + save_scope_as = task_contract_councillor_liege + } + } +} + +## Court Chaplain +# Fabricate claim - intro +ep3_contract_event.0080 = { + type = character_event + title = ep3_contract_event.0080.t + desc = ep3_contract_event.0080.desc + theme = faith + left_portrait = { + character = root + animation = interested_left + } + right_portrait = { + character = scope:task_contract_councillor + animation = storyteller + } + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + + trigger = { + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #Open intetactin to fabricate claim + option = { + name = ep3_contract_event.0080.a + custom_tooltip = ep3_contract_event.0080.open_start_generate_claim_interaction + open_interaction_window = { + interaction = start_generate_claim_interaction + actor = root + recipient = scope:task_contract_target + } + if = { + limit = { + is_ai = yes + } + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = generate_claim + TARGET_TYPE = target_title + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_scribe + AGENT_2 = agent_diplomat + # Speed. + AGENT_3 = agent_justiciar + AGENT_4 = agent_socialite + # Secrecy. + AGENT_5 = agent_decoy + } + } + ai_chance = { + base = 100 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Fight Faith conversion - intro +ep3_contract_event.0082 = { + type = character_event + title = ep3_contract_event.0082.t + desc = ep3_contract_event.0082.desc + theme = faith + left_portrait = { + character = root + animation = menacing + } + lower_left_portrait = { + character = scope:task_contract_councillor_liege + } + lower_right_portrait = { + character = scope:task_contract_employer + } + + trigger = { + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #help at the location + option = { + name = ep3_contract_event.0082.a + custom_tooltip = ep3_contract_event.0082.to_destination + if = { + limit = { + location = scope:task_contract_destination + } + trigger_event = ep3_contract_event.0083 + } + else = { + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_destinations = all + on_arrival_event = ep3_contract_event.0083 + } + } + ai_chance = { + base = 100 + } + } + #talk to the liege + option = { + name = ep3_contract_event.0082.b + custom_tooltip = ep3_contract_event.0082.to_liege + if = { + limit = { + location = scope:task_contract_councillor_liege.capital_province + } + trigger_event = ep3_contract_event.0084 + } + else = { + start_travel_plan = { + destination = scope:task_contract_councillor_liege.capital_province + on_arrival_destinations = all + on_arrival_event = ep3_contract_event.0084 + } + } + ai_chance = { + base = 100 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +scripted_effect protect_county_from_conversion_effect = { + scope:task_contract_councillor_liege = { + set_variable = { + name = hold_court_8120_religion_block + value = scope:task_contract_destination.faith + years = 15 + } + add_character_modifier = { + modifier = hold_court_8120_tolerance_modifier + years = 10 + } + } + scope:task_contract_destination.county = { + add_county_modifier = { + modifier = hold_court_8120_stopped_modifier + years = 15 + } + } + scope:task_contract_councillor = { + start_default_task = yes + } +} + +# Fight Faith conversion - deal with it at location +ep3_contract_event.0083 = { + type = character_event + title = ep3_contract_event.0083.t + desc = ep3_contract_event.0083.desc + theme = faith + override_background = { + reference = temple_scope + } + override_effect_2d = { + reference = smoke + } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:task_contract_employer + animation = rage + } + lower_left_portrait = { + character = scope:task_contract_councillor + } + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + + trigger = { + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #capture the chaplain + option = { + name = ep3_contract_event.0083.a + duel = { + skill = intrigue + target = scope:task_contract_councillor + 25 = { + desc = ep3_contract_event.0083.a_win + send_interface_toast = { + title = ep3_contract_event.0083.a_win + left_icon = root + right_icon = scope:task_contract_employer + prisoner_of_war_capture_effect = { + TARGET = scope:task_contract_councillor + IMPRISONER = root + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0083.a_lose + send_interface_toast = { + title = ep3_contract_event.0083.a_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + callous = minor_stress_impact_loss + just = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + lazy = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + #force it through + option = { + name = ep3_contract_event.0083.b + duel = { + skills = { martial prowess } + target = scope:task_contract_councillor + 25 = { + desc = ep3_contract_event.0083.b_win + send_interface_toast = { + title = ep3_contract_event.0083.b_win + left_icon = root + right_icon = scope:task_contract_employer + protect_county_from_conversion_effect = yes + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp2_questioned_my_faith_opinion + target = root + } + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0083.b_lose + send_interface_toast = { + title = ep3_contract_event.0083.b_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + wrathful = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = martial + prowess > scope:task_contract_councillor.prowess + } + } + } + } + #talk it through + option = { + name = ep3_contract_event.0083.c + duel = { + skills = { diplomacy learning } + target = scope:task_contract_councillor + 25 = { + desc = ep3_contract_event.0083.c_win + send_interface_toast = { + title = ep3_contract_event.0083.c_win + left_icon = root + right_icon = scope:task_contract_employer + protect_county_from_conversion_effect = yes + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp2_questioned_my_faith_opinion + target = root + } + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0083.c_lose + send_interface_toast = { + title = ep3_contract_event.0083.c_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + gregarious = minor_stress_impact_loss + zealous = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = diplomacy + highest_skill = learning + } + } + } + } + #come with me + option = { + name = ep3_contract_event.0083.d + scope:task_contract = { + complete_task_contract = failure_standard + } + if = { + limit = { + scope:task_contract_employer = { + is_landed = yes + } + } + random_list = { + 110 = { + modifier = { + add = scope:task_contract_employer.ai_rationality + } + hidden_effect = { + scope:task_contract_employer = { + depose = yes + if = { + limit = { + any_traveling_family_member = { } + } + every_traveling_family_member = { + save_temporary_scope_as = family_to_move + root = { add_courtier = scope:family_to_move } + } + } + } + } + add_courtier = scope:task_contract_employer + reverse_add_opinion = { + modifier = helped_me_in_time_of_need + target = scope:task_contract_employer + } + } + 110 = { + modifier = { + add = scope:task_contract_employer.ai_honor + } + reverse_add_opinion = { + modifier = mocked_me_in_time_of_need + target = scope:task_contract_employer + } + } + } + } + else = { + add_courtier = scope:task_contract_employer + reverse_add_opinion = { + modifier = helped_me_in_time_of_need + target = scope:task_contract_employer + } + hidden_effect = { + if = { + limit = { + any_traveling_family_member = { } + } + every_traveling_family_member = { + save_temporary_scope_as = family_to_move + root = { add_courtier = scope:family_to_move } + } + } + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + just = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 0 + modifier = { + add = 10 + scope:task_contract_employer = { + is_landed = no + } + } + } + } +} + +# Fight Faith conversion - deal with it at liege +ep3_contract_event.0084 = { + type = character_event + title = ep3_contract_event.0084.t + desc = ep3_contract_event.0084.desc + theme = faith + override_background = { + reference = throne_room + } + left_portrait = { + character = root + animation = debating + } + right_portrait = { + character = scope:task_contract_councillor_liege + animation = thinking + } + lower_left_portrait = { + character = scope:task_contract_employer + } + lower_right_portrait = { + character = scope:task_contract_councillor + } + + trigger = { + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #suggest new management + option = { + name = ep3_contract_event.0084.a + duel = { + skills = { intrigue prowess } + target = scope:task_contract_target + 0 = { + desc = ep3_contract_event.0084.a_win_rights + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + modifier = { + factor = root.prestige_level + } + send_interface_toast = { + title = ep3_contract_event.0084.a_win_rights + left_icon = root + right_icon = scope:task_contract_employer + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change_vassal + } + scope:task_contract.var:task_contract_destination.county = { + change_title_holder = { + holder = scope:task_contract_employer + change = scope:title_change_vassal + take_baronies = no + } + } + resolve_title_and_vassal_change = scope:title_change_vassal + scope:task_contract_employer = { + custom_tooltip = ep3_contract_event.0084.a_win_rights.tt + if = { + limit = { + is_vassal_of = scope:task_contract_target + } + vassal_contract_set_obligation_level = { + type = religious_rights + level = 1 + } + } + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + 25 = { + desc = ep3_contract_event.0084.a_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = ep3_contract_event.0084.a_win + left_icon = root + right_icon = scope:task_contract_employer + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change_vassal + } + scope:task_contract.var:task_contract_destination.county = { + change_title_holder = { + holder = scope:task_contract_employer + change = scope:title_change_vassal + take_baronies = no + } + } + resolve_title_and_vassal_change = scope:title_change_vassal + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + 25 = { + desc = ep3_contract_event.0084.a_lost + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + send_interface_toast = { + title = ep3_contract_event.0084.a_lost + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp2_questioned_my_faith_opinion + opinion = -30 + target = root + } + } + } + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + impatient = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = intrigue + prowess > scope:task_contract_target.prowess + } + } + } + } + + #talk it through + option = { + name = ep3_contract_event.0084.b + duel = { + skills = { diplomacy learning } + target = scope:task_contract_target + 25 = { + desc = ep3_contract_event.0084.b_win + send_interface_toast = { + title = ep3_contract_event.0084.b_win + left_icon = root + right_icon = scope:task_contract_employer + protect_county_from_conversion_effect = yes + } + scope:task_contract = { + complete_task_contract = success_standard + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0084.b_lost + scope:task_contract = { + complete_task_contract = failure_standard + } + send_interface_toast = { + title = ep3_contract_event.0084.b_lost + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp2_questioned_my_faith_opinion + opinion = -30 + target = root + } + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + gregarious = minor_stress_impact_loss + zealous = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = diplomacy + highest_skill = learning + } + } + } + } +} + +# Help Faith conversion - intro +ep3_contract_event.0085 = { + type = character_event + title = ep3_contract_event.0085.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = yes + } + } + desc = ep3_contract_event.0085.desc_bad + } + desc = ep3_contract_event.0085.desc_good + } + } + theme = faith + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = yes + } + } + animation = stunned + } + animation = prayer + } + right_portrait = { + character = scope:task_contract_councillor + animation = storyteller + } + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + + trigger = { + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #you condemn the evil chaplain methods + option = { + name = ep3_contract_event.0085.a + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = yes + } + } + duel = { + skills = { prowess diplomacy } + target = scope:task_contract_councillor + 0 = { + desc = ep3_contract_event.0085.a_win_critical + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + modifier = { + factor = root.prestige_level + } + send_interface_toast = { + title = ep3_contract_event.0085.a_win_critical + left_icon = root + right_icon = scope:task_contract_employer + prisoner_of_war_capture_effect = { + TARGET = scope:task_contract_councillor + IMPRISONER = root + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + 25 = { + desc = ep3_contract_event.0085.a_win + send_interface_toast = { + title = ep3_contract_event.0085.a_win + left_icon = root + right_icon = scope:task_contract_employer + protect_county_from_conversion_effect = yes + scope:task_contract = { + complete_task_contract = failure_standard + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0085.a_lose + send_interface_toast = { + title = ep3_contract_event.0085.a_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + honest = minor_stress_impact_loss + zealous = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = diplomacy + prowess > scope:task_contract_councillor.prowess + } + } + } + } + + #you agree with the evil chaplain methods + option = { + name = ep3_contract_event.0085.b + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = yes + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + stress_impact = { + honest = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + sadistic = major_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = diplomacy + prowess > scope:task_contract_councillor.prowess + } + } + } + } + + #you tell a story about the good gods + option = { + name = ep3_contract_event.0085.c + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = no + } + } + duel = { + skill = learning + value = high_skill_rating + 25 = { + desc = ep3_contract_event.0085.c_win + send_interface_toast = { + title = ep3_contract_event.0085.c_win + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = success_standard + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0085.c_lose + send_interface_toast = { + title = ep3_contract_event.0085.a_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + gregarious = minor_stress_impact_loss + zealous = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + shy = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = learning + } + } + } + + #you tell a story about the evil gods + option = { + name = ep3_contract_event.0085.d + trigger = { + scope:task_contract_councillor = { + has_personality_malicious_trigger = no + } + } + duel = { + skill = intrigue + value = high_skill_rating + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = ep3_contract_event.0085.d_win + send_interface_toast = { + title = ep3_contract_event.0085.d_win + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = success_standard + } + } + } + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + desc = ep3_contract_event.0085.d_lose + send_interface_toast = { + title = ep3_contract_event.0085.d_lose + left_icon = root + right_icon = scope:task_contract_employer + scope:task_contract = { + complete_task_contract = failure_standard + } + } + } + } + stress_impact = { + gregarious = minor_stress_impact_loss + zealous = minor_stress_impact_gain + shy = minor_stress_impact_gain + cynical = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = intrigue + } + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +## Marshal +# train commanders - intro +ep3_contract_event.0090 = { + type = character_event + title = ep3_contract_event.0090.t + desc = ep3_contract_event.0090.desc + theme = landless_adventurer + #task_contract_taker, you + left_portrait = { + character = root + animation = inspect_weapon + } + #marshal + right_portrait = { + character = scope:task_contract_councillor + animation = storyteller + } + #marshal's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + option = { + name = ep3_contract_event.0090.a + custom_tooltip = ep3_contract_event.0090.opens_task_contract_train_knight_interaction + open_interaction_window = { + interaction = task_contract_train_knight_interaction + actor = root + recipient = scope:task_contract_employer + } + if = { + limit = { + is_ai = yes + } + run_interaction = { + interaction = task_contract_train_knight_interaction + actor = root + recipient = scope:task_contract_employer + execute_threshold = decline + } + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +scripted_effect count_knights_trained_effect = { + scope:task_contract = { + if = { + limit = { + $RESULT$ = yes + } + change_variable = { + name = knights_trained + add = 1 + } + if = { + limit = { + NOT = { + scope:task_contract = { + has_variable_list = knights_to_train + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + } + } + } + } + scope:task_contract = { + if = { + limit = { + scope:task_contract.var:knights_trained >= scope:task_contract.var:knights_limit + } + complete_task_contract = success_critical + } + else_if = { + limit = { + scope:task_contract.var:knights_trained >= scope:task_contract.var:knights_failed + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + } + if = { + limit = { + $RESULT$ = no + } + change_variable = { + name = knights_failed + add = 1 + } + if = { + limit = { + NOT = { + scope:task_contract = { + has_variable_list = knights_to_train + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + } + } + } + } + scope:task_contract = { + if = { + limit = { + NOT = { scope:task_contract.var:knights_trained = 0 } + scope:task_contract.var:knights_trained >= scope:task_contract.var:knights_failed + } + complete_task_contract = success_standard + } + else = { + complete_task_contract = failure_standard + } + } + } + } + } +} + +# train commanders - interaction event +ep3_contract_event.0091 = { + type = character_event + title = ep3_contract_event.0091.t + desc = { + desc = ep3_contract_event.0091.desc + first_valid = { + triggered_desc = { + trigger = { scope:helper = root } + desc = { + desc = ep3_contract_event.0091.desc_me + first_valid = { + triggered_desc = { + trigger = {root.prowess < high_skill_rating } + desc = ep3_contract_event.0091.desc_me_high_prowess + } + desc = ep3_contract_event.0091.desc_me_low_prowess + } + } + } + desc = { + desc = ep3_contract_event.0091.desc_helper + first_valid = { + triggered_desc = { + trigger = {scope:helper.prowess < high_skill_rating } + desc = ep3_contract_event.0091.desc_high_prowess + } + desc = ep3_contract_event.0091.desc_low_prowess + } + } + } + desc = ep3_contract_event.0091.desc_outro + } + theme = war + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:helper = root + root.prowess < high_skill_rating + } + animation = random_weapon_yield + } + triggered_animation = { + trigger = { + scope:helper = root + root.prowess >= high_skill_rating + } + animation = inspect_weapon + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess < high_skill_rating + } + animation = stunned + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess >= high_skill_rating + } + animation = disappointed + } + } + right_portrait = { + character = scope:knight + triggered_animation = { + trigger = { + scope:helper = root + root.prowess < high_skill_rating + } + animation = random_weapon_celebrate + } + triggered_animation = { + trigger = { + scope:helper = root + root.prowess >= high_skill_rating + } + animation = random_weapon_yield + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess < high_skill_rating + } + animation = random_weapon_celebrate + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess >= high_skill_rating + } + animation = random_weapon_yield + } + } + lower_left_portrait = { + trigger = { scope:helper != root } + character = scope:helper + } + lower_right_portrait = { + character = scope:task_contract_councillor + } + lower_center_portrait = { + character = scope:task_contract_councillor_liege + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + # search for anyone that could help you train them + random_court_position_holder = { + type = second_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = master_of_arms_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = light_cavalry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = camelry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = elephantry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = heavy_cavalry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = horse_archer_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = archer_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = heavy_infantry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = light_infantry_captain_camp_officer + add_to_list = helpers_list + } + random_court_position_holder = { + type = pike_captain_camp_officer + add_to_list = helpers_list + } + random_in_list = { + list = helpers_list + save_scope_as = helper + } + if = { + limit = { + exists = scope:helper + } + scope:helper = { + every_character_trait = { + limit = { + has_trait_category = commander + } + scope:task_contract = { + add_to_variable_list = { + name = takers_commander_traits + target = prev + } + } + } + } + } + else = { + save_scope_as = helper + } + scope:task_contract = { + random_in_list = { + variable = takers_commander_traits + save_scope_as = trait_to_teach + } + } + scope:helper = { + set_signature_weapon_effect = yes + } + scope:knight = { + set_signature_weapon_effect = yes + } + scope:task_contract = { + remove_list_variable = { + name = knights_to_train + target = scope:knight + } + } + } + + # steal the knight + option = { + name = ep3_contract_event.0091.a + trigger = { scope:knight = { is_landed = no } } + duel = { + skill = diplomacy + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_recruit + modifier = { + add = root.prestige_level + factor = 5 + } + send_interface_toast = { + title = ep3_contract_event.0091_won_recruit + left_icon = root + right_icon = scope:knight + add_courtier = scope:knight + domicile = { + change_provisions = { + value = scope:knight.prowess + multiply = -4 + } + } + pay_short_term_gold = { + target = scope:task_contract_employer + gold = { + value = scope:knight.prowess + multiply = 5 + } + } + } + count_knights_trained_effect = { RESULT = no } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0091_lost_recruit + send_interface_toast = { + title = ep3_contract_event.0091_lost_recruit + left_icon = root + right_icon = scope:knight + } + count_knights_trained_effect = { RESULT = no } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + impatient = minor_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + callous = minor_stress_impact_loss + deceitful = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = diplomacy + } + } + } + + # teach them a trait you know + option = { + name = ep3_contract_event.0091.b + trigger = { + exists = scope:trait_to_teach + scope:knight = { + NOT = { has_trait = scope:trait_to_teach } + } + } + duel = { + skill = martial + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_trait + modifier = { + add = root.learning + } + send_interface_toast = { + title = ep3_contract_event.0091_won_trait + left_icon = root + right_icon = scope:knight + scope:knight = { + add_trait = scope:trait_to_teach + } + } + count_knights_trained_effect = { RESULT = yes } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0091_lost + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + count_knights_trained_effect = { RESULT = no } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + arrogant = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = martial + } + } + } + + # let helper teach them some prowess + option = { + name = ep3_contract_event.0091.c + trigger = { + exists = scope:helper + scope:helper != root + } + scope:helper = { + duel = { + skill = prowess + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_helper + send_interface_toast = { + title = ep3_contract_event.0091_won_helper + left_icon = root + right_icon = scope:knight + scope:knight = { + add_prowess_skill = { + value = scope:helper.prowess + subtract = scope:knight.prowess + divide = 4 + add = { + value = scope:knight.ai_boldness + divide = 10 + } + add = { + value = scope:helper.ai_boldness + divide = 10 + } + min = 2 + max = 5 + } + force_character_skill_recalculation = yes + } + } + count_knights_trained_effect = { RESULT = yes } + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + } + 25 = { + desc = ep3_contract_event.0091_lost + count_knights_trained_effect = { RESULT = no } + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + humble = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + scope:helper.prowess > scope:knight.prowess + } + } + } + + # teach them some prowess yourself + option = { + name = ep3_contract_event.0091.d + duel = { + skill = prowess + target = scope:knight + 50 = { + desc = ep3_contract_event.0091_won + send_interface_toast = { + title = ep3_contract_event.0091_won + left_icon = root + right_icon = scope:knight + scope:knight = { + add_prowess_skill = { + value = root.prowess + subtract = scope:knight.prowess + divide = 4 + add = { + value = scope:knight.ai_boldness + divide = 10 + } + add = { + value = root.ai_boldness + divide = 10 + } + min = 1 + max = 4 + } + force_character_skill_recalculation = yes + } + } + count_knights_trained_effect = { RESULT = yes } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + add = { + value = scope:knight.ai_energy + divide = -10 + } + } + modifier = { + add = { + value = root.ai_energy + divide = -10 + } + } + } + 50 = { + desc = ep3_contract_event.0091_lost + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + count_knights_trained_effect = { RESULT = no } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + modifier = { + add = { + value = scope:knight.ai_energy + divide = 10 + } + } + modifier = { + add = { + value = root.ai_energy + divide = 10 + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + humble = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + prowess > scope:knight.prowess + } + } + } + + after = { + hidden_effect = { + if = { + limit = { + exists = scope:trait_to_teach + } + scope:task_contract = { + remove_list_variable = { + name = takers_commander_traits + target = scope:trait_to_teach + } + } + } + if = { + limit = { + scope:task_contract = { + has_variable_list = knights_to_train + any_in_list = { + variable = knights_to_train + is_alive = yes + is_knight = yes + } + } + } + if = { + limit = { + is_ai = yes + } + #save new knight for the ai, as they can't use the interaction to do it + ordered_in_list = { + variable = knights_to_train + order_by = { + value = prowess + multiply = -1 + } + save_scope_as = knight + } + #run the event directly + root = { + trigger_event = { + id = ep3_contract_event.0091 + days = 1 + } + } + } + #open the interaction for human players + else = { + open_interaction_window = { + interaction = task_contract_train_knight_interaction + actor = root + recipient = scope:task_contract_employer + } + } + } + } + } +} + +scripted_effect set_corruption_reason_effect = { + scope:corrupt_province.county = { + switch = { + trigger = has_county_modifier + county_corruption_inefficient_tax_collection_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:taxes + } + } + county_corruption_deserting_levies_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:riots + } + } + county_corruption_smuggling_ring_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_bandits_rampant_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_inefficient_census_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:taxes + } + } + county_corruption_lack_of_sheriffs_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_lack_of_courts_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_thieves_guild_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_unsafe_highways_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:bandits + } + } + county_corruption_uncooperative_guilds_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:taxes + } + } + county_corruption_lackluster_administration_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:taxes + } + } + small_investment_in_revolt_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:riots + } + } + medium_investment_in_revolt_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:riots + } + } + high_investment_in_revolt_modifier = { + save_scope_value_as = { + name = corruption_reason + value = flag:riots + } + } + } + #fallback if the county have no modifier + if = { + limit = { + NOT = { exists = scope:corruption_reason } + } + save_scope_value_as = { + name = corruption_reason + value = flag:low_control + } + } + } +} + +# increase control - intro +ep3_contract_event.0092 = { + type = character_event + title = ep3_contract_event.0092.t + desc = { + desc = ep3_contract_event.0092.desc + first_valid = { + triggered_desc = { + trigger = { scope:corruption_reason = flag:taxes } + desc = ep3_contract_event.0092.desc_taxes + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:bandits } + desc = ep3_contract_event.0092.desc_bandits + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:riots } + desc = ep3_contract_event.0092.desc_riots + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:low_control } + desc = ep3_contract_event.0092.desc_low_control + } + } + } + theme = landless_adventurer + #task_contract_taker, you + left_portrait = { + character = root + animation = disbelief + } + #marshal + right_portrait = { + character = scope:task_contract_councillor + animation = shame + } + #marshal's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + widget = { + gui = "event_window_widget_peasant_leader" + container = "custom_widgets_container" + } + + immediate = { + ep3_peasant_leader_widget_setup_effect = yes + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + #saving scope for custom localization and corruption reason + scope:task_contract_destination = { + save_scope_as = corrupt_province + } + set_corruption_reason_effect = yes + } + + #just travel there + option = { + name = ep3_contract_event.0092.a + #trigger the event immediately if you are already there + if = { + limit = { + scope:task_contract_destination = root.location + } + trigger_event = ep3_contract_event.0093 + } + #otherwise, tirgger a travel plan + else = { + custom_tooltip = ep3_contract_event.0092.a_tt + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_event = ep3_contract_event.0093 + on_arrival_destinations = all_but_last + can_cancel_planning = no + } + } + + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + #move your camp there + option = { + name = ep3_contract_event.0092.b + trigger = { + NOR = { + scope:task_contract_destination = root.domicile.domicile_location + scope:task_contract_destination = root.location + } + } + custom_tooltip = ep3_contract_event.0092.b_tt + custom_tooltip = ep3_contract_event.0001.with_domicile.tt + start_travel_plan = { + destination = scope:task_contract_destination + on_arrival_event = ep3_contract_event.0093 + on_arrival_destinations = all + travel_with_domicile = yes + return_trip = no + can_cancel_planning = no + } + + #AI shouldn't move camps in events + ai_chance = { + base = 0 + } + } + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + after = { + ep3_peasant_leader_widget_clear_effect = yes + } +} + +# increase control - arrival +ep3_contract_event.0093 = { + type = character_event + title = ep3_contract_event.0093.t + desc = { + desc = ep3_contract_event.0093.desc + first_valid = { + triggered_desc = { + trigger = { scope:corruption_reason = flag:taxes } + desc = ep3_contract_event.0093.desc_taxes + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:bandits } + desc = ep3_contract_event.0093.desc_bandits + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:riots } + desc = ep3_contract_event.0093.desc_riots + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:low_control } + desc = ep3_contract_event.0093.desc_low_control + } + } + } + theme = landless_adventurer + override_background = { + reference = terrain_travel + } + #task_contract_taker, you + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:taxes + } + animation = personality_compassionate + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:bandits + } + animation = shock + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:riots + } + animation = interested_left + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:low_control + } + animation = shame + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:taxes + } + animation = dismissal + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:bandits + } + animation = disbelief + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:riots + } + animation = disappointed + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:low_control + } + animation = eyeroll + } + } + #peasant spokeperson + right_portrait = { + character = scope:corrupt_province_peasant + animation = beg + } + #marshal + lower_left_portrait = { + character = scope:task_contract_councillor + } + #marshal's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + widget = { + gui = "event_window_widget_peasant_leader" + container = "custom_widgets_container" + } + cooldown = { days = 1 } + + trigger = { + any_character_active_contract = { + has_task_contract_type = laamp_help_increase_control_contract + } + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + ep3_peasant_leader_widget_setup_effect = yes + if = { + limit = { + NOT = { exists = scope:corrupt_province } + } + location = { + save_scope_as = corrupt_province + } + } + #remove the visited county from the list of corrupt counties, so you don't have to visit it anymore + scope:task_contract = { + remove_list_variable = { + name = corrupt_counties + target = scope:corrupt_province.county + } + } + #find a local peasant + random_pool_character = { + province = scope:corrupt_province + limit = { + is_available_healthy_ai_adult = yes + faith = scope:corrupt_province.county.faith + culture = scope:corrupt_province.county.culture + } + save_scope_as = corrupt_province_peasant + } + if = { + limit = { + NOT = { exists = scope:corrupt_province_peasant } + } + create_character = { + location = scope:corrupt_province + template = peasant_character + gender_female_chance = 50 + faith = scope:corrupt_province.county.faith + culture = scope:corrupt_province.county.culture + save_scope_as = corrupt_province_peasant + } + } + #add them to a list, they will become army leaders if a war breaks out + scope:task_contract = { + add_to_variable_list = { + name = met_peasant_leaders + target = scope:corrupt_province_peasant + } + } + #set flag with reason for localization + if = { + limit = { + NOT = { exists = scope:corruption_reason } + } + set_corruption_reason_effect = yes + } + } + + #help the marshal + option = { + name = ep3_contract_event.0093.a + duel = { + skill = martial + value = high_skill_rating + 25 = { + desc = ep3_contract_event.0093.a_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + add_dread = 5 + scope:corrupt_province.county = { + add_county_modifier = { + modifier = marshal_task_increase_control_increased_opinion_modifier + years = 5 + } + } + } + 25 = { + desc = ep3_contract_event.0093.a_lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + scope:corrupt_province.county = { + add_county_modifier = { + modifier = marshal_task_military_presence_modifier + years = 5 + } + } + if = { + limit = { + any_maa_regiment = { } + } + random_maa_regiment = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = laamp_base_contract_schemes_1301_maa_damage_moderate_value + } + } + } + else_if = { + limit = { + any_courtier = { + is_adult = yes + NOR = { + is_close_family_of = root + is_spouse_of = root + } + } + } + ordered_courtier = { + order_by = martial + limit = { + is_adult = yes + NOR = { + is_close_family_of = root + is_spouse_of = root + } + } + scope:corrupt_province.province_owner = { + add_courtier = prev + } + } + } + else = { + pay_short_term_gold = { + target = scope:corrupt_province.province_owner + gold = root.minor_gold_value + } + domicile = { + change_provisions = { + integer_range = { + min = miniscule_provisions_value + max = minor_provisions_value + } + } + } + } + } + } + if = { + limit = { + scope:task_contract.var:num_of_corrupt_counties = 1 + scope:task_contract.var:control = 0 + scope:task_contract.var:support = 0 + } + custom_tooltip = ep3_contract_event.0094_success + scope:task_contract = { + complete_task_contract = success_critical + } + } + ep3_increase_peasant_control_effect = yes + stress_impact = { + compassionate = minor_stress_impact_gain + calm = minor_stress_impact_gain + just = minor_stress_impact_gain + impatient = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + #side with peasants + option = { + name = ep3_contract_event.0093.b + every_courtier = { + limit = { + is_lowborn = yes + NOT = { + has_opinion_modifier = { + modifier = sided_with_peasants_opinion + target = root + } + } + } + custom = every_lowborn_follower + add_opinion = { + modifier = sided_with_peasants_opinion + target = root + years = 3 + } + } + if = { + limit = { + scope:task_contract.var:num_of_corrupt_counties = 1 + scope:task_contract.var:control = 0 + scope:task_contract.var:support = 0 + } + custom_tooltip = ep3_contract_event.0094_fail + show_as_tooltip = { + scope:task_contract = { + complete_task_contract = failure_standard + } + } + trigger_event = { + id = ep3_contract_event.0095 + delayed = yes + } + } + ep3_increase_peasant_support_effect = yes + stress_impact = { + compassionate = minor_stress_impact_loss + fickle = minor_stress_impact_loss + just = minor_stress_impact_loss + wrathful = minor_stress_impact_gain + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + + after = { + ep3_peasant_leader_widget_clear_effect = yes + #check if there are more corrupt counties to visit + if = { + limit = { + scope:task_contract = { + has_variable_list = corrupt_counties + variable_list_size = { + name = corrupt_counties + value >= 1 + } + } + } + #follow up event to keep going + trigger_event = { + id = ep3_contract_event.0094 + delayed = yes + } + } + #else complete the contract + else = { + if = { + limit = { + scope:task_contract.var:control > scope:task_contract.var:support + NAND = { + scope:task_contract.var:control = 0 + scope:task_contract.var:support = 0 + } + } + custom_tooltip = ep3_contract_event.0094_success + scope:task_contract = { + if = { + limit = { + scope:task_contract.var:control = scope:task_contract.var:num_of_corrupt_counties + } + complete_task_contract = success_critical + } + else = { + complete_task_contract = success_standard + } + } + } + else_if = { + limit = { + scope:task_contract.var:control <= scope:task_contract.var:support + NAND = { + scope:task_contract.var:control = 0 + scope:task_contract.var:support = 0 + } + } + custom_tooltip = ep3_contract_event.0094_fail + show_as_tooltip = { + scope:task_contract = { + complete_task_contract = failure_standard + } + } + trigger_event = { + id = ep3_contract_event.0095 + delayed = yes + } + } + } + } +} + +# increase control - keep going +ep3_contract_event.0094 = { + type = character_event + title = ep3_contract_event.0094.t + desc = { + desc = ep3_contract_event.0094.desc + first_valid = { + triggered_desc = { + trigger = { scope:corruption_reason = flag:taxes } + desc = ep3_contract_event.0094.desc_taxes + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:bandits } + desc = ep3_contract_event.0094.desc_bandits + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:riots } + desc = ep3_contract_event.0094.desc_riots + } + triggered_desc = { + trigger = { scope:corruption_reason = flag:low_control } + desc = ep3_contract_event.0094.desc_low_control + } + } + } + theme = landless_adventurer + #task_contract_taker, you + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:taxes + } + animation = personality_rational + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:bandits + } + animation = worry + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:riots + } + animation = personality_honorable + } + triggered_animation = { + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + scope:corruption_reason = flag:low_control + } + animation = stunned + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:taxes + } + animation = personality_greedy + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:bandits + } + animation = schadenfreude + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:riots + } + animation = eyeroll + } + triggered_animation = { + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + scope:corruption_reason = flag:low_control + } + animation = boredom + } + } + #marshal + right_portrait = { + character = scope:task_contract_councillor + animation = debating + } + #marshal's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + widget = { + gui = "event_window_widget_peasant_leader" + container = "custom_widgets_container" + } + + immediate = { + if = { + limit = { + NOT = { has_variable = contract_094_travel_fallback_true } + } + ep3_peasant_leader_widget_setup_effect = yes + scope:task_contract = { + #set a county from the corrupt counties list as the corrupt county to visit next + random_in_list = { + variable = corrupt_counties + title_province = { + save_scope_as = corrupt_province + } + } + #update the destination variable for proper tooltips and descriptions in other UIs + set_variable = { + name = task_contract_destination + value = scope:corrupt_province + } + } + set_corruption_reason_effect = yes + } + else = { + remove_variable = contract_094_travel_fallback_true + } + } + + #travel without camp + option = { + name = ep3_contract_event.0094.a + hidden_effect = { + current_travel_plan ?= { + abort_travel_plan = yes + } + start_travel_plan = { + destination = scope:corrupt_province + on_arrival_event = ep3_contract_event.0093 + on_arrival_destinations = all_but_last + on_travel_planner_cancel_on_action = ep3_contract_094_travel_fallback + can_cancel_planning = no + } + } + custom_tooltip = ep3_contract_event.0094.travel_without_domicile + + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + # travel with camp - only if you traveled with it here + option = { + name = ep3_contract_event.0094.b + trigger = { + domicile.domicile_location = root.location + } + hidden_effect = { + current_travel_plan ?= { + abort_travel_plan = yes + } + start_travel_plan = { + destination = scope:corrupt_province + on_arrival_event = ep3_contract_event.0093 + on_arrival_destinations = all + travel_with_domicile = yes + return_trip = no + can_cancel_planning = no + } + } + custom_tooltip = ep3_contract_event.0094.travel_with_domicile + custom_tooltip = ep3_contract_event.0001.with_domicile.tt + + #AI shouldn't move their camp in events + ai_chance = { + base = 0 + } + } + + # I had enough, fail contract + option = { + name = ep3_contract_event.0094.c + trigger = { + scope:task_contract.var:control <= scope:task_contract.var:support + } + flavor = ep3_contract_event.0094_fail + show_as_tooltip = { + scope:task_contract = { + complete_task_contract = failure_standard + } + } + trigger_event = ep3_contract_event.0095 + stress_impact = { + ambitious = major_stress_impact_gain + lazy = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + + # I had enough, succeed contract + option = { + name = ep3_contract_event.0094.c + trigger = { + scope:task_contract.var:control > scope:task_contract.var:support + } + flavor = ep3_contract_event.0094_success + scope:task_contract = { + if = { + limit = { + scope:task_contract.var:control = scope:task_contract.var:num_of_corrupt_counties + } + complete_task_contract = success_critical + } + else = { + complete_task_contract = success_standard + } + } + return_home = yes + stress_impact = { + ambitious = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + after = { + ep3_peasant_leader_widget_clear_effect = yes + } +} + +# increase control - follow up +ep3_contract_event.0095 = { + type = character_event + title = ep3_contract_event.0095.t + desc = ep3_contract_event.0095.desc + theme = landless_adventurer + #task_contract_taker, you + left_portrait = { + character = root + animation = schadenfreude + } + #marshal + right_portrait = { + character = scope:task_contract_councillor + animation = rage + } + #marshal's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + widget = { + gui = "event_window_widget_peasant_leader" + container = "custom_widgets_container" + } + cooldown = { days = 1 } + + immediate = { + # transfer the list of supported counties from contract to root, as the contract will be destroyed after this event, so that you will have access to the ep3_laamp_peasant_war cb, even if you didn't choose war in this event + scope:task_contract = { + every_in_list = { + variable = supported_counties + root = { + add_to_variable_list = { + name = war_supported_counties_list + target = prev + } + } + } + every_in_list = { + variable = met_peasant_leaders + root = { + add_to_variable_list = { + name = war_met_peasant_leaders_list + target = prev + } + } + } + } + scope:task_contract_taker = { + ep3_peasant_leader_widget_setup_effect = yes + } + } + + #lead an independence peasant war, become landed ruler after winning + option = { + name = ep3_contract_event.0095.a + #start a freedom war! + custom_tooltip = ep3_contract_event.0095.a_become_landed + start_war = { + cb = ep3_laamp_peasant_war + target = scope:task_contract_councillor_liege.top_liege + } + #try to capture the marshal, as they standing right next to you + duel = { + skills = { prowess intrigue } + target = scope:task_contract_councillor + 25 = { + desc = ep3_contract_event.0095.a_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + prisoner_of_war_capture_effect = { + TARGET = scope:task_contract_councillor + IMPRISONER = root + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + 25 = { + desc = ep3_contract_event.0095.a_lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + scope:task_contract_councillor = { + add_opinion = { + target = root + modifier = attempted_imprisonment_opinion + } + } + } + } + #fail the contract, obivously + scope:task_contract = { + complete_task_contract = failure_standard + } + return_home = yes + stress_impact = { + craven = minor_stress_impact_gain + lazy = minor_stress_impact_gain + brave = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + ai_chance = { + base = 20 + } + } + + #lead an independence peasant war, but remain laamp after winning + option = { + name = ep3_contract_event.0095.a_2 + #start a freedom war! + custom_tooltip = { + text = ep3_contract_event.0095.a_remain_laamp + set_variable = { + name = ep3_laamp_peasant_war_remain_laamp + value = yes + } + } + start_war = { + cb = ep3_laamp_peasant_war + target = scope:task_contract_councillor_liege.top_liege + } + #try to capture the marshal, as they standing right next to you + duel = { + skills = { prowess intrigue } + target = scope:task_contract_councillor + 25 = { + desc = ep3_contract_event.0095.a_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + prisoner_of_war_capture_effect = { + TARGET = scope:task_contract_councillor + IMPRISONER = root + } + scope:task_contract_councillor_liege = { + add_opinion = { + modifier = fp3_wrongful_imprisonment_opinion + opinion = -30 + target = root + } + } + } + 25 = { + desc = ep3_contract_event.0095.a_lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + scope:task_contract_councillor = { + add_opinion = { + target = root + modifier = attempted_imprisonment_opinion + } + } + } + } + #fail the contract, obivously + scope:task_contract = { + complete_task_contract = failure_standard + } + return_home = yes + stress_impact = { + craven = minor_stress_impact_gain + lazy = minor_stress_impact_gain + brave = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + + # they are on their own, for now + option = { + name = ep3_contract_event.0095.b + scope:task_contract = { + every_in_list = { + variable = supported_counties + custom = laamp_peasant_revolt_every_county + random_list = { + 1 = { + add_county_modifier = small_investment_in_revolt_modifier + } + 1 = { + add_county_modifier = medium_investment_in_revolt_modifier + } + 1 = { + add_county_modifier = high_investment_in_revolt_modifier + } + } + } + } + #this also fails the contract + scope:task_contract = { + complete_task_contract = failure_standard + } + return_home = yes + stress_impact = { + craven = minor_stress_impact_loss + lazy = minor_stress_impact_loss + brave = minor_stress_impact_gain + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } + + # try to weasel out of it + option = { + name = ep3_contract_event.0095.c + duel = { + skills = { diplomacy intrigue } + target = scope:task_contract_councillor + 1 = { + desc = ep3_contract_event.0095.c_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + 25 = { + desc = ep3_contract_event.0095.c_tie + scope:task_contract = { + invalidate_contract = yes + } + } + 25 = { + desc = ep3_contract_event.0095.c_lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + } + return_home = yes + stress_impact = { + honest = minor_stress_impact_gain + brave = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + cynical = minor_stress_impact_loss + } + #AI should always try to complete the contract + ai_chance = { + base = 20 + } + } + + after = { + ep3_peasant_leader_widget_clear_effect = yes + } +} + +## Spymaster +#Contract to scheme find secrets - starting event +ep3_contract_event.0100 = { + type = character_event + title = ep3_contract_event.0100.t + desc = ep3_contract_event.0100.desc + theme = intrigue + #task_contract_taker, you + left_portrait = { + character = root + animation = stunned + } + #spymaster + right_portrait = { + character = scope:task_contract_councillor + animation = scheme + } + #spymaster's liege + lower_right_portrait = { + character = scope:task_contract_councillor_liege + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + } + + #start scheme to find secrets + option = { + name = ep3_contract_event.0030.b + begin_contract_scheme_with_agents_effect = { + SCHEME_TYPE = laamp_help_find_secrets_scheme + TARGET_TYPE = target_character + TARGET_SCOPE = scope:task_contract_target + TASK_CONTRACT = scope:task_contract + # Success. + AGENT_1 = agent_diplomat + AGENT_2 = agent_shill + AGENT_3 = agent_gabbler + # Speed. + AGENT_4 = agent_theologian + # Secrecy. + AGENT_5 = agent_justiciar + } + #AI should always try to complete the contract + ai_chance = { + base = 1 + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Boost Legitimacy - intro +ep3_contract_event.0510 = { + type = character_event + title = ep3_contract_event.0510.t + desc = ep3_contract_event.0510.desc + theme = diplomacy + override_background = { + reference = alley_day + } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:peasant + animation = debating + } + lower_right_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + create_character = { + template = generic_peasant_character + location = this.location + faith = location.faith + culture = location.culture + random_traits = yes + trait = peasant_leader + save_scope_as = peasant + } + location = { + save_scope_as = location + } + } + + #You attempt to debate the local + option = { + name = ep3_contract_event.0510.a + + duel = { + skills = { diplomacy learning } + target = scope:peasant + + 50 = { #You win the debate + desc = ep3_contract_event.0510.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + scope:task_contract = { + complete_task_contract = success_standard + } + add_character_flag = contract_success_flag + trigger_event = ep3_contract_event.0520 + } + 40 = { #You are unconvincing + desc = ep3_contract_event.0510.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + scope:task_contract = { + complete_task_contract = failure_standard + } + add_character_flag = contract_failure_flag + trigger_event = ep3_contract_event.0520 + } + 10 = { #You actively damage your employer in the eyes of his subjects + desc = ep3_contract_event.0510.a.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + scope:task_contract = { + complete_task_contract = failure_critical + } + add_character_flag = contract_crit_failure_flag + trigger_event = ep3_contract_event.0520 + } + } + stress_impact = { + honest = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + OR = { + highest_skill = diplomacy + learning > scope:peasant.learning + } + } + } + } + + #Threaten the local + option = { + name = ep3_contract_event.0510.b + duel = { + skills = { diplomacy prowess } + target = scope:peasant + + 30 = { #You win the 'debate' + desc = ep3_contract_event.0510.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 3 + scope:task_contract = { + complete_task_contract = success_standard + } + add_character_flag = contract_success_flag + trigger_event = ep3_contract_event.0520 + } + 50 = { #You are unconvincing + desc = ep3_contract_event.0510.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + scope:task_contract = { + complete_task_contract = failure_standard + } + add_character_flag = contract_failure_flag + trigger_event = ep3_contract_event.0520 + } + 20 = { #You actively damage your employer in the eyes of his subjects + desc = ep3_contract_event.0510.b.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + scope:peasant = { + create_faction = { + type = peasant_faction + target = scope:task_contract_employer + } + } + scope:task_contract = { + complete_task_contract = failure_critical + } + add_character_flag = contract_crit_failure_flag + trigger_event = ep3_contract_event.0520 + } + } + stress_impact = { + honest = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + sadistic = major_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill_including_prowess = prowess + } + } + } + + #Pay him off to support your cause + option = { + name = ep3_contract_event.0510.c + + pay_short_term_gold = { + target = scope:peasant + gold = minor_gold_value + } + + random_list = { + 75 = { + modifier = { + add = 15 + scope:peasant = { + OR = { + has_trait = greedy + has_trait = arbitrary + } + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + add_character_flag = contract_success_flag + trigger_event = ep3_contract_event.0520 + } + 25 = { + modifier = { + add = 25 + scope:peasant = { + OR = { + has_trait = stubborn + has_trait = ambitious + } + } + } + scope:task_contract = { + complete_task_contract = failure_standard + } + add_character_flag = contract_failure_flag + trigger_event = ep3_contract_event.0520 + } + } + + + stress_impact = { + gregarious = minor_stress_impact_loss + zealous = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + shy = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + gold > 100 + } + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Boost Legitimacy - resolution +ep3_contract_event.0520 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0520.t.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0520.t.failure + } + triggered_desc = { + trigger = { has_character_flag = contract_crit_failure_flag } + desc = ep3_contract_event.0520.t.critfailure + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0520.desc.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0520.desc.failure + } + triggered_desc = { + trigger = { has_character_flag = contract_crit_failure_flag } + desc = ep3_contract_event.0520.desc.critfailure + } + } + } + theme = diplomacy + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_flag = contract_success_flag + } + animation = personality_honorable + } + animation = stress + } + right_portrait = { + character = scope:task_contract_employer + triggered_animation = { + trigger = { + has_character_flag = contract_success_flag + } + animation = ecstasy + } + animation = anger + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + location = { + save_scope_as = location + } + show_as_tooltip = { + if = { + limit = { + has_character_flag = contract_success_flag + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + else_if = { + limit = { + has_character_flag = contract_failure_flag + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + else = { + scope:task_contract = { + complete_task_contract = failure_critical + } + } + } + } + + option = { + name = ep3_contract_event.0520.a + + trigger = { + has_character_flag = contract_success_flag + } + + stress_impact = { + base = miniscule_stress_impact_loss + } + ai_chance = { + base = 10 + } + } + + option = { + name = ep3_contract_event.0520.b + + trigger = { + NOT = { + has_character_flag = contract_success_flag + } + } + + stress_impact = { + base = miniscule_stress_impact_gain + } + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = contract_crit_success_flag + remove_character_flag = contract_success_flag + remove_character_flag = contract_failure_flag + remove_character_flag = contract_crit_failure_flag + } +} + +# Turbulent Priest - intro +ep3_contract_event.0550 = { + type = character_event + title = ep3_contract_event.0550.t + desc = ep3_contract_event.0550.desc + theme = martial + override_background = { + reference = alley_night + } + left_portrait = { + character = root + animation = lantern + } + right_portrait = { + character = scope:messenger + outfit_tags = { travel_cloak } + animation = scheme + hide_info = yes + } + lower_right_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + set_council_scopes_effect = yes + location = { + save_scope_as = location + } + scope:task_contract_employer = { + random_councillor = { #Has a councillor who they hate + limit = { + is_ai = yes + reverse_opinion = { + target = scope:task_contract_employer + value <= high_negative_opinion + } + } + save_scope_as = councillor + } + } + if = { + limit = { + any_pool_character = { + province = root.location + is_physically_able_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 25 + age <= 75 + } + } + random_pool_character = { + province = root.location + limit = { + is_physically_able_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 25 + age <= 75 + } + save_scope_as = messenger + } + } + else = { + create_character = { + template = generic_peasant_character + location = this.location + faith = location.faith + culture = location.culture + random_traits = yes + save_scope_as = messenger + } + } + } + + #Open the letter + option = { + name = ep3_contract_event.0550.a + + custom_tooltip = ep3_contract_event.0550.a.tt + + trigger_event = ep3_contract_event.0555 + + stress_impact = { + honest = miniscule_stress_impact_gain + deceitful = miniscule_stress_impact_loss + craven = miniscule_stress_impact_gain + brave = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Turbulent Priest - Letter +ep3_contract_event.0555 = { + type = character_event + window = anonymous_letter_event + title = debug.0002.t + desc = ep3_contract_event.0555.desc + theme = martial + + #Okie doke + option = { + name = ep3_contract_event.0555.a + + trigger_event = { + id = ep3_contract_event.0560 + days = 1 + } + + stress_impact = { + honest = miniscule_stress_impact_gain + deceitful = miniscule_stress_impact_loss + craven = miniscule_stress_impact_gain + brave = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } +} + +# Turbulent Priest - decision +ep3_contract_event.0560 = { + type = character_event + title = ep3_contract_event.0560.t + desc = ep3_contract_event.0560.desc + theme = martial + override_background = { + reference = alley_night + } + left_portrait = { + character = root + animation = hunting_knife_start + } + right_portrait = { + character = scope:councillor + animation = drink_goblet + } + + immediate = { + set_contract_scopes_effect = yes + location = { + save_scope_as = location + } + scope:task_contract_employer = { + random_sub_realm_barony = { #Save a place for the exile to go + limit = { + this != root.capital_province + } + save_scope_as = exile_barony + } + } + } + + option = { #Slaughter them + name = ep3_contract_event.0560.a + + duel = { + skills = { prowess martial } + target = scope:councillor + + 30 = { #You break in and kill everyone inside + desc = ep3_contract_event.0560.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 3 + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { death = { death_reason = death_murder } } + } + 50 = { #You break in, kill the target, but suffer wounds + desc = ep3_contract_event.0560.a.neutral + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + increase_wounds_no_death_effect = { REASON = fight } + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { death = { killer = root death_reason = death_duel } } + } + 30 = { #You fail to even kill the target + desc = ep3_contract_event.0560.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 3 + increase_wounds_no_death_effect = { REASON = fight } + add_character_flag = contract_crit_failure_flag + custom_tooltip = ep3_contract_event.0560.contractfailure + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + 10 = { #You are killed! + desc = ep3_contract_event.0560.a.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + death = { killer = scope:councillor death_reason = death_duel } + } + } + + stress_impact = { + brave = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + impatient = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill_including_prowess = prowess + } + } + } + + option = { #Knife him in the loo + name = ep3_contract_event.0560.b + + duel = { + skills = { prowess intrigue } + target = scope:councillor + + 40 = { #It works perfectly + desc = ep3_contract_event.0560.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 4 + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractcritsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { death = { death_reason = death_murder } } + } + 40 = { #There is a scuffle, and people notice as you escape + desc = ep3_contract_event.0560.b.neutral + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 4 + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { death = { killer = root death_reason = death_murder_known } } + } + 20 = { #He doesn't even go to the toilet + desc = ep3_contract_event.0560.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 2 + increase_wounds_no_death_effect = { REASON = fight } + add_character_flag = contract_failure_flag + custom_tooltip = ep3_contract_event.0560.contractcritfailure + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + } + + stress_impact = { + sadistic = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + impatient = minor_stress_impact_gain + patient = miniscule_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + add = 50 + highest_skill = intrigue + } + } + } + + option = { #Poison his drink + name = ep3_contract_event.0560.c + + duel = { + skill = intrigue + value = very_high_skill_rating + + 20 = { #It works perfectly + desc = ep3_contract_event.0560.c.critsuccess + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 2 + add_character_flag = contract_crit_success_flag + custom_tooltip = ep3_contract_event.0560.contractcritsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + 50 = { #By the time they realise it was you, he is already dead + desc = ep3_contract_event.0560.c.success + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { death = { killer = root death_reason = death_poison } } + } + 50 = { #It merely makes him sick + desc = ep3_contract_event.0560.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + add_character_flag = contract_failure_flag + custom_tooltip = ep3_contract_event.0560.contractfailure + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:councillor = { contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = no } } + } + 20 = { #He sees you spiking the drink + desc = ep3_contract_event.0560.c.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 2 + add_character_flag = contract_crit_failure_flag + custom_tooltip = ep3_contract_event.0560.contractcritfailure + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + } + + stress_impact = { + brave = minor_stress_impact_gain + craven = miniscule_stress_impact_loss + deceitful = miniscule_stress_impact_loss + honest = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = intrigue + } + } + } + + option = { #Lady Boyle 'em + name = ep3_contract_event.0560.d + + duel = { + skills = { intrigue learning } + target = scope:councillor + + 25 = { #It works perfectly + desc = ep3_contract_event.0560.d.critsuccess + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 2 + add_character_flag = contract_crit_success_flag + custom_tooltip = ep3_contract_event.0560.contractcritsuccess + scope:task_contract_employer = { + fire_councillor = scope:councillor + } + scope:councillor = { + if = { + limit = { + is_landed = no + } + banish = yes + } + else = { + banish = yes + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = yes + } + create_landless_adventurer_title_effect = { + REASON = flag:exile + FLAVOR_CHAR = root + } + } + } + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + 50 = { #You have to knock him out before abduction + desc = ep3_contract_event.0560.d.success + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + scope:task_contract_employer = { + fire_councillor = scope:councillor + } + scope:councillor = { + increase_wounds_no_death_effect = { REASON = fight } + if = { + limit = { + is_landed = no + } + banish = yes + } + else = { + banish = yes + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = yes + } + create_landless_adventurer_title_effect = { + REASON = flag:exile + FLAVOR_CHAR = root + } + } + } + } + 35 = { #He escapes from your clutches + desc = ep3_contract_event.0560.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 3 + add_character_flag = contract_crit_failure_flag + custom_tooltip = ep3_contract_event.0560.contractcritfailure + trigger_event = { + id = ep3_contract_event.0565 + days = { 1 2 } + } + } + } + + stress_impact = { + brave = minor_stress_impact_gain + craven = miniscule_stress_impact_loss + sadistic = medium_stress_impact_gain + compassionate = minor_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + add = 25 + highest_skill = intrigue + } + modifier = { + add = 100 + highest_skill = learning + } + } + } +} + +# Turbulent Priest - resolution +ep3_contract_event.0565 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_crit_success_flag } + desc = ep3_contract_event.0565.t.critsuccess + } + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0565.t.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0565.t.failure + } + triggered_desc = { + trigger = { has_character_flag = contract_crit_failure_flag } + desc = ep3_contract_event.0565.t.critfailure + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_crit_success_flag } + desc = ep3_contract_event.0565.desc.critsuccess + } + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0565.desc.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0565.desc.failure + } + triggered_desc = { + trigger = { has_character_flag = contract_crit_failure_flag } + desc = ep3_contract_event.0565.desc.critfailure + } + } + } + theme = martial + override_background = { + reference = ep2_travel_bridge + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_character_flag = contract_success_flag + has_character_flag = contract_crit_success_flag + } + } + animation = steward + } + outfit_tags = { nightgown } + animation = stress + } + right_portrait = { + trigger = { + OR = { + has_character_flag = contract_success_flag + has_character_flag = contract_crit_success_flag + } + } + character = scope:messenger + animation = jockey_idle + outfit_tags = { travel_cloak } + hide_info = yes + camera = camera_event_horse_right + } + lower_center_portrait = { + character = scope:councillor + } + + immediate = { + set_contract_scopes_effect = yes + if = { + limit = { + any_pool_character = { + province = root.location + is_physically_able_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 25 + age <= 75 + } + } + random_pool_character = { + province = root.location + limit = { + is_physically_able_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 25 + age <= 75 + } + save_scope_as = messenger + } + } + else = { + create_character = { + template = generic_peasant_character + location = this.location + faith = location.faith + culture = location.culture + random_traits = yes + save_scope_as = messenger + } + } + if = { + limit = { + has_character_flag = contract_crit_success_flag + } + scope:task_contract = { + complete_task_contract = success_critical + } + } + else_if = { + limit = { + has_character_flag = contract_success_flag + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + else_if = { + limit = { + has_character_flag = contract_failure_flag + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + else = { + scope:task_contract = { + complete_task_contract = failure_critical + } + } + } + + option = { + name = ep3_contract_event.0565.a + + trigger = { + OR = { + has_character_flag = contract_crit_success_flag + has_character_flag = contract_success_flag + } + } + + stress_impact = { + base = miniscule_stress_impact_loss + } + ai_chance = { + base = 10 + } + } + + option = { + name = ep3_contract_event.0565.b + + trigger = { + NOR = { + has_character_flag = contract_crit_success_flag + has_character_flag = contract_success_flag + } + } + + stress_impact = { + base = miniscule_stress_impact_gain + } + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = contract_crit_success_flag + remove_character_flag = contract_success_flag + remove_character_flag = contract_failure_flag + remove_character_flag = contract_crit_failure_flag + } +} + +# Rescue Wanderer - Intro +ep3_contract_event.0570 = { + type = character_event + title = ep3_contract_event.0570.t + desc = ep3_contract_event.0570.desc + theme = intrigue + override_background = { + reference = dungeon + } + left_portrait = { + character = root + animation = inspect_weapon + } + right_portrait = { + character = scope:task_contract_employer + animation = prisondungeon + } + lower_right_portrait = { + character = scope:prisonguard + } + + immediate = { + set_contract_scopes_effect = yes + save_scope_as = root_for_loc + create_character = { + template = mercenary + location = this.location + faith = location.faith + culture = location.culture + gender_female_chance = root_soldier_female_chance + random_traits = yes + save_scope_as = prisonguard + } + location = { + save_scope_as = location + } + + save_scope_value_as = { + name = lockpick_range + value = { + integer_range = { + min = 1 + max = 10 + } + } + } + } + + #Duel the guard to get them out + option = { + name = ep3_contract_event.0570.a + + trigger = { + can_start_single_combat_trigger = yes + } + + add_internal_flag = dangerous + + custom_tooltip = ep3_contract_event.0570.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:prisonguard + FATALITY = always + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = ep3_contract_event.0571 + INVALIDATION_EVENT = single_combat.1006 + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + sadistic = minor_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + add = 50 + highest_skill_including_prowess = prowess + } + } + } + + #Make a distraction + option = { + name = ep3_contract_event.0570.b + + duel = { + skill = intrigue + value = decent_skill_rating + + 50 = { #The distraction works + desc = ep3_contract_event.0570.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + trigger_event = { + id = ep3_contract_event.0575 + days = 1 + } + } + 50 = { #It doesn't work and you have to escape + desc = ep3_contract_event.0570.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + random = { + chance = 30 + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_contract_event.0570.b.failure.tt + desc = ep3_contract_event.0570.b.failure.tt + left_icon = root + right_icon = scope:prisonguard + increase_wounds_no_death_effect = { REASON = fight } + } + } + trigger_event = { + id = ep3_contract_event.0575 + days = 1 + } + } + } + stress_impact = { + deceitful = miniscule_stress_impact_loss + honest = miniscule_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = intrigue + } + } + } + + #Try to pick the lock + option = { + name = ep3_contract_event.0570.c + + random_list = { + 35 = { + modifier = { + add = 20 + has_trait = gallowsbait + } + modifier = { + add = 20 + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 25 + } + } + modifier = { + add = 20 + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 75 + } + } + add_character_flag = contract_success_flag + custom_tooltip = ep3_contract_event.0560.contractsuccess + trigger_event = { + id = ep3_contract_event.0575 + days = 1 + } + } + 65 = { + modifier = { + add = scope:lockpick_range + } + add_character_flag = contract_failure_flag + custom_tooltip = ep3_contract_event.0560.contractfailure + trigger_event = { + id = ep3_contract_event.0575 + days = 1 + } + } + } + + stress_impact = { + patient = minor_stress_impact_loss + impatient = medium_stress_impact_loss + } + + ai_chance = { + base = 25 + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +#Add relevant flags +ep3_contract_event.0571 = { + hidden = yes + immediate = { + add_character_flag = contract_duel_success_flag + add_character_flag = contract_success_flag + trigger_event = { + id = ep3_contract_event.0575 + days = 1 + } + } +} + +# Rescue Wanderer - resolution +ep3_contract_event.0575 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0575.t.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0575.t.failure + } + } + } + desc = { + triggered_desc = { + trigger = { has_character_flag = contract_duel_success_flag } + desc = ep3_contract_event.0575.desc.duel + } + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0575.desc.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0575.desc.failure + } + } + } + theme = intrigue + override_background = { + reference = alley_day + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + NOT = { + has_character_flag = contract_failure_flag + } + } + animation = personality_honorable + } + animation = stress + } + right_portrait = { + trigger = { + root = { + has_character_flag = contract_success_flag + } + } + character = scope:task_contract_employer + animation = ecstasy + } + artifact = { + trigger = { exists = scope:newly_created_artifact } + target = scope:newly_created_artifact + position = lower_center_portrait + } + + immediate = { + set_contract_scopes_effect = yes + hidden_effect = { + scope:task_contract_employer.primary_title = { + save_scope_as = title + } + destroy_title = scope:title + } + add_courtier = scope:task_contract_employer + if = { + limit = { + has_character_flag = contract_failure_flag + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + else = { + scope:task_contract = { + complete_task_contract = success_standard + } + } + if = { + limit = { + has_character_flag = contract_duel_success_flag + } + add_gold = { 15 40 } + hidden_effect = { + random_dummy_gender_effect = yes + create_artifact_brooch_effect = { + OWNER = scope:dummy_gender + SMITH = scope:dummy_gender + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_negate_prowess_penalty_add_3_modifier + add_artifact_modifier = artifact_monthly_prestige_2_modifier + add_artifact_modifier = artifact_dynasty_opinion_1_modifier + set_artifact_rarity = masterwork + set_artifact_name = ep3_pilfered_brooch + add_artifact_history = { + type = stolen + actor = scope:prisonguard + recipient = root + } + } + } + } + } + + option = { + name = ep3_contract_event.0575.a + + trigger = { + NOT = { + has_character_flag = contract_failure_flag + } + } + + stress_impact = { + base = miniscule_stress_impact_loss + } + ai_chance = { + base = 10 + } + } + + option = { + name = ep3_contract_event.0575.b + + trigger = { + has_character_flag = contract_failure_flag + } + + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = contract_success_flag + remove_character_flag = contract_failure_flag + remove_character_flag = contract_duel_success_flag + } +} + +# Find Secret - Intro +ep3_contract_event.0580 = { + type = character_event + title = ep3_contract_event.0580.t + desc = ep3_contract_event.0580.desc + theme = intrigue + override_background = { + reference = temple + } + left_portrait = { + character = root + animation = eavesdrop + } + right_portrait = { + character = scope:secret_haver + animation = paranoia + } + lower_center_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + if = { + limit = { + any_vassal = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:task_contract_employer } + } + } + } + random_vassal = { + limit = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:task_contract_employer } + } + } + save_scope_as = secret_haver + random_secret = { + limit = { + NOT = { is_known_by = scope:task_contract_employer } + } + save_scope_as = secret + } + } + } + else_if = { + limit = { + any_courtier_or_guest = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:task_contract_employer } + } + } + } + random_courtier_or_guest = { + limit = { + any_secret = { + count > 0 + NOT = { is_known_by = scope:task_contract_employer } + } + } + save_scope_as = secret_haver + random_secret = { + limit = { + NOT = { is_known_by = scope:task_contract_employer } + } + save_scope_as = secret + } + } + } + else = { + random_courtier_or_guest = { + limit = { + is_available_adult = yes + } + save_scope_as = secret_haver + give_random_likely_secret_effect = yes + random_secret = { + limit = { + NOT = { is_known_by = scope:task_contract_employer } + } + save_scope_as = secret + } + } + } + if = { + limit = { + NOT = { + exists = scope:secret_haver + } + } + create_character = { + employer = scope:task_contract_employer + template = pool_repopulate_stewardship + faith = scope:task_contract_employer.faith + culture = scope:task_contract_employer.culture + save_scope_as = secret_haver + } + scope:secret_haver = { + give_random_likely_secret_effect = yes + random_secret = { + save_scope_as = secret + } + } + } + } + } + + #Investigate + option = { + name = ep3_contract_event.0580.a + + duel = { + skill = intrigue + value = decent_skill_rating + + 50 = { #You learn their secret + desc = ep3_contract_event.0580.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + 50 = { #Turns out they don't have one...? + desc = ep3_contract_event.0580.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + } + + stress_impact = { + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + modifier = { + add = 20 + highest_skill = intrigue + intrigue >= decent_skill_rating + } + modifier = { + add = 70 + highest_skill = intrigue + intrigue >= 16 + } + } + } + + #Try to lie about it + option = { + name = ep3_contract_event.0580.b + + duel = { + skills = { diplomacy intrigue } + target = scope:task_contract_employer + + 50 = { #Your lie works + desc = ep3_contract_event.0580.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + add_character_flag = lied_about_secret_flag + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + 50 = { #They know you're lying + desc = ep3_contract_event.0580.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + } + + stress_impact = { + deceitful = minor_stress_impact_loss + honest = medium_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 90 + diplomacy >= scope:task_contract_employer.diplomacy + intrigue >= scope:task_contract_employer.intrigue + } + } + } + + #Threaten them + option = { + name = ep3_contract_event.0580.c + + flavor = ep3_contract_event.0580.c.tt + + if = { + limit = { + scope:task_contract_employer = { + NOT = { + any_secret = { } + } + } + } + duel = { + skill = prowess + target = scope:secret_haver + + 50 = { #Your intimidation works + desc = ep3_contract_event.0580.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + modifier = { + dread > 25 + add = 10 + } + modifier = { + dread > 50 + add = 10 + } + modifier = { + dread > 75 + add = 10 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + 50 = { #They aren't impressed + desc = ep3_contract_event.0580.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + } + } + else = { + duel = { + skill = prowess + target = scope:secret_haver + + 10 = { #Your intimidation works + desc = ep3_contract_event.0580.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 1 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + 80 = { #They try to cut a deal... + desc = ep3_contract_event.0580.c.neutral + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 10 + hidden_effect = { #For a decent reward + scope:secret_haver = { + add_gold = { 50 100 } + } + } + custom_tooltip = ep3_contract_event.0580.c.neutral.tt + trigger_event = { + id = ep3_contract_event.0581 + days = 1 + } + } + 10 = { #They aren't impressed + desc = ep3_contract_event.0580.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + } + } + } + + stress_impact = { + brave = miniscule_stress_impact_loss + craven = miniscule_stress_impact_gain + } + ai_chance = { + base = 0 + modifier = { + add = 100 + prowess > { + value = scope:secret_haver.prowess + add = 3 + } + } + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Find Secret - Secret Haver Deal Proposal +ep3_contract_event.0581 = { + type = character_event + title = ep3_contract_event.0581.t + desc = ep3_contract_event.0581.desc + theme = intrigue + override_background = { + reference = temple + } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:secret_haver + animation = scheme + } + lower_center_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + random_secret = { + save_scope_as = employer_secret + } + } + hidden_effect = { + scope:secret_haver = { + random_dummy_gender_effect = yes + create_artifact_ring_effect = { + OWNER = scope:dummy_gender + SMITH = scope:dummy_gender + } + } + } + } + + #Turn down the deal + option = { + name = ep3_contract_event.0581.a + + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + + trigger_event = { + id = ep3_contract_event.0585 + days = 1 + } + + stress_impact = { + honest = miniscule_stress_impact_loss + deceitful = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + } + } + + #Leave with his rewards + option = { + name = ep3_contract_event.0581.b + + scope:secret_haver = { + pay_short_term_gold = { + target = root + gold = scope:secret_haver.gold + } + } + + scope:newly_created_artifact = { + set_owner = root + } + + scope:employer_secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + + custom_tooltip = ep3_contract_event.0560.contractfailure + + scope:task_contract = { + complete_task_contract = failure_standard + } + + stress_impact = { + arbitrary = minor_stress_impact_loss + just = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + } + } +} + +# Find Secret - Resolution +ep3_contract_event.0585 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0585.t.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0585.t.failure + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = lied_about_secret_flag } + desc = ep3_contract_event.0585.desc.liedsuccessfully + } + triggered_desc = { + trigger = { has_character_flag = contract_success_flag } + desc = ep3_contract_event.0585.desc.success + } + triggered_desc = { + trigger = { has_character_flag = contract_failure_flag } + desc = ep3_contract_event.0585.desc.failure + } + } + } + theme = intrigue + override_background = { + reference = council_chamber + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + NOT = { + has_character_flag = contract_failure_flag + } + } + animation = steward + } + animation = stress + } + right_portrait = { + character = scope:task_contract_employer + triggered_animation = { + trigger = { + root = { + has_character_flag = contract_success_flag + } + } + animation = ecstasy + } + animation = anger + } + + immediate = { + set_contract_scopes_effect = yes + if = { + limit = { + has_character_flag = contract_failure_flag + } + scope:task_contract = { + complete_task_contract = failure_standard + } + } + else = { + scope:task_contract = { + complete_task_contract = success_standard + } + } + } + + option = { + name = ep3_contract_event.0585.a + + trigger = { + NOT = { + has_character_flag = contract_failure_flag + } + } + + if = { + limit = { + NOT = { + has_character_flag = lied_about_secret_flag + } + } + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = scope:task_contract_employer + } + } + } + else = { + hidden_effect = { + scope:secret_haver = { + random_list = { + 1 = { add_secret = { type = secret_cannibal } } + 1 = { add_secret = { type = secret_witch } } + 1 = { add_secret = { type = secret_non_believer } } + } + } + } + scope:secret_haver = { + random_secret = { + limit = { + this != scope:secret + } + reveal_to_without_events_effect = { + CHARACTER = scope:task_contract_employer + } + } + } + } + + stress_impact = { + base = miniscule_stress_impact_loss + } + ai_chance = { + base = 10 + } + } + + option = { + name = ep3_contract_event.0585.b + + trigger = { + has_character_flag = contract_failure_flag + } + + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = contract_success_flag + remove_character_flag = contract_failure_flag + remove_character_flag = lied_about_secret_flag + } +} + +# Eliminate Heir - Intro +ep3_contract_event.0590 = { + type = character_event + title = ep3_contract_event.0590.t + desc = ep3_contract_event.0590.desc + theme = intrigue + override_background = { + reference = alley_night + } + left_portrait = { + character = root + animation = spymaster + } + right_portrait = { + character = scope:heir + animation = paranoia + } + lower_center_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract_employer = { + random_heir = { + limit = { + is_primary_heir_of = scope:task_contract_employer + reverse_opinion = { + target = scope:task_contract_employer + value <= high_negative_opinion + } + age > 16 #No murderin' babies + } + save_scope_as = heir + } + } + location = { + save_scope_as = location + } + } + + #A knife in the dark... + option = { + name = ep3_contract_event.0590.a + + duel = { + skill = prowess + target = scope:heir + + 50 = { #Stabby stab + desc = ep3_contract_event.0590.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + scope:heir = { + death = { + death_reason = death_disappearance + killer = root + } + } + scope:task_contract = { + complete_task_contract = success_standard + } + } + 50 = { #They get away, oh no + desc = ep3_contract_event.0590.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + scope:heir = { + add_character_modifier = { + modifier = watchful_modifier + years = 5 + } + } + scope:task_contract_employer = { + add_character_modifier = { + modifier = ep3_under_suspicion_modifier + years = 5 + } + } + trigger_event = { + id = ep3_contract_event.0595 + days = 1 + } + } + } + + stress_impact = { + sadistic = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 10 + modifier = { + add = 50 + highest_skill_including_prowess = prowess + } + } + } + + #Maybe just bonk 'em on the head and drag them away somewhere? + option = { + name = ep3_contract_event.0590.b + + duel = { + skills = { prowess intrigue } + value = decent_skill_rating + + 50 = { #Get bonked, nerd + desc = ep3_contract_event.0590.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + add_character_flag = knockedout_flag + trigger_event = { + id = ep3_contract_event.0591 + days = 1 + } + } + 50 = { #They get away + desc = ep3_contract_event.0590.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + trigger_event = { + id = ep3_contract_event.0595 + days = 1 + } + } + 10 = { #You, uh, bonk a lil hard + desc = ep3_contract_event.0590.b.fatalbonk + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + scope:heir = { + death = { + death_reason = death_disappearance + killer = root + } + } + add_stress = minor_stress_gain + scope:task_contract = { + complete_task_contract = success_standard + } + } + } + + stress_impact = { + sadistic = medium_stress_impact_gain + compassionate = miniscule_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + add = 50 + highest_skill = intrigue + } + } + } + + #Try to explain + option = { + name = ep3_contract_event.0590.c + + duel = { + skill = diplomacy + target = scope:heir + + 50 = { #You persuade them to leave + desc = ep3_contract_event.0590.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + custom_tooltip = ep3_contract_event.0560.contractsuccess + add_character_flag = contract_success_flag + add_character_flag = camewillingly_flag + scope:secret = { + reveal_to_without_events_effect = { + CHARACTER = root + } + } + trigger_event = { + id = ep3_contract_event.0591 + days = 1 + } + } + 50 = { #They refuse to go + desc = ep3_contract_event.0590.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + min = 5 + hidden_effect = { #For a decent reward + scope:secret_haver = { + add_gold = { 50 100 } + } + } + custom_tooltip = ep3_contract_event.0560.contractfailure + trigger_event = { + id = ep3_contract_event.0595 + days = 1 + } + } + 10 = { #You let slip who put you up to this + desc = ep3_contract_event.0590.c.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + min = 1 + custom_tooltip = ep3_contract_event.0560.contractfailure + add_character_flag = contract_failure_flag + scope:heir = { + set_relation_rival = { + target = scope:task_contract_employer + reason = rival_historical + } + } + trigger_event = { + id = ep3_contract_event.0595 + days = 1 + } + } + } + + stress_impact = { + sadistic = major_stress_impact_gain + callous = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = diplomacy + } + } + } + + #invalidate the contract + option = { + name = ep3_contract_event.0001.invalidate + scope:task_contract = { + invalidate_contract = yes + } + #AI should always try to complete the contract + ai_chance = { + base = 0 + } + } +} + +# Eliminate Heir - Transition Event +ep3_contract_event.0591 = { + type = character_event + title = ep3_contract_event.0591.t + desc = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = knockedout_flag } + desc = ep3_contract_event.0591.desc.knockedout + } + triggered_desc = { + trigger = { has_character_flag = camewillingly_flag } + desc = ep3_contract_event.0591.desc.camewillingly + } + } + } + theme = intrigue + override_background = { + reference = terrain_scope + } + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:heir + animation = thinking + } + lower_center_portrait = { + character = scope:task_contract_employer + } + + immediate = { + set_contract_scopes_effect = yes + + scope:task_contract_employer = { + random_sub_realm_barony = { + limit = { + exists = holder + } + save_scope_as = random_barony + } + } + + scope:heir = { + add_trait = gallivanter + } + } + + #Best of luck! + option = { + name = ep3_contract_event.0591.a + + scope:heir = { + add_hook = { + target = root + type = favor_hook + } + start_travel_plan = { + destination = scope:random_barony + } + } + + scope:task_contract = { + complete_task_contract = success_standard + } + + ai_chance = { + base = 10 + } + } +} + +# Eliminate Heir - Resolution +ep3_contract_event.0595 = { + type = character_event + title = ep3_contract_event.0595.t + desc = ep3_contract_event.0595.desc + theme = intrigue + override_background = { + reference = council_chamber + } + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:task_contract_employer + animation = anger + } + + immediate = { + set_contract_scopes_effect = yes + scope:task_contract = { + complete_task_contract = failure_standard + } + } + + option = { + name = ep3_contract_event.0595.a + + stress_impact = { + base = miniscule_stress_impact_gain + } + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = contract_success_flag + remove_character_flag = contract_failure_flag + } +} diff --git a/events/dlc/ep3/ep3_emperor_yearly_8.txt b/events/dlc/ep3/ep3_emperor_yearly_8.txt new file mode 100644 index 00000000..a9542afa --- /dev/null +++ b/events/dlc/ep3/ep3_emperor_yearly_8.txt @@ -0,0 +1,2212 @@ +namespace = ep3_emperor_yearly + +############################ +# EP3 Admin Emperor Events # +# by Joe Parkin # +# 8000 - 8500 # +############################ + +# Capital depopulated: move from somewhere else? + +scripted_trigger ep3_emperor_yearly_8000_county_holder_trigger = { + NOT = { has_county_modifier = ep3_development_sacrifice_modifier } + holder = { + NOR = { + this = root + scope:suggestor ?= this + } + OR = { + is_governor = yes + liege = { is_governor = yes } + } + } +} + +scripted_effect ep3_emperor_yearly_8000_save_governor_county_pair_effect = { + save_scope_as = governor_$COUNT$ + random_in_list = { + list = developed_counties + limit = { + OR = { + holder = scope:governor_$COUNT$ + holder = { is_vassal_of = scope:governor_$COUNT$ } + } + } + save_scope_as = county_$COUNT$ + } +} + +scripted_effect ep3_emperor_yearly_8000_county_effect = { + scope:governor_$COUNT$ = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -20 + } + } + save_scope_value_as = { + name = development_loss + value = { + value = scope:county_$COUNT$.development_level + multiply = 0.1 + ceiling = yes + multiply = -1 + } + } + scope:county_$COUNT$ = { + change_development_level = scope:development_loss + add_county_modifier = { + modifier = ep3_development_sacrifice_modifier + years = 10 + } + } +} + +ep3_emperor_yearly.8000 = { + type = character_event + title = ep3_emperor_yearly.8000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { capital_province = province:496 } # Constantinopolis + desc = ep3_emperor_yearly.8000.intro_byz + } + desc = ep3_emperor_yearly.8000.intro + } + desc = ep3_emperor_yearly.8000.desc + } + theme = emperor + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:suggestor + triggered_animation = { + trigger = { has_trait = blind } + animation = admiration + } + animation = chancellor + } + lower_left_portrait = scope:governor_1 + lower_center_portrait = scope:governor_2 + lower_right_portrait = scope:governor_3 + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + highest_held_title_tier >= tier_empire + is_independent_ruler = yes + government_allows = administrative + # Ensure there are people to annoy + any_vassal = { + count >= 3 + is_governor = yes + } + # Ensure this has not happened already + NOT = { + capital_county = { has_county_modifier = ep3_development_waning_modifier } + } + # Recent conflict + OR = { + any_truce_holder = { } + any_truce_target = { } + is_at_war = yes + } + # Be nice + NOR = { + any_character_epidemic = { } + capital_province = { + any_province_epidemic = { } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + any_truce_holder = { highest_held_title_tier >= tier_kingdom } + add = 1 + } + modifier = { + any_truce_target = { highest_held_title_tier >= tier_kingdom } + add = 1 + } + modifier = { + is_at_war = yes + add = 1 + } + } + + immediate = { + if = { # Steward + limit = { + cp:councillor_steward ?= { is_available_adult = yes } + } + cp:councillor_steward = { save_scope_as = suggestor } + } + else = { # Fallback + random_courtier = { + limit = { is_available_adult = yes } + weight = { + base = 1 + modifier = { + has_trait = education_stewardship + factor = 10 + } + modifier = { add = stewardship } + modifier = { + has_trait = blind + factor = 0 + } + } + save_scope_as = suggestor + } + } + # Find development target + ordered_sub_realm_county = { + limit = { ep3_emperor_yearly_8000_county_holder_trigger = yes } + order_by = development_level + position = 2 + save_scope_value_as = { + name = minimum_development + value = development_level + } + } + # Find matching counties + every_sub_realm_county = { + limit = { + development_level >= scope:minimum_development + ep3_emperor_yearly_8000_county_holder_trigger = yes + } + add_to_list = developed_counties + holder = { + if = { + limit = { is_governor = yes } + add_to_list = developed_governors + } + else_if = { + limit = { + liege = { is_governor = yes } + } + liege = { add_to_list = developed_governors } + } + } + } + hidden_effect = { + while = { + count = 3 + random_in_list = { + list = developed_governors + limit = { + trigger_if = { + limit = { exists = scope:governor_1 } + this != scope:governor_1 + } + trigger_if = { + limit = { exists = scope:governor_2 } + this != scope:governor_2 + } + } + weight = { + base = 1 + modifier = { + OR = { + is_of_major_interest_trigger = { CHARACTER = root } + liege = { is_of_major_interest_trigger = { CHARACTER = root } } + } + add = 5 + } + modifier = { + OR = { + is_of_major_interest_trigger = { CHARACTER = scope:suggestor } + liege = { is_of_major_interest_trigger = { CHARACTER = scope:suggestor } } + } + add = 3 + } + modifier = { + OR = { + is_of_minor_interest_trigger = { CHARACTER = root } + liege = { is_of_minor_interest_trigger = { CHARACTER = root } } + } + add = 5 + } + modifier = { + OR = { + is_of_minor_interest_trigger = { CHARACTER = scope:suggestor } + liege = { is_of_minor_interest_trigger = { CHARACTER = scope:suggestor } } + } + add = 3 + } + } + if = { + limit = { exists = scope:governor_2 } + ep3_emperor_yearly_8000_save_governor_county_pair_effect = { COUNT = 3 } + } + else_if = { + limit = { exists = scope:governor_1 } + ep3_emperor_yearly_8000_save_governor_county_pair_effect = { COUNT = 2 } + } + else = { + ep3_emperor_yearly_8000_save_governor_county_pair_effect = { COUNT = 1 } + } + } + } + } + } + + option = { + name = ep3_emperor_yearly.8000.a + highlight_portrait = scope:governor_1 + ep3_emperor_yearly_8000_county_effect = { COUNT = 1 } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = 0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:governor_1 + multiplier = -0.5 + } + } + } + + option = { + name = ep3_emperor_yearly.8000.b + trigger = { exists = scope:governor_2 } + highlight_portrait = scope:governor_2 + ep3_emperor_yearly_8000_county_effect = { COUNT = 2 } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = 0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:governor_2 + multiplier = -0.5 + } + } + } + + option = { + name = ep3_emperor_yearly.8000.c + trigger = { exists = scope:governor_3 } + highlight_portrait = scope:governor_3 + ep3_emperor_yearly_8000_county_effect = { COUNT = 3 } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = 0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:governor_3 + multiplier = -0.5 + } + } + } + + option = { + name = ep3_emperor_yearly.8000.d + capital_county = { + change_development_level = -2 + add_county_modifier = { + modifier = ep3_development_waning_modifier + years = 10 + } + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 0.25 + } + } + } +} + +# The fake letter of introduction + +scripted_trigger emperor_yearly_8010_valid_governor_trigger = { + is_governor = yes + is_available_adult = yes + NOR = { + is_close_family_of = root + is_spouse_of = root + has_any_scripted_relation = root + } +} + +ep3_emperor_yearly.8010 = { + type = letter_event + opening = { + first_valid = { + triggered_desc = { + trigger = { has_title = title:e_byzantium } + desc = ep3_emperor_yearly.8010.opening_byz + } + desc = ep3_emperor_yearly.8010.opening + } + } + desc = ep3_emperor_yearly.8010.desc + sender = { + character = scope:governor + animation = sadness + } + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + highest_held_title_tier >= tier_empire + is_independent_ruler = yes + government_allows = administrative + # Ensure there is a governor to be duped + any_vassal = { emperor_yearly_8010_valid_governor_trigger = yes } + } + + immediate = { + random_vassal = { + limit = { emperor_yearly_8010_valid_governor_trigger = yes } + weight = { + base = 1 + modifier = { + highest_held_title_tier = tier_duchy + add = 1 + } + modifier = { + is_powerful_vassal = yes + add = -1 + } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = governor + } + create_character = { + template = pool_repopulate_intrigue + location = scope:governor.capital_province + dynasty = none + save_scope_as = liar + } + hidden_effect = { + rightfully_imprison_character_effect = { + TARGET = scope:liar + IMPRISONER = scope:governor + } + } + show_as_tooltip = { + scope:governor = { + imprison = { + target = scope:liar + type = house_arrest + } + } + } + } + + option = { # Reward + name = ep3_emperor_yearly.8010.a + pay_short_term_gold = { + gold = tiny_gold_value + target = scope:governor + } + reverse_add_opinion = { + target = scope:governor + modifier = grateful_opinion + opinion = 15 + } + stress_impact = { + greedy = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = -0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:governor + multiplier = 0.25 + } + } + } + + option = { # Corroborate + name = ep3_emperor_yearly.8010.b + change_influence = medium_influence_loss + add_prestige = minor_prestige_gain + scope:liar = { release_from_prison = yes } + scope:governor = { add_courtier = scope:liar } + reverse_add_opinion = { + target = scope:liar + modifier = grateful_opinion + opinion = 30 + } + add_hook = { + target = scope:liar + type = loyalty_hook + } + stress_impact = { + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 0.5 + ai_value_modifier = { + ai_honor = -0.5 + } + } + } + + option = { # Imprison + name = ep3_emperor_yearly.8010.c + scope:governor = { change_influence = minor_influence_gain } + hidden_effect = { + scope:liar = { release_from_prison = yes } + } + send_interface_toast = { + title = ep3_emperor_yearly.8010.c.tt + left_icon = scope:liar + imprison = { + target = scope:liar + type = house_arrest + } + } + hidden_effect = { + scope:liar = { change_prison_type = dungeon } + } + stress_impact = { + lazy = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_vengefulness = 0.5 + } + } + } + + option = { # Dismiss + name = ep3_emperor_yearly.8010.d + scope:governor = { change_influence = medium_influence_gain } + add_dread = miniscule_dread_gain + scope:liar = { + death = { + death_reason = death_execution + killer = scope:governor + } + } + stress_impact = { + forgiving = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = -0.25 + ai_energy = -0.25 + } + } + } +} + +# Selling the purple + +scripted_trigger emperor_yearly_8020_valid_purpler_trigger = { + is_available_ai_adult = yes + top_liege = root + is_clergy = no + NOR = { + has_character_modifier = ep3_bought_the_purple_modifier + root.cp:councillor_steward ?= this + is_spouse_of = root + has_trait = humble + has_trait = content + } +} + +scripted_effect emperor_yearly_8020_valid_purpler_effect = { + save_scope_as = purplest + pay_short_term_gold = { + target = root + gold = scope:purplest.major_gold_value + } + if = { + limit = { is_close_family_of = root } + change_influence = minor_influence_gain + } + else_if = { + limit = { has_claim_on = root.primary_title } + change_influence = minor_influence_gain + } + else = { change_influence = medium_influence_gain } + add_character_modifier = ep3_bought_the_purple_modifier + root.primary_title = { + change_appointment_investment = { + target = scope:purplest + value = 25 + } + } +} + +ep3_emperor_yearly.8020 = { + type = character_event + title = ep3_emperor_yearly.8020.t + desc = { + first_valid = { + triggered_desc = { + trigger = { gold < -150 } + desc = ep3_emperor_yearly.8020.intro.really_bankrupt + } + triggered_desc = { + trigger = { gold < 0 } + desc = ep3_emperor_yearly.8020.intro.bankrupt + } + desc = ep3_emperor_yearly.8020.intro + } + desc = ep3_emperor_yearly.8020.desc + } + theme = emperor + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:suggestor + animation = admiration + } + lower_left_portrait = scope:purpler_1 + lower_center_portrait = scope:purpler_2 + lower_right_portrait = scope:purpler_3 + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + is_roman_emperor_trigger = yes + # Ensure you are struggling financially + gold < medium_gold_value + # Ensure there is someone governor who wants the purple + OR = { + any_relation = { + type = friend + emperor_yearly_8020_valid_purpler_trigger = yes + } + primary_title = { + any_claimant = { emperor_yearly_8020_valid_purpler_trigger = yes } + } + any_vassal = { + is_governor = yes + emperor_yearly_8020_valid_purpler_trigger = yes + } + } + } + + weight_multiplier = { + base = 1 + # Weight up as you get poorer + modifier = { + gold < minor_gold_value + add = 1 + } + modifier = { + gold < tiny_gold_value + add = 1 + } + modifier = { + gold < 0 + add = 1 + } + modifier = { + gold < 50 + add = 1 + } + modifier = { + gold < 100 + add = 1 + } + modifier = { + gold < 150 + add = 1 + } + } + + immediate = { + # Find suitable candidates + every_relation = { + type = friend + limit = { emperor_yearly_8020_valid_purpler_trigger = yes } + add_to_list = potential_purplers + } + primary_title = { + every_claimant = { + limit = { emperor_yearly_8020_valid_purpler_trigger = yes } + add_to_list = potential_purplers + } + } + every_vassal = { + limit = { + is_governor = yes + emperor_yearly_8020_valid_purpler_trigger = yes + } + add_to_list = potential_purplers + } + # Select up to 3 + while = { + limit = { + # Have not already found 3 + NAND = { + exists = scope:purpler_1 + exists = scope:purpler_2 + exists = scope:purpler_3 + } + # Anyone left to pick from + any_in_list = { + list = potential_purplers + NOR = { + scope:purpler_1 ?= this + scope:purpler_2 ?= this + scope:purpler_3 ?= this + } + } + } + random_in_list = { + list = potential_purplers + # Ability to pay + limit = { gold >= monumental_gold_value } + alternative_limit = { gold >= massive_gold_value } + alternative_limit = { gold >= major_gold_value } + alternative_limit = { always = yes } + weight = { + base = 1 + ai_value_modifier = { + ai_boldness = 0.1 + ai_greed = 0.1 + } + modifier = { # Prefer arrogant + has_trait = arrogant + add = 10 + } + modifier = { # Prefer ambitious + has_trait = ambitious + add = 5 + } + modifier = { # Prefer born purplers + has_trait = born_in_the_purple + factor = 2 + } + modifier = { # Prefer higher tiers + highest_held_title_tier > 0 + add = { + value = highest_held_title_tier + multiply = 3 + } + } + modifier = { # Don't like barons + highest_held_title_tier = tier_barony + add = -50 + } + modifier = { # Don't like counts + highest_held_title_tier = tier_county + add = -25 + } + modifier = { # Prefer best friends + has_relation_best_friend = root + add = 10 + } + modifier = { # Prefer friends + has_relation_friend = root + add = 10 + } + modifier = { # Prefer strong claimants + has_strong_claim_on = root.primary_title + add = 10 + } + modifier = { # Prefer claimants + has_claim_on = root.primary_title + add = 10 + } + # For more diversity + modifier = { + has_relation_friend = root + any_in_list = { + list = purplers + has_relation_friend = root + } + factor = 0 + } + modifier = { + has_claim_on = root.primary_title + any_in_list = { + list = purplers + has_claim_on = root.primary_title + } + factor = 0 + } + modifier = { + is_vassal_of = root + is_governor = yes + any_in_list = { + list = purplers + is_vassal_of = root + is_governor = yes + } + factor = 0 + } + # Interest + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + modifier = { + gold <= medium_gold_value + add = -25 + } + modifier = { + gold <= minor_gold_value + add = -50 + } + modifier = { + gold <= 0 + factor = 0 + } + } + if = { + limit = { exists = scope:purpler_2 } + save_scope_as = purpler_3 + } + else_if = { + limit = { exists = scope:purpler_1 } + save_scope_as = purpler_2 + } + else = { save_scope_as = purpler_1 } + remove_from_list = potential_purplers + add_to_list = purplers + } + } + # Save Suggestor + if = { # Steward + limit = { + cp:councillor_steward ?= { is_available_adult = yes } + } + cp:councillor_steward = { save_scope_as = suggestor } + } + else = { # Fallback + random_courtier = { + limit = { + is_available_adult = yes + NOT = { is_in_list = purplers } + } + weight = { + base = 1 + modifier = { + has_trait = education_stewardship + factor = 10 + } + modifier = { add = stewardship } + modifier = { + has_trait = blind + factor = 0 + } + } + save_scope_as = suggestor + } + } + } + + option = { # 1 + name = { + trigger = { + scope:purpler_1 = { has_relation_friend = root } + } + text = ep3_emperor_yearly.8020.a.friend + } + name = { + trigger = { + scope:purpler_1 = { has_claim_on = root.primary_title } + } + text = ep3_emperor_yearly.8020.a.claimant + } + name = { + trigger = { + scope:purpler_1 = { + NOR = { + has_relation_friend = root + has_claim_on = root.primary_title + } + } + } + text = ep3_emperor_yearly.8020.a.vassal + } + highlight_portrait = scope:purpler_1 + scope:purpler_1 = { emperor_yearly_8020_valid_purpler_effect = yes } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = -0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:purpler_1 + multiplier = 0.25 + } + } + } + + option = { # 2 + name = { + trigger = { + scope:purpler_2 = { has_relation_friend = root } + } + text = ep3_emperor_yearly.8020.b.friend + } + name = { + trigger = { + scope:purpler_2 = { has_claim_on = root.primary_title } + } + text = ep3_emperor_yearly.8020.b.claimant + } + name = { + trigger = { + scope:purpler_2 = { + NOR = { + has_relation_friend = root + has_claim_on = root.primary_title + } + } + } + text = ep3_emperor_yearly.8020.b.vassal + } + highlight_portrait = scope:purpler_2 + scope:purpler_2 = { emperor_yearly_8020_valid_purpler_effect = yes } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 0.5 + ai_value_modifier = { + ai_honor = -0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:purpler_2 + multiplier = 0.25 + } + } + } + + option = { # 3 + name = { + trigger = { + scope:purpler_3 = { has_relation_friend = root } + } + text = ep3_emperor_yearly.8020.c.friend + } + name = { + trigger = { + scope:purpler_3 = { has_claim_on = root.primary_title } + } + text = ep3_emperor_yearly.8020.c.claimant + } + name = { + trigger = { + scope:purpler_3 = { + NOR = { + has_relation_friend = root + has_claim_on = root.primary_title + } + } + } + text = ep3_emperor_yearly.8020.c.vassal + } + highlight_portrait = scope:purpler_3 + scope:purpler_3 = { emperor_yearly_8020_valid_purpler_effect = yes } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_rationality = -0.5 + } + opinion_modifier = { + who = root + opinion_target = scope:purpler_3 + multiplier = 0.25 + } + } + } + + option = { # PURPLE MINE + name = ep3_emperor_yearly.8020.d + add_prestige = medium_prestige_value + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = -0.25 + ai_energy = -0.25 + } + } + } +} + +# Porphyrios returns + +scripted_trigger ep3_emperor_yearly_8030_bosporos_trigger = { + any_sub_realm_county = { + is_coastal_county = yes + OR = { + duchy = title:d_thrace + duchy = title:d_optimatoi + duchy = title:d_opsikion + this = title:c_abydos + } + } +} + +scripted_effect ep3_emperor_yearly_8030_coast_modifier_effect = { + every_in_list = { + list = coast_counties + custom = every_bosporos_coast_county_tt + add_county_modifier = { + modifier = ep3_leviathan_$MODIFIER$_county_modifier + years = 15 + } + } +} + +scripted_effect ep3_emperor_yearly_8030_sea_modifier_effect = { + every_in_list = { + list = sea_provinces + custom = every_bosporos_sea_province_tt + add_province_modifier = { + modifier = ep3_leviathan_$MODIFIER$_province_modifier + years = 15 + } + } +} + +ep3_emperor_yearly.8030 = { + type = character_event + title = ep3_emperor_yearly.8030.t + desc = ep3_emperor_yearly.8030.desc + theme = emperor + override_background = { reference = docks } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:complainer + animation = survey + } + cooldown = { years = 50 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + is_roman_emperor_trigger = yes + # Have a marshal + cp:councillor_marshal ?= { is_ai = yes } + # Ensure you control the Bosporos strait + completely_controls = title:c_byzantion # Dytika + completely_controls = title:c_bithynia # Anatoli + # Never twice + NOT = { has_character_flag = ep3_porphyrios_cooldown } + } + + immediate = { + add_character_flag = ep3_porphyrios_cooldown + # Sea provinces scopes + province:8668 = { add_to_list = sea_provinces } + province:947 = { add_to_list = sea_provinces } + province:8665 = { add_to_list = sea_provinces } + # Coastal counties scopes + title:c_byzantion = { add_to_list = coast_counties } + title:d_thrace = { + every_de_jure_county = { + limit = { is_coastal_county = yes } + add_to_list = coast_counties + } + } + title:d_optimatoi = { + every_de_jure_county = { + limit = { is_coastal_county = yes } + add_to_list = coast_counties + } + } + title:d_opsikion = { + every_de_jure_county = { + limit = { is_coastal_county = yes } + add_to_list = coast_counties + } + } + title:c_abydos = { add_to_list = coast_counties } + # Save marshal + cp:councillor_marshal = { save_scope_as = marshal } + # Complaining character scope + cp:councillor_steward ?= { add_to_list = complainants } + every_vassal = { + limit = { ep3_emperor_yearly_8030_bosporos_trigger = yes } + add_to_list = complainants + } + every_courtier = { add_to_list = complainants } + ordered_in_list = { + list = complainants + limit = { + is_available_ai_adult = yes + is_clergy = no + } + order_by = highest_held_title_tier + save_scope_as = complainer + } + # Justinian I for flavor + character:70512 = { save_scope_as = justinian } + random = { + chance = 25 + save_scope_as = artifact_reward + } + } + + option = { # Bold + name = ep3_emperor_yearly.8030.a + flavor = ep3_emperor_yearly.8030.a.flavor + scope:marshal = { + duel = { + skill = martial + value = decent_skill_rating + 5 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 1 + } + desc = ep3_emperor_yearly.8030.a.success + root = { + show_as_tooltip = { + send_interface_toast = { + title = ep3_emperor_yearly.8030.a.success + left_icon = root + add_prestige = medium_prestige_gain + add_short_term_gold = medium_gold_value + add_character_modifier = { + modifier = ep3_leviathan_success_character_modifier + years = 15 + } + scope:marshal = { change_influence = medium_influence_gain } + } + random = { + chance = 25 + create_artifact = { + name = whale_fat_candles_name + description = whale_fat_candles_description + rarity = masterwork + type = miscellaneous + visuals = small_box + modifier = artifact_monthly_prestige_5_modifier + creator = root + save_scope_as = whale_fat_candles + } + } + } + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = ep3_emperor_yearly.8030.a.success + left_icon = root + add_prestige = medium_prestige_gain + add_short_term_gold = medium_gold_value + add_character_modifier = { + modifier = ep3_leviathan_success_character_modifier + years = 15 + } + scope:marshal = { change_influence = medium_influence_gain } + if = { + limit = { exists = scope:artifact_reward } + create_artifact = { + name = whale_fat_candles_name + description = whale_fat_candles_description + rarity = masterwork + type = miscellaneous + visuals = small_box + modifier = artifact_monthly_prestige_5_modifier + creator = root + save_scope_as = whale_fat_candles + } + } + } + } + } + } + 10 = { + desc = ep3_emperor_yearly.8030.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 1 + } + root = { + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_emperor_yearly.8030.a.failure + left_icon = root + add_prestige = minor_prestige_loss + remove_short_term_gold = tiny_gold_value + add_character_modifier = { + modifier = ep3_leviathan_failure_character_modifier + years = 15 + } + ep3_emperor_yearly_8030_coast_modifier_effect = { MODIFIER = loose } + ep3_emperor_yearly_8030_sea_modifier_effect = { MODIFIER = loose } + } + } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + calm = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = -0.25 + ai_boldness = 0.5 + } + } + } + + option = { # Rational + name = ep3_emperor_yearly.8030.c + remove_treasury_or_gold = minor_treasury_or_gold_value + ep3_emperor_yearly_8030_coast_modifier_effect = { MODIFIER = mandate } + ep3_emperor_yearly_8030_sea_modifier_effect = { MODIFIER = mandate } + stress_impact = { + greedy = medium_stress_impact_gain + lazy = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = -0.5 + ai_boldness = 0.5 + } + } + } + + option = { # Do nothing + name = ep3_emperor_yearly.8030.d + flavor = ep3_emperor_yearly.8030.d.flavor + add_piety = major_piety_gain + ep3_emperor_yearly_8030_coast_modifier_effect = { MODIFIER = loose } + ep3_emperor_yearly_8030_sea_modifier_effect = { MODIFIER = loose } + stress_impact = { + zealous = medium_stress_impact_loss + diligent = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = -0.25 + ai_energy = -0.25 + } + } + } +} + +# Iconoclasm + +ep3_emperor_yearly.8040 = { + type = character_event + title = ep3_emperor_yearly.8040.t + desc = { + desc = ep3_emperor_yearly.8040.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:truce_target } + desc = ep3_emperor_yearly.8040.truce_target + } + triggered_desc = { + trigger = { exists = scope:truce_holder } + desc = ep3_emperor_yearly.8040.truce_holder + } + triggered_desc = { + trigger = { exists = scope:epidemic } + desc = ep3_emperor_yearly.8040.plague + } + triggered_desc = { + trigger = { + any_in_list = { + variable = formerly_infected_counties + this = title:c_byzantion + } + } + desc = ep3_emperor_yearly.8040.past_plague + } + desc = ep3_emperor_yearly.8040.debt + } + desc = ep3_emperor_yearly.8040.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:family } + desc = ep3_emperor_yearly.8040.family + } + triggered_desc = { + trigger = { exists = scope:predecessor } + desc = ep3_emperor_yearly.8040.predecessor + } + desc = ep3_emperor_yearly.8040.leo + } + } + theme = emperor + override_background = { reference = ep3_hagia_sophia } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:priest + triggered_animation = { + trigger = { faith = faith:iconoclast } + animation = admiration + } + animation = disapproval + } + lower_right_portrait = scope:leo + cooldown = { years = 50 } + + trigger = { + OR = { + static_group_filter = { + group = ep3_emperor_yearly.8040 + match = 0.2 + } + has_trait = cynical + } + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + has_title = title:e_byzantium + # You are not an Iconoclast + faith = faith:orthodox + # Something bad has happened + OR = { + # Won war recently to powerful enemy + any_truce_holder = { highest_held_title_tier >= tier_kingdom } + # Lost war recently to powerful enemy + any_truce_target = { highest_held_title_tier >= tier_kingdom } + # In debt + gold < -100 + # Epidemic + capital_province = { + any_province_epidemic = { } + } + any_in_list = { + variable = formerly_infected_counties + title_province = root.capital_province + } + } + # Never twice + NOT = { has_character_flag = ep3_iconoclast_cooldown } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + # Constantinopolis is Iconoclast + capital_province.faith = faith:iconoclast + } + modifier = { + factor = 2 + # Iconoclasm is about + any_sub_realm_county = { faith = faith:iconoclast } + } + modifier = { + factor = 2 + # Won war recently to powerful enemy + any_truce_holder = { highest_held_title_tier >= tier_kingdom } + } + modifier = { + factor = 2 + # Lost war recently to powerful enemy + any_truce_target = { highest_held_title_tier >= tier_kingdom } + } + modifier = { + factor = 2 + # In debt + gold < -100 + } + modifier = { + factor = 2 + capital_province = { + any_province_epidemic = { } + } + } + modifier = { + factor = 2 + any_in_list = { + variable = formerly_infected_counties + title_province = root.capital_province + } + } + } + + immediate = { + add_character_flag = ep3_iconoclast_cooldown + capital_province = { save_scope_as = constantinople } + character:70502 = { save_scope_as = leo } + title:e_byzantium.previous_holder ?= { + if = { + limit = { faith = faith:iconoclast } + save_scope_as = predecessor + } + } + if = { + limit = { + any_close_family_member = { + faith = faith:iconoclast + OR = { + is_parent_of = root + is_grandparent_of = root + } + } + } + random_close_family_member = { + limit = { + sex_same_as = root + is_parent_of = root + faith = faith:iconoclast + } + alternative_limit = { + is_parent_of = root + faith = faith:iconoclast + } + alternative_limit = { + sex_same_as = root + is_grandparent_of = root + faith = faith:iconoclast + } + alternative_limit = { + is_grandparent_of = root + faith = faith:iconoclast + } + save_scope_as = family + } + } + if = { + limit = { + title:k_orthodox.holder = { is_vassal_of = root } + } + title:k_orthodox.holder = { save_scope_as = priest } + } + else = { + ordered_vassal = { + limit = { + OR = { + is_clergy = yes + is_theocratic_lessee = yes + government_has_flag = government_is_theocracy + } + } + order_by = highest_held_title_tier + save_scope_as = priest + } + } + # Fallback + if = { + limit = { NOT = { exists = scope:priest } } + cp:councillor_court_chaplain ?= { save_scope_as = priest } + } + if = { + limit = { + # Lost war recently to powerful enemy + any_truce_target = { highest_held_title_tier >= tier_kingdom } + } + ordered_truce_target = { + order_by = max_military_strength + save_scope_as = truce_target + } + } + if = { + limit = { + # Won war recently to powerful enemy + any_truce_holder = { highest_held_title_tier >= tier_kingdom } + } + ordered_truce_holder = { + order_by = max_military_strength + save_scope_as = truce_holder + } + } + scope:constantinople = { + if = { + limit = { + any_province_epidemic = { } + } + random_province_epidemic = { + limit = { outbreak_intensity = apocalyptic } + alternative_limit = { outbreak_intensity = major } + alternative_limit = { outbreak_intensity = minor } + save_scope_as = epidemic + } + } + } + } + + option = { # Convert + name = ep3_emperor_yearly.8040.a + add_piety = major_piety_gain + set_character_faith_with_conversion = faith:iconoclast + if = { + limit = { + faith:iconoclast = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + add_character_modifier = { + modifier = ep3_iconoclast_modifier + years = 15 + } + if = { + limit = { ep3_iconoclast_vassal_count > 0 } + change_influence = { + value = 25 + multiply = ep3_iconoclast_vassal_count + } + } + scope:priest = { + if = { + limit = { faith != faith:iconoclast } + add_opinion = { + target = root + modifier = angry_opinion + opinion = -30 + } + } + else = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 15 + } + } + } + stress_impact = { + stubborn = medium_stress_impact_gain + lazy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + brave = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 0.5 + ai_zeal = 0.5 + } + } + } + + option = { # Stay the course + name = ep3_emperor_yearly.8040.b + change_influence = medium_influence_gain + stress_impact = { + fickle = medium_stress_impact_gain + zealous = medium_stress_impact_gain + humble = medium_stress_impact_gain + craven = medium_stress_impact_gain + } + ai_chance = { + base = 2 + ai_value_modifier = { + ai_energy = -0.5 + ai_rationality = 0.5 + } + } + } +} + +# Norse raiders + +scripted_trigger ep3_emperor_yearly_8050_culture_trigger = { + OR = { + this = culture:norse + any_parent_culture_or_above = { this = culture:norse } + } + culture_number_of_counties > 0 +} + +scripted_effect ep3_emperor_yearly_8050_unchecked_county_effect = { + change_county_control = -10 + change_development_level = -1 + add_county_modifier = { + modifier = ep3_raider_unchecked_modifier + years = 10 + } +} + +ep3_emperor_yearly.8050 = { + type = character_event + title = ep3_emperor_yearly.8050.t + desc = ep3_emperor_yearly.8050.desc + theme = emperor + override_background = { reference = ep3_constantinople } + left_portrait = { + character = root + animation = war_over_tie + } + right_portrait = { + character = cp:councillor_marshal + animation = worry + } + lower_right_portrait = { + character = scope:raider + outfit_tags = { military } + } + cooldown = { years = 50 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + government_allows = administrative + highest_held_title_tier >= tier_empire + is_independent_ruler = yes + # Have a marshal + cp:councillor_marshal ?= { is_ai = yes } + # Sea capital + any_held_county = { + development_level >= terrible_development_level + title_province = { + OR = { + is_coastal = yes + is_riverside_province = yes + } + # Only oceans that make sense + OR = { + geographical_region = world_europe + geographical_region = world_middle_east_jerusalem + geographical_region = world_africa_north + geographical_region = world_asia_minor + geographical_region = world_steppe_west + } + } + } + # Never twice + NOT = { has_character_flag = ep3_sea_raiders_cooldown } + # Culture + OR = { + culture:norse = { culture_number_of_counties >= 1 } + any_culture_global = { + culture_number_of_counties >= 1 + any_parent_culture_or_above = { this = culture:norse } + } + } + # Faith + religion:germanic_religion = { + any_faith = { num_county_followers >= 1 } + } + } + + immediate = { + # Never twice + add_character_flag = ep3_sea_raiders_cooldown + # Save marshal + cp:councillor_marshal = { save_scope_as = marshal } + # Pick a port county + if = { + limit = { + capital_province = { is_coastal = yes } + } + capital_province.county = { save_scope_as = raid_target } + } + else = { + random_held_county = { + limit = { + development_level >= terrible_development_level + title_province = { is_coastal = yes } + } + weight = { + base = 1 + modifier = { add = development_level } + modifier = { + title_province = { has_building_or_higher = common_tradeport_01 } + factor = 2 + } + } + save_scope_as = raid_target + } + } + # Save sea for raider location + scope:raid_target.title_province = { + random_neighboring_province = { + limit = { is_sea_province = yes } + save_scope_as = sea_province + } + } + # Culture + random_culture_global = { + limit = { + has_cultural_pillar = heritage_north_germanic + has_cultural_tradition = tradition_fp1_coastal_warriors + ep3_emperor_yearly_8050_culture_trigger = yes + } + alternative_limit = { + has_cultural_tradition = tradition_fp1_coastal_warriors + ep3_emperor_yearly_8050_culture_trigger = yes + } + alternative_limit = { + has_cultural_pillar = heritage_north_germanic + ep3_emperor_yearly_8050_culture_trigger = yes + } + alternative_limit = { ep3_emperor_yearly_8050_culture_trigger = yes } + weight = { + base = 1 + modifier = { add = culture_number_of_counties } + } + save_scope_as = raider_culture + } + # Faith + religion:germanic_religion = { + random_faith = { + limit = { num_county_followers >= 1 } + weight = { + base = 1 + modifier = { add = num_county_followers } + } + save_scope_as = raider_faith + } + } + # Create raider + create_character = { + template = ep3_sea_raider_template + dynasty = none + location = scope:sea_province + culture = scope:raider_culture + faith = scope:raider_faith + save_scope_as = raider + } + scope:raider = { add_character_flag = wear_armor } + } + + option = { # Recruit + name = { + text = ep3_emperor_yearly.8050.b.byz + trigger = { primary_title = title:e_byzantium } + } + name = { + text = ep3_emperor_yearly.8050.b + trigger = { primary_title != title:e_byzantium } + } + pay_short_term_gold = { + gold = minor_gold_value + target = scope:raider + } + if = { + limit = { has_title = title:e_byzantium } + scope:raider = { add_trait = varangian } + } + add_courtier = scope:raider + reverse_add_opinion = { + target = scope:raider + modifier = loyalty_opinion + opinion = 20 + } + stress_impact = { + paranoid = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_sociability = 0.5 + ai_greed = -0.5 + } + } + } + + option = { # Attack + name = ep3_emperor_yearly.8050.c + scope:marshal = { + duel = { + skill = martial + target = scope:raider + 8 = { + desc = ep3_emperor_yearly.8050.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 1 + } + root = { + send_interface_toast = { + type = event_toast_effect_good + title = ep3_emperor_yearly.8050.c.success + right_icon = scope:raider + add_prestige = medium_prestige_gain + scope:marshal = { + change_influence = medium_influence_gain + add_short_term_gold = root.tiny_gold_value + } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:raider + IMPRISONER = root + } + } + } + } + 12 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 1 + } + desc = ep3_emperor_yearly.8050.c.failure + root = { + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_emperor_yearly.8050.c.failure + right_icon = scope:raider + add_prestige = medium_prestige_loss + scope:raid_target.county = { ep3_emperor_yearly_8050_unchecked_county_effect = yes } + } + } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_boldness = 0.5 + } + } + } + + option = { # Pay-off + name = ep3_emperor_yearly.8050.a + pay_short_term_gold = { + gold = tiny_gold_value + target = scope:raider + } + stress_impact = { + greedy = medium_stress_impact_gain + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_rationality = 0.5 + ai_greed = -0.25 + } + } + } + + after = { + scope:raider = { + if = { + limit = { + OR = { + employer ?= root + imprisoner ?= root + } + } + remove_character_flag = wear_armor + } + else = { silent_disappearance_effect = yes } + } + } +} + +# Defecting governor + +scripted_trigger ep3_emperor_yearly_8060_defector_trigger = { + is_ai = yes + is_governor = yes + is_at_war = no + # Something is rotten + OR = { + root.legitimacy_level <= 2 + governor_efficiency <= 0.75 + } + NOR = { + has_character_flag = ep3_defector_cooldown + has_trait = loyal + has_relation_friend = root + has_relation_lover = root + is_close_family_of = root + is_spouse_of = root + house = root.house + } + opinion = { + target = root + value < -25 + } + save_temporary_scope_as = defector_temp + NOT = { + root = { has_hook = scope:defector_temp } + } + root = { + # Valid defection sponsor + any_neighboring_and_across_water_top_liege_realm_owner = { + ep3_emperor_yearly_8060_neighbour_trigger = { DEFECTOR = scope:defector_temp } + } + # Avoid any factions which are ongoing + NOT = { + any_targeting_faction = { + any_faction_member = { this = scope:defector_temp } + OR = { + faction_can_press_demands = yes + faction_is_at_war = yes + } + } + } + } +} + +scripted_trigger ep3_emperor_yearly_8060_neighbour_trigger = { + highest_held_title_tier > $DEFECTOR$.highest_held_title_tier + opinion = { + target = $DEFECTOR$ + value >= 25 + } + reverse_opinion = { + target = $DEFECTOR$ + value >= 25 + } + OR = { + AND = { + culture = $DEFECTOR$.culture + culture != root.culture + } + AND = { + faith = $DEFECTOR$.faith + faith != root.faith + } + AND = { + dynasty = $DEFECTOR$.dynasty + dynasty != root.dynasty + } + is_spouse_of = $DEFECTOR$ + is_close_family_of = $DEFECTOR$ + has_relation_friend = $DEFECTOR$ + has_relation_lover = $DEFECTOR$ + } +} + +scripted_effect ep3_emperor_yearly_8060_defect_effect = { + add_legitimacy = medium_legitimacy_loss + create_title_and_vassal_change = { + type = conquest + save_scope_as = title_change + add_claim_on_loss = no + } + scope:defector = { + change_liege = { + liege = scope:sponsor + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + custom_tooltip = { + text = ep3_emperor_yearly.8060.every_title + scope:defector = { + every_held_title = { + title_tier >= county + save_scope_as = title + root = { add_pressed_claim = scope:title } + } + } + } + add_opinion = { + target = scope:defector + modifier = treachery_opinion + } + scope:defector = { + if = { + limit = { + scope:sponsor = { + NOT = { government_allows = administrative } + } + } + if = { + limit = { + faith = { religion_tag = islam_religion } + } + change_government = clan_government + } + else = { change_government = feudal_government } + } + hidden_effect = { + every_vassal = { + limit = { government_allows = administrative } + if = { + limit = { + scope:sponsor = { + NOT = { government_allows = administrative } + } + } + if = { + limit = { + faith = { religion_tag = islam_religion } + } + change_government = clan_government + } + else = { change_government = feudal_government } + } + } + } + } +} + +ep3_emperor_yearly.8060 = { + type = character_event + title = ep3_emperor_yearly.8060.t + desc = { + desc = ep3_emperor_yearly.8060.intro + first_valid = { + triggered_desc = { + trigger = { + scope:defector = { is_spouse_of = scope:sponsor } + NOT = { is_spouse_of = scope:defector } + } + desc = ep3_emperor_yearly.8060.spouse + } + triggered_desc = { + trigger = { + scope:defector = { is_close_family_of = scope:sponsor } + NOT = { is_close_family_of = scope:defector } + } + desc = ep3_emperor_yearly.8060.family + } + triggered_desc = { + trigger = { + scope:defector.house = scope:sponsor.house + house != scope:defector.house + } + desc = ep3_emperor_yearly.8060.house + } + triggered_desc = { + trigger = { + scope:defector.dynasty = scope:sponsor.dynasty + dynasty != scope:defector.dynasty + } + desc = ep3_emperor_yearly.8060.dynasty + } + triggered_desc = { + trigger = { + scope:defector.culture = scope:sponsor.culture + culture != scope:defector.culture + scope:defector.faith = scope:sponsor.faith + faith != scope:defector.faith + } + desc = ep3_emperor_yearly.8060.faith_and_culture + } + triggered_desc = { + trigger = { + scope:defector.culture = scope:sponsor.culture + culture != scope:defector.culture + } + desc = ep3_emperor_yearly.8060.culture + } + triggered_desc = { + trigger = { + scope:defector.faith = scope:sponsor.faith + faith != scope:defector.faith + } + desc = ep3_emperor_yearly.8060.faith + } + desc = ep3_emperor_yearly.8060.fallback + } + } + theme = emperor + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = worry + } + lower_center_portrait = scope:defector + lower_right_portrait = scope:sponsor + cooldown = { years = 50 } + + trigger = { + has_ep3_dlc_trigger = yes + # Ensure you are l'empereur + highest_held_title_tier >= tier_empire + is_independent_ruler = yes + government_allows = administrative + # To avoid edge cases + is_at_war = no + # Valid defector exists + any_vassal = { ep3_emperor_yearly_8060_defector_trigger = yes } + } + + immediate = { + ordered_vassal = { + limit = { ep3_emperor_yearly_8060_defector_trigger = yes } + order_by = { + value = 0 + add = { + value = "opinion(root)" + abs = yes + } + } + save_scope_as = defector + add_character_flag = ep3_defector_cooldown + root = { + ordered_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + any_sub_realm_county = { + any_neighboring_county = { + OR = { + holder = scope:defector + holder.liege ?= scope:defector + holder.liege.liege ?= scope:defector + } + } + } + ep3_emperor_yearly_8060_neighbour_trigger = { DEFECTOR = scope:defector } + } + alternative_limit = { + ep3_emperor_yearly_8060_neighbour_trigger = { DEFECTOR = scope:defector } + } + order_by = max_military_strength + save_scope_as = sponsor + } + } + } + } + + option = { # Arrest + name = ep3_emperor_yearly.8060.a + duel = { + skill = intrigue + target = scope:defector + 8 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 1 + } + desc = ep3_emperor_yearly.8060.success + send_interface_toast = { + title = ep3_emperor_yearly.8060.success + left_icon = scope:defector + right_icon = scope:sponsor + change_influence = medium_influence_gain + add_dread = medium_dread_gain + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:defector + IMPRISONER = root + } + reverse_add_opinion = { + target = scope:sponsor + modifier = annoyed_opinion + opinion = -20 + } + } + } + 12 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 1 + } + desc = ep3_emperor_yearly.8060.failure + send_interface_toast = { + title = ep3_emperor_yearly.8060.failure + left_icon = scope:defector + right_icon = scope:sponsor + ep3_emperor_yearly_8060_defect_effect = yes + } + } + } + add_tyranny = medium_tyranny_gain + stress_impact = { + just = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_honor = -0.5 + ai_energy = 0.5 + } + } + } + + option = { # Pay off + name = ep3_emperor_yearly.8060.b + pay_short_term_gold = { + gold = medium_gold_value + target = scope:defector + } + reverse_add_opinion = { + modifier = grateful_opinion + opinion = 25 + target = scope:defector + } + stress_impact = { + greedy = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_vengefulness = -0.5 + ai_greed = -0.5 + } + } + } + + option = { # May defect + name = ep3_emperor_yearly.8060.c + random = { + chance = 33 + save_scope_as = failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_emperor_yearly.8060.defect + left_icon = scope:defector + right_icon = scope:sponsor + ep3_emperor_yearly_8060_defect_effect = yes + } + } + hidden_effect = { + if = { + limit = { NOT = { exists = scope:failure } } + send_interface_toast = { + type = event_toast_effect_neutral + title = ep3_emperor_yearly.8060.no_defect + left_icon = scope:defector + right_icon = scope:sponsor + } + } + } + stress_impact = { + just = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_boldness = 0.5 + } + } + } +} diff --git a/events/dlc/ep3/ep3_laamp_decision_events.txt b/events/dlc/ep3/ep3_laamp_decision_events.txt new file mode 100644 index 00000000..e2c76796 --- /dev/null +++ b/events/dlc/ep3/ep3_laamp_decision_events.txt @@ -0,0 +1,22488 @@ +namespace = ep3_laamp_decision_event +################################ +## Visit Local Settlement Decision +## ep3_laamp_decision_event.1000-1060 +################################ +# ep3_laamp_decision_event.1000 - Enter the Title of ProvinceName. What do you want to do? +# ep3_laamp_decision_event.1001 - Page 2 +# ep3_laamp_decision_event.1010 - Stock up on supplies +# ep3_laamp_decision_event.1020 - Sell an artifact to local peddlers +# ep3_laamp_decision_event.1025 - Head to the Town Crier to spawn Contract(s) +# +# ep3_laamp_decision_event.1030 - Visit the local tavern +# ep3_laamp_decision_event.1031 - Storyteller +# ep3_laamp_decision_event.1033 - Recruitment +# ep3_laamp_decision_event.1035 - Spouse Material +# ep3_laamp_decision_event.1037 - Master Thief +# +# ep3_laamp_decision_event.1040 - Church Holding: Visit the local church grounds +# ep3_laamp_decision_event.1041 - Healer +# ep3_laamp_decision_event.1043 - Church +# ep3_laamp_decision_event.1045 - Garden +# ep3_laamp_decision_event.1047 - Recruit Physician +# +# ep3_laamp_decision_event.1050 - Castle Holding: Visit the local castle grounds +# ep3_laamp_decision_event.1051 - Training Grounds +# ep3_laamp_decision_event.1053 - Recruit at Garrison +# ep3_laamp_decision_event.1055 - Reinforce Men-at-Arms +# ep3_laamp_decision_event.1057 - Recruit Bodyguard +# +# ep3_laamp_decision_event.1060 - City Holding: Visit the local fine craftsmen +# ep3_laamp_decision_event.1061 - Weaponsmith +# ep3_laamp_decision_event.1063 - Armorsmith +# ep3_laamp_decision_event.1065 - Jeweler +# ep3_laamp_decision_event.1067 - Recruit Quartermaster +# + +#The actual adding of the settlement +scripted_effect 1000_add_settlement_effect = { + #A holding is a tad bit more memorable + if = { + limit = { + location = { has_holding = yes } + } + add_to_variable_list = { + name = laamp_visited_settlements_list + target = root.location + years = 15 + } + } + #Otherwise just some rural settlement + else = { + add_to_variable_list = { + name = laamp_visited_settlements_list + target = root.location + years = 10 + } + } +} + +#For loc flavor +scripted_effect 1000_remember_settlement_effect = { + #Do we already remember this place? + if = { + limit = { + has_variable = laamp_visited_settlements_list + any_in_list = { + variable = laamp_visited_settlements_list + this = scope:visiting_location + } + } + #Replace old entry with a new one + remove_list_variable = { + name = laamp_visited_settlements_list + target = scope:visiting_location + } + 1000_add_settlement_effect = yes + } + #Otherwise just add it to the list + else = { + 1000_add_settlement_effect = yes + } +} + +#We return to the main event to peruse other options or leave +scripted_effect 1000_return_to_main_effect = { + custom_tooltip = ep3_laamp_decision_event.return.tt + trigger_event = ep3_laamp_decision_event.1000 +} + +#What was our last location? +scripted_effect 1000_update_last_location_effect = { + if = { + limit = { has_variable = return_from_location } + remove_variable = return_from_location + set_variable = { + name = return_from_location + value = $LOCATION_FLAG$ + } + } + else = { + set_variable = { + name = return_from_location + value = $LOCATION_FLAG$ + } + } +} + +#Clean up variables when we leave the decision +scripted_effect 1000_clean_up_effect = { + #Supplies + remove_variable ?= supply_gold_cost + remove_variable ?= 1010_guards_summoned + #Artifacts + scope:1020_first_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } #If we didn't sell any artifacts + scope:1020_second_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } + scope:1020_third_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } + remove_variable ?= 1021_artifact_sell_screen + #Town Crier + remove_variable ?= 1025_first_contract_desc + remove_variable ?= 1025_second_contract_desc + remove_variable ?= 1025_third_contract_desc + #Healer + scope:1041_health_artifact ?= { remove_variable ?= 1065_accessory_value } + remove_variable ?= 1041_healer_aptitude + remove_variable ?= 1041_partner_healer_aptitude + #Church + remove_variable ?= 1043_collect_gold_difficulty + #Weaponsmith + scope:1061_first_weapon ?= { remove_variable ?= 1061_weapon_value } #If we didn't buy any of the items + scope:1061_second_weapon ?= { remove_variable ?= 1061_weapon_value } + scope:1061_third_weapon ?= { remove_variable ?= 1061_weapon_value } + #Armorer + scope:1063_first_armor ?= { remove_variable ?= 1063_armor_value } #If we didn't buy any of the items + scope:1063_second_armor ?= { remove_variable ?= 1063_armor_value } + scope:1063_third_armor ?= { remove_variable ?= 1063_armor_value } + #Jeweler + scope:1065_first_accessory ?= { remove_variable ?= 1065_accessory_value } #If we didn't buy any of the items + scope:1065_second_accessory ?= { remove_variable ?= 1065_accessory_value } + scope:1065_third_accessory ?= { remove_variable ?= 1065_accessory_value } + #Main + clear_variable_list = list_of_options + remove_variable ?= list_of_options + remove_variable ?= return_from_location + #Un-engage us from the decision + remove_variable ?= ep3_laamp_decision_1000_is_visiting +} + +#Find someone whos company you tolerate +scripted_trigger 1000_appropriate_visiting_partner_basic_trigger = { + location = root.location + is_available = yes + age >= 10 + OR = { + opinion = { + target = root + value >= 25 + } + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + } + NOR = { + has_relation_potential_rival = root + has_relation_victim = root + has_relation_bully = root + #... don't bring your second-in-command while away, duh + has_court_position = second_camp_officer + has_variable = 1010_payment_child + } +} + +#Are we not in a city? +scripted_trigger 1000_is_a_nomadic_holding_trigger = { + scope:visiting_location = { + is_nomadic_location_trigger = yes + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } +} + +#No options left - I tried to do this the easy way, but checking the existence of variable_lists wouldn't let me +scripted_trigger 1000_time_to_go_home_trigger = { + has_variable = return_from_location + #Did we have, and are we done with the Tribal / No Settlement option? + exists = scope:laamp_decision_finished_tavern_option + #Did we have, and are we done with the Church Holding option? + trigger_if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + exists = scope:laamp_decision_finished_church_option + } + #Did we have, and are we done with the Castle Holding option? + trigger_if = { + limit = { + scope:visiting_location = { has_holding_type = castle_holding } + } + exists = scope:laamp_decision_finished_castle_option + } + #Did we have, and are we done with the City Holding option? + trigger_if = { + limit = { + scope:visiting_location = { has_holding_type = city_holding } + } + exists = scope:laamp_decision_finished_craftsmen_option + } + #Did we have, and are we done with the Sell Artifact option? + trigger_if = { + limit = { + OR = { + is_target_in_variable_list = { + name = list_of_options + target = flag:has_artifact_option + } + exists = scope:1020_first_artifact_to_sell + } + } + exists = scope:laamp_decision_sold_artifact + } + #Did we have, and are we done with the Buy Supplies option? + trigger_if = { + limit = { + domicile ?= { provisions = max_provisions } + } + always = yes + } + trigger_else = { exists = scope:laamp_decision_bought_supplies } + #Did we have, and are we done with the Contract option? + OR = { + has_variable = 1025_has_contracted_recently + exists = scope:laamp_decision_has_contracted + } +} + +#Don't sell levelling banners +scripted_trigger 1000_is_unsellable_artifact_trigger = { + OR = { + has_variable = banner_house + has_variable = banner_dynasty + has_variable = 1025_treasure_map + } +} + +#Prioritize sick or ill people if we're heading to a Church Holding +scripted_trigger 1000_has_illness_or_wound_to_treat_trigger = { + OR = { + has_treatable_disease_trigger = yes + has_trait = wounded_1 + has_wounds_trigger = yes + } +} + +#It's either this or a massive, nested trigger_if in the Main Square event :eyes: +scripted_trigger 1000_done_with_second_trigger = { + exists = scope:been_to_second + OR = { + #Only had Supply & Contract + AND = { + OR = { + exists = scope:laamp_decision_bought_supplies + domicile ?= { provisions = max_provisions } + } + NOT = { + is_target_in_variable_list = { + name = list_of_options + target = flag:has_artifact_option + } + } + OR = { + exists = scope:laamp_decision_has_contracted + has_variable = 1025_has_contracted_recently + } + } + #Done all of them + AND = { + OR = { + exists = scope:laamp_decision_bought_supplies + domicile ?= { provisions = max_provisions } + } + is_target_in_variable_list = { + name = list_of_options + target = flag:has_artifact_option + } + exists = scope:laamp_decision_sold_artifact + exists = scope:laamp_decision_has_contracted + } + } +} + +#Set up some reusable trait triggers +scripted_trigger 1010_has_friendly_traits = { + OR = { + has_trait = gregarious + has_trait = trusting + has_trait = compassionate + has_trait = forgiving + has_trait = generous + has_trait = fickle + has_trait = calm + } +} + +scripted_trigger 1010_has_uninterested_traits = { + OR = { + has_trait = callous + has_trait = cynical + has_trait = arrogant + has_trait = fickle + has_trait = arbitrary + has_trait = patient + has_trait = sadistic + } +} + +scripted_trigger 1010_has_commerce_traits = { + OR = { + has_trait = greedy + has_trait = deceitful + has_trait = ambitious + has_trait = diligent + has_trait = impatient + } +} + +scripted_trigger 1010_has_standoffish_traits = { + OR = { + has_trait = shy + has_trait = craven + has_trait = humble + has_trait = paranoid + } +} + +scripted_trigger 1010_has_irrational_traits = { + OR = { + has_trait = eccentric + has_trait = lunatic + has_trait = possessed + } +} + +scripted_trigger 1011_has_no_applicable_traits = { + 1010_has_friendly_traits = no + 1010_has_uninterested_traits = no + 1010_has_commerce_traits = no + 1010_has_standoffish_traits = no + 1010_has_irrational_traits = no +} + + +###################################################################### +# MAIN +# ep3_laamp_decision_event.1000 +###################################################################### +# > Visit Tavern +# > Holding Option (Visit Church / Visit Castle Grounds / Visit Craftsmen District) +# > Page 2 +# > Leave Settlement + + + +#Enter the Title of BaronyName (Constantinople etc). What do you want to do? +ep3_laamp_decision_event.1000 = { + type = character_event + title = ep3_laamp_decision_event.1000.t + window = visit_settlement_window + desc = { + #INTRO: Action / Unique Location / Holding Variations + first_valid = { + ##RETURN: We've returned to this scene, now what + #RETURN: We have no options left - time to go home + triggered_desc = { + trigger = { 1000_time_to_go_home_trigger = yes } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_home + } + #RETURN: Return from where? + first_valid = { + #RETURN: Unique locations + #Constantinople + triggered_desc = { + trigger = { + has_variable = return_from_location + exists = scope:is_constantinople + } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_constantinople_01 + } + random_valid = { + #RETURN: We've returned from Page 2 + triggered_desc = { + trigger = { var:return_from_location ?= flag:second } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_from_second + } + #RETURN: We've returned from the Tavern + triggered_desc = { + trigger = { var:return_from_location ?= flag:tavern } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_from_tavern + } + #RETURN: We've returned from the Church + triggered_desc = { + trigger = { var:return_from_location ?= flag:church_grounds } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_from_church + } + #RETURN: We've returned from the Castle grounds + triggered_desc = { + trigger = { var:return_from_location ?= flag:castle_grounds } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_from_castle + } + #RETURN: We've returned from the Craftsmen + triggered_desc = { + trigger = { var:return_from_location ?= flag:craftsmen } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_from_craftsmen + } + #RETURN: Generics to mix in + #Generics + triggered_desc = { + trigger = { + has_variable = return_from_location + exists = scope:neighboring_county + } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_generic_01 + } + triggered_desc = { + trigger = { has_variable = return_from_location } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_generic_02 + } + triggered_desc = { + trigger = { has_variable = return_from_location } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_generic_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + scope:visiting_location = { has_holding = yes } + } + desc = ep3_laamp_decision_event.1000.desc_intro_returned_generic_04 + } + } + } + ##FIRST TIME: Opening scene, paint a picture + #FIRST TIME: Unique locations: Constantinople + triggered_desc = { + trigger = { exists = scope:is_constantinople } + desc = ep3_laamp_decision_event.1000.desc_intro_constantinople + } + #FIRST TIME: Holding: Intro depending on type of holding (tribal/church/castle/city) + random_valid = { + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + desc = ep3_laamp_decision_event.1000.desc_intro_tribal_holding_01 + } + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + desc = ep3_laamp_decision_event.1000.desc_intro_tribal_holding_02 + } + } + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + desc = ep3_laamp_decision_event.1000.desc_intro_church_holding + } + triggered_desc = { + trigger = { + scope:visiting_location = { has_holding_type = castle_holding } + } + desc = ep3_laamp_decision_event.1000.desc_intro_castle_holding + } + triggered_desc = { + trigger = { + scope:visiting_location = { has_holding_type = city_holding } + } + desc = ep3_laamp_decision_event.1000.desc_intro_city_holding + } + } + #OUTRO: Returned to main square + first_valid = { + ##RETURN HOME + #RETURN HOME: No partner, time to go home + triggered_desc = { + trigger = { + 1000_time_to_go_home_trigger = yes + NOT = { exists = scope:visiting_partner } + } + desc = ep3_laamp_decision_event.1000.desc_outro_home + } + #RETURN HOME: Partner feels it's time to go home + triggered_desc = { + trigger = { + 1000_time_to_go_home_trigger = yes + exists = scope:visiting_partner + } + desc = ep3_laamp_decision_event.1000.desc_outro_partner_home + } + ##RETURN + #RETURN: We've returned to this scene, what do you see + ##Weather fx + first_valid = { + #RETURN: Region - Scandinavia - Summer + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } #Block all RETURN outros for unique locations, they are handled in unique RETURN intro + middle_of_year_season_trigger = yes #Light out + NOR = { + has_variable = 1000_is_currently_raining + has_variable = 1000_is_currently_snowing + } + scope:visiting_location = { geographical_region = world_europe_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_scandinavia_summer_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + has_variable = 1000_is_currently_raining + scope:visiting_location = { geographical_region = world_europe_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_scandinavia_summer_returned_02 + } + #RETURN: Region - Scandinavia - Winter + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_north } + has_variable = 1000_is_currently_snowing + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_scandinavia_winter_returned_01 + } + random_valid = { + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + end_of_year_season_trigger = yes #Dark out + scope:visiting_location = { geographical_region = world_europe_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_scandinavia_winter_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + end_of_year_season_trigger = yes #Dark out + scope:visiting_location = { geographical_region = world_europe_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_scandinavia_winter_returned_03 + } + } + #RETURN: Region - Britannia + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + NOR = { + has_variable = 1000_is_currently_raining + has_variable = 1000_is_currently_foggy + } + scope:visiting_location = { geographical_region = world_europe_west_britannia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_britannia_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + has_variable = 1000_is_currently_raining + scope:visiting_location = { geographical_region = world_europe_west_britannia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_britannia_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + has_variable = 1000_is_currently_foggy + scope:visiting_location = { geographical_region = world_europe_west_britannia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_britannia_returned_03 + } + ##No Weather fx + random_valid = { + #RETURN: Region - Europe + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + middle_of_year_season_trigger = yes + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + faith = { religion_tag = christianity_religion } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_03 + } + #RETURN: Region - Iberia + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_03 + } + #RETURN: Region - Middle East + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_03 + } + #RETURN: Region - India + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_04 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_05 + } + + #RETURN: Region - Steppe + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_03 + } + #RETURN: Region - North Africa + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + middle_of_year_season_trigger = yes + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_03 + } + #RETURN: Region - West Africa + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_04 + } + #RETURN: Region - East Africa + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_04 + } + #RETURN: Region - Generic + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + current_season_summer = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_04 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_05 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + middle_of_year_season_trigger = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_06 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + middle_of_year_season_trigger = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_07 + } + #RETURN: Partner looks around + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_partner ?= { + NOR = { + has_trait = cynical + has_trait = paranoid + has_trait = callous + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_01 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_partner ?= { is_adult = no } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_02 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_partner ?= { is_adult = no } + NOR = { + has_trait = irritable + has_trait = wrathful + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_03 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_partner ?= { + NOR = { + has_trait = cynical + has_trait = lifestyle_reveler + any_secret = { + type = secret_non_believer + } + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_04 + } + triggered_desc = { + trigger = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_partner ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_family_of = root + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_05 + } + } + } + ##FIRST TIME + #FIRST TIME: Revisiting Constantinople + triggered_desc = { + trigger = { + NOT = { has_variable = return_from_location } + exists = scope:is_constantinople + any_in_list = { + variable = laamp_visited_settlements_list + this = scope:visiting_location + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_revisit_constantinople + } + #FIRST TIME: It's Constantinople + triggered_desc = { + trigger = { + NOT = { has_variable = return_from_location } + exists = scope:is_constantinople + } + desc = ep3_laamp_decision_event.1000.desc_outro_constantinople + } + #FIRST TIME: Our visiting partner flavor + random_valid = { + triggered_desc = { + trigger = { + NOT = { has_variable = return_from_location } + NOT = { exists = scope:is_unique_location } + exists = scope:visiting_partner + } + desc = ep3_laamp_decision_event.1000.desc_outro_partner_01 + } + } + #FIRST TIME: We've been to this settlement before + triggered_desc = { + trigger = { + NOT = { has_variable = return_from_location } + NOT = { exists = scope:is_unique_location } + any_in_list = { + variable = laamp_visited_settlements_list + this = scope:visiting_location + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_revisit + } + #FIRST TIME: New place + triggered_desc = { + trigger = { + NOT = { has_variable = return_from_location } + NOT = { exists = scope:is_unique_location } + } + desc = ep3_laamp_decision_event.1000.desc_outro_new + } + } + } + theme = landless_adventurer + #Backgrounds & fx + #Church Holding + override_sound = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + reference = "event:/SFX/Events/Themes/sfx_event_theme_type_faith" + } + #Castle Holding + override_sound = { + trigger = { + scope:visiting_location = { has_holding_type = castle_holding } + } + reference = "event:/SFX/Events/Themes/sfx_event_theme_type_martial" + } + #City Holding + override_sound = { + trigger = { + scope:visiting_location = { has_holding_type = city_holding } + } + reference = "event:/SFX/Events/Themes/sfx_event_theme_type_stewardship" + } + #Swedish summer + override_effect_2d = { + trigger = { has_variable = 1000_is_currently_raining } + reference = rain + } + widget = { + is_shown = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_north } + has_variable = 1000_is_currently_snowing + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + #HOME: Tribe + override_background = { + trigger = { + 1000_time_to_go_home_trigger = yes + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = bp1_bonfire + } + #HOME + override_background = { + trigger = { 1000_time_to_go_home_trigger = yes} + reference = alley_night + } + #Snowing in tribal Scandinavia + override_background = { + trigger = { is_snowy_rural_scandinavia_location_trigger = yes } + reference = ep2_hunt_snowy_forest + } + #Tribal Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = tribal_holding } + } + reference = village + } + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = mpo_camp_steppe + } + #Constantinople + override_background = { + trigger = { exists = scope:is_constantinople } + reference = ep3_constantinople + } + #Church Holding + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + reference = holy_site_generic + } + #Castle Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = castle_holding } + } + reference = courtyard_location + } + #City Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = city_holding } + } + reference = ep3_city_gate + } + #Fallback + override_background = { reference = market } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Time to go home + triggered_animation = { + trigger = { 1000_time_to_go_home_trigger = yes } + animation = boredom + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_cynical + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = personality_compassionate + } + center_portrait = { + character = root + triggered_animation = { + trigger = { 1010_has_irrational_traits = yes } + animation = personality_irrational + } + triggered_animation = { + trigger = { 1010_has_standoffish_traits = yes } + animation = personality_coward + } + triggered_animation = { + trigger = { 1010_has_uninterested_traits = yes } + animation = personality_callous + } + animation = personality_content + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #For loc purposes + if = { + limit = { + NOT = { exists = scope:visiting_location } + } + location = { save_scope_as = visiting_location } + } + if = { + limit = { + NOT = { exists = scope:neighboring_county } + } + location = { + random_neighboring_province = { + limit = { is_location_valid_for_travel_event_on_land = yes } + save_scope_as = neighboring_county + } + } + } + random_dummy_gender_effect = yes + #To rain or not to rain + if = { + limit = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + middle_of_year_season_trigger = yes + location_has_winter_trigger = no + scope:visiting_location = { + OR = { + geographical_region = world_europe_north + geographical_region = world_europe_west_britannia + } + } + } + random_list = { + 50 = { + #No rain + } + 50 = { + set_variable = 1000_is_currently_raining + } + } + } + #To snow or not to snow + if = { + limit = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + end_of_year_season_trigger = yes + location_has_winter_trigger = yes + scope:visiting_location = { geographical_region = world_europe_north } + } + random_list = { + 50 = { + #No rain + } + 50 = { + set_variable = 1000_is_currently_snowing + } + } + } + #To fog or not to fog + if = { + limit = { + has_variable = return_from_location + NOT = { exists = scope:is_unique_location } + scope:visiting_location = { geographical_region = world_europe_west_britannia } + } + random_list = { + 50 = { + #No rain + } + 50 = { + set_variable = 1000_is_currently_foggy + } + } + } + #This. Is. _Constantinople_ + if = { + limit = { scope:visiting_location.barony = title:b_constantinople } + save_scope_as = is_constantinople + save_scope_as = is_unique_location #In case we add more unique locations + } + #Assemble the list of options the first time this window pops + if = { + limit = { + NOT = { exists = scope:first_pass } + } + #Buy supply option - not really any gate since it might change during your visit + + #Sell artifact option + if = { + #We actually have an artifact to sell + limit = { + any_character_artifact = { + count >= 1 + 1000_is_unsellable_artifact_trigger = no + } + } + add_to_variable_list = { + name = list_of_options + target = flag:has_artifact_option + } + } + #Town Crier option - not really any gate, as long as we don't cap amount of contracts I guess? + + #Visit the local tavern, added for all holding types + add_to_variable_list = { + name = list_of_options + target = flag:has_tavern_option + } + #Church Holding: Visit the local church grounds + if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + add_to_variable_list = { + name = list_of_options + target = flag:has_church_option + } + } + #Castle Holding: Visit the local castle grounds + if = { + limit = { + scope:visiting_location = { has_holding_type = castle_holding } + } + add_to_variable_list = { + name = list_of_options + target = flag:has_castle_option + } + } + #City Holding: Visit the local fine craftsmen + if = { + limit = { + scope:visiting_location = { has_holding_type = city_holding } + } + add_to_variable_list = { + name = list_of_options + target = flag:has_craftsman_option + } + } + #Also find someone to bring with you from your crew to display in the bottom-left corner - Spouse/Friend/Marshal/Bodyguard + if = { + limit = { + NOT = { exists = scope:visiting_partner } + } + if = { + limit = { + any_courtier = { 1000_appropriate_visiting_partner_basic_trigger = yes } + } + random_courtier = { + limit = { 1000_appropriate_visiting_partner_basic_trigger = yes } + weight = { + base = 1 + #If we desparately want to bring sick relatives to the doctor + modifier = { + add = 1000 + is_close_family_of = root + 1000_has_illness_or_wound_to_treat_trigger = yes + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + modifier = { + add = 500 + is_spouse_of = root + 1000_has_illness_or_wound_to_treat_trigger = yes + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + modifier = { + add = 100 + has_relation_lover = root + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + modifier = { + add = 20 + is_spouse_of = root + } + modifier = { + add = 15 + is_primary_heir_of = root + } + modifier = { + add = 10 + OR = { + has_court_position = bodyguard_court_position + has_court_position = quartermaster_camp_officer + has_court_position = master_of_spoils_camp_officer + } + } + modifier = { + add = 5 + is_close_family_of = root + } + modifier = { + add = 2 + has_trait = ambitious + } + modifier = { + add = -5 + has_trait = lazy + } + } + save_scope_as = visiting_partner + } + + } + } + save_scope_as = first_pass + } + } + #Church Holding Option: Visit the local church grounds + option = { + name = { + text = { + first_valid = { + #Return to look at the church + triggered_desc = { + trigger = { exists = scope:been_to_church_grounds } + desc = ep3_laamp_decision_event.1000.b_second + } + #First time looking at the church + desc = ep3_laamp_decision_event.1000.b + } + } + } + trigger = { + #Do we actually have the church option available + custom_tooltip = { + text = tapped_out.tt + is_target_in_variable_list = { + name = list_of_options + target = flag:has_church_option + } + NOT = { exists = scope:laamp_decision_finished_church_option } + } + } + show_as_unavailable = { + #Hide the options when we're _all_ done + trigger_if = { + limit = { + exists = scope:laamp_decision_finished_church_option + 1000_time_to_go_home_trigger = no + } + always = yes + } + trigger_else = { always = no } + } + reason = church_holding + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1000.b.tt + trigger_event = ep3_laamp_decision_event.1040 + ai_chance = { base = 100 } + } + #Castle Holding Option: Visit the local castle grounds + option = { + name = { + text = { + first_valid = { + #Return to look at the castle + triggered_desc = { + trigger = { exists = scope:been_to_castle_grounds } + desc = ep3_laamp_decision_event.1000.c_second + } + #First time looking at the castle + desc = ep3_laamp_decision_event.1000.c + } + } + } + trigger = { + #Do we actually have the castle option available + custom_tooltip = { + text = tapped_out.tt + is_target_in_variable_list = { + name = list_of_options + target = flag:has_castle_option + } + NOT = { exists = scope:laamp_decision_finished_castle_option } + } + } + show_as_unavailable = { + #Hide the options when we're _all_ done + trigger_if = { + limit = { + exists = scope:laamp_decision_finished_castle_option + 1000_time_to_go_home_trigger = no + } + always = yes + } + trigger_else = { always = no } + } + reason = castle_holding + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1000.c.tt + trigger_event = ep3_laamp_decision_event.1050 + ai_chance = { base = 100 } + } + #City Holding Option: Visit the local fine craftsmen + option = { + name = { + text = { + first_valid = { + #Return to look at the craftsmen + triggered_desc = { + trigger = { exists = scope:been_to_craftsmen } + desc = ep3_laamp_decision_event.1000.d_second + } + #First time looking at craftsmen + desc = ep3_laamp_decision_event.1000.d + } + } + } + #Do we have few enough options to display this option on the main page + trigger = { + #Do we actually have the craftsmenned option available + custom_tooltip = { + text = tapped_out.tt + is_target_in_variable_list = { + name = list_of_options + target = flag:has_craftsman_option + } + NOT = { exists = scope:laamp_decision_finished_craftsmen_option } + } + } + show_as_unavailable = { + #Hide the options when we're _all_ done + trigger_if = { + limit = { + exists = scope:laamp_decision_finished_craftsmen_option + 1000_time_to_go_home_trigger = no + } + always = yes + } + trigger_else = { always = no } + } + reason = city_holding + #We got kick-off! + 1000_update_last_location_effect = { LOCATION_FLAG = flag:main_square } + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1000.d.tt + trigger_event = ep3_laamp_decision_event.1060 + ai_chance = { base = 100 } + } + #Tribal Holding Option: Visit the local tavern + option = { + name = { + text = { + first_valid = { + #Return to the tavern + triggered_desc = { + trigger = { exists = scope:been_to_tavern } + desc = ep3_laamp_decision_event.1000.a_second + } + #They're nomads + triggered_desc = { + trigger = { 1000_is_a_nomadic_holding_trigger = yes } + desc = ep3_laamp_decision_event.1000.a_nomads + } + #First time visiting the tavern + desc = ep3_laamp_decision_event.1000.a_tavern + } + } + } + trigger = { + #Do we actually have the tavern option available + custom_tooltip = { + text = tapped_out.tt + is_target_in_variable_list = { + name = list_of_options + target = flag:has_tavern_option + } + NOT = { exists = scope:laamp_decision_finished_tavern_option } + } + } + show_as_unavailable = { + #Hide the options when we're _all_ done + trigger_if = { + limit = { + exists = scope:laamp_decision_finished_tavern_option + 1000_time_to_go_home_trigger = no + } + always = yes + } + trigger_else = { always = no } + } + reason = visit_tavern + #Actual transition event + if = { + limit = { 1000_is_a_nomadic_holding_trigger = yes } + custom_tooltip = ep3_laamp_decision_event.1000.a_nomads.tt + } + else = { custom_tooltip = ep3_laamp_decision_event.1000.a.tt } + trigger_event = ep3_laamp_decision_event.1030 + ai_chance = { base = 100 } + } + #Page 2: Consider additional options + option = { + name = ep3_laamp_decision_event.1000.h + trigger = { + #If we were initially maxed out on provisions but lost provisions while visiting other parts... + trigger_if = { + limit = { + NOT = { exists = scope:been_to_second } + } + always = yes + } + trigger_else_if = { + limit = { exists = scope:been_to_second } + custom_tooltip = { + text = tapped_out.tt + 1000_done_with_second_trigger = no + } + } + #Otherwise we're just done here + trigger_else = { + custom_tooltip = { + text = tapped_out.tt + NOT = { exists = scope:laamp_decision_second_finished } + } + } + #Nothing here for the AI + is_ai = no + } + show_as_unavailable = { + #Hide the options when we're _all_ done + trigger_if = { + limit = { + OR = { + AND = { + exists = scope:laamp_decision_second_finished + 1000_time_to_go_home_trigger = no + } + AND = { + exists = scope:been_to_second + 1000_time_to_go_home_trigger = no + } + } + + } + always = yes + } + trigger_else = { always = no } + } + #We got kick-off! + 1000_update_last_location_effect = { LOCATION_FLAG = flag:main_square } + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1000.h.tt + trigger_event = ep3_laamp_decision_event.1001 + } + #Let's go back to the camp + option = { + name = { + text = { + first_valid = { + #No options left, partner flavor + triggered_desc = { + trigger = { + 1000_time_to_go_home_trigger = yes + exists = scope:visiting_partner + } + desc = ep3_laamp_decision_event.1000.i_home_partner + } + #No options left + triggered_desc = { + trigger = { 1000_time_to_go_home_trigger = yes } + desc = ep3_laamp_decision_event.1000.i_home + } + #Let's get outta here + desc = ep3_laamp_decision_event.1000.i + } + } + } + custom_tooltip = ep3_laamp_decision_event.1000.i.tt + #For loc reasons + 1000_remember_settlement_effect = yes + 1000_clean_up_effect = yes + ai_chance = { base = 50 } + } + after = { + remove_variable ?= 1000_is_currently_raining + remove_variable ?= 1000_is_currently_snowing + remove_variable ?= 1000_is_currently_foggy + #For all options that are NOT Page 2 + if = { + limit = { + has_variable = return_from_location + NOT = { var:return_from_location = flag:main_square } + } + #We got kick-off! + 1000_update_last_location_effect = { LOCATION_FLAG = flag:main_square } + } + } +} + + +###################################################################### +# PAGE 2 +# ep3_laamp_decision_event.1001 +###################################################################### +# > Buy Supplies +# > Sell Artifact +# > Town Crier +# > Back to Main Square + +#Return to Page 2 +scripted_effect 1001_return_to_second_effect = { + custom_tooltip = ep3_laamp_decision_event.return.tt + trigger_event = ep3_laamp_decision_event.1001 +} + +scripted_effect 1001_been_to_second_effect = { + if = { + limit = { + NOT = { exists = scope:been_to_second } + } + save_scope_as = been_to_second + } +} + + +#Page 2 - Consider additional options +ep3_laamp_decision_event.1001 = { + type = character_event + title = ep3_laamp_decision_event.1000.t + window = visit_settlement_window + desc = { + #INTRO + first_valid = { + ##RETURN: We've returned to this scene, now what + #RETURN: We have no options left - time to go home + triggered_desc = { + trigger = { 1000_done_with_second_trigger = yes } + desc = ep3_laamp_decision_event.1001.desc_intro_return_finished + } + #RETURN: You just returned from assaulting the supply merchant + triggered_desc = { + trigger = { + var:return_from_location ?= flag:supply_merchant + has_variable = 1010_guards_summoned + } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_from_assaulting_supplies + } + #RETURN: Return from where? + random_valid = { + #RETURN: We've returned from Supply Merchant + triggered_desc = { + trigger = { var:return_from_location ?= flag:supply_merchant } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_from_supplies + } + #RETURN: We've returned from Artifact Peddler + triggered_desc = { + trigger = { var:return_from_location ?= flag:artifact_peddler } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_from_artifacts + } + #RETURN: We've returned from Town Crier + triggered_desc = { + trigger = { var:return_from_location ?= flag:contract } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_from_contract + } + #RETURN: Generics to mix in + random_valid = { + #Generics + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_generic_01 + } + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1001.desc_intro_returned_generic_02 + } + } + } + #FIRST TIME + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + NOT = { exists = scope:been_to_second } + } + desc = ep3_laamp_decision_event.1001.desc_intro_nomads + } + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_second } + } + desc = ep3_laamp_decision_event.1001.desc_intro + } + } + #OUTRO + first_valid = { + ##RETURN HOME + #RETURN HOME: No partner, time to go home + triggered_desc = { + trigger = { + 1000_done_with_second_trigger = yes + NOT = { exists = scope:visiting_partner } + } + desc = ep3_laamp_decision_event.1001.desc_outro_return_finished + } + #RETURN HOME: Partner feels it's time to go home + triggered_desc = { + trigger = { + 1000_done_with_second_trigger = yes + exists = scope:visiting_partner + } + desc = ep3_laamp_decision_event.1001.desc_outro_return_partner_finished + } + #RETURN: Virtually re-using the ones from Main Square + random_valid = { + #RETURN: Region - Europe + triggered_desc = { + trigger = { + exists = scope:been_to_second + middle_of_year_season_trigger = yes + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_north } + faith = { religion_tag = christianity_religion } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_europe_returned_03 + } + #RETURN: Region - Iberia + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_europe_west_iberia } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_iberia_returned_03 + } + #RETURN: Region - Middle East + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_middle_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_middle_east_returned_03 + } + #RETURN: Region - India + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_03 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_04 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_india } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_india_returned_05 + } + + #RETURN: Region - Steppe + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_steppe } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_steppe_returned_03 + } + #RETURN: Region - North Africa + triggered_desc = { + trigger = { + exists = scope:been_to_second + middle_of_year_season_trigger = yes + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_north } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_north_africa_returned_03 + } + #RETURN: Region - West Africa + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_03 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_west } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_west_africa_returned_04 + } + #RETURN: Region - East Africa + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_03 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_location = { geographical_region = world_africa_east } + } + desc = ep3_laamp_decision_event.1000.desc_outro_regional_east_africa_returned_04 + } + #RETURN: Region - Generic + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_01 + } + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + middle_of_year_season_trigger = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_03 + } + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_04 + } + triggered_desc = { + trigger = { exists = scope:been_to_second } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_05 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + middle_of_year_season_trigger = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_06 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + middle_of_year_season_trigger = yes + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_generic_07 + } + #RETURN: Partner looks around + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_partner ?= { + NOR = { + has_trait = cynical + has_trait = paranoid + has_trait = callous + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_01 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_partner ?= { is_adult = no } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_02 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_partner ?= { is_adult = no } + NOR = { + has_trait = irritable + has_trait = wrathful + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_03 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_partner ?= { + NOR = { + has_trait = cynical + has_trait = lifestyle_reveler + any_secret = { + type = secret_non_believer + } + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_04 + } + triggered_desc = { + trigger = { + exists = scope:been_to_second + scope:visiting_partner ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_family_of = root + } + } + } + desc = ep3_laamp_decision_event.1000.desc_outro_returned_partner_generic_05 + } + } + + } + } + theme = landless_adventurer + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_generic" } + #Indenting backgrounds for easier folding + #HOME: Tribe + override_background = { + trigger = { + 1000_time_to_go_home_trigger = yes + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = bp1_bonfire + } + #HOME + override_background = { + trigger = { 1000_time_to_go_home_trigger = yes} + reference = alley_night + } + #Snowing in tribal Scandinavia + override_background = { + trigger = { is_snowy_rural_scandinavia_location_trigger = yes } + reference = ep2_hunt_snowy_forest + } + #Tribe Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = tribal_holding } + } + reference = village + } + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = mpo_camp_steppe + } + #Constantinople + override_background = { + trigger = { exists = scope:is_constantinople } + reference = ep3_constantinople + } + #Church Holding + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + } + reference = holy_site_generic + } + #Castle Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = castle_holding } + } + reference = courtyard_location + } + #City Holding + override_background = { + trigger = { + scope:visiting_location = { has_holding_type = city_holding } + } + reference = ep3_city_gate + } + #Fallback + override_background = { reference = market } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Time to go home + triggered_animation = { + trigger = { 1000_time_to_go_home_trigger = yes } + animation = boredom + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_content + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = thinking + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_callous + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = eccentric + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = shame + } + animation = personality_bold + } + center_portrait = { + character = root + triggered_animation = { + trigger = { 1010_has_irrational_traits = yes } + animation = personality_irrational + } + triggered_animation = { + trigger = { 1010_has_standoffish_traits = yes } + animation = personality_coward + } + triggered_animation = { + trigger = { 1010_has_uninterested_traits = yes } + animation = personality_cynical + } + animation = personality_rational + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #It just works. (To get the appropriate loc when you snub the artifact vendor at the last minute, then refresh when we exit & re-enter) + remove_variable ?= 1021_artifact_sell_screen + } + #Option: Stock up on supplies + option = { + name = { + text = { + first_valid = { + #Return to look at supplies + triggered_desc = { + trigger = { exists = scope:did_not_buy_supplies } + desc = ep3_laamp_decision_event.1001.a_second + } + #First time looking at supplies + desc = ep3_laamp_decision_event.1001.a + } + } + } + trigger = { + #You recently botched threatening this merchant + trigger_if = { + limit = { has_variable = 1010_guards_summoned } + custom_tooltip = { + text = guards_were_summoned.tt + NOT = { has_variable = 1010_guards_summoned } + } + } + #Already got a hand-out from this merchant + trigger_else_if = { + limit = { scope:laamp_decision_bought_supplies ?= flag:handout } + custom_tooltip = { + text = already_received_supplies.tt + NOT = { scope:laamp_decision_bought_supplies ?= flag:handout } + } + } + #Already bought provisions this visit + trigger_else_if = { + limit = { exists = scope:laamp_decision_bought_supplies } + custom_tooltip = { + text = already_bought_supplies.tt + NOT = { exists = scope:laamp_decision_bought_supplies } + } + } + #Already at max provisions + trigger_else = { + custom_tooltip = { + text = full_on_supplies.tt + NOT = { + domicile ?= { provisions = max_provisions } + } + } + } + } + #Since this is semi-dynamic, show it always + show_as_unavailable = { always = yes } + reason = buy_provisions + #For loc + 1001_been_to_second_effect = yes + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1001.a.tt + trigger_event = ep3_laamp_decision_event.1010 + } + #Option: Sell an artifact to local peddlers + option = { + name = { + text = { + first_valid = { + #Return to sell artifacts + triggered_desc = { + trigger = { exists = scope:did_not_sell_artifact } + desc = ep3_laamp_decision_event.1001.b_second + } + #First time selling artifacts + desc = ep3_laamp_decision_event.1001.b + } + } + } + trigger = { + #Do we actually have the artifact option available + trigger_if = { + limit = { + is_target_in_variable_list = { + name = list_of_options + target = flag:has_artifact_option + } + } + always = yes + } + trigger_else_if = { + limit = { exists = scope:laamp_decision_sold_artifact } + custom_tooltip = { + text = already_sold_artifact.tt + #We haven't already sold an artifact + NOT = { exists = scope:laamp_decision_sold_artifact } + } + } + trigger_else = { always = no } + } + show_as_unavailable = { + #Only show it if it was available from the start + trigger_if = { + limit = { exists = scope:laamp_decision_sold_artifact } + always = yes + } + trigger_else = { always = no } + } + reason = sell_artifacts + #For loc + 1001_been_to_second_effect = yes + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1001.b.tt + #Back to smirk-town with you + if = { + limit = { exists = scope:attempted_artifact_haggle } + trigger_event = ep3_laamp_decision_event.1021 + } + #Otherwise regular peddler + else = { trigger_event = ep3_laamp_decision_event.1020 } + } + #Option: Head to the Town Crier for contracts + option = { + name = { + text = { + first_valid = { + #Return to look at contracts + triggered_desc = { + trigger = { exists = scope:been_to_contract } + desc = ep3_laamp_decision_event.1001.c_second + } + #First time looking at contracts + desc = ep3_laamp_decision_event.1001.c + } + } + } + trigger = { + #You are still on cooldown (you can go in to the board once to realize the board is empty, then the option greys out) + trigger_if = { + limit = { scope:laamp_decision_has_contracted ?= flag:no } + custom_tooltip = { + text = no_contracts.tt + always = no + } + } + #You have spawned contracts during this visit + trigger_else_if = { + limit = { + OR = { + has_variable = 1025_has_contracted_recently + scope:laamp_decision_has_contracted ?= flag:yes + } + } + custom_tooltip = { + text = already_spawned_contracts.tt + always = no + } + } + #Otherwise, have a look (except for the AI, who take contracts through a different system) + trigger_else = { is_ai = no } + } + #Notice board can be empty, so no real cooldown? + show_as_unavailable = { always = yes } + reason = spawn_contracts + #For loc + 1001_been_to_second_effect = yes + #Actual transition event + custom_tooltip = ep3_laamp_decision_event.1001.c.tt + trigger_event = ep3_laamp_decision_event.1025 + } + #Go back to Main Square + option = { + name = ep3_laamp_decision_event.1001.d + #Time to close off the option? + if = { + limit = { 1000_done_with_second_trigger = yes } + save_scope_as = laamp_decision_second_finished + } + else_if = { + limit = { + NOT = { exists = scope:been_to_second } + } + save_scope_as = been_to_second + } + #We got kick-off! + 1000_update_last_location_effect = { LOCATION_FLAG = flag:second } + #Go back to the main event + 1000_return_to_main_effect = yes + } +} + + +###################################################################### +# BUY SUPPLIES +# ep3_laamp_decision_event.1010 +###################################################################### + +#Remember merchant for loc +scripted_effect 1010_remember_vendor_character_effect = { + #Do we already remember them? + if = { + limit = { + has_variable = laamp_remembered_$GUILD$s_list #Notice the 's' right after GUILD (= 'merchants' instead of 'merchant') + any_in_list = { + variable = laamp_remembered_$GUILD$s_list + this = $CHARACTER$ + } + } + #Replace old entry with a new one + remove_list_variable = { + name = laamp_remembered_$GUILD$s_list + target = $CHARACTER$ + } + add_to_variable_list = { + name = laamp_remembered_$GUILD$s_list + target = $CHARACTER$ + years = 10 + } + } + #Otherwise just add 'em to the list + else = { + add_to_variable_list = { + name = laamp_remembered_$GUILD$s_list + target = $CHARACTER$ + years = 10 + } + } +} + +#Set the correct variable to adjust loc for the Buy Supply option +scripted_effect 1010_bought_supplies_effect = { + save_scope_value_as = { + name = laamp_decision_bought_supplies + value = flag:none + } + #Go back to the main event + hidden_effect = { 1001_return_to_second_effect = yes } +} + +#No prisoners. No rivals. No service. +scripted_trigger 1010_basic_merchant_checks_trigger = { + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + is_available_adult = yes + #No double-dipping + trigger_if = { + limit = { exists = scope:laamp_supply_merchant } + this != scope:laamp_supply_merchant + } + trigger_if = { + limit = { exists = scope:laamp_artifact_peddler } + this != scope:laamp_artifact_peddler + } + trigger_if = { + limit = { exists = scope:laamp_town_crier } + this != scope:laamp_town_crier + } + + #Tavern + trigger_if = { + limit = { exists = scope:laamp_storyteller } + this != scope:laamp_storyteller + } + trigger_if = { + limit = { exists = scope:laamp_first_recruit } + this != scope:laamp_first_recruit + } + trigger_if = { + limit = { exists = scope:laamp_second_recruit } + this != scope:laamp_second_recruit + } + trigger_if = { + limit = { exists = scope:laamp_third_recruit } + this != scope:laamp_third_recruit + } + trigger_if = { + limit = { exists = scope:laamp_generic_jane } + this != scope:laamp_generic_jane + } + trigger_if = { + limit = { exists = scope:laamp_spouse_material } + this != scope:laamp_spouse_material + } + trigger_if = { + limit = { exists = scope:laamp_hooded_figure } + this != scope:laamp_hooded_figure + } + + #Church + trigger_if = { + limit = { exists = scope:laamp_healer_character } + this != scope:laamp_healer_character + } + trigger_if = { + limit = { exists = scope:laamp_clergy_character } + this != scope:laamp_clergy_character + } + trigger_if = { + limit = { exists = scope:laamp_physician_recruit } + this != scope:laamp_physician_recruit + } + + #Castle + trigger_if = { + limit = { exists = scope:laamp_plain_guard } + this != scope:laamp_plain_guard + } + trigger_if = { + limit = { exists = scope:laamp_talented_guard } + this != scope:laamp_talented_guard + } + trigger_if = { + limit = { exists = scope:laamp_disgruntled_moa } + this != scope:laamp_disgruntled_moa + } + trigger_if = { + limit = { exists = scope:laamp_maa_reinforcer } + this != scope:laamp_maa_reinforcer + } + trigger_if = { + limit = { exists = scope:laamp_bodyguard_recruit } + this != scope:laamp_bodyguard_recruit + } + + #City + trigger_if = { + limit = { exists = scope:laamp_weaponsmith_craftsman } + this != scope:laamp_weaponsmith_craftsman + } + trigger_if = { + limit = { exists = scope:laamp_armorer_craftsman} + this != scope:laamp_armorer_craftsman + } + trigger_if = { + limit = { exists = scope:laamp_jeweler_craftsman } + this != scope:laamp_jeweler_craftsman + } + trigger_if = { + limit = { exists = scope:laamp_quartermaster_recruit } + this != scope:laamp_quartermaster_recruit + } +} + +#Scripty-scripted repeat triggers to check if we already saved this character +scripted_trigger 1010_is_a_saved_merchant_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_merchants_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_peddler_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_peddlers_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_crier_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_criers_list + target = scope:saved_character_check + } + } +} + +#Tavern +scripted_trigger 1010_is_a_saved_storyteller_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_storytellers_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_thief_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_thiefs_list #Don't judge me, 'thiefs' is most consequential + target = scope:saved_character_check + } + } +} + +#Church +scripted_trigger 1010_is_a_saved_healer_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_healers_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_clergy_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_clergys_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_physician_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_physicians_list + target = scope:saved_character_check + } + } +} + +#Castle +scripted_trigger 1010_is_a_saved_bodyguard_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_bodyguards_list + target = scope:saved_character_check + } + } +} + +#Craftsmen +scripted_trigger 1010_is_a_saved_weaponsmith_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_weaponsmiths_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_armorer_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_armorers_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_jeweler_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_jewelers_list + target = scope:saved_character_check + } + } +} + +scripted_trigger 1010_is_a_saved_quartermaster_trigger = { + root = { + is_target_in_variable_list = { + name = laamp_remembered_quartermasters_list + target = scope:saved_character_check + } + } +} + +#Can we actually? +scripted_trigger 1010_would_trade_child_for_supplies_trigger = { + OR = { + AND = { + #Normal people wouldn't trade away a child for a 'top-up' + OR = { + has_trait = greedy + has_trait = callous + } + scope:1010_supply_less_than ?= flag:1010_less_than_100_supply + } + AND = { + exists = scope:1010_supply_less_than + OR = { + scope:1010_supply_less_than = flag:1010_less_than_20_supply + scope:1010_supply_less_than = flag:1010_less_than_40_supply + scope:1010_supply_less_than = flag:1010_less_than_60_supply + scope:1010_supply_less_than = flag:1010_less_than_80_supply + } + } + } + exists = scope:payment_child +} + +#Don't trade away your heir +scripted_trigger 1010_payment_child_trigger = { + age >= 2 + age <= 15 + is_courtier_of = root + NOT = { is_primary_heir_of = root } + save_temporary_scope_as = child_check + root.primary_title = { + place_in_line_of_succession = { + target = scope:child_check + value >= 3 + } + } + is_available = yes + location = scope:visiting_location + #Let's just avoid some technical headaches if we brought a kid along + trigger_if = { + limit = { exists = scope:visiting_partner } + this != scope:visiting_partner + } +} + +scripted_trigger 1010_is_thieving_character_trigger = { + #intrigue >= extremely_high_skill_rating + NOR = { + has_trait = honest + has_trait = just + } + is_adult = yes +} + +#Mark that child +scripted_effect 1010_mark_chosen_child_effect = { + scope:payment_child = { + if = { + limit = { has_variable = 1010_payment_child } + remove_variable ?= 1010_payment_child + set_variable = { + name = 1010_payment_child + days = visit_settlement_cooldown_days + } + } + else = { + set_variable = { + name = 1010_payment_child + days = visit_settlement_cooldown_days + } + } + } +} + +#Supply duel for your highest skill stat +scripted_effect 1010_highest_skill_duel_effect = { + if = { + limit = { highest_skill = diplomacy } + 1010_duel_effect = { SKILL = diplomacy } + } + else_if = { + limit = { highest_skill = stewardship } + 1010_duel_effect = { SKILL = stewardship } + } + else_if = { + limit = { highest_skill = intrigue } + 1010_duel_effect = { SKILL = intrigue } + } + else_if = { + limit = { highest_skill = learning } + 1010_duel_effect = { SKILL = learning } + } + else_if = { + limit = { highest_skill = martial } + 1010_duel_effect = { SKILL = martial } + } + else_if = { + limit = { highest_skill_including_prowess = prowess } + 1010_duel_effect = { SKILL = prowess } + } +} + +#Actual supply duel effect +scripted_effect 1010_duel_effect = { + duel = { + skill = $SKILL$ + target = scope:laamp_supply_merchant + #Success: Half supply for free + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1010.a_$SKILL$.success + send_interface_toast = { + title = ep3_laamp_decision_event.1010.a_$SKILL$.success + left_icon = root + right_icon = scope:laamp_supply_merchant + #Get 1/4 of your way to 100% (So if max is 100 and you have 20 provisions, you should gain 40 provisions) + domicile ?= { change_provisions = quarter_to_max_provisions_value } + #Set up the cooldown for the convince-ction + set_variable = { + name = 1010_has_convinced_recently + value = flag:success + days = visit_settlement_minimum_cooldown_days #Sync this with fail & critical_fail + } + #Determine why we can't return to this option + save_scope_value_as = { + name = laamp_decision_bought_supplies + value = flag:handout + } + #Go back to the main event + hidden_effect = { 1001_return_to_second_effect = yes } + } + } + #Failure: Increased price for supplies + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1010.a_$SKILL$.failure + send_interface_toast = { + title = ep3_laamp_decision_event.1010.a_$SKILL$.failure + left_icon = root + right_icon = scope:laamp_supply_merchant + custom_tooltip = ep3_laamp_decision_event.1010.a.failure.tt + #Set up the cooldown for the convince-ction + set_variable = { + name = 1010_has_convinced_recently + value = flag:fail + days = visit_settlement_minimum_cooldown_days #Sync this with success, critical_fail & the tooltip, currently displayed in 'months' (plural) + } + #Price increased - try again + 1001_return_to_second_effect = yes + } + } + #Critical Failure: The local guards are summoned + 5 = { + trigger = { + root = { + OR = { + highest_skill = martial + highest_skill_including_prowess = prowess + } + } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + min = 5 + desc = ep3_laamp_decision_event.1010.a_$SKILL$.critical_failure + send_interface_toast = { + title = ep3_laamp_decision_event.1010.a_$SKILL$.critical_failure + left_icon = root + right_icon = scope:laamp_supply_merchant + custom_tooltip = ep3_laamp_decision_event.1010.a.failure.tt + #Set up the cooldown for the convince-ction + set_variable = { + name = 1010_has_convinced_recently + value = flag:fail + days = visit_settlement_minimum_cooldown_days #Sync this with success & critical_fail + } + #Quite the tussle + increase_wounds_effect = { REASON = fight } + #This merchant doesn't want to see you again + progress_towards_rival_effect = { + REASON = rival_tried_to_intimidate_merchant + CHARACTER = scope:laamp_supply_merchant + OPINION = default_rival_opinion + } + #And you will not be going back to supply merchant, but feel free to look at the greyed out option + set_variable = 1010_guards_summoned + #Determine why we can't return to this option + save_scope_value_as = { + name = laamp_decision_bought_supplies + value = flag:none + } + #Go back to the main event + 1001_return_to_second_effect = yes + } + } + } +} + + +#Stock 'Em Up +ep3_laamp_decision_event.1010 = { + type = character_event + title = ep3_laamp_decision_event.1010.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #This is a CITY HOLDING, aschually. More refined buyers. + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + scope:visiting_location = { has_holding_type = city_holding } + } + desc = ep3_laamp_decision_event.1010.desc_posh_stalls + } + #We've returned to this scene + triggered_desc = { + trigger = { exists = scope:did_not_buy_supplies } + desc = ep3_laamp_decision_event.1010.desc_returned + } + #First time in this scene + desc = ep3_laamp_decision_event.1010.desc + } + #Returning customer + #FIRST TIME: The merchant remembers you + random_valid = { + #Friendly + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + trigger_if = { + limit = { exists = scope:laamp_friendly_supply_merchant } + always = yes + } + trigger_else = { always = no } + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_reaction_01 + } + #Slightly standoff-ish + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + trigger_if = { + limit = { exists = scope:laamp_antagonistic_supply_merchant } + always = yes + } + trigger_else = { always = no } + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_reaction_02 + } + } + #FIRST TIME: The merchant remembers you: First INTRO part of DIALOGUE + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_intro + } + #FIRST TIME: The merchant remembers you: Random MID part of DIALOGUE + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_02 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_03 + } + } + #FIRST TIME: The merchant remembers you: Random OUTRO part of DIALOGUE + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_outro_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_buy_supplies } + exists = scope:laamp_recurring_supply_merchant + } + desc = ep3_laamp_decision_event.1010.desc_reused_merchant_outro_02 + } + } + #First time meeting merchant + #FIRST TIME: Merchant REACTION + first_valid = { + #Friendly + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1010_has_friendly_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_gregarious_new + } + #Uninterested + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1010_has_uninterested_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_callous_new + } + #Business-minded + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1010_has_commerce_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_greedy_new + } + #A bit awkward + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1010_has_standoffish_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_shy_new + } + #Irrational + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_eccentric_new + } + #Generic + random_valid = { + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1011_has_no_applicable_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_generic_new_01 + } + triggered_desc = { + trigger = { + NOR = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { 1011_has_no_applicable_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_generic_new_01 + } + } + } + #FIRST TIME in this scene: Random DIALOGUE + random_valid = { + triggered_desc = { + trigger = { + NOT = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_01 + } + triggered_desc = { + trigger = { + NOT = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_02 + } + triggered_desc = { + trigger = { + NOT = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_03 + } + #"Cruel world innit?" + triggered_desc = { + trigger = { + NOT = { + exists = scope:did_not_buy_supplies + exists = scope:laamp_recurring_supply_merchant + } + scope:laamp_supply_merchant = { + OR = { + has_trait = compassionate + AND = { + age >= 30 + age >= root.age_plus_25 + } + } + } + } + desc = ep3_laamp_decision_event.1010.desc_outro_special_new_04 + } + } + #Return to scene + #RETURN: Merchant REACTION + first_valid = { + #Friendly + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_friendly_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_gregarious_return + } + #Uninterested + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_uninterested_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_callous_return + } + #Business-minded + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_commerce_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_greedy_return + } + #A bit awkward + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_standoffish_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_shy_return + } + #Irrational + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_trait_eccentric_return + } + #Generic + random_valid = { + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1011_has_no_applicable_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_generic_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1011_has_no_applicable_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_generic_returned_02 + } + } + } + #RETURN: Random DIALOGUE + random_valid = { + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = no } #For some quirkyness + } + desc = ep3_laamp_decision_event.1010.desc_outro_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = no } #For some quirkyness + } + desc = ep3_laamp_decision_event.1010.desc_outro_returned_02 + } + triggered_desc = { + trigger = { + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = no } #For some quirkyness + } + desc = ep3_laamp_decision_event.1010.desc_outro_returned_03 + } + triggered_desc = { + trigger = { + #Irrational is seeing you for the first time (again) + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_01 + } + triggered_desc = { + trigger = { + #Irrational is seeing you for the first time (again) + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_02 + } + triggered_desc = { + trigger = { + #Irrational is seeing you for the first time (again) + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_outro_new_03 + } + triggered_desc = { + trigger = { + #Irrational is seeing you for the first time (again) + exists = scope:did_not_buy_supplies + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + desc = ep3_laamp_decision_event.1010.desc_outro_special_new_04 + } + } + first_valid = { + #RETURN: Sneaky Partner + triggered_desc = { + trigger = { + exists = scope:1010_potentiaL_thievery + exists = scope:did_not_buy_supplies + } + desc = ep3_laamp_decision_event.1010.desc_outro_sneaky_partner_returned + } + #FIRST TIME: Sneaky Partner + triggered_desc = { + trigger = { exists = scope:1010_potentiaL_thievery } + desc = ep3_laamp_decision_event.1010.desc_outro_sneaky_partner + } + } + } + theme = stewardship + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = army_camp + } + override_background = { reference = market } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Potential thief + triggered_animation = { + trigger = { exists = scope:1010_potentiaL_thievery } + animation = personality_dishonorable + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_cynical + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = personality_content + } + center_portrait = { + character = root + camera = camera_event_scheme_center_look_semi_right + animation = steward + } + right_portrait = { + character = scope:laamp_supply_merchant + #Friendly + triggered_animation = { + trigger = { + scope:laamp_supply_merchant = { 1010_has_friendly_traits = yes } + } + animation = personality_compassionate + } + #Uninterested + triggered_animation = { + trigger = { + scope:laamp_supply_merchant = { 1010_has_uninterested_traits = yes } + } + animation = personality_callous + } + #Business-minded + triggered_animation = { + trigger = { + scope:laamp_supply_merchant = { 1010_has_commerce_traits = yes } + } + animation = admiration + } + #A bit awkward + triggered_animation = { + trigger = { + scope:laamp_supply_merchant = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + #Irrational + triggered_animation = { + trigger = { + scope:laamp_supply_merchant = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + animation = steward + } + lower_left_portrait = { + trigger = { exists = scope:payment_child } + character = scope:payment_child + } + lower_center_portrait = { + trigger = { + exists = scope:other_parent + trigger_if = { + limit = { exists = scope:visiting_partner } + scope:other_parent != scope:visiting_partner + } + } + character = scope:other_parent + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Find our merchant + if = { + #Do we already have a merchant? + limit = { + NOT = { exists = scope:laamp_supply_merchant } + } + #Has this person been our supply merchant in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_merchant_trigger = yes + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_supply_merchant + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_supply_merchant + scope:laamp_supply_merchant = { + if = { + limit = { + OR = { + has_trait = greedy + has_trait = craven + has_trait = wrathful + has_trait = deceitful + 1010_has_uninterested_traits = yes + } + } + save_scope_as = laamp_antagonistic_supply_merchant + } + else_if = { + limit = { + NOT = { exists = scope:laamp_antagonistic_supply_merchant } + OR = { + has_trait = gregarious + has_trait = compassionate + has_trait = honest + has_trait = eccentric + has_trait = forgiving + has_trait = trusting + } + } + save_scope_as = laamp_friendly_supply_merchant + } + } + } + #Otherwise find a merchant in the pool + if = { + limit = { + NOT = { exists = scope:laamp_supply_merchant } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + } + save_scope_as = laamp_supply_merchant + } + } + #Otherwise create a merchant + if = { + limit = { + NOT = { exists = scope:laamp_supply_merchant } + } + #Create merchant to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_supply_merchant + } + } + #Remember the merchant + 1010_remember_vendor_character_effect = { GUILD = merchant CHARACTER = scope:laamp_supply_merchant } + } + #Determine how much supply we are buying, reflect this in cost and options available (don't trade away children for 5% supply...) + if = { + limit = { + OR = { + #If we haven't bought provisions already + NOT = { exists = scope:1010_supply_value } + #Or if we went here, then used provisions elsewhere in the holding and came back + AND = { + exists = scope:1010_supply_value + NOR = { + scope:1010_supply_value = domicile.max_provisions + scope:1010_supply_value = domicile.provisions + } + } + } + } + if = { + #Less than 20% supply + limit = { + domicile ?= { provisions <= twenty_percent_provisions_value } + } + save_scope_value_as = { + name = 1010_supply_less_than + value = flag:1010_less_than_20_supply + } + } + else_if = { + #Less than 40% supply + limit = { + domicile ?= { provisions <= forty_percent_provisions_value } + } + save_scope_value_as = { + name = 1010_supply_less_than + value = flag:1010_less_than_40_supply + } + } + else_if = { + #Less than 60% supply + limit = { + domicile ?= { provisions <= sixty_percent_provisions_value } + } + save_scope_value_as = { + name = 1010_supply_less_than + value = flag:1010_less_than_60_supply + } + } + else_if = { + #Less than 80% supply + limit = { + domicile ?= { provisions <= eighty_percent_provisions_value } + } + save_scope_value_as = { + name = 1010_supply_less_than + value = flag:1010_less_than_80_supply + } + } + else_if = { + #Less than 100% supply + limit = { + domicile ?= { provisions < max_provisions } + } + save_scope_value_as = { + name = 1010_supply_less_than + value = flag:1010_less_than_100_supply + } + } + set_variable = { + name = supply_gold_cost + value = { + value = domicile.max_provisions + subtract = domicile.provisions + #Now we have the missing provisions value + multiply = 0.05 + round = yes + } + } + save_scope_value_as = { + name = 1010_supply_value + value = domicile.provisions + } + } + #Find a suitable child. Don't trade away your heir. + if = { + limit = { + NOT = { exists = scope:payment_child } + 1010_would_trade_child_for_supplies_trigger = yes + } + #Did we already pick a child and are actually decision-scumming? + if = { + limit = { + any_child = { + 1010_payment_child_trigger = yes + has_variable = 1010_payment_child + } + } + random_child = { + limit = { + 1010_payment_child_trigger = yes + has_variable = 1010_payment_child + } + save_scope_as = payment_child + #Refresh the mark + 1010_mark_chosen_child_effect = yes + } + } + #Otherwise pick a child + if = { + limit = { + NOT = { exists = scope:payment_child } + any_child = { 1010_payment_child_trigger = yes } + } + every_child = { + limit = { 1010_payment_child_trigger = yes } + add_to_list = list_of_unimportant_children + } + random_in_list = { + list = list_of_unimportant_children + weight = { + base = 0 + #Look for children who can't inherit first + modifier = { + is_female = yes + root = { + OR = { + faith = { has_doctrine_parameter = male_dominated_law } + has_realm_law = male_only_law + } + } + add = 50 + } + modifier = { + is_male = yes + root = { + OR = { + faith = { has_doctrine_parameter = female_dominated_law } + has_realm_law = female_only_law + } + } + add = 50 + } + #Then the ones you like less + modifier = { + opinion = { + target = root + value <= 50 + } + add = 25 + } + modifier = { + opinion = { + target = root + value <= 30 + } + add = 25 + } + modifier = { + opinion = { + target = root + value <= 10 + } + add = 25 + } + modifier = { + opinion = { + target = root + value < 0 + } + add = 25 + } + modifier = { + has_relation_friend = root + factor = 0 + } + } + save_scope_as = payment_child + #No decision-scumming + 1010_mark_chosen_child_effect = yes + } + } + #Find the other parent of the child - should be adequately upset that you traded away their kid. You monster. + if = { + limit = { exists = scope:payment_child } + if = { + limit = { is_female = yes } + if = { + limit = { + scope:payment_child.father = { is_alive = yes } + } + scope:payment_child.father = { save_scope_as = other_parent } + } + } + else_if = { + limit = { + scope:payment_child.mother = { is_alive = yes } + } + scope:payment_child.mother = { save_scope_as = other_parent } + } + } + } + #Is our partner actually a bit thieving? + if = { + #This looks a bit weird, localization-wise. + limit = { + #We're not a master thief + NOT = { highest_skill = intrigue } + #But our friend is a competent thief + scope:visiting_partner ?= { 1010_is_thieving_character_trigger = yes } + NOT = { exists = scope:1010_potentiaL_thievery } + } + if = { + limit = { + NOT = { has_variable = 1010_calculated_thievery_punishment } + } + set_variable = { + name = 1010_calculated_thievery_punishment + value = { + integer_range = { + min = medium_trait_xp + max = major_trait_xp + } + } + days = visit_settlement_small_cooldown_days + } + } + save_scope_as = 1010_potentiaL_thievery + } + #Price tweaks! + if = { + limit = { exists = var:supply_gold_cost } + #You botched a convince duel, price increased + if = { + limit = { + var:1010_has_convinced_recently ?= flag:fail + NOT = { exists = scope:1010_adjusted_provision_cost } + } + change_variable = { + name = supply_gold_cost + multiply = 1.3 + } + save_scope_value_as = { + name = 1010_adjusted_provision_cost + value = flag:yes + } + } + #Random selection of price reductions + if = { + limit = { + NOT = { exists = scope:1010_applied_price_reductions } + } + #Perk discount + if = { + limit = { + root = { has_perk = war_profiteer_perk } + } + change_variable = { + name = supply_gold_cost + multiply = 0.75 + } + } + #Cheaper supplies in City Holding + if = { + limit = { + root.location = { has_holding_type = city_holding } + } + change_variable = { + name = supply_gold_cost + multiply = 0.7 + } + } + #Cheaper supplies from Camp Party + if = { + limit = { + has_character_flag = cheaper_provisions_visit_holding_flag + } + change_variable = { + name = supply_gold_cost + multiply = 0.6 + } + } + save_scope_value_as = { + name = 1010_applied_price_reductions + value = flag:yes + } + } + } + } + #Trade gold + option = { + name = ep3_laamp_decision_event.1010.b + trigger = { short_term_gold >= var:supply_gold_cost } + show_as_unavailable = { always = yes } + #Pay gold + remove_short_term_gold = var:supply_gold_cost + #Get supplies + domicile ?= { + change_provisions = { + value = { + value = max_provisions + subtract = provisions + } + } + } + #Set correct variables and reroute us to main square + 1010_bought_supplies_effect = yes + } + #Convince them to give you some supply for free + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { highest_skill = diplomacy } + desc = ep3_laamp_decision_event.1010.a_diplomacy + } + triggered_desc = { + trigger = { highest_skill = stewardship } + desc = ep3_laamp_decision_event.1010.a_stewardship + } + triggered_desc = { + trigger = { highest_skill = intrigue } + desc = ep3_laamp_decision_event.1010.a_intrigue + } + triggered_desc = { + trigger = { highest_skill = learning } + desc = ep3_laamp_decision_event.1010.a_learning + } + triggered_desc = { + trigger = { + OR = { + highest_skill = martial + highest_skill_including_prowess = prowess + } + } + desc = ep3_laamp_decision_event.1010.a_martial + } + } + } + } + trigger = { + #Are we on cooldown? + custom_tooltip = { + text = ep3_laamp_decision_event.1010.a.cooldown.tt + NOT = { has_variable = 1010_has_convinced_recently } + } + } + #Keep you informed of the cooldown + show_as_unavailable = { always = yes } + #Duel effect + 1010_highest_skill_duel_effect = yes + } + #Triggered Option: Trade child + option = { + name = { + trigger = { has_trait = callous } + text = ep3_laamp_decision_event.1010.c_callous + } + name = ep3_laamp_decision_event.1010.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { has_trait = callous } + desc = ep3_laamp_decision_event.1010.c.flavor_callous + } + desc = ep3_laamp_decision_event.1010.c.flavor + } + } + trigger = { + exists = scope:payment_child + #For sanity reasons + is_ai = no + } + highlight_portrait = scope:payment_child + #Pay child + scope:payment_child = { + add_opinion = { + modifier = traded_me_away_opinion + target = root + opinion = -50 + } + progress_towards_rival_effect = { + REASON = rival_traded_away_child + CHARACTER = root + OPINION = default_rival_opinion + } + move_to_pool = yes + } + if = { + limit = { exists = scope:other_parent } + scope:other_parent = { + add_opinion = { + modifier = traded_away_child_opinion + target = root + opinion = -50 + } + } + } + #Get supplies + domicile ?= { change_provisions = max_provisions } + #Give appropriate amounts of stress + stress_impact = { + compassionate = major_stress_impact_gain + } + #Set correct variables and reroute us to main square + 1010_bought_supplies_effect = yes + } + #Triggered Option: Intrigue-y visiting partner steals some supply for you + option = { + name = ep3_laamp_decision_event.1010.d + trigger = { + exists = scope:1010_potentiaL_thievery + #Are we on cooldown? + custom_tooltip = { + text = ep3_laamp_decision_event.1010.d.cooldown.tt + NOT = { has_variable = 1010_has_stolen_recently } + } + } + flavor = ep3_laamp_decision_event.1010.d.flavor + show_as_unavailable = { exists = scope:1010_potentiaL_thievery } + scope:visiting_partner = { + duel = { + skill = intrigue + target = scope:laamp_supply_merchant + #Success: Supplies! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1010.d.success + root = { + send_interface_toast = { + title = ep3_laamp_decision_event.1010.d.success + left_icon = scope:visiting_partner + right_icon = scope:laamp_supply_merchant + #Successful theft! + domicile ?= { change_provisions = half_to_max_provisions_value } + #Set up the cooldown for the convince-action + set_variable = { + name = 1010_has_stolen_recently + value = flag:success + days = visit_settlement_minimum_cooldown_days #Sync this with fail + } + #Determine why we can't return to this option + save_scope_value_as = { + name = laamp_decision_bought_supplies + value = flag:none + } + #Go back to the main event + hidden_effect = { 1001_return_to_second_effect = yes } + } + } + + } + #Failure: The local guards are summoned + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + min = 5 + desc = ep3_laamp_decision_event.1010.d.failure + root = { + send_interface_toast = { + title = ep3_laamp_decision_event.1010.d.failure + left_icon = scope:visiting_partner + right_icon = scope:laamp_supply_merchant + #Quite the tussle + scope:visiting_partner = { + increase_wounds_effect = { REASON = fight } + } + custom_tooltip = ep3_laamp_decision_event.1010.a.failure.tt + #Set up the cooldown for the convince-action + set_variable = { + name = 1010_has_stolen_recently + value = flag:fail + days = visit_settlement_minimum_cooldown_days #Sync this with success + } + #This merchant doesn't want to see you again + progress_towards_rival_effect = { + REASON = rival_tried_to_steal_supplies + CHARACTER = scope:laamp_supply_merchant + OPINION = default_rival_opinion + } + #And you will not be going back to supply merchant, but feel free to look at the greyed out option + set_variable = 1010_guards_summoned + #Determine why we can't return to this option + save_scope_value_as = { + name = laamp_decision_bought_supplies + value = flag:none + } + #Go back to the main event + 1001_return_to_second_effect = yes + } + } + } + } + } + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1010.e + #For desc flavor + save_scope_as = did_not_buy_supplies + #Go back to the main event + 1001_return_to_second_effect = yes + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:supply_merchant } + } +} + + +###################################################################### +# SELL ARTIFACT +# ep3_laamp_decision_event.1020 +###################################################################### + +scripted_effect 1020_suppress_artifact_notifications_effect = { + #Don't need no notification about this + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 2 + } +} + +scripted_effect 1020_remove_sell_variables_effect = { + remove_variable ?= 1020_artifact_sell_value + remove_variable ?= 1020_artifact_sell_high_value + remove_variable ?= 1020_artifact_sell_low_value +} + +#Set the correct variable to block off the Artifact option and remove the desc flavor variable +scripted_effect 1020_sold_artifact_effect = { + scope:1020_first_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } + scope:1020_second_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } + scope:1020_third_artifact_to_sell ?= { 1020_remove_sell_variables_effect = yes } + remove_list_variable = { + name = list_of_options + target = flag:has_artifact_option + } + remove_variable ?= 1021_artifact_sell_screen + save_scope_as = laamp_decision_sold_artifact + #Go back to the main event + hidden_effect = { 1001_return_to_second_effect = yes } +} + +#Reused effect to set the variable +scripted_effect 1020_set_artifact_value_variables_effect = { + #Regular price + set_variable = { + name = 1020_artifact_sell_value + value = { + value = $GOLD_VALUE$ + #Better buyers in City Holding + if = { + limit = { + scope:visiting_location = { has_holding_type = city_holding } + } + multiply = { 1.15 1.25 } + } + multiply = { 0.90 1.1 } + } + } + #Haggle success / Outraged partner price + set_variable = { + name = 1020_artifact_sell_high_value + value = { + value = var:1020_artifact_sell_value + #Better buyers in City Holding + if = { + limit = { + scope:visiting_location = { has_holding_type = city_holding } + } + multiply = { 1.15 1.25 } + } + #Haggle success / Outraged partner price + multiply = { 1.15 1.25 } + } + } + #Haggle failed price + set_variable = { + name = 1020_artifact_sell_low_value + value = { + value = var:1020_artifact_sell_value + #Better buyers in City Holding + if = { + limit = { + scope:visiting_location = { has_holding_type = city_holding } + } + multiply = { 1.15 1.25 } + } + #Haggle failed price + multiply = { 0.55 0.8 } + } + } +} + +#Calculate how much the artifact is worth +scripted_effect 1020_calculate_artifact_value_effect = { + #Very expensive + if = { + limit = { rarity = illustrious } + 1020_set_artifact_value_variables_effect = { GOLD_VALUE = root.massive_gold_value } + } + #Expensive + else_if = { + limit = { rarity = famed } + 1020_set_artifact_value_variables_effect = { GOLD_VALUE = root.major_gold_value } + } + #OK price + else_if = { + limit = { rarity = masterwork } + 1020_set_artifact_value_variables_effect = { GOLD_VALUE = root.medium_gold_value } + } + #Cheap + else_if = { + limit = { rarity = common } + 1020_set_artifact_value_variables_effect = { GOLD_VALUE = root.minor_gold_value } + } +} + + +#Sell an artifact to local peddlers +ep3_laamp_decision_event.1020 = { + type = character_event + title = ep3_laamp_decision_event.1020.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #FIRST TIME: We've seen this peddler before + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:laamp_recurring_artifact_peddler + } + desc = ep3_laamp_decision_event.1020.desc_intro_reused_peddler + } + #FIRST TIME: This is a CITY HOLDING, aschually. More refined buyers. + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + scope:visiting_location = { has_holding_type = city_holding } + } + desc = ep3_laamp_decision_event.1020.desc_intro_posh_stalls + } + #RETURN SELL SCREEN: Guess we're thinking very hard + random_valid = { + triggered_desc = { + trigger = { has_variable = 1021_artifact_sell_screen } + desc = ep3_laamp_decision_event.1020.desc_intro_intermediate_returned_01 + } + triggered_desc = { + trigger = { has_variable = 1021_artifact_sell_screen } + desc = ep3_laamp_decision_event.1020.desc_intro_intermediate_returned_02 + } + } + #RETURN: We've returned to this scene, now what + random_valid = { + triggered_desc = { + trigger = { exists = scope:did_not_sell_artifact } + desc = ep3_laamp_decision_event.1020.desc_intro_returned_01 + } + triggered_desc = { + trigger = { exists = scope:did_not_sell_artifact } + desc = ep3_laamp_decision_event.1020.desc_intro_returned_02 + } + } + #FIRST TIME: Intro + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + } + desc = ep3_laamp_decision_event.1020.desc_intro_new_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + } + desc = ep3_laamp_decision_event.1020.desc_intro_new_02 + } + } + } + #FIRST TIME: Artifact Flavor + first_valid = { + #FIRST TIME: One artifact + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + NOT = { exists = scope:1020_second_artifact_to_sell } + NOT = { exists = scope:1020_third_artifact_to_sell } + } + desc = ep3_laamp_decision_event.1020.desc_one_artifact_new_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + NOT = { exists = scope:1020_second_artifact_to_sell } + NOT = { exists = scope:1020_third_artifact_to_sell } + } + desc = ep3_laamp_decision_event.1020.desc_one_artifact_new_02 + } + } + #FIRST TIME: Two artifacts + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + exists = scope:1020_second_artifact_to_sell + NOT = { exists = scope:1020_third_artifact_to_sell } + } + desc = ep3_laamp_decision_event.1020.desc_two_artifacts_new_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + exists = scope:1020_second_artifact_to_sell + NOT = { exists = scope:1020_third_artifact_to_sell } + } + desc = ep3_laamp_decision_event.1020.desc_two_artifacts_new_02 + } + } + #FIRST TIME: Three artifacts + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + exists = scope:1020_second_artifact_to_sell + exists = scope:1020_third_artifact_to_sell + } + desc = ep3_laamp_decision_event.1020.desc_three_artifacts_new_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + exists = scope:1020_first_artifact_to_sell + exists = scope:1020_second_artifact_to_sell + exists = scope:1020_third_artifact_to_sell + } + desc = ep3_laamp_decision_event.1020.desc_three_artifacts_new_02 + } + } + } + #Visiting Partner flavor + first_valid = { + #RETURN: We've returned with our outraged clever partner + triggered_desc = { + trigger = { + exists = scope:did_not_sell_artifact + exists = scope:1020_outraged_partner + } + desc = ep3_laamp_decision_event.1020.desc_outraged_partner_returned + } + #FIRST TIME: Outraged clever partner + triggered_desc = { + trigger = { exists = scope:1020_outraged_partner } + desc = ep3_laamp_decision_event.1020.desc_outraged_partner_new + } + } + } + theme = stewardship + override_background = { reference = ep2_village_festival } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Outraged + triggered_animation = { + trigger = { exists = scope:1020_outraged_partner } + animation = rage + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_cynical + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = personality_compassionate + } + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:laamp_artifact_peddler + #Friendly + triggered_animation = { + trigger = { + scope:laamp_artifact_peddler = { 1010_has_friendly_traits = yes } + } + animation = personality_compassionate + } + #Uninterested + triggered_animation = { + trigger = { + scope:laamp_artifact_peddler = { 1010_has_uninterested_traits = yes } + } + animation = personality_callous + } + #Business-minded + triggered_animation = { + trigger = { + scope:laamp_artifact_peddler = { 1010_has_commerce_traits = yes } + } + animation = admiration + } + #A bit awkward + triggered_animation = { + trigger = { + scope:laamp_artifact_peddler = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + #Irrational + triggered_animation = { + trigger = { + scope:laamp_artifact_peddler = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + animation = personality_forgiving + } + artifact = { + trigger = { exists = scope:1020_first_artifact_to_sell } + target = scope:1020_first_artifact_to_sell + position = lower_left_portrait + } + artifact = { + trigger = { exists = scope:1020_second_artifact_to_sell } + target = scope:1020_second_artifact_to_sell + position = lower_center_portrait + } + artifact = { + trigger = { exists = scope:1020_third_artifact_to_sell } + target = scope:1020_third_artifact_to_sell + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Do we have someone more clever in our company? + if = { + limit = { + NOT = { exists = scope:1020_outraged_partner } + scope:visiting_partner ?= { + stewardship > root.stewardship + stewardship >= average_skill_rating + } + } + #Save outraged clever partner + save_scope_as = 1020_outraged_partner + } + #Find our peddler + if = { + #Do we already have a peddler? + limit = { + NOT = { exists = scope:laamp_artifact_peddler } + } + #Has this person been our artifact peddler in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_peddler_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_artifact_peddler + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_artifact_peddler + } + #Otherwise find a peddler in the pool + if = { + limit = { + NOT = { exists = scope:laamp_artifact_peddler } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + } + save_scope_as = laamp_artifact_peddler + } + } + #Otherwise create a peddler + if = { + limit = { + NOT = { exists = scope:laamp_artifact_peddler } + } + #Create peddler to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_artifact_peddler + } + } + #Remember the peddler + 1010_remember_vendor_character_effect = { GUILD = peddler CHARACTER = scope:laamp_artifact_peddler } + } + #What artifacts are we selling? + if = { + limit = { + NOT = { exists = scope:1020_first_artifact_to_sell } + } + every_character_artifact = { + limit = { 1000_is_unsellable_artifact_trigger = no } + add_to_list = list_of_potential_artifacts_to_sell + } + #Pick a random artifact in the list so we have a starting point + random_in_list = { + list = list_of_potential_artifacts_to_sell + limit = { has_variable = 1020_interesting_artifact_to_sell } + alternative_limit = { + #Empty, just pick an artifact from the list already + } + #Remember the artifact for next visit + set_variable = { + name = 1020_interesting_artifact_to_sell + days = visit_settlement_cooldown_days + } + save_scope_as = 1020_first_artifact_to_sell + } + #Pick something the peddler saw on your character + if = { + limit = { + any_in_list = { + list = list_of_potential_artifacts_to_sell + this != scope:1020_first_artifact_to_sell + } + } + random_in_list = { + list = list_of_potential_artifacts_to_sell + limit = { + has_variable = 1020_interesting_artifact_to_sell + this != scope:1020_first_artifact_to_sell + is_equipped = yes + } + alternative_limit = { + this != scope:1020_first_artifact_to_sell + is_equipped = no + } + alternative_limit = { + this != scope:1020_first_artifact_to_sell + } + #Remember the artifact for next visit + set_variable = { + name = 1020_interesting_artifact_to_sell + days = visit_settlement_cooldown_days + } + save_scope_as = 1020_second_artifact_to_sell + } + + } + #Pick something that isn't whatever old court artifact from when you used to be someone + if = { + limit = { + any_in_list = { + list = list_of_potential_artifacts_to_sell + NOT = { + this = scope:1020_first_artifact_to_sell + this = scope:1020_second_artifact_to_sell + } + } + } + random_in_list = { + list = list_of_potential_artifacts_to_sell + limit = { + has_variable = 1020_interesting_artifact_to_sell + NOT = { + this = scope:1020_first_artifact_to_sell + this = scope:1020_second_artifact_to_sell + } + ep1_artifact_is_court_artifact_trigger = no + is_unique = no + } + alternative_limit = { + NOT = { + this = scope:1020_first_artifact_to_sell + this = scope:1020_second_artifact_to_sell + } + ep1_artifact_is_court_artifact_trigger = no + } + alternative_limit = { + NOT = { + this = scope:1020_first_artifact_to_sell + this = scope:1020_second_artifact_to_sell + } + is_unique = no + } + alternative_limit = { + NOT = { + this = scope:1020_first_artifact_to_sell + this = scope:1020_second_artifact_to_sell + } + } + #Remember the artifact for next visit + set_variable = { + name = 1020_interesting_artifact_to_sell + days = visit_settlement_cooldown_days + } + save_scope_as = 1020_third_artifact_to_sell + } + } + } + #Set the prices + if = { + #Always exists + limit = { + scope:1020_first_artifact_to_sell = { + NOT = { has_variable = 1020_artifact_sell_value } + } + } + scope:1020_first_artifact_to_sell = { + 1020_calculate_artifact_value_effect = yes + #Don't need no notifications about this + 1020_suppress_artifact_notifications_effect = yes + } + #2nd Artifact + if = { + limit = { exists = scope:1020_second_artifact_to_sell } + scope:1020_second_artifact_to_sell = { + 1020_calculate_artifact_value_effect = yes + #Don't need no notifications about this + 1020_suppress_artifact_notifications_effect = yes + } + } + #3rd Artifact + if = { + limit = { exists = scope:1020_third_artifact_to_sell } + scope:1020_third_artifact_to_sell = { + 1020_calculate_artifact_value_effect = yes + #Don't need no notifications about this + 1020_suppress_artifact_notifications_effect = yes + } + } + #Let's not do this twice + } + } + #Go to sell screen + option = { + name = ep3_laamp_decision_event.1020.a + #Inform player + custom_tooltip = ep3_laamp_decision_event.1020.a.tt + #Show the current estimated prices so that you can compare + custom_tooltip = ep3_laamp_decision_event.1020.a.first_artifact.tt + #2nd Artifact + if = { + limit = { exists = scope:1020_second_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.a.second_artifact.tt + } + #3rd Artifact + if = { + limit = { exists = scope:1020_third_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.a.third_artifact.tt + } + if = { # Eagle + limit = { + can_laamp_sell_eagle_trigger = yes + } + custom_tooltip = ep3_laamp_decision_event.1020.eagle.tt + custom_tooltip = ep3_laamp_decision_event.1020.eagle.price_tt + } + remove_variable ?= 1021_artifact_sell_screen + #Go to sell screen + trigger_event = ep3_laamp_decision_event.1021 + } + #Attempt a haggle + option = { + name = ep3_laamp_decision_event.1020.b + trigger = { + #You're on cooldown + custom_tooltip = { + text = ep3_laamp_decision_event.1020.b.cooldown.tt + NOT = { has_variable = 1020_has_haggled_recently } + } + } + duel = { + skill = stewardship + target = scope:laamp_artifact_peddler + #Success: Artifact merchant looks contemplatively at you, increased price + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1020.b.success + send_interface_toast = { + title = ep3_laamp_decision_event.1020.b.success + left_icon = root + right_icon = scope:laamp_artifact_peddler + #For loc and effects + save_scope_value_as = { + name = attempted_artifact_haggle + value = flag:success + } + #Show the estimated success prices so that you can compare + custom_tooltip = ep3_laamp_decision_event.1020.b.success.first_artifact.tt + #2nd Artifact + if = { + limit = { exists = scope:1020_second_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.b.success.second_artifact.tt + } + #3rd Artifact + if = { + limit = { exists = scope:1020_third_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.b.success.third_artifact.tt + } + if = { + limit = { has_lifestyle = stewardship_lifestyle } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + stress_impact = { + greedy = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + } + #Go to sell screen with modified costs + trigger_event = ep3_laamp_decision_event.1021 + } + } + #Failure: Artifact merchant smirks at you, decreased price + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1020.b.failure + send_interface_toast = { + title = ep3_laamp_decision_event.1020.b.failure + left_icon = root + right_icon = scope:laamp_artifact_peddler + #For loc and effects + save_scope_value_as = { + name = attempted_artifact_haggle + value = flag:failure + } + #Show the estimated failure prices so that you can compare + custom_tooltip = ep3_laamp_decision_event.1020.b.failure.first_artifact.tt + #2nd Artifact + if = { + limit = { exists = scope:1020_second_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.b.failure.second_artifact.tt + } + #3rd Artifact + if = { + limit = { exists = scope:1020_third_artifact_to_sell } + custom_tooltip = ep3_laamp_decision_event.1020.b.failure.third_artifact.tt + } + stress_impact = { + base = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + #Go to sell screen with modified costs + trigger_event = ep3_laamp_decision_event.1021 + } + } + } + set_variable = { + name = 1020_has_haggled_recently + days = visit_settlement_minimum_cooldown_days + } + } + #Triggered Option: Outraged clever partner gets you a higher price for a random artifact + option = { + name = ep3_laamp_decision_event.1020.c + #If we have an outraged clever partner + trigger = { exists = scope:1020_outraged_partner } + #... whom randomly sells one of the artifacts at a higher price + random_list = { + #This should always exist + 50 = { + desc = ep3_laamp_decision_event.1020.c.first_artifact + add_gold = scope:1020_first_artifact_to_sell.var:1020_artifact_sell_high_value + scope:1020_first_artifact_to_sell = { set_owner = scope:laamp_artifact_peddler } + } + #Artifact #2 + 50 = { + trigger = { exists = scope:1020_second_artifact_to_sell } + desc = ep3_laamp_decision_event.1020.c.second_artifact + add_gold = scope:1020_second_artifact_to_sell.var:1020_artifact_sell_high_value + scope:1020_second_artifact_to_sell = { set_owner = scope:laamp_artifact_peddler } + } + #Artifact #3 + 50 = { + trigger = { exists = scope:1020_third_artifact_to_sell } + desc = ep3_laamp_decision_event.1020.c.third_artifact + add_gold = scope:1020_third_artifact_to_sell.var:1020_artifact_sell_high_value + scope:1020_third_artifact_to_sell = { set_owner = scope:laamp_artifact_peddler } + } + } + #Set correct variables and reroute us to main square + 1020_sold_artifact_effect = yes + stress_impact = { + ambitious = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + #Inform the player + custom_tooltip = ep3_laamp_decision_event.return.tt + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1020.d + #For desc flavor + save_scope_as = did_not_sell_artifact + #Go back to the main event + 1001_return_to_second_effect = yes + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:artifact_peddler } + } +} + + +#Sell (or destroy) artifact (if unique artifact) +scripted_effect ep3_laamp_decision_1021_sell_artifact_effect = { + save_temporary_scope_as = artifact_to_sell #More descriptive than 'prev' + #Get appropriate amount of gold + root = { + if = { + limit = { + exists = scope:attempted_artifact_haggle + scope:attempted_artifact_haggle = flag:success + } + add_gold = scope:artifact_to_sell.var:1020_artifact_sell_high_value + } + else_if = { + limit = { + exists = scope:attempted_artifact_haggle + scope:attempted_artifact_haggle = flag:failure + } + add_gold = scope:artifact_to_sell.var:1020_artifact_sell_low_value + } + else = { add_gold = scope:artifact_to_sell.var:1020_artifact_sell_value } + } + #Set the artifact owner + if = { + limit = { + scope:artifact_to_sell = { is_unique = yes } + } + #Destroy unique artifacts so they don't get stuck with the Pool People + hidden_effect = { destroy_artifact = scope:artifact_to_sell } + } + else = { set_owner = scope:laamp_artifact_peddler } +} + + +#Actual sell screen +ep3_laamp_decision_event.1021 = { + type = character_event + window = visit_settlement_window + title = { + first_valid = { + #Haggle Success + triggered_desc = { + trigger = { scope:attempted_artifact_haggle ?= flag:success } + desc = ep3_laamp_decision_event.1021.t_success + } + #Haggle Failure + triggered_desc = { + trigger = { scope:attempted_artifact_haggle ?= flag:failure } + desc = ep3_laamp_decision_event.1021.t_failure + } + desc = ep3_laamp_decision_event.1021.t + } + } + desc = { + first_valid = { + #FIRST TIME: Haggle Success + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_haggled_artifact } + scope:attempted_artifact_haggle ?= flag:success + } + desc = ep3_laamp_decision_event.1021.desc_success + } + #FIRST TIME: Haggle Failure + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_haggled_artifact } + scope:attempted_artifact_haggle ?= flag:failure + } + desc = ep3_laamp_decision_event.1021.desc_failure + } + #FIRST TIME: Generic first-strings + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + } + desc = ep3_laamp_decision_event.1021.desc_moment_of_purchase_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:did_not_sell_artifact } + } + desc = ep3_laamp_decision_event.1021.desc_moment_of_purchase_02 + } + } + #RETURN: Same as the generic first-strings + random_valid = { + triggered_desc = { + trigger = { + NOT = { has_variable = 1021_artifact_sell_screen } + } + desc = ep3_laamp_decision_event.1021.desc_moment_of_purchase_01 + } + triggered_desc = { + trigger = { + NOT = { has_variable = 1021_artifact_sell_screen } + } + desc = ep3_laamp_decision_event.1021.desc_moment_of_purchase_02 + } + } + #RETURN: Same as the return-strings in ep3_laamp_decision_event.1020 + random_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:did_not_sell_haggled_artifact + exists = scope:did_not_sell_artifact + } + } + desc = ep3_laamp_decision_event.1020.desc_intro_returned_01 + } + triggered_desc = { + trigger = { + OR = { + exists = scope:did_not_sell_haggled_artifact + exists = scope:did_not_sell_artifact + } + } + desc = ep3_laamp_decision_event.1020.desc_intro_returned_02 + } + } + } + } + theme = stewardship + override_background = { reference = ep2_village_festival } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Outraged + triggered_animation = { + trigger = { exists = scope:1020_outraged_partner } + animation = rage + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_cynical + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = personality_compassionate + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:attempted_artifact_haggle + scope:attempted_artifact_haggle = flag:failure + } + animation = shame + } + triggered_animation = { + trigger = { + can_laamp_sell_eagle_trigger = yes + } + animation = hunting_falcon + } + animation = thinking + } + right_portrait = { + character = scope:laamp_artifact_peddler + triggered_animation = { + trigger = { exists = scope:attempted_artifact_haggle } + animation = disapproval + } + animation = steward + } + artifact = { + trigger = { exists = scope:1020_first_artifact_to_sell } + target = scope:1020_first_artifact_to_sell + position = lower_left_portrait + } + artifact = { + trigger = { exists = scope:1020_second_artifact_to_sell } + target = scope:1020_second_artifact_to_sell + position = lower_center_portrait + } + artifact = { + trigger = { exists = scope:1020_third_artifact_to_sell } + target = scope:1020_third_artifact_to_sell + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + } + #Sell artifact #1 + option = { + name = ep3_laamp_decision_event.1021.a + #Sell the artifact, price depending on if you haggled or not etc + scope:1020_first_artifact_to_sell = { ep3_laamp_decision_1021_sell_artifact_effect = yes } + #Set correct variables and reroute us to main square + 1020_sold_artifact_effect = yes + } + #Sell artifact #2 + option = { + name = ep3_laamp_decision_event.1021.b + trigger = { exists = scope:1020_second_artifact_to_sell } + #Sell the artifact, price depending on if you haggled or not etc + scope:1020_second_artifact_to_sell = { ep3_laamp_decision_1021_sell_artifact_effect = yes } + #Set correct variables and reroute us to main square + 1020_sold_artifact_effect = yes + } + #Sell artifact #3 + option = { + name = ep3_laamp_decision_event.1021.c + trigger = { exists = scope:1020_third_artifact_to_sell } + #Sell the artifact, price depending on if you haggled or not etc + scope:1020_third_artifact_to_sell = { ep3_laamp_decision_1021_sell_artifact_effect = yes } + #Set correct variables and reroute us to main square + 1020_sold_artifact_effect = yes + } + option = { + name = ep3_laamp_decision_event.1021.eagle + trigger = { + can_laamp_sell_eagle_trigger = yes + } + #Sell eagle :( + add_character_flag = is_selling_eagle_flag + show_as_tooltip = { + sell_eagle_effect = { + PRICE = hunting_eagle_sell_value + RECIPIENT = scope:laamp_artifact_peddler + SELLER = root + } + } + + #Stress + stress_impact = { + base = minor_stress_impact_gain + greedy = minor_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + loyal = minor_stress_impact_gain + } + + #Set correct variables and reroute us to main square + 1020_sold_artifact_effect = yes + + ai_chance = { + base = 15 # No one is really doing this unless they're giga broke + modifier = { + factor = 1.7 + short_term_gold <= 5 + } + modifier = { + add = 1.2 + has_character_modifier = weak_eagle_modifier + } + modifier = { + add = 1.5 + has_character_modifier = very_weak_eagle_modifier + } + modifier = { + add = 1.5 + eagle_is_old_trigger = yes + } + modifier = { + add = 0.75 + OR = { + has_character_modifier = strong_eagle_modifier + has_eagle_personality_trait_trigger = yes + } + } + ai_value_modifier = { + ai_greed = 0.5 + ai_compassion = -0.5 + } + } + } + #I've changed my mind + option = { + name = { + text = { + first_valid = { + #Go back to main + triggered_desc = { + trigger = { exists = scope:attempted_artifact_haggle } + desc = ep3_laamp_decision_event.1020.d + } + #Go back to the previous screen + desc = ep3_laamp_decision_event.1021.d + } + } + } + #For desc flavor + if = { + #We came through here the first time + limit = { + NOT = { exists = scope:did_not_sell_artifact } + } + save_scope_as = did_not_sell_artifact + } + #We came through here via haggling + if = { + limit = { exists = scope:attempted_artifact_haggle } + if = { + limit = { + NOT = { exists = scope:did_not_sell_haggled_artifact } + } + save_scope_as = did_not_sell_haggled_artifact + } + #Go back to main + custom_tooltip = ep3_laamp_decision_event.return.tt + trigger_event = ep3_laamp_decision_event.1000 + } + else = { + #Go back to the previous screen + trigger_event = ep3_laamp_decision_event.1020 + } + } + after = { + #For loc + if = { + limit = { + NOT = { has_variable = 1021_artifact_sell_screen } + } + set_variable = 1021_artifact_sell_screen + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:artifact_peddler } + hidden_effect = { + # Put eagle selling option on cooldown + if = { + limit = { + has_available_eagle_trigger = yes + } + add_character_flag = { + flag = cant_sell_eagle + months = 6 + } + } + # Actually sell the eagle if applicable + if = { + limit = { + has_character_flag = is_selling_eagle_flag + } + sell_eagle_effect = { + PRICE = hunting_eagle_sell_value + RECIPIENT = scope:laamp_artifact_peddler + SELLER = root + } + remove_character_flag = is_selling_eagle_flag + } + } + } +} + + +###################################################################### +# TOWN CRIER +# ep3_laamp_decision_event.1025 +###################################################################### + +#For hubs. All events that use this need to account for loc in relation to the value being 0, 1, or 2 (e.g. scope:church_grounds_loc_tracker ?= 0 ) +scripted_effect 1025_set_and_check_hub_loc_tracker_scope_effect = { + if = { + limit = { + NOT = { exists = scope:$HUB$_loc_tracker } #e.g. scope:church_grounds_loc_tracker + } + save_scope_value_as = { + name = $HUB$_loc_tracker + value = 0 + } + } + else_if = { + limit = { scope:$HUB$_loc_tracker ?= 2 } + save_scope_value_as = { + name = $HUB$_loc_tracker + value = 0 + } + } + else_if = { + limit = { scope:$HUB$_loc_tracker ?= 0 } + save_scope_value_as = { + name = $HUB$_loc_tracker + value = 1 + } + } + else = { + save_scope_value_as = { + name = $HUB$_loc_tracker + value = 2 + } + } +} + +#Technically these could be rolled into the HUB variant if we add a 3rd random loc for all current SCENEs +#For scenes. All events that use this need to account for loc in relation to the value being 0 or 1 (e.g. scope:weaponsmith_loc_tracker ?= 0 ) +scripted_effect 1025_set_and_check_scene_loc_tracker_scope_effect = { + if = { + limit = { + NOT = { exists = scope:$SCENE$_loc_tracker } #e.g. scope:weaponsmith_loc_tracker + } + save_scope_value_as = { + name = $SCENE$_loc_tracker + value = 0 + } + } + else_if = { + limit = { scope:$SCENE$_loc_tracker ?= 1 } + save_scope_value_as = { + name = $SCENE$_loc_tracker + value = 0 + } + } + else = { + save_scope_value_as = { + name = $SCENE$_loc_tracker + value = 1 + } + } +} + +#Set the correct variable to block off the Contract option and remove the desc flavor variable +scripted_effect 1025_finished_contract_effect = { + #Set up the cooldown for the contract action + set_variable = { + name = 1025_has_contracted_recently + days = visit_settlement_minimum_cooldown_days + } + #We're done here + save_scope_value_as = { + name = laamp_decision_has_contracted + value = flag:yes + } + #Go back to the main event + hidden_effect = { 1001_return_to_second_effect = yes } +} + +#Used in enough places +scripted_effect 1025_save_random_county_province_effect = { + random_county_in_region = { + region = $REGION$ + random_county_province = { save_scope_as = contract_province } + } +} + +#Not too far away... Should probably be revisited sometime in the future. Use distance instead? +scripted_effect 1025_set_contract_location_effect = { + random_list = { + #North Europe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_europe_north } + } + 1025_save_random_county_province_effect = { REGION = world_europe_north } + } + #West Europe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_europe_west } + } + 1025_save_random_county_province_effect = { REGION = world_europe_west } + } + #East Europe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_europe_east } + } + 1025_save_random_county_province_effect = { REGION = world_europe_east } + } + #South Europe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_europe_south } + } + 1025_save_random_county_province_effect = { REGION = world_europe_south } + } + #Middle East + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_middle_east } + } + 1025_save_random_county_province_effect = { REGION = world_middle_east } + } + #India + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_india } + } + 1025_save_random_county_province_effect = { REGION = world_india } + } + #North Africa + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_africa_north } + } + 1025_save_random_county_province_effect = { REGION = world_africa_north } + } + #West Africa + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_africa_west } + } + 1025_save_random_county_province_effect = { REGION = world_africa_west } + } + #East Africa + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_africa_east } + } + 1025_save_random_county_province_effect = { REGION = world_africa_east } + } + #Sahara + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_africa_sahara } + } + 1025_save_random_county_province_effect = { REGION = world_africa_sahara } + } + #Siberia + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_siberia } + } + 1025_save_random_county_province_effect = { REGION = world_siberia } + } + #West Steppe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_steppe_west } + } + 1025_save_random_county_province_effect = { REGION = world_steppe_west } + } + #Central Steppe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_steppe_central } + } + 1025_save_random_county_province_effect = { REGION = world_steppe_central } + } + #East Steppe + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_steppe_east } + } + 1025_save_random_county_province_effect = { REGION = world_steppe_east } + } + #Tarim + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_steppe_tarim } + } + 1025_save_random_county_province_effect = { REGION = world_steppe_tarim } + } + #Tibet + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_tibet } + } + 1025_save_random_county_province_effect = { REGION = world_tibet } + } + # Burma + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_burma } + } + 1025_save_random_county_province_effect = { REGION = world_burma } + } + # Mainland SE Asia + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_southeast_mainland } + } + 1025_save_random_county_province_effect = { REGION = world_asia_southeast_mainland } + } + # Maritime SE Asia + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_southeast_islands } + } + 1025_save_random_county_province_effect = { REGION = world_asia_southeast_islands } + } + #China + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_china } + } + 1025_save_random_county_province_effect = { REGION = world_asia_china } + } + #Japan + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_japan } + } + 1025_save_random_county_province_effect = { REGION = world_asia_japan } + } + #Korea + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_korea } + } + 1025_save_random_county_province_effect = { REGION = world_asia_korea } + } + #Sakhalin-Hokkaido + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_sakhalin_hokkaido } + } + 1025_save_random_county_province_effect = { REGION = world_asia_sakhalin_hokkaido } + } + #North East Asia + 10 = { + trigger = { + scope:visiting_location = { geographical_region = world_asia_north_east } + } + 1025_save_random_county_province_effect = { REGION = world_asia_north_east } + } + } +} + +#Set contract type +scripted_effect 1025_randomize_and_remember_contract_type_effect = { + #Find an employer to check the trigger against + scope:visiting_location.county = { + holder ?= { + if = { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + every_vassal_or_below ?= { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + top_liege ?= { + if = { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + every_vassal_or_below ?= { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + } + } + every_neighboring_county ?= { + holder ?= { + if = { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + } + add_to_temporary_list = potential_contract_employers + every_vassal_or_below ?= { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + top_liege ?= { + if = { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + every_vassal_or_below ?= { + limit = { 1025_is_appropriate_landed_contract_employer_trigger = yes } + add_to_temporary_list = potential_contract_employers + } + } + } + } + } + #Pick actual contract groups + random_list = { + #Nothing at all! + 10 = { + modifier = { + 1000_is_a_nomadic_holding_trigger = yes + factor = 2 + } + modifier = { + num_offered_task_contracts > 5 + add = 20 + } + modifier = { + num_offered_task_contracts > 10 + add = 20 + } + #No contracts + } + #Treasure Map + 5 = { + #Do we already have a treasure map contract? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:treasure_map_contract } + } + trigger_else = { always = no } + #Do we already have an active Treasure Map contract? + any_character_artifact = { has_variable = 1025_treasure_map } + any_character_task_contract = { task_contract_type = laamp_treasure_map_contract } + #Are we on cooldown? + has_variable = 1025_had_treasure_map_contract_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:treasure_map_contract } + } + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:treasure_map_contract + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:treasure_map_contract + } + } + #Legendary Contract + 5 = { + #Did we spawn a legendary contract recently? + trigger = { + prestige_level >= tier_kingdom + 1025_can_create_legendary_contract_trigger = yes + NOR = { + #Are we on cooldown? + has_variable = 1025_had_legendary_contract_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:legendary_contract } + } + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:legendary_contract + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:legendary_contract + } + #Yes, I will whack you with a double cooldown on legendaries. It's shorter if you don't pick the option though + set_variable = { + name = 1025_had_legendary_contract_recently + days = visit_settlement_minimum_cooldown_days + } + } + #Transport Contracts + 20 = { + #Did we spawn transport contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:transport_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_transport_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:transport_contracts } + } + #Can we actually spawn any transport contracts? + any_in_List = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_transport_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #More transports for the baggage train + modifier = { + domicile ?= { has_domicile_building = baggage_train_01 } + factor = 2 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:transport_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:transport_contracts + } + } + #Criminal Contracts + 20 = { + #Did we spawn criminal contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:criminal_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_criminal_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:criminal_contracts } + } + #Can we actually spawn any criminal contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_criminal_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #More criminals... if corrupt location + modifier = { + scope:visiting_location.county = { has_county_corruption_trigger = yes } + add = 10 + } + modifier = { + scope:visiting_location.county = { county_control <= 50 } + add = 10 + } + #Are you actually looking for criminal contracts? + modifier = { + has_trait = honest + factor = 0.5 + } + modifier = { + has_trait = deceitful + factor = 2 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:criminal_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:criminal_contracts + } + } + #Justicar Contracts + 20 = { + #Did we spawn justicar contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:justicar_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_justicar_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:justicar_contracts } + } + #Can we actually spawn any justicar contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_justicar_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #More criminals... if corrupt location + modifier = { + scope:visiting_location.county = { has_county_corruption_trigger = yes } + add = 10 + } + modifier = { + scope:visiting_location.county = { county_control <= 50 } + add = 10 + } + #You're pretty law-abiding? + modifier = { + OR = { + has_trait = honest + has_trait = just + has_trait = gallant + has_focus = martial_chivalry_focus + } + factor = 2 + } + modifier = { + has_trait = deceitful + factor = 0.5 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:justicar_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:justicar_contracts + } + } + #Hireling Contracts + 20 = { + #Did we spawn hireling contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:hireling_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_hireling_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:hireling_contracts } + } + #Can we actually spawn any hireling contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_hireling_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:hireling_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:hireling_contracts + } + } + #Diplomacy Contracts + 20 = { + #Did we spawn diplomacy contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:diplomacy_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_diplomacy_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:diplomacy_contracts } + } + #Can we actually spawn any diplomacy contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_diplomacy_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:diplomacy_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:diplomacy_contracts + } + } + #Stewardship Contracts + 20 = { + #Did we spawn stewardship contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:stewardship_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_stewardship_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:stewardship_contracts } + } + #Can we actually spawn any stewardship contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_stewardship_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + #More organization in highly developed areas + modifier = { + scope:visiting_location.county = { development_level > bad_development_level } + add = 10 + } + modifier = { + scope:visiting_location.county = { development_level > medium_development_level } + add = 10 + } + #You're shrewd? + modifier = { + OR = { + has_trait = governor + has_trait = diligent + has_trait = administrator + } + factor = 2 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:stewardship_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:stewardship_contracts + } + } + #Learning Contracts + 20 = { + #Did we spawn learning contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:learning_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_learning_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:learning_contracts } + } + #Can we actually spawn any learning contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_learning_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + modifier = { + scope:visiting_location.county = { development_level > medium_development_level } + add = 10 + } + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + add = 10 + } + #You're... academic? + modifier = { + has_trait = scholar + factor = 2 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:learning_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:learning_contracts + } + } + #Intrigue Contracts + 20 = { + #Did we spawn intrigue contracts recently? + trigger = { + NOR = { + #Is this contract type already saved from our last visit? + trigger_if = { + limit = { 1025_location_has_a_saved_contract_type_trigger = yes } + 1025_saved_location_contract_type_matches_this_type_trigger = { CONTRACT_TYPE_FLAG = flag:intrigue_contracts } + } + trigger_else = { always = no } + #Are we on cooldown? + has_variable = 1025_had_intrigue_contracts_recently + #Has this contract type already been assigned to another contract scope this visit? + 1025_contract_type_is_assigned_trigger = { CONTRACT_TYPE_FLAG = flag:intrigue_contracts } + } + #Can we actually spawn any intrigue contracts? + any_in_list = { + list = potential_contract_employers + save_temporary_scope_as = considered_employer + can_create_intrigue_contract_trigger = { LAAMP = root EMPLOYER = scope:considered_employer } + } + } + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + add = 10 + } + #You're... schemer? + modifier = { + has_trait = schemer + factor = 2 + } + #Set the type + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:intrigue_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:intrigue_contracts + } + } + #Add more contract types below VV + } + scope:visiting_location = { + #Clean up any old variables + if = { + limit = { has_variable = 1025_saved_$NUM$_contract_type } + remove_variable = 1025_saved_$NUM$_contract_type + } + #We will not be saving legendary contracts as those are more volatile (does employer still exist? etc) + if = { + limit = { scope:1025_$NUM$_contract ?= flag:legendary_contract } + #Nothing + } + else_if = { + limit = { exists = scope:1025_$NUM$_contract } + #Remember this to avoid decision-scumming + set_variable = { + name = 1025_saved_$NUM$_contract_type #i.e. 1025_saved_first_contract_type + value = scope:1025_$NUM$_contract #i.e. flag:treasure_map_contract + days = visit_settlement_minimum_cooldown_days + } + } + else = { + save_scope_value_as = { + name = 1025_$NUM$_no_contract + value = flag:no_contract + } + #Remember this to avoid decision-scumming + set_variable = { + name = 1025_saved_$NUM$_contract_type + value = scope:1025_$NUM$_no_contract + days = visit_settlement_minimum_cooldown_days + } + } + } +} + +#Do we need an employer? +scripted_effect 1025_generate_employer_effect = { + #Treasure Map + if = { + limit = { scope:1025_$NUM$_contract = flag:treasure_map_contract } + #Find an employer for the treasure map contract + random_pool_character = { + province = scope:visiting_location + limit = { + 1025_is_old_and_unable_trigger = yes + 1025_appropriate_contract_employer_trigger = yes + } + save_scope_as = 1025_$NUM$_contract_employer + } + #Or create someone + if = { + limit = { + NOT = { exists = scope:1025_$NUM$_contract_employer } + } + create_character = { + template = generic_peasant_character + age = { 50 70 } + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = 1025_$NUM$_contract_employer + } + scope:1025_$NUM$_contract_employer = { + random_list = { + 10 = { add_trait = blind } + 10 = { add_trait = one_legged } + 10 = { add_trait = one_eyed } + 10 = { add_trait = infirm } + 10 = { add_trait = wounded_2 } + } + } + } + } +} + +#This is where the lagg-ic happens... Probably needs revisiting later on. +scripted_effect 1025_find_ruler_and_spawn_legendary_contract_effect = { + #Saves us a scope:employing_ruler + random_county_in_region = { + region = $REGION$ + limit = { 1025_region_has_suitable_employer_trigger = yes } + save_scope_as = contract_county + #Find the ruler + scope:contract_county.holder = { save_scope_as = employing_ruler } + } + #Legendary... contracts? + random_list = { + #Raid + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_raid_contract + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_raid_contract + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_steal_artifact_contract + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_steal_artifact_contract + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_treasure_hunting_contract + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_treasure_hunting_contract + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_vip + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_transport_vip + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_artifact + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_transport_artifact + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_gold + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_transport_gold + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + 10 = { + trigger = { + can_create_task_contract = { + type_name = laamp_transport_animal + employer = scope:employing_ruler + } + } + create_task_contract = { + task_contract_type = laamp_transport_animal + location = scope:employing_ruler.capital_province + task_contract_employer = scope:employing_ruler + task_contract_tier = task_contract_t3_value #Legendary! + save_scope_as = 1025_legendary_contract + } + } + } + scope:1025_legendary_contract = { + set_variable = { + name = retain_despite_distance + value = yes + } + } +} + +#Spawn the actual contracts +scripted_effect 1025_option_picked_spawn_contract_effect = { + #Treasure Map + switch = { + trigger = scope:1025_$NUM$_contract + flag:treasure_map_contract = { + hidden_effect = { + #Create treasure map contract + create_task_contract = { + task_contract_type = laamp_treasure_map_contract + location = scope:visiting_location + task_contract_employer = scope:1025_$NUM$_contract_employer + task_contract_tier = scope:1025_$NUM$_contract_employer.task_contract_tier_value + save_scope_as = 1025_treasure_map_contract + } + scope:1025_treasure_map_contract ?= { + #Pick treasure location + 1025_set_contract_location_effect = yes + #Save location on contract + if = { + limit = { exists = scope:contract_province } + set_variable = { + name = contract_treasure_location + value = scope:contract_province + } + } + #Fallback + else = { + random_county_in_region = { + region = world_asia_minor #Something something Bosnia + random_county_province = { save_scope_as = treasure_province } + } + set_variable = { + name = contract_treasure_location + value = scope:treasure_province + } + } + #Save the pick-up location + set_variable = { + name = contract_picked_up_in_location + value = scope:visiting_location + } + } + } + #What do you mean _in your face_ :c + scope:1025_treasure_map_contract = { + open_view_data = { + view = task_contract + player = root + } + } + } + #Legendary Contract + flag:legendary_contract = { + hidden_effect = { #Comment out this hidden_effect = { ... } to better survey what contracts become available while debugging + #North Europe + if = { + limit = { + scope:visiting_location = { geographical_region = world_europe_north } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_europe_north } + } + #West Europe + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_europe_west } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_europe_west } + } + #East Europe + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_europe_east } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_europe_east } + } + #South Europe + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_europe_south } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_europe_south } + } + #Middle East + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_middle_east } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_middle_east } + } + #India + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_india } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_india } + } + #North Africa + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_africa_north } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_africa_north } + } + #West Africa + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_africa_west } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_africa_west } + } + #East Africa + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_africa_east } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_africa_east } + } + #West Steppe + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_steppe_west } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_steppe_west } + } + #East Steppe + else_if = { + limit = { + scope:visiting_location = { geographical_region = world_steppe_east } + } + 1025_find_ruler_and_spawn_legendary_contract_effect = { REGION = world_steppe_east } + } + #YOLO + else = { + random_ruler = { + limit = { + save_temporary_scope_as = ruler_check + valid_laamp_basic_trigger = { + EMPLOYER = scope:ruler_check + LAAMP = root + } + } + save_scope_as = employing_ruler + } + } + } + #What do you mean _in your face_ :c + scope:1025_legendary_contract ?= { + open_view_data = { + view = task_contract + player = root + } + } + } + #Transport Contracts + flag:transport_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_transport_group } + } + } + } + #Criminal Contracts + flag:criminal_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_criminal_group } + } + } + } + #Justicar Contracts + flag:justicar_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_justicar_group } + } + } + } + #Hireling Contracts + flag:hireling_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_hireling_group laamp_contracts_martial_group } #Stashing martial here, for now + } + } + } + #Diplomacy Contracts + flag:diplomacy_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_diplomacy_group } + } + } + } + #Stewardship Contracts + flag:stewardship_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_stewardship_group } + } + } + } + #Learning Contracts + flag:learning_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_learning_group } + } + } + } + #Intrigue Contracts + flag:intrigue_contracts = { + hidden_effect = { + populate_task_contracts_for_area = { + location = scope:visiting_location + amount = num_contracts_spawned_value + group = { laamp_contracts_intrigue_group } + } + } + } + #Add more contract types below VV + } +} + +#Set up the tooltip, cooldown and prestige cost +scripted_effect 1025_option_tooltip_and_cooldown_contract_type_effect = { + #Contract stuff + switch = { + trigger = scope:1025_$NUM$_contract + #Treasure Map + flag:treasure_map_contract = { + custom_tooltip = ep3_laamp_decision_event.1025.treasure_map_contract_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_treasure_map_contract_recently + days = visit_settlement_large_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Legendary Contract + flag:legendary_contract = { + custom_tooltip = ep3_laamp_decision_event.1025.legendary_contract_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_legendary_contract_recently + days = visit_settlement_large_cooldown_days + } + #Prestige cost + add_prestige = medium_prestige_loss + } + #Transport Contracts + flag:transport_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.transport_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_transport_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Criminal Contracts + flag:criminal_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.criminal_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_criminal_contracts_recently + days = visit_settlement_cooldown_days + } + #No prestige cost + } + #Justicar Contracts + flag:justicar_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.justicar_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_justicar_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Hireling Contracts + flag:hireling_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.hireling_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_hireling_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Diplomacy Contracts + flag:diplomacy_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.diplomacy_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_diplomacy_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Stewardship Contracts + flag:stewardship_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.stewardship_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_stewardship_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Learning Contracts + flag:learning_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.learning_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_learning_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Intrigue Contracts + flag:intrigue_contracts = { + custom_tooltip = ep3_laamp_decision_event.1025.intrigue_contracts_tt + #Set up the cooldown for the contract type + set_variable = { + name = 1025_had_intrigue_contracts_recently + days = visit_settlement_cooldown_days + } + #Prestige cost + add_prestige = minor_prestige_loss + } + #Add more contract types below VV + } +} + +#Remember, remember (... but not legendary contracts) +scripted_effect 1025_translate_variable_into_flag_effect = { + scope:visiting_location = { + #The Nothingness + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:no_contract } + #Nothing + } + #Treasure Map + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:treasure_map_contract } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:treasure_map_contract + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:treasure_map_contract + } + } + } + #Transport Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:transport_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:transport_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:transport_contracts + } + } + } + #Criminal Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:criminal_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:criminal_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:criminal_contracts + } + } + } + #Justicar Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:justicar_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:justicar_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:justicar_contracts + } + } + } + #Hireling Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:hireling_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:hireling_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:hireling_contracts + } + } + } + #Diplomacy Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:diplomacy_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:diplomacy_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:diplomacy_contracts + } + } + } + #Stewardship Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:stewardship_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:stewardship_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:stewardship_contracts + } + } + } + #Learning Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:learning_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:learning_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:learning_contracts + } + } + } + #Intrigue Contracts + if = { + limit = { var:1025_saved_$NUM$_contract_type ?= flag:intrigue_contracts } + save_scope_value_as = { + name = 1025_$NUM$_contract + value = flag:intrigue_contracts + } + #Save as a temporary variable that is removed after exiting the decision to avoid desc-bloat + root = { + set_variable = { + name = 1025_$NUM$_contract_desc + value = flag:intrigue_contracts + } + } + } + #Add more contract types below VV + } +} + +#This location has a saved contract variable +scripted_trigger 1025_location_has_a_saved_contract_type_trigger = { + scope:visiting_location = { + OR = { + has_variable = 1025_saved_first_contract_type + has_variable = 1025_saved_second_contract_type + has_variable = 1025_saved_third_contract_type + } + } +} + +#The saved contract variable is of CONTRACT_TYPE_FLAG-type +scripted_trigger 1025_saved_location_contract_type_matches_this_type_trigger = { + scope:visiting_location = { + OR = { + var:1025_saved_first_contract_type ?= $CONTRACT_TYPE_FLAG$ + var:1025_saved_second_contract_type ?= $CONTRACT_TYPE_FLAG$ + var:1025_saved_third_contract_type ?= $CONTRACT_TYPE_FLAG$ + } + } +} + +#Used more than 3 times eh +scripted_trigger 1025_region_has_suitable_employer_trigger = { + holder = { + highest_held_title_tier > tier_duchy + NOT = { is_in_list = checked_holders } + save_temporary_scope_as = holder_check + valid_laamp_basic_trigger = { + EMPLOYER = scope:holder_check + LAAMP = root + } + #Copying the special contracts from the character interaction, for now. MUST match the random_list in 1025_find_ruler_and_spawn_legendary_contract_effect + root = { + OR = { + can_create_task_contract = { + type_name = laamp_raid_contract + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_steal_artifact_contract + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_treasure_hunting_contract + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_transport_vip + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_transport_artifact + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_transport_gold + employer = scope:holder_check + } + can_create_task_contract = { + type_name = laamp_transport_animal + employer = scope:holder_check + } + } + } + add_to_temporary_list = checked_holders + } +} + +#... well, can we? +scripted_trigger 1025_can_create_legendary_contract_trigger = { + OR = { + #North Europe + AND = { + scope:visiting_location = { geographical_region = world_europe_north } + any_county_in_region = { + region = world_europe_north + 1025_region_has_suitable_employer_trigger = yes + } + } + #West Europe + AND = { + scope:visiting_location = { geographical_region = world_europe_west } + any_county_in_region = { + region = world_europe_west + 1025_region_has_suitable_employer_trigger = yes + } + } + #East Europe + AND = { + scope:visiting_location = { geographical_region = world_europe_east } + any_county_in_region = { + region = world_europe_east + 1025_region_has_suitable_employer_trigger = yes + } + } + #South Europe + AND = { + scope:visiting_location = { geographical_region = world_europe_south } + any_county_in_region = { + region = world_europe_south + 1025_region_has_suitable_employer_trigger = yes + } + } + #Middle East + AND = { + scope:visiting_location = { geographical_region = world_middle_east } + any_county_in_region = { + region = world_middle_east + 1025_region_has_suitable_employer_trigger = yes + } + } + #India + AND = { + scope:visiting_location = { geographical_region = world_india } + any_county_in_region = { + region = world_india + 1025_region_has_suitable_employer_trigger = yes + } + } + #North Africa + AND = { + scope:visiting_location = { geographical_region = world_africa_north } + any_county_in_region = { + region = world_africa_north + 1025_region_has_suitable_employer_trigger = yes + } + } + #West Africa + AND = { + scope:visiting_location = { geographical_region = world_africa_west } + any_county_in_region = { + region = world_africa_west + 1025_region_has_suitable_employer_trigger = yes + } + } + #East Africa + AND = { + scope:visiting_location = { geographical_region = world_africa_east } + any_county_in_region = { + region = world_africa_east + 1025_region_has_suitable_employer_trigger = yes + } + } + #West Steppe + AND = { + scope:visiting_location = { geographical_region = world_steppe_west } + any_county_in_region = { + region = world_steppe_west + 1025_region_has_suitable_employer_trigger = yes + } + } + #East Steppe + AND = { + scope:visiting_location = { geographical_region = world_steppe_east } + any_county_in_region = { + region = world_steppe_east + 1025_region_has_suitable_employer_trigger = yes + } + } + } +} + +#Don't duplicate contract types between contract scopes +scripted_trigger 1025_contract_type_is_assigned_trigger = { + OR = { + scope:1025_first_contract ?= $CONTRACT_TYPE_FLAG$ + scope:1025_second_contract ?= $CONTRACT_TYPE_FLAG$ + scope:1025_third_contract ?= $CONTRACT_TYPE_FLAG$ + } +} + +#Since the treasure map contract doesn't have a time limit, make 'em old and unfit +scripted_trigger 1025_is_old_and_unable_trigger = { + age > 50 + is_imprisoned = no + OR = { + has_trait = blind + has_trait = one_legged + has_trait = one_eyed + has_trait = infirm + has_trait = wounded_1 + } +} + +#Standard checks +scripted_trigger 1025_appropriate_contract_employer_trigger = { + # Players shouldn't get tangled up in contracts, ever. + is_ai = yes + # Plus some standard stuff. + is_alive = yes + is_adult = yes + is_incapable = no + # Don't offer to work with those who've wronged us. + NOR = { + government_has_flag = government_is_landless_adventurer + # No one we're at war with. + is_at_war_with = root + # Rivals are cheap to grab. + has_relation_rival = root + # Expulsion + custom_tooltip = { + text = adventurer_expelled_trigger_tt + OR = { + has_opinion_modifier = { + target = root + modifier = eviction_ignored_opinion + } + any_liege_or_above = { + has_opinion_modifier = { + target = root + modifier = eviction_ignored_opinion + } + } + } + } + } +} + +#Landed checks +scripted_trigger 1025_is_appropriate_landed_contract_employer_trigger = { + 1025_appropriate_contract_employer_trigger = yes + this.capital_province ?= { + squared_distance = { + target = root.domicile.domicile_location + value < define:NTaskContract|ADVENTURER_DISTANCE_RESTRICTION + } + } +} + +#In too deep, man +scripted_trigger 1025_is_gated_due_to_thievery_trigger = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 60 + } +} + +#Should we be gated from contracts? +scripted_trigger 1025_is_renowned_thief_trigger = { + trigger_if = { + limit = { scope:1025_$NUM$_contract = flag:treasure_map_contract } + custom_tooltip = { + text = gallowsbait_thief_blocked_from_contract.tt + 1025_is_gated_due_to_thievery_trigger = no + } + } + trigger_else = { always = yes } +} + +#Nothing at all! +scripted_trigger 1025_no_contracts_trigger = { + OR = { + #All contract types are on cooldown, I guess + NOR = { + exists = scope:1025_first_contract + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + has_variable = 1025_has_contracted_recently + } +} + + +#Head to the Town Crier to spawn Contract(s) +ep3_laamp_decision_event.1025 = { + type = character_event + title = ep3_laamp_decision_event.1025.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #Use this when we have all contract types on cooldown. Should be a bored crier. + ##COOLDOWN + triggered_desc = { + trigger = { 1025_no_contracts_trigger = yes } + desc = ep3_laamp_decision_event.1025.desc_nothing + } + #RETURN: Tribal - Legendary contract + random_valid = { + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + exists = scope:been_to_contract + scope:contract_loc_tracker ?= 0 + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal_legendary_returned_01 + } + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + scope:contract_loc_tracker ?= 1 + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal_legendary_returned_02 + } + } + #RETURN: Legendary contract + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_contract + scope:contract_loc_tracker ?= 0 + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_legendary_returned_01 + } + triggered_desc = { + trigger = { + scope:contract_loc_tracker ?= 1 + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_legendary_returned_02 + } + } + #RETURN: Tribal - No legendary contract + random_valid = { + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + exists = scope:been_to_contract + scope:contract_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1025.desc_tribal_returned_01 + } + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + scope:contract_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1025.desc_tribal_returned_02 + } + } + #RETURN: No legendary contract + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_contract + scope:contract_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1025.desc_returned_01 + } + triggered_desc = { + trigger = { scope:contract_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1025.desc_returned_02 + } + } + #FIRST TIME: Tribal - Legendary contract - Reused Elder + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + exists = scope:laamp_recurring_town_crier + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal_legendary_reused_crier + } + #FIRST TIME: Legendary contract - Reused Town Crier + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_town_crier + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_legendary_reused_crier + } + #FIRST TIME: Tribal - Legendary contract + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal_legendary + } + #FIRST TIME: Legendary contract + triggered_desc = { + trigger = { + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + OR = { + scope:1025_first_contract ?= flag:legendary_contract + scope:1025_second_contract ?= flag:legendary_contract + scope:1025_third_contract ?= flag:legendary_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_legendary + } + #FIRST TIME: Tribal - No legendary contract - Reused Town Crier + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + exists = scope:laamp_recurring_town_crier + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal_reused_crier + } + #FIRST TIME: No legendary contract - Reused Town Crier + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_town_crier + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + } + desc = ep3_laamp_decision_event.1025.desc_reused_crier + } + #FIRST TIME: Tribal - No legendary contract + triggered_desc = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + } + desc = ep3_laamp_decision_event.1025.desc_tribal + } + #FIRST TIME: No legendary contract + triggered_desc = { + trigger = { + NOR = { + exists = scope:been_to_contract + has_variable = 1025_has_contracted_recently + } + } + desc = ep3_laamp_decision_event.1025.desc + } + } + #Concatenated and outsourced to custom_loc - trust me, this is less cursed than the alternative + #A exists + triggered_desc = { + trigger = { + exists = scope:1025_first_contract + NOR = { + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_A + } + #AB exists + triggered_desc = { + trigger = { + exists = scope:1025_first_contract + exists = scope:1025_second_contract + NOT = { exists = scope:1025_third_contract } + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_AB + } + #ABC exists + triggered_desc = { + trigger = { + exists = scope:1025_first_contract + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_ABC + } + #B exists + triggered_desc = { + trigger = { + exists = scope:1025_second_contract + NOR = { + exists = scope:1025_first_contract + exists = scope:1025_third_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_B + } + #BC exists + triggered_desc = { + trigger = { + NOT = { exists = scope:1025_first_contract } + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_BC + } + #C exists + triggered_desc = { + trigger = { + exists = scope:1025_third_contract + NOR = { + exists = scope:1025_first_contract + exists = scope:1025_second_contract + } + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_C + } + #AC exists + triggered_desc = { + trigger = { + exists = scope:1025_first_contract + exists = scope:1025_third_contract + NOT = { exists = scope:1025_second_contract } + } + desc = ep3_laamp_decision_event.1025.desc_concatenated_AC + } + } + theme = landless_adventurer + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_activity" } + override_background = { + trigger = { 1000_is_a_nomadic_holding_trigger = yes } + reference = mpo_camp_steppe + } + override_background = { reference = garden_location } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + animation = survey + } + center_portrait = { + character = root + triggered_animation = { + trigger = { 1025_no_contracts_trigger = yes } + animation = worry + } + animation = interested + } + right_portrait = { + character = scope:laamp_town_crier + triggered_animation = { + trigger = { 1025_no_contracts_trigger = yes } + animation = boredom + } + animation = debating + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = contract } + #Run all of this once + if = { + limit = { + NOT = { exists = scope:been_to_contract } + } + #Spawn a Town Crier + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_crier_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + #_Elder_ + trigger_if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + age >= 50 + } + } + save_scope_as = laamp_town_crier + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_town_crier + } + #Otherwise find a Town Crier in the pool + if = { + limit = { + NOT = { exists = scope:laamp_town_crier } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + is_available_healthy_adult = yes + NOT = { has_trait = shy } + #_Elder_ + trigger_if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + age >= 50 + } + } + save_scope_as = laamp_town_crier + } + } + #Otherwise create a Town Crier + if = { + limit = { + NOT = { exists = scope:laamp_town_crier } + } + #Create Elder to stuff in pool + if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + create_character = { + template = generic_peasant_character + location = scope:visiting_location + age = { 50 60 } + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_town_crier + } + } + #Create Town Crier to stuff in pool + else = { + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_town_crier + } + } + } + #Remember the Town Crier + 1010_remember_vendor_character_effect = { GUILD = crier CHARACTER = scope:laamp_town_crier } + #First Contract + if = { + limit = { + NOT = { exists = scope:1025_first_contract } + } + #Did we, or someone else, check for contracts here recently? + if = { + limit = { + scope:visiting_location = { has_variable = 1025_saved_first_contract_type } + } + #Translating values from variable to flag translates to number? + 1025_translate_variable_into_flag_effect = { NUM = first } + } + #Otherwise generate a new type + else = { + 1025_randomize_and_remember_contract_type_effect = { NUM = first } + } + } + #Set up the employer, if necessary + if = { + limit = { exists = scope:1025_first_contract } + 1025_generate_employer_effect = { NUM = first } + } + #Second Contract + if = { + limit = { + NOT = { exists = scope:1025_second_contract } + } + #Did we, or someone else, check for contracts here recently? + if = { + limit = { + scope:visiting_location = { has_variable = 1025_saved_second_contract_type } + } + #Translating values from variable to flag + 1025_translate_variable_into_flag_effect = { NUM = second } + } + #Otherwise generate a new type + else = { + 1025_randomize_and_remember_contract_type_effect = { NUM = second } + } + } + #Set up the employer, if necessary + if = { + limit = { exists = scope:1025_second_contract } + 1025_generate_employer_effect = { NUM = second } + } + #If no legendary contract, Third Contract + if = { + limit = { + NOT = { exists = scope:1025_third_contract } + } + #Did we, or someone else, check for contracts here recently? + if = { + limit = { + scope:visiting_location = { has_variable = 1025_saved_third_contract_type } + } + #Translating values from variable to flag + 1025_translate_variable_into_flag_effect = { NUM = third } + } + #Otherwise generate a new type + else = { + 1025_randomize_and_remember_contract_type_effect = { NUM = third } + } + } + #Set up the employer, if necessary + if = { + limit = { exists = scope:1025_third_contract } + 1025_generate_employer_effect = { NUM = third } + } + } + } + #Contract A + option = { + name = ep3_laamp_decision_event.1025.a + trigger = { + exists = scope:1025_first_contract + 1025_is_renowned_thief_trigger = { NUM = first } + } + show_as_unavailable = { exists = scope:1025_first_contract } + #Remove the remember-variable for A + scope:visiting_location = { remove_variable ?= 1025_saved_first_contract_type } + #Spawn contract(s) + 1025_option_picked_spawn_contract_effect = { NUM = first } + #Pick tooltip and set up the cooldown for the contract type + 1025_option_tooltip_and_cooldown_contract_type_effect = { NUM = first } + #Done here; go back to the main event + 1025_finished_contract_effect = yes + } + #Contract B + option = { + name = ep3_laamp_decision_event.1025.b + trigger = { + exists = scope:1025_second_contract + 1025_is_renowned_thief_trigger = { NUM = second } + } + show_as_unavailable = { exists = scope:1025_second_contract } + #Remove the remember-variable for B + scope:visiting_location = { remove_variable ?= 1025_saved_second_contract_type } + #Spawn contract(s) + 1025_option_picked_spawn_contract_effect = { NUM = second } + #Pick tooltip and set up the cooldown for the contract type + 1025_option_tooltip_and_cooldown_contract_type_effect = { NUM = second } + #Done here; go back to the main event + 1025_finished_contract_effect = yes + } + #Contract C + option = { + name = ep3_laamp_decision_event.1025.c + trigger = { + exists = scope:1025_third_contract + 1025_is_renowned_thief_trigger = { NUM = third } + } + show_as_unavailable = { exists = scope:1025_third_contract } + #Remove the remember-variable for C + scope:visiting_location = { remove_variable ?= 1025_saved_third_contract_type } + #Spawn contract(s) + 1025_option_picked_spawn_contract_effect = { NUM = third } + #Pick tooltip and set up the cooldown for the contract type + 1025_option_tooltip_and_cooldown_contract_type_effect = { NUM = third } + #Done here; go back to the main event + 1025_finished_contract_effect = yes + } + #I want to do something else + option = { + #Nothing here + name = { + trigger = { + NOT = { + exists = scope:been_to_contract + exists = scope:1025_first_contract + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + } + text = ep3_laamp_decision_event.1025.d_nothing + } + name = ep3_laamp_decision_event.1025.d + if = { + limit = { + NOT = { + exists = scope:1025_first_contract + exists = scope:1025_second_contract + exists = scope:1025_third_contract + } + } + save_scope_value_as = { + name = laamp_decision_has_contracted + value = flag:no + } + } + #For desc flavor + else = { save_scope_as = been_to_contract } + #Go back to the main event + 1001_return_to_second_effect = yes + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:contract } + } +} + + +###################################################################### +# TAVERN +# ep3_laamp_decision_event.1030 +###################################################################### + +#Withered workaround +scripted_effect 1030_save_hub_scope_effect = { + if = { + limit = { + NOT = { exists = scope:been_to_$HUB$ } + } + save_scope_as = been_to_$HUB$ + } +} + +#Set the correct variable to block off the Tavern option and remove the desc flavor variable +scripted_effect 1030_finished_tavern_effect = { + remove_list_variable = { + name = list_of_options + target = flag:has_tavern_option + } + save_scope_as = laamp_decision_finished_tavern_option +} + +#Nothing left for us to do +scripted_trigger 1030_done_with_tavern_trigger = { + exists = scope:laamp_decision_has_storied + exists = scope:laamp_decision_has_recruited + trigger_if = { + limit = { exists = scope:laamp_spouse_material } + exists = scope:laamp_decision_has_spoused + } + trigger_if = { + limit = { exists = scope:laamp_hooded_figure } + exists = scope:laamp_decision_recruited_hood + } +} + +#Should be an alright seedy fella +scripted_trigger 1030_gallowsbait_character_trigger = { + intrigue > 15 + has_trait = gallowsbait + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value = medium_lifestyle_random_xp_low + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value = medium_lifestyle_random_xp_low + } + has_trait_xp = { + trait = gallowsbait + track = thief + value = medium_lifestyle_random_xp_low + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value = medium_lifestyle_random_xp_low + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value = medium_lifestyle_random_xp_low + } + } +} + +#Not Emperors and Kings, except if... +scripted_trigger 1030_appropriate_noble_trigger = { + is_available_ai_adult = yes + NOR = { + is_contact_of = root + has_variable = 1030_has_been_hooded_recently + has_any_scripted_relation = root #Remember to disable this for rival should we revisit to add some form of murder option in the future + } + #... they're eccentric + trigger_if = { + limit = { + NOT = { has_trait = eccentric } + } + highest_held_title_tier <= tier_duchy + } +} + +scripted_trigger 1030_not_already_used_character_trigger = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no +} + + +#Visit the local tavern +ep3_laamp_decision_event.1030 = { + type = character_event + title = ep3_laamp_decision_event.1030.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #We've returned to this scene, now what + #RETURN: We've returned from Main Square + random_valid = { + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + 1000_is_a_nomadic_holding_trigger = no + exists = scope:been_to_tavern + OR = { + scope:tavern_loc_tracker ?= 0 + scope:tavern_loc_tracker ?= 2 + } + } + desc = ep3_laamp_decision_event.1030.desc_returned_01 + } + #Nomad variant + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + 1000_is_a_nomadic_holding_trigger = yes + exists = scope:been_to_tavern + OR = { + scope:tavern_loc_tracker ?= 0 + scope:tavern_loc_tracker ?= 2 + } + } + desc = ep3_laamp_decision_event.1030.desc_nomad_returned_01 + } + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + scope:tavern_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1030.desc_returned_02 + } + } + #RETURN: We've returned from the Storyteller + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + var:return_from_location ?= flag:storyteller + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_story + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + var:return_from_location ?= flag:storyteller + } + desc = ep3_laamp_decision_event.1030.desc_nomad_returned_from_story + } + #RETURN: We've returned from the Recruitment + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + var:return_from_location ?= flag:recruit + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_recruit + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + var:return_from_location ?= flag:recruit + } + desc = ep3_laamp_decision_event.1030.desc_nomad_returned_from_recruit + } + #RETURN: We've returned from unwinding with the Spouse Material + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + var:return_from_location ?= flag:spouse + exists = scope:1035_unwinded_with_spouse_potential + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_unwinding_spouse + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + var:return_from_location ?= flag:spouse + exists = scope:1035_unwinded_with_spouse_potential + } + desc = ep3_laamp_decision_event.1030.desc_nomad_returned_from_unwinding_spouse + } + #RETURN: We've returned from the Spouse Material + triggered_desc = { + trigger = { var:return_from_location ?= flag:spouse } + desc = ep3_laamp_decision_event.1030.desc_returned_from_spouse + } + #RETURN: We failed to save noble Hooded Figure + triggered_desc = { + trigger = { + var:return_from_location ?= flag:hood + scope:laamp_decision_recruited_hood ?= flag:wounded + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_hood_noble_fail + } + #RETURN: We've returned from the noble Hooded Figure + triggered_desc = { + trigger = { + var:return_from_location ?= flag:hood + exists = scope:laamp_disguised_noble + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_hood_noble + } + #RETURN: We've returned from the Hooded Figure + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + var:return_from_location ?= flag:hood + } + desc = ep3_laamp_decision_event.1030.desc_returned_from_hood + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + var:return_from_location ?= flag:hood + } + desc = ep3_laamp_decision_event.1030.desc_nomad_returned_from_hood + } + #FIRST TIME: Nomad dwelling + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_nomad + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc + } + } + #MID: Is there a spouse? Do we recognize them? Have we interacted with them? + first_valid = { + #RETURN: Reused spouse is still here + triggered_desc = { + trigger = { + exists = scope:been_to_tavern + exists = scope:laamp_recurring_spouse + NOR = { + exists = scope:been_to_spouse + exists = scope:laamp_decision_has_spoused + } + } + desc = ep3_laamp_decision_event.1030.desc_mid_return_reused_spouse + } + #FIRST TIME: You've seen this lass/lad before + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_tavern } + exists = scope:laamp_recurring_spouse + } + desc = ep3_laamp_decision_event.1030.desc_mid_reused_spouse + } + #RETURN: Spouse is still here + triggered_desc = { + trigger = { + exists = scope:been_to_tavern + exists = scope:laamp_spouse_material + NOR = { + exists = scope:been_to_spouse + exists = scope:laamp_decision_has_spoused + } + } + desc = ep3_laamp_decision_event.1030.desc_mid_return_spouse + } + #FIRST TIME: Nomad dwelling + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + NOT = { exists = scope:been_to_tavern } + exists = scope:laamp_spouse_material + } + desc = ep3_laamp_decision_event.1030.desc_nomad_mid_spouse + } + #Otherwise just exclude them + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_nomad_mid + } + #FIRST TIME + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_tavern } + exists = scope:laamp_spouse_material + } + desc = ep3_laamp_decision_event.1030.desc_mid_spouse + } + #Otherwise just exclude them + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_mid + } + } + #Outro + first_valid = { + #FIRST TIME: First time here, look at the hood + triggered_desc = { + trigger = { + exists = scope:laamp_hooded_figure + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_outro_hooded + } + #FIRST TIME: First time here, curious partner + triggered_desc = { + trigger = { + exists = scope:visiting_partner + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_outro_partner + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_tavern } + } + desc = ep3_laamp_decision_event.1030.desc_outro + } + #RETURN: Partner - there is nothing left for us here + triggered_desc = { + trigger = { + exists = scope:visiting_partner + 1030_done_with_tavern_trigger = yes + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_partner_finished + } + #RETURN: There is nothing left for us here + triggered_desc = { + trigger = { 1030_done_with_tavern_trigger = yes } + desc = ep3_laamp_decision_event.1030.desc_outro_return_finished + } + #RETURN: Hood noble did not deviate, yet + triggered_desc = { + trigger = { + exists = scope:laamp_hooded_figure + exists = scope:laamp_disguised_noble + NOR = { + exists = scope:laamp_decision_recruited_hood + exists = scope:been_to_hood + } + } + desc = ep3_laamp_decision_event.1030.desc_outro_hooded_noble_return + } + #RETURN: Hood thief did not deviate, yet + triggered_desc = { + trigger = { + exists = scope:laamp_hooded_figure + NOR = { + exists = scope:laamp_decision_recruited_hood + exists = scope:been_to_hood + } + } + desc = ep3_laamp_decision_event.1030.desc_outro_hooded_return + } + #RETURN: We've been here before + random_valid = { + #RETURN: Partner flavor + triggered_desc = { + trigger = { + exists = scope:visiting_partner + exists = scope:been_to_tavern + scope:tavern_loc_tracker ?= 0 + has_variable = 1030_use_partner_animation_var + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_partner_01 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:tavern_loc_tracker ?= 1 + has_variable = 1030_use_partner_animation_var + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_partner_02 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:tavern_loc_tracker ?= 2 + has_variable = 1030_use_partner_animation_var + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_partner_03 + } + #RETURN: Generics + triggered_desc = { + trigger = { + exists = scope:been_to_tavern + scope:tavern_loc_tracker ?= 0 + NOT = { has_variable = 1030_use_partner_animation_var } + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_01 + } + triggered_desc = { + trigger = { + scope:tavern_loc_tracker ?= 1 + NOT = { has_variable = 1030_use_partner_animation_var } + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_02 + } + triggered_desc = { + trigger = { + scope:tavern_loc_tracker ?= 2 + NOT = { has_variable = 1030_use_partner_animation_var } + } + desc = ep3_laamp_decision_event.1030.desc_outro_return_03 + } + } + } + } + theme = landless_adventurer + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_social" } + override_icon = { reference = "gfx/interface/icons/event_types/type_travel_stewardship.dds" } + override_background = { + trigger = { 1000_is_a_nomadic_holding_trigger = yes } + reference = mpo_tent_interior_mongol + } + override_background = { + trigger = { + scope:visiting_location = { + has_holding_type = tribal_holding + } + } + reference = throne_room_tribal + } + override_background = { reference = tavern } + #PARTNER / ROOT + left_portrait = { + trigger = { + exists = scope:1030_first_character + #Don't display this one if ROOT is in both portraits + NAND = { + scope:1030_first_character = root + exists = scope:1030_second_character + scope:1030_second_character = root + } + } + character = scope:1030_first_character + #PARTNER: If it's our (tired) visiting partner + triggered_animation = { + trigger = { + 1030_done_with_tavern_trigger = yes + scope:visiting_partner ?= scope:1030_first_character + } + animation = boredom + } + #PARTNER: Variation 01 + triggered_animation = { + trigger = { + scope:visiting_partner ?= scope:1030_first_character + exists = scope:been_to_tavern + scope:tavern_loc_tracker ?= 0 + root = { has_variable = 1030_use_partner_animation_var } + } + animation = interested + } + #PARTNER: Variation 02 + triggered_animation = { + trigger = { + scope:visiting_partner ?= scope:1030_first_character + scope:tavern_loc_tracker ?= 1 + root = { has_variable = 1030_use_partner_animation_var } + } + animation = laugh + } + #PARTNER: Variation 03 + triggered_animation = { + trigger = { + scope:visiting_partner ?= scope:1030_first_character + scope:tavern_loc_tracker ?= 2 + root = { has_variable = 1030_use_partner_animation_var } + } + animation = dancing + } + #PARTNER: If it's our visiting partner + triggered_animation = { + trigger = { scope:visiting_partner ?= scope:1030_first_character } + animation = personality_content + } + #ROOT: Hooded figure! + triggered_animation = { + trigger = { + scope:1030_first_character = root + exists = scope:laamp_hooded_figure + NOT = { exists = scope:been_to_hood } + } + animation = interested + } + #ROOT: Eyeing the vixen at the bar + triggered_animation = { + trigger = { + scope:1030_first_character = root + exists = scope:laamp_spouse_material + NOT = { exists = scope:been_to_spouse } + } + animation = admiration + } + #ROOT: Eh, why not + triggered_animation = { + trigger = { + scope:1030_first_character = root + OR = { + has_trait = lunatic + has_trait = possessed + has_trait = eccentric + } + } + animation = personality_irrational + } + #ROOT: That's.. a lot of people + triggered_animation = { + trigger = { + scope:1030_first_character = root + OR = { + has_trait = paranoid + has_trait = shy + } + } + animation = personality_coward + } + #ROOT: My kind of people! + triggered_animation = { + trigger = { + scope:1030_first_character = root + OR = { + has_trait = lifestyle_reveler + has_trait = gregarious + } + } + animation = happiness + } + #Fallback, we really shouldn't end up here + animation = happiness + } + #SPOUSE / ROOT + center_portrait = { + trigger = { exists = scope:1030_second_character } + camera = camera_event_scheme_vs_right_look_right + character = scope:1030_second_character + #SPOUSE: Untapped + triggered_animation = { + trigger = { + scope:laamp_spouse_material ?= scope:1030_second_character + NOT = { exists = scope:been_to_spouse } + } + animation = personality_rational + } + #SPOUSE: Been there + triggered_animation = { + trigger = { scope:laamp_spouse_material ?= scope:1030_second_character } + animation = personality_cynical + } + #ROOT: Hooded figure! + triggered_animation = { + trigger = { + scope:1030_second_character = root + exists = scope:laamp_hooded_figure + NOT = { exists = scope:been_to_hood } + } + animation = interested + } + #ROOT: Eyeing the vixen at the bar + triggered_animation = { + trigger = { + scope:1030_second_character = root + exists = scope:laamp_spouse_material + NOT = { exists = scope:been_to_spouse } + } + animation = admiration + } + #ROOT: Eh, why not + triggered_animation = { + trigger = { + scope:1030_second_character = root + OR = { + has_trait = lunatic + has_trait = possessed + has_trait = eccentric + } + } + animation = personality_irrational + } + #ROOT: That's.. a lot of people + triggered_animation = { + trigger = { + scope:1030_second_character = root + OR = { + has_trait = paranoid + has_trait = shy + } + } + animation = personality_coward + } + #ROOT: My kind of people! + triggered_animation = { + trigger = { + scope:1030_second_character = root + OR = { + has_trait = lifestyle_reveler + has_trait = gregarious + } + } + animation = happiness + } + #Fallback, we really shouldn't end up here + animation = personality_rational + } + #HOOD / SPOUSE + right_portrait = { + trigger = { + exists = scope:1030_third_character + #If this is root, then that means we have talked to the Hooded Figure and we don't have a Spouse to display, so let's disappear the portrait + scope:1030_third_character != root + } + camera = camera_event_scheme_vs_center_look_left + character = scope:1030_third_character + #HOOD: Hood for the hooded figure + triggered_outfit = { + trigger = { scope:laamp_hooded_figure ?= scope:1030_third_character } + outfit_tags = { western_stealth_hood } + } + #HOOD NOBLE: We've returned here and it's still the hooded noble + triggered_animation = { + trigger = { + scope:laamp_disguised_noble ?= scope:1030_third_character + exists = scope:been_to_tavern + } + animation = drink_goblet + } + #HOOD THIEF: We've returned here and it's still the hooded thief + triggered_animation = { + trigger = { + scope:laamp_hooded_figure ?= scope:1030_third_character + exists = scope:been_to_tavern + } + animation = spymaster + } + #SPOUSE: Untapped + triggered_animation = { + trigger = { + scope:laamp_spouse_material ?= scope:1030_third_character + NOT = { exists = scope:been_to_spouse } + } + animation = personality_rational + } + #SPOUSE: Been there + triggered_animation = { + trigger = { scope:laamp_spouse_material ?= scope:1030_third_character } + animation = personality_cynical + } + #Fallback, we really shouldn't end up here + animation = personality_callous + } + #Shove the Spouse / Hood here if they exist, we've visited them but we haven't actioned them yet + lower_left_portrait = { + trigger = { + NOT = { root ?= scope:1030_fourth_character } + } + character = scope:1030_fourth_character + } + lower_center_portrait = { + trigger = { + NOT = { root ?= scope:1030_fifth_character } + } + character = scope:1030_fifth_character + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Set up the ancillary portraits to remind the player of the characters + if = { + #Hood _and_ Spouse exists + limit = { + #We've been to both at least once + exists = scope:been_to_spouse + exists = scope:been_to_hood + #We're not done with them yet + AND = { + exists = scope:laamp_spouse_material + NOT = { exists = scope:laamp_decision_has_spoused } + } + AND = { + exists = scope:laamp_hooded_figure + NOT = { exists = scope:laamp_decision_recruited_hood } + } + #This isn't already the state + NAND = { + exists = scope:1030_fourth_character + scope:1030_fourth_character ?= scope:laamp_spouse_material + exists = scope:1030_fifth_character + scope:1030_fifth_character ?= scope:laamp_hooded_figure + } + } + scope:laamp_spouse_material = { save_scope_as = 1030_fourth_character } + scope:laamp_hooded_figure = { save_scope_as = 1030_fifth_character } + } + else_if = { + #Only Spouse exists + limit = { + exists = scope:laamp_spouse_material + NOR = { + #We're not done with Spouse yet + exists = scope:laamp_decision_has_spoused + #This isn't already the state + AND = { + exists = scope:1030_fourth_character + scope:1030_fourth_character ?= scope:laamp_spouse_material + } + } + #We've been to Spouse at least once + exists = scope:been_to_spouse + } + scope:laamp_spouse_material = { save_scope_as = 1030_fourth_character } + } + else_if = { + #Hood exists but Spouse either never existed or got recruited + limit = { + exists = scope:laamp_hooded_figure + NOR = { + #We're not done with Hood yet + exists = scope:laamp_decision_recruited_hood + #This isn't already the state + AND = { + exists = scope:1030_fourth_character + scope:1030_fourth_character ?= scope:laamp_hooded_figure + } + } + #We've been to Hood at least once + exists = scope:been_to_hood + OR = { + #Either the Spouse never existed + NAND = { + exists = scope:laamp_spouse_material + exists = scope:laamp_decision_has_spoused + } + #Or we've recruited the Spouse already + AND = { + exists = scope:laamp_spouse_material + exists = scope:laamp_decision_has_spoused + } + } + } + scope:laamp_hooded_figure = { save_scope_as = 1030_fourth_character } + #If we've already attached Hood to the fifth portrait, overwrite it with ROOT to hide that portrait + if = { + limit = { exists = scope:1030_fifth_character } + save_scope_as = 1030_fifth_character + } + } + #Clean up any existing fourth/fifth portrait if we're done with all who exist + if = { + limit = { + exists = scope:1030_fourth_character + trigger_if = { + limit = { + exists = scope:laamp_spouse_material + exists = scope:laamp_hooded_figure + } + #We've recruited the Spouse already + AND = { + exists = scope:laamp_spouse_material + exists = scope:laamp_decision_has_spoused + } + #We've recruited the Hood already + AND = { + exists = scope:laamp_hooded_figure + exists = scope:laamp_decision_recruited_hood + } + } + trigger_else_if = { + limit = { + exists = scope:laamp_spouse_material + NOT = { exists = scope:laamp_hooded_figure } + } + #We've recruited the Spouse already + AND = { + exists = scope:laamp_spouse_material + exists = scope:laamp_decision_has_spoused + } + } + trigger_else_if = { + limit = { + exists = scope:laamp_hooded_figure + NOT = { exists = scope:laamp_spouse_material } + } + #We've recruited the Hood already + AND = { + exists = scope:laamp_hooded_figure + exists = scope:laamp_decision_recruited_hood + } + } + trigger_else = { always = no } + #This isn't already the state + scope:1030_fourth_character != root + } + #Overwrite with ROOT to hide that portrait + save_scope_as = 1030_fourth_character + } + if = { + limit = { + #We've recruited the Hood already + AND = { + exists = scope:laamp_hooded_figure + exists = scope:laamp_decision_recruited_hood + } + #This isn't already the state + exists = scope:1030_fifth_character + scope:1030_fifth_character != root + } + #Overwrite with ROOT to hide that portrait + save_scope_as = 1030_fifth_character + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = tavern } + #Some animation flavor + random_list = { + 75 = { + trigger = { + exists = scope:visiting_partner + trigger_if = { + limit = { exists = scope:laamp_hooded_figure } + exists = scope:been_to_hood + } + } + set_variable = 1030_use_partner_animation_var + } + 25 = { + #Nothing + } + } + #Create the spouse character + if = { + limit = { + OR = { + #Do we remember someone? + any_pool_character = { + province = scope:visiting_location + location = scope:visiting_location + root = { + is_target_in_variable_list = { + name = 1025_remembered_spouse_potential_list + target = prev #The considered spouse character + } + } + } + #Or did we actually encounter them? + any_pool_character = { + province = scope:visiting_location + location = scope:visiting_location + is_target_in_variable_list = { + name = 1030_marked_as_spouse_material_for_list + target = root + } + } + } + } + random_pool_character = { + province = scope:visiting_location + limit = { + OR = { + root = { + is_target_in_variable_list = { + name = 1025_remembered_spouse_potential_list + target = prev #The considered spouse character + } + } + is_target_in_variable_list = { + name = 1030_marked_as_spouse_material_for_list + target = root + } + } + } + save_scope_as = laamp_spouse_material + #Some more loc flavor shenanigans for these saved scopes + if = { + #Only save them if we actually interacted with them + limit = { + root = { + is_target_in_variable_list = { + name = 1025_remembered_spouse_potential_list + target = prev #The considered spouse character + } + } + } + save_scope_as = laamp_recurring_spouse + } + } + } + #No? Then roll for a new spouse + if = { + limit = { + NOR = { + exists = scope:laamp_spouse_material + #Unless you're on local cooldown + scope:visiting_location = { + is_target_in_variable_list = { + name = laamp_decisions_1000_checked_for_spouse_list + target = root + } + } + } + allowed_more_spouses = yes + } + random_list = { + 75 = { + #Maybe? + modifier = { + OR = { + has_trait = seducer + has_trait = rakish + } + add = -25 + } + #No spouse + } + 25 = { #Nerf this number into the ground to keep our LAAMP friends spouseless forever + #Find a spouse in the pool + if = { + limit = { + NOT = { exists = scope:laamp_spouse_material } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + #We can marry them + can_marry_character_trigger = { CHARACTER = root } + #We want to marry them + root = { is_attracted_to_gender_of = prev } #Prev is the spouse scope + #They might want to marry us + is_attracted_to_gender_of = root + } + save_scope_as = laamp_spouse_material + } + } + #Otherwise create 'em + if = { + limit = { + NOT = { exists = scope:laamp_spouse_material } + } + #Gender doesn't matter + if = { + limit = { allowed_to_marry_same_sex_trigger = yes } + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + diplomacy = { low_skill_rating high_skill_rating } + martial = { low_skill_rating high_skill_rating } + stewardship = { low_skill_rating high_skill_rating } + intrigue = { low_skill_rating high_skill_rating } + learning = { low_skill_rating high_skill_rating } + save_scope_as = laamp_spouse_material + } + } + #Straight female + else_if = { + limit = { is_female = yes } + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + gender = male + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + diplomacy = { low_skill_rating high_skill_rating } + martial = { low_skill_rating high_skill_rating } + stewardship = { low_skill_rating high_skill_rating } + intrigue = { low_skill_rating high_skill_rating } + learning = { low_skill_rating high_skill_rating } + save_scope_as = laamp_spouse_material + } + } + #Straight male + else = { + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + gender = female + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + diplomacy = { low_skill_rating high_skill_rating } + martial = { low_skill_rating high_skill_rating } + stewardship = { low_skill_rating high_skill_rating } + intrigue = { low_skill_rating high_skill_rating } + learning = { low_skill_rating high_skill_rating } + save_scope_as = laamp_spouse_material + } + } + } + #Some buffs pls? + scope:laamp_spouse_material ?= { + if = { + limit = { + NOT = { has_variable = 1030_has_rolled_for_congenital_traits } + NOR = { + has_trait = beauty_good_1 + has_trait = intellect_good_1 + has_trait = physique_good_1 + has_trait = fecund + has_trait = strong + has_trait = shrewd + } + } + hidden_effect = { + random = { + chance = 5 + random_list = { + 10 = { add_trait = beauty_good_1 } + 10 = { add_trait = intellect_good_1 } + 10 = { add_trait = physique_good_1 } + 10 = { add_trait = fecund } + 10 = { add_trait = strong } + 10 = { add_trait = shrewd } + } + } + } + } + #Give 'em a year + add_to_variable_list = { + name = 1030_marked_as_spouse_material_for_list + target = root + days = visit_settlement_minimum_cooldown_days + } + #... no more congenital traits rolls for them + set_variable = 1030_has_rolled_for_congenital_traits + #Funny as it looks when the tooltip wanders through all possible options, this is probs what looks more WAD + if = { + limit = { + NOT = { has_variable = raunchy_compliment_noun } + } + set_raunchy_compliment_noun_effect = yes + } + } + } + } + #Set up the cooldown per holding, so that you can hop around to different taverns + scope:visiting_location = { + add_to_variable_list = { + name = laamp_decisions_1000_checked_for_spouse_list + target = root + days = visit_settlement_minimum_cooldown_days + } + } + } + #Rare: Spawn a hooded figure + if = { + limit = { + NOT = { has_variable = laamp_decision_1000_checked_for_hood } + } + random_list = { + 75 = { + #No Hooded Figure + } + #Shady Noble + 25 = { + #Look for the holder first + if = { + limit = { + scope:visiting_location.county.holder ?= { + 1030_appropriate_noble_trigger = yes + location = scope:visiting_location + } + } + scope:visiting_location.county.holder = { + save_scope_as = laamp_hooded_figure + save_scope_as = laamp_disguised_noble + } + } + #Otherwise a landed or ladmin in the same location + if = { + limit = { + NOT = { exists = scope:laamp_hooded_figure } + } + scope:visiting_location = { + random_character_in_location = { + limit = { + 1030_appropriate_noble_trigger = yes + is_landed_or_landless_administrative = yes + } + save_scope_as = laamp_hooded_figure + save_scope_as = laamp_disguised_noble + } + #... or a landed/ladmin in a neighboring province. Does this tank performance? + if = { + limit = { + NOT = { exists = scope:laamp_hooded_figure } + } + random_neighboring_province = { + limit = { is_sea_province = no } + random_character_in_location = { + limit = { + 1030_appropriate_noble_trigger = yes + is_landed_or_landless_administrative = yes + } + save_scope_as = laamp_hooded_figure + save_scope_as = laamp_disguised_noble + } + } + } + } + } + scope:laamp_hooded_figure ?= { + #Don't need to pull the same ruler several times + set_variable = { + name = 1030_has_been_hooded_recently + days = visit_settlement_cooldown_days + } + } + } + #Master Thief + 25 = { + #More common in Tribal/No Settlement + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + factor = 2 + } + #Has this person been our thief in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_thief_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_hooded_figure + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_thief + } + #Otherwise find a thief in the pool + if = { + limit = { + NOT = { exists = scope:laamp_hooded_figure } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + is_available_healthy_adult = yes + 1030_gallowsbait_character_trigger = yes + } + save_scope_as = laamp_hooded_figure + } + } + #Otherwise create a thief + if = { + limit = { + NOT = { exists = scope:laamp_hooded_figure } + } + #Create bodyguard to stuff in pool + create_character = { + template = bp1_yearly_2021_intrigue_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + intrigue = { decent_skill_rating high_skill_rating } + save_scope_as = laamp_hooded_figure + } + scope:laamp_hooded_figure ?= { + #Chance to add a malus trait to this spectatular being + if = { + limit = { + NOR = { + has_trait = possessed_1 + has_trait = lunatic_1 + has_trait = depressed_1 + has_trait = drunkard + has_trait = hashishiyah + has_trait = irritable + } + } + hidden_effect = { + random = { + chance = 20 + random_list = { + 10 = { add_trait = possessed_1 } + 10 = { add_trait = lunatic_1 } + 10 = { add_trait = depressed_1 } + 10 = { add_trait = drunkard } + 10 = { add_trait = hashishiyah } + 10 = { add_trait = irritable } + } + } + } + } + #... also, it's a criminal, so... yeah + hidden_effect = { + if = { + limit = { + NOT = { has_trait = gallowsbait } + } + add_trait = gallowsbait + random_list = { + #Bandit + 25 = { + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { + integer_range = { + min = medium_lifestyle_random_xp_low + max = medium_lifestyle_random_xp_high + } + } + } + } + #Trickster + 25 = { + add_trait_xp = { + trait = gallowsbait + track = trickster + value = { + integer_range = { + min = medium_lifestyle_random_xp_low + max = medium_lifestyle_random_xp_high + } + } + } + } + #Thief + 25 = { + add_trait_xp = { + trait = gallowsbait + track = thief + value = { + integer_range = { + min = medium_lifestyle_random_xp_low + max = medium_lifestyle_random_xp_high + } + } + } + } + #Poacher + 25 = { + add_trait_xp = { + trait = gallowsbait + track = poacher + value = { + integer_range = { + min = medium_lifestyle_random_xp_low + max = medium_lifestyle_random_xp_high + } + } + } + } + #Marauder + 25 = { + add_trait_xp = { + trait = gallowsbait + track = marauder + value = { + integer_range = { + min = medium_lifestyle_random_xp_low + max = medium_lifestyle_random_xp_high + } + } + } + } + } + } + } + } + } + } + } + #For the portrait + scope:laamp_hooded_figure ?= { save_scope_as = 1030_second_character } + #No decision-scumming + set_variable = { + name = laamp_decision_1000_checked_for_hood + days = visit_settlement_cooldown_days + } + } + #Set up the initial portraits + if = { + limit = { + NOT = { exists = scope:1030_portraits_setup } + } + if = { + limit = { + exists = scope:laamp_spouse_material + exists = scope:laamp_hooded_figure + } + #Spouse, Hood and Partner exists + if = { + limit = { exists = scope:visiting_partner } + scope:visiting_partner = { save_scope_as = 1030_first_character } + } + scope:laamp_spouse_material = { save_scope_as = 1030_second_character } + scope:laamp_hooded_figure = { save_scope_as = 1030_third_character } + } + else_if = { + limit = { exists = scope:laamp_spouse_material } + #Spouse and Partner exists + if = { + limit = { exists = scope:visiting_partner } + scope:visiting_partner = { save_scope_as = 1030_first_character } + } + #Save ROOT + save_scope_as = 1030_second_character + scope:laamp_spouse_material = { save_scope_as = 1030_third_character } + } + else_if = { + limit = { exists = scope:laamp_hooded_figure } + #Hood and Partner exists + if = { + limit = { exists = scope:visiting_partner } + scope:visiting_partner = { save_scope_as = 1030_first_character } + } + #Save ROOT + save_scope_as = 1030_second_character + scope:laamp_hooded_figure = { save_scope_as = 1030_third_character } + } + else_if = { + limit = { exists = scope:visiting_partner } + #Only Partner exists + scope:visiting_partner = { save_scope_as = 1030_first_character } + #Save ROOT + save_scope_as = 1030_second_character + } + else = { + #You're alone - save ROOT + save_scope_as = 1030_second_character + } + save_scope_as = 1030_portraits_setup + } + } + #Listen to a story + option = { + name = { + text = { + first_valid = { + #Return to the storyteller + triggered_desc = { + trigger = { exists = scope:been_to_storyteller } + desc = ep3_laamp_decision_event.1030.a_second + } + #First time at the storyteller's + desc = ep3_laamp_decision_event.1030.a + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1030.a.cooldown.tt + NOT = { exists = scope:laamp_decision_has_storied } + } + } + show_as_unavailable = { always = yes } + reason = storyteller + custom_tooltip = ep3_laamp_decision_event.1030.a.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = tavern } + #Go to the storyteller + trigger_event = ep3_laamp_decision_event.1031 + ai_chance = { base = 100 } + } + #Look for someone to recruit + option = { + name = { + text = { + first_valid = { + #Return to the recruits + triggered_desc = { + trigger = { exists = scope:been_to_recruit } + desc = ep3_laamp_decision_event.1030.b_second + } + #First time talking to recruits + desc = ep3_laamp_decision_event.1030.b + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1030.b.cooldown.tt + NOT = { exists = scope:laamp_decision_has_recruited } + } + } + show_as_unavailable = { always = yes } + reason = recruitment + custom_tooltip = ep3_laamp_decision_event.1030.b.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = tavern } + #Go to the recruits + trigger_event = ep3_laamp_decision_event.1033 + ai_chance = { base = 100 } + } + #Check out that Spouse Material + option = { + name = { + text = { + first_valid = { + #Already scoped out the spouse + triggered_desc = { + trigger = { + OR = { + exists = scope:been_to_spouse + exists = scope:laamp_recurring_spouse + } + } + desc = ep3_laamp_decision_event.1030.c_second + } + #First time talking to spouse + desc = ep3_laamp_decision_event.1030.c + } + } + } + trigger = { + exists = scope:laamp_spouse_material + #Recently recruited a spouse, settle down there + trigger_if = { + limit = { has_variable = 1035_has_spoused_recently } + custom_tooltip = { + text = ep3_laamp_decision_event.1030.c.cooldown.tt + always = no + } + } + #Loc differences + trigger_else_if = { + limit = { scope:laamp_decision_has_spoused ?= flag:no } + custom_tooltip = { + text = ep3_laamp_decision_event.1030.c.failure.cooldown.tt + always = no + } + } + trigger_else = { always = yes } + } + show_as_unavailable = { + #Show it if we return here from the Spouse screen + trigger_if = { + limit = { exists = scope:laamp_spouse_material } + always = yes + } + #If we are already married, don't show it + trigger_else = { always = no } + } + reason = potential_spouse + highlight_portrait = scope:laamp_spouse_material + #Been there once already + if = { + limit = { + OR = { + exists = scope:laamp_recurring_spouse + exists = scope:been_to_spouse + } + } + custom_tooltip = ep3_laamp_decision_event.1030.c.tt_second + } + else = { + custom_tooltip = ep3_laamp_decision_event.1030.c.tt + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = tavern } + #Go to the spouse material + trigger_event = ep3_laamp_decision_event.1035 + ai_chance = { base = 100 } + } + #Rare Option: Visit Hooded Figure + option = { + name = { + text = { + first_valid = { + #Return to the Hood noble + triggered_desc = { + trigger = { + exists = scope:been_to_hood + exists = scope:laamp_disguised_noble + } + desc = ep3_laamp_decision_event.1030.d_third + } + #Return to the Hood thief + triggered_desc = { + trigger = { exists = scope:been_to_hood } + desc = ep3_laamp_decision_event.1030.d_second + } + #First time at the Hood + desc = ep3_laamp_decision_event.1030.d + } + } + } + trigger = { + exists = scope:laamp_hooded_figure + NOT = { exists = scope:laamp_decision_recruited_hood } + is_ai = no + } + reason = hooded_character + #Been there once already + if = { + limit = { exists = scope:been_to_hood } + custom_tooltip = ep3_laamp_decision_event.1030.d.tt_second + } + else = { + custom_tooltip = ep3_laamp_decision_event.1030.d.tt + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = tavern } + #Go to the hooded figure screen + trigger_event = ep3_laamp_decision_event.1037 + } + #I want to do something else + option = { + name = { + text = { + first_valid = { + #Nothing left to do + triggered_desc = { + trigger = { 1030_done_with_tavern_trigger = yes } + desc = ep3_laamp_decision_event.1030.e_second + } + #Back to main square + desc = ep3_laamp_decision_event.1030.e + } + } + } + #Have we done everything? Are we closing off the option? + if = { + limit = { 1030_done_with_tavern_trigger = yes } + #Clean up unnecessary variables and close off the option + 1030_finished_tavern_effect = yes + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = tavern } + #Go back to the main event + 1000_return_to_main_effect = yes + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:tavern } + remove_variable ?= 1030_use_partner_animation_var + } +} + + +#Return to the holding hub (church grounds, castle grounds etc) from a subsequent event +scripted_effect 1031_been_to_effect = { + #For desc flavor + if = { + limit = { + NOT = { exists = scope:been_to_$GUILD$ } + } + save_scope_as = been_to_$GUILD$ + } + #Go back to the previous screen + if = { + limit = { var:return_from_location ?= flag:tavern } + 1031_return_to_tavern_effect = yes + } + #Go back to church grounds + if = { + limit = { var:return_from_location ?= flag:church_grounds } + 1041_return_to_church_grounds_effect = yes + } + #Go back to castle grounds + if = { + limit = { var:return_from_location ?= flag:castle_grounds } + 1051_return_to_castle_effect = yes + } + #Go back to craftsmen district + if = { + limit = { var:return_from_location ?= flag:craftsmen } + 1061_return_to_craftsmen_effect = yes + } +} + +#We return to the tavern main room to peruse other options +scripted_effect 1031_return_to_tavern_effect = { + custom_tooltip = ep3_laamp_decision_event.1031.return.tt + trigger_event = ep3_laamp_decision_event.1030 +} + +#Set the correct variable to block off the Storyteller option and remove the desc flavor variable +scripted_effect 1031_storied_effect = { + save_scope_as = laamp_decision_has_storied + #Go back to the tavern main room + hidden_effect = { 1031_return_to_tavern_effect = yes } +} + +#The one that ya want +scripted_effect 1031_actual_skill_increase_effect = { + if = { + limit = { scope:1031_skill_to_buff = flag:diplomacy } + add_diplomacy_skill = 1 + } + if = { + limit = { scope:1031_skill_to_buff = flag:martial } + add_martial_skill = 1 + } + if = { + limit = { scope:1031_skill_to_buff = flag:stewardship } + add_stewardship_skill = 1 + } + if = { + limit = { scope:1031_skill_to_buff = flag:intrigue } + add_intrigue_skill = 1 + } + if = { + limit = { scope:1031_skill_to_buff = flag:learning } + add_learning_skill = 1 + } +} + +#Participation prize +scripted_effect 1031_add_skill_modifier_effect = { + if = { + limit = { scope:1031_skill_to_buff = flag:diplomacy } + add_character_modifier = { + modifier = laamp_decision_exotic_story_diplomacy_gain_modifier + days = visit_settlement_minimum_cooldown_days + } + } + if = { + limit = { scope:1031_skill_to_buff = flag:martial } + add_character_modifier = { + modifier = laamp_decision_exotic_story_martial_gain_modifier + days = visit_settlement_minimum_cooldown_days + } + } + if = { + limit = { scope:1031_skill_to_buff = flag:stewardship } + add_character_modifier = { + modifier = laamp_decision_exotic_story_stewardship_gain_modifier + days = visit_settlement_minimum_cooldown_days + } + } + if = { + limit = { scope:1031_skill_to_buff = flag:intrigue } + add_character_modifier = { + modifier = laamp_decision_exotic_story_intrigue_gain_modifier + days = visit_settlement_minimum_cooldown_days + } + } + if = { + limit = { scope:1031_skill_to_buff = flag:learning } + add_character_modifier = { + modifier = laamp_decision_exotic_story_learning_gain_modifier + days = visit_settlement_minimum_cooldown_days + } + } +} + +#Modified by how low the skill is - lower means higher chance +scripted_effect 1031_boost_lowest_skill_effect = { + random_list = { + 2 = { + desc = ep3_laamp_decision_event.1031.a_success.desc + trigger = { + trigger_if = { + limit = { has_variable = 1031_skill_gain_variable } + var:1031_skill_gain_variable != visit_settlement_skill_gain_cap_value + } + trigger_else = { always = yes } + } + #Skill is less than low_skill_rating + modifier = { + scope:1031_skill_to_buff_value < low_skill_rating + add = 23 + } + #Skill is less than average_skill_rating + modifier = { + scope:1031_skill_to_buff_value >= low_skill_rating + scope:1031_skill_to_buff_value < average_skill_rating + add = 18 + } + #Skill is less than medium_skill_rating + modifier = { + scope:1031_skill_to_buff_value >= average_skill_rating + scope:1031_skill_to_buff_value < medium_skill_rating + add = 13 + } + #Skill is less than high_skill_rating + modifier = { + scope:1031_skill_to_buff_value >= medium_skill_rating + scope:1031_skill_to_buff_value < high_skill_rating + add = 8 + } + #Skill is less than very_high_skill_rating + modifier = { + scope:1031_skill_to_buff_value >= high_skill_rating + scope:1031_skill_to_buff_value < very_high_skill_rating + add = 3 + } + #What do you mean, only see one side of the argument? + modifier = { + has_trait = zealous + factor = 0.8 + } + #Easier time finding the silver lining. Probs. + modifier = { + has_trait = eccentric + factor = 2 + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1031.a_success.t + desc = ep3_laamp_decision_event.1031.a_success.desc + left_icon = root + #Increase skill + 1031_actual_skill_increase_effect = yes + } + #We cap the max amount of skill points gained + if = { + limit = { + NOT = { has_variable = 1031_skill_gain_variable } + } + set_variable = { + name = 1031_skill_gain_variable + value = 1 + } + } + else_if = { + limit = { + has_variable = 1031_skill_gain_variable + var:1031_skill_gain_variable != visit_settlement_skill_gain_cap_value + } + change_variable = { + name = 1031_skill_gain_variable + add = 1 + } + } + else = { + #Nothing happens + } + } + 25 = { + desc = ep3_laamp_decision_event.1031.a_semi_success.desc + send_interface_toast = { + type = event_toast_effect_neutral + title = ep3_laamp_decision_event.1031.a_semi_success.t + desc = ep3_laamp_decision_event.1031.a_semi_success.desc + left_icon = root + #Have some lifestyle xp + if = { + limit = { scope:1031_skill_to_buff = flag:diplomacy } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + if = { + limit = { scope:1031_skill_to_buff = flag:martial } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + if = { + limit = { scope:1031_skill_to_buff = flag:stewardship } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + if = { + limit = { scope:1031_skill_to_buff = flag:intrigue } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + if = { + limit = { scope:1031_skill_to_buff = flag:learning } + add_learning_lifestyle_xp = medium_lifestyle_xp + } + } + } + 50 = { + desc = ep3_laamp_decision_event.1031.a_failure.desc + send_interface_toast = { + type = event_toast_effect_neutral + title = ep3_laamp_decision_event.1031.a_failure.t + desc = ep3_laamp_decision_event.1031.a_failure.desc + left_icon = root + #Apply temporary skill modifier + 1031_add_skill_modifier_effect = yes + } + } + } +} + +#Used often enough to warrant a trigger +scripted_trigger 1031_is_max_witty_trigger = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = wit + value = 100 + } +} + + +#Storyteller +ep3_laamp_decision_event.1031 = { + type = character_event + title = ep3_laamp_decision_event.1031.t + window = visit_settlement_window + desc = { + #Stay a while, and listen! + random_valid = { + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 1 + var:1031_saved_storyteller_state ?= 9 + } + } + desc = ep3_laamp_decision_event.1031.desc_01 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 2 + var:1031_saved_storyteller_state ?= 10 + } + } + desc = ep3_laamp_decision_event.1031.desc_02 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 3 + var:1031_saved_storyteller_state ?= 11 + } + } + desc = ep3_laamp_decision_event.1031.desc_03 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 4 + var:1031_saved_storyteller_state ?= 12 + } + } + desc = ep3_laamp_decision_event.1031.desc_04 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 5 + var:1031_saved_storyteller_state ?= 13 + } + } + desc = ep3_laamp_decision_event.1031.desc_05 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 6 + var:1031_saved_storyteller_state ?= 14 + } + } + desc = ep3_laamp_decision_event.1031.desc_06 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 7 + var:1031_saved_storyteller_state ?= 15 + } + } + desc = ep3_laamp_decision_event.1031.desc_07 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 8 + var:1031_saved_storyteller_state ?= 16 + } + } + desc = ep3_laamp_decision_event.1031.desc_08 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 9 + var:1031_saved_storyteller_state ?= 1 + } + } + desc = ep3_laamp_decision_event.1031.desc_09 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 10 + var:1031_saved_storyteller_state ?= 2 + } + } + desc = ep3_laamp_decision_event.1031.desc_10 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 11 + var:1031_saved_storyteller_state ?= 3 + } + } + desc = ep3_laamp_decision_event.1031.desc_11 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 12 + var:1031_saved_storyteller_state ?= 4 + } + } + desc = ep3_laamp_decision_event.1031.desc_12 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 13 + var:1031_saved_storyteller_state ?= 5 + } + } + desc = ep3_laamp_decision_event.1031.desc_13 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 14 + var:1031_saved_storyteller_state ?= 6 + } + } + desc = ep3_laamp_decision_event.1031.desc_14 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 15 + var:1031_saved_storyteller_state ?= 7 + } + } + desc = ep3_laamp_decision_event.1031.desc_15 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 16 + var:1031_saved_storyteller_state ?= 8 + } + } + desc = ep3_laamp_decision_event.1031.desc_16 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 17 + var:1031_saved_storyteller_state ?= 9 + } + } + desc = ep3_laamp_decision_event.1031.desc_17 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 18 + var:1031_saved_storyteller_state ?= 10 + } + } + desc = ep3_laamp_decision_event.1031.desc_18 + } + triggered_desc = { + trigger = { + OR = { + var:1031_saved_storyteller_state ?= 19 + var:1031_saved_storyteller_state ?= 11 + } + } + desc = ep3_laamp_decision_event.1031.desc_19 + } + } + desc = ep3_laamp_decision_event.1031.desc_outro + } + theme = landless_adventurer + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_learning" } + override_icon = { reference = "gfx/interface/icons/event_types/type_learning.dds" } + override_background = { + trigger = { + scope:visiting_location = { 1000_is_a_nomadic_holding_trigger = yes } + } + reference = bp1_bonfire + } + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = bp1_kitchen_western + } + override_background = { reference = relaxing_room_location } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + triggered_animation = { + trigger = { has_trait = zealous } + animation = personality_cynical + } + animation = interested + } + center_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = eccentric } + animation = happiness + } + triggered_animation = { + trigger = { has_trait = zealous } + animation = dismissal + } + animation = thinking + } + right_portrait = { + character = scope:laamp_storyteller + camera = camera_event_scheme_far_right + animation = storyteller + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + if = { + limit = { has_variable = 1031_saved_storyteller_state } + #We're capped out? Reset. + if = { + limit = { var:1031_saved_storyteller_state = 19 } + remove_variable ?= 1031_saved_storyteller_state + set_variable = { + name = 1031_saved_storyteller_state + value = 1 + years = 10 + } + } + #No? Then just increment. + else = { + save_scope_value_as = { + name = 1031_storyteller_state_cache + value = var:1031_saved_storyteller_state + } + remove_variable ?= 1031_saved_storyteller_state + set_variable = { + name = 1031_saved_storyteller_state + value = { + value = scope:1031_storyteller_state_cache + add = 1 + } + years = 10 + } + } + } + #Otherwise set up the counter + else = { + set_variable = { + name = 1031_saved_storyteller_state + value = { + #Randomize where we start + integer_range = { + min = 1 + max = 16 + } + } + years = 10 + } + } + #Find our storyteller + if = { + #Do we already have a storyteller? + limit = { + NOT = { exists = scope:laamp_storyteller } + } + #Has this person been our storyteller in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + faith = scope:visiting_location.faith + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_storyteller_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_storyteller + } + #Otherwise find a storyteller in the pool + if = { + limit = { + NOT = { exists = scope:laamp_storyteller } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + has_trait = lifestyle_reveler + } + save_scope_as = laamp_storyteller + } + } + #Otherwise create a storyteller + if = { + limit = { + NOT = { exists = scope:laamp_storyteller } + } + #Create storyteller to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + trait = lifestyle_reveler + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_storyteller + } + } + #Make 'em a Reveler + scope:laamp_storyteller ?= { + if = { + limit = { + NOT = { has_trait = lifestyle_reveler } + } + add_trait = lifestyle_reveler + add_trait_xp = { + trait = lifestyle_reveler + value = { + integer_range = { + min = small_lifestyle_random_xp_mid + max = small_lifestyle_random_xp_high + } + } + } + } + } + #Remember the storyteller + 1010_remember_vendor_character_effect = { GUILD = storyteller CHARACTER = scope:laamp_storyteller } + } + #What skill do we buff? + if = { + limit = { + NOT = { exists = scope:1031_skill_to_buff } + } + #Roll for which skill to boost + random_list = { + 1 = { + save_scope_value_as = { + name = 1031_skill_to_buff + value = flag:diplomacy + } + save_scope_value_as = { + name = 1031_skill_to_buff_value + value = diplomacy + } + } + 1 = { + save_scope_value_as = { + name = 1031_skill_to_buff + value = flag:martial + } + save_scope_value_as = { + name = 1031_skill_to_buff_value + value = martial + } + } + 1 = { + save_scope_value_as = { + name = 1031_skill_to_buff + value = flag:stewardship + } + save_scope_value_as = { + name = 1031_skill_to_buff_value + value = stewardship + } + } + 1 = { + save_scope_value_as = { + name = 1031_skill_to_buff + value = flag:intrigue + } + save_scope_value_as = { + name = 1031_skill_to_buff_value + value = intrigue + } + } + 1 = { + save_scope_value_as = { + name = 1031_skill_to_buff + value = flag:learning + } + save_scope_value_as = { + name = 1031_skill_to_buff_value + value = learning + } + } + } + } + #Save the xp trait as a static number + if = { + limit = { + NOR = { + #We're not already maxed in Wit + 1031_is_max_witty_trigger = yes + exists = scope:storyteller_xp + } + } + save_scope_value_as = { + name = storyteller_xp + value = { + integer_range = { + min = small_lifestyle_random_xp_low + max = small_lifestyle_random_xp_mid + } + } + } + } + } + #Contemplate the story + option = { + name = { + text = { + first_valid = { + #Eccentric appreciates this + triggered_desc = { + trigger = { has_trait = eccentric } + desc = ep3_laamp_decision_event.1031.a_eccentric + } + #Zealous does not appreciate this + triggered_desc = { + trigger = { has_trait = zealous } + desc = ep3_laamp_decision_event.1031.a_zealous + } + #'s alright I guess + desc = ep3_laamp_decision_event.1031.a + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1031.a.cooldown.tt + NOT = { has_variable = 1031_has_storied_recently } + } + } + show_as_unavailable = { always = yes } + #Set the cooldown on the action + set_variable = { + name = 1031_has_storied_recently + days = visit_settlement_minimum_cooldown_days + } + #Chance to boost your lowest skill + 1031_boost_lowest_skill_effect = yes + if = { + limit = { + has_trait = zealous + NOT = { has_trait = eccentric } + } + stress_impact = { zealous = miniscule_stress_impact_gain } + } + #Set the variables and redirect us back to the tavern main room + 1031_storied_effect = yes + ai_chance = { + base = 100 + modifier = { + has_variable = 1031_skill_gain_variable + var:1031_skill_gain_variable < visit_settlement_skill_gain_cap_value + add = 400 #Just do it + } + } + } + #Learn revelry or strong-arm the skill gain + option = { + name = { + text = { + first_valid = { + #I know this one! + triggered_desc = { + trigger = { 1031_is_max_witty_trigger = yes } + desc = ep3_laamp_decision_event.1031.b_reveler + } + #Yeeh narration! + desc = ep3_laamp_decision_event.1031.b + } + } + } + trigger = { + #Put a cooldown on strongarming it + trigger_if = { + limit = { 1031_is_max_witty_trigger = yes } + custom_tooltip = { + text = ep3_laamp_decision_event.1031.b.cooldown.tt + NOT = { has_variable = 1031_has_reveled_recently } + } + } + #If we're zealous, we also need to be eccentric + trigger_if = { + limit = { has_trait = zealous } + has_trait = eccentric + } + #Trigger for everyone else + trigger_else = { + always = yes + } + } + show_as_unavailable = { + #Hide if what you're missing is a trait + trigger_if = { + limit = { + has_trait = zealous + NOT = { has_trait = eccentric } + } + always = no + } + trigger_else = { always = yes } + } + #Strongarm it + if = { + limit = { 1031_is_max_witty_trigger = yes } + 1031_actual_skill_increase_effect = yes + #Set the cooldown on the action + set_variable = { + name = 1031_has_reveled_recently + months = visit_settlement_small_cooldown_days + } + stress_impact = { + base = medium_stress_impact_gain + ambitious = minor_stress_impact_loss + } + } + #Otherwise learn something + else = { + #Pay up + pay_short_term_gold = { + target = scope:laamp_storyteller + gold = minor_gold_laamps_value + } + #Gain trait + if = { + limit = { + NOT = { has_trait = tourney_participant } + } + add_trait = tourney_participant + add_trait_xp = { + trait = tourney_participant + track = wit + value = scope:storyteller_xp + } + } + #Or be educated + else = { + add_trait_xp = { + trait = tourney_participant + track = wit + value = scope:storyteller_xp + } + } + } + #Set the variables and redirect us back to the tavern main room + 1031_storied_effect = yes + ai_chance = { + base = 100 + modifier = { + 1031_is_max_witty_trigger = no + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + 1031_is_max_witty_trigger = yes + stress_level > 1 + factor = 0 + } + } + } + #Stress relief + option = { + name = { + text = { + first_valid = { + #Blasphemy! + triggered_desc = { + trigger = { has_trait = zealous } + desc = ep3_laamp_decision_event.1031.c_zealous + } + #_I_ was entertained + desc = ep3_laamp_decision_event.1031.c + } + } + } + trigger = { + #Put a cooldown on relaxation + custom_tooltip = { + text = ep3_laamp_decision_event.1031.c.cooldown.tt + NOT = { has_variable = 1031_has_relaxed_recently } + } + } + show_as_unavailable = { always = yes } + #Heathens! + if = { + limit = { has_trait = zealous } + add_piety = minor_piety_gain + } + #Took my mind off of things + stress_impact = { + base = miniscule_stress_impact_loss + zealous = minor_stress_impact_loss + } + #Set the cooldown on the action + set_variable = { + name = 1031_has_relaxed_recently + months = visit_settlement_minimum_cooldown_days + } + #Set the variables and redirect us back to the tavern main room + 1031_storied_effect = yes + ai_chance = { + base = 200 #Just do it + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1031.d + #If you can't do anything, go in here, see the cooldown dates, go out and then we grey out the option + if = { + limit = { + has_variable = 1031_has_storied_recently + has_variable = 1031_has_reveled_recently + has_variable = 1031_has_relaxed_recently + } + #Set the variables and redirect us back to the tavern main room + 1031_storied_effect = yes + } + else = { + #Set the variables and redirect us back to the tavern main room + 1031_been_to_effect = { GUILD = storyteller } + } + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:storyteller } + } +} + + +#Set the correct variable to block off the Recruitment option and remove the desc flavor variable +scripted_effect 1033_recruited_effect = { + save_scope_as = laamp_decision_has_recruited + #Go back to the tavern main room + hidden_effect = { 1031_return_to_tavern_effect = yes } +} + +#Tombola! +scripted_effect 1033_generate_character_effect = { + random_list = { + #Generic + 60 = { + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + diplomacy = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #Diplomacy + 10 = { + #Some variation + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_diplomacy_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + diplomacy = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #Martial + 10 = { + modifier = { + scope:visiting_location = { has_holding_type = castle_holding } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_martial_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + martial = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #Stewardship + 10 = { + modifier = { + scope:visiting_location = { has_holding_type = city_holding } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_stewardship_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + stewardship = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #Intrigue + 10 = { + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_intrigue_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + intrigue = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #Learning + 10 = { + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = church_holding + has_holding_type = temple_citadel_holding + } + } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_learning_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + learning = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + #... witch + 5 = { + modifier = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + factor = 2 + } + create_character = { + template = bp1_yearly_2021_learning_witch_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + learning = { decent_skill_rating high_skill_rating } + save_scope_as = 1033_new_character + } + } + } + scope:1033_new_character ?= { + #Chance to add a malus trait to this spectatular being + if = { + limit = { + NOR = { + has_trait = possessed_1 + has_trait = lunatic_1 + has_trait = depressed_1 + has_trait = drunkard + has_trait = hashishiyah + has_trait = irritable + } + } + hidden_effect = { + random = { + chance = 20 + random_list = { + 10 = { add_trait = possessed_1 } + 10 = { add_trait = lunatic_1 } + 10 = { add_trait = depressed_1 } + 10 = { add_trait = drunkard } + 10 = { add_trait = hashishiyah } + 10 = { add_trait = irritable } + } + } + } + } + } + if = { + limit = { scope:laamp_first_recruit ?= $SCOPE$ } + scope:1033_new_character = { save_scope_as = laamp_first_recruit } + } + if = { + limit = { scope:laamp_second_recruit ?= $SCOPE$ } + scope:1033_new_character = { save_scope_as = laamp_second_recruit } + } + if = { + limit = { scope:laamp_third_recruit ?= $SCOPE$ } + scope:1033_new_character = { save_scope_as = laamp_third_recruit } + } +} + +#Used enough to warrant an effect +scripted_effect 1033_add_courtier_with_opinion_effect = { + if = { + limit = { + has_perk = professional_workforce_perk + } + $TARGET$ = { + if = { + limit = { + highest_skill_including_prowess = prowess + } + add_prowess_skill = 5 + } + else_if = { + limit = { + highest_skill = intrigue + } + add_intrigue_skill = 5 + } + else_if = { + limit = { + highest_skill = martial + } + add_martial_skill = 5 + } + else_if = { + limit = { + highest_skill = stewardship + } + add_stewardship_skill = 5 + } + else_if = { + limit = { + highest_skill = diplomacy + } + add_diplomacy_skill = 5 + } + else_if = { + limit = { + highest_skill = learning + } + add_learning_skill = 5 + } + hidden_effect = { + force_character_skill_recalculation = yes + } + } + } + add_courtier = $TARGET$ + hidden_effect = { + $TARGET$ = { + add_opinion = { + modifier = recruited_me_opinion + target = root + opinion = 50 + } + } + } +} + +scripted_effect 1033_set_cost_effect = { + save_scope_value_as = { + name = $VALUE_NAME$_sum_skills + value = { + add = $CHARACTER$.diplomacy + add = $CHARACTER$.martial + add = $CHARACTER$.stewardship + add = $CHARACTER$.intrigue + add = $CHARACTER$.learning + add = $CHARACTER$.prowess + } + } + save_scope_value_as = { + name = $VALUE_NAME$ + value = { + integer_range = { + min = medium_gold_laamps_value + max = major_gold_laamps_value + } + #Cheaper out in the wilds + if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + multiply = 0.6 + } + if = { #They're stellar? More expensive. :elmofire: + limit = { scope:$VALUE_NAME$_sum_skills >= 120 } #Good in all skills? + multiply = 8 #20 in all skills + } + else_if = { + limit = { scope:$VALUE_NAME$_sum_skills >= 100 } #Good in four skills? + multiply = 5 + } + else_if = { + limit = { scope:$VALUE_NAME$_sum_skills >= 80 } #Good in three skills? + multiply = 4 + } + else_if = { + limit = { scope:$VALUE_NAME$_sum_skills >= 60 } #Good in two skills? + multiply = 3 + } + else_if = { + limit = { scope:$VALUE_NAME$_sum_skills >= 40 } #Good in one-and-a-half skill? Should be roughly 90-110 gold + multiply = 2.5 + } + else_if = { + limit = { scope:$VALUE_NAME$_sum_skills >= 20 } #Good in one skill? + multiply = 1.5 + } + #Add perk discounts and other things here. + } + } +} + +#This is a remotely interesting character +scripted_trigger 1033_has_interesting_skillset_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 + } +} + + +#Recruitment +ep3_laamp_decision_event.1033 = { + type = character_event + title = ep3_laamp_decision_event.1033.t + window = visit_settlement_window + desc = { + #What's going down in the recruitment corner + first_valid = { + #We've returned to this scene, now what + #RETURN: We have three recruits + random_valid = { + triggered_desc = { + trigger = { + NOT = { exists = scope:laamp_generic_jane } + exists = scope:been_to_recruit + scope:recruit_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1033.desc_returned_01 + } + triggered_desc = { + trigger = { + NOT = { exists = scope:laamp_generic_jane } + scope:recruit_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1033.desc_returned_02 + } + } + #RETURN: We have two recruits, and Jane + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_recruit + scope:recruit_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1033.desc_returned_jane_01 + } + triggered_desc = { + trigger = { scope:recruit_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1033.desc_returned_jane_02 + } + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_recruit } + } + desc = ep3_laamp_decision_event.1033.desc + } + } + #Do we have two or three potential recruits? + first_valid = { + triggered_desc = { + trigger = { + exists = scope:laamp_generic_jane + NOT = { exists = scope:been_to_recruit } + } + desc = ep3_laamp_decision_event.1033.desc_mid_two + } + triggered_desc = { + trigger = { + NOT = { + exists = scope:been_to_recruit + exists = scope:laamp_generic_jane + } + } + desc = ep3_laamp_decision_event.1033.desc_mid_three + } + } + #OUTRO: + first_valid = { + #We have a Visiting Partner + triggered_desc = { + trigger = { + exists = scope:visiting_partner + NOT = { exists = scope:laamp_generic_jane } + } + desc = ep3_laamp_decision_event.1033.desc_partner_outro + } + #We have a Generic Jane + triggered_desc = { + trigger = { + exists = scope:laamp_generic_jane + NOT = { exists = scope:been_to_recruit } + } + desc = ep3_laamp_decision_event.1033.desc_jane_outro + } + triggered_desc = { + trigger = { exists = scope:laamp_generic_jane } + desc = ep3_laamp_decision_event.1033.desc_returned_jane_outro + } + #We have no Visiting Partner or Generic Jane + desc = ep3_laamp_decision_event.1033.desc_outro + } + } + theme = landless_adventurer + override_icon = { reference = "gfx/interface/icons/event_types/type_duty.dds" } + override_background = { reference = feast } + #Our recruits + left_portrait = { + trigger = { exists = scope:1033_first_character } + character = scope:1033_first_character + triggered_animation = { + trigger = { + scope:recruit_loc_tracker ?= 1 + NOT = { scope:1033_first_character ?= scope:visiting_partner } + } + animation = flirtation + } + #Friendly + triggered_animation = { + trigger = { + scope:1033_first_character = { 1010_has_friendly_traits = yes } + } + animation = admiration + } + #Business-minded + triggered_animation = { + trigger = { + scope:1033_first_character = { 1010_has_commerce_traits = yes } + } + animation = schadenfreude + } + #Uninterested + triggered_animation = { + trigger = { + scope:1033_first_character = { 1010_has_uninterested_traits = yes } + } + animation = personality_cynical + } + #Irrational + triggered_animation = { + trigger = { + scope:1033_first_character = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:1033_first_character = { 1010_has_standoffish_traits = yes } + } + animation = shame + } + animation = interested + } + center_portrait = { + character = scope:1033_second_character + triggered_animation = { + trigger = { + scope:recruit_loc_tracker ?= 1 + scope:1033_second_character != root + } + animation = worry + } + #Friendly + triggered_animation = { + trigger = { + scope:1033_second_character = { 1010_has_friendly_traits = yes } + } + animation = personality_compassionate + } + #Business-minded + triggered_animation = { + trigger = { + scope:1033_second_character = { 1010_has_commerce_traits = yes } + } + animation = personality_dishonorable + } + #Uninterested + triggered_animation = { + trigger = { + scope:1033_second_character = { 1010_has_uninterested_traits = yes } + } + animation = personality_callous + } + #Irrational + triggered_animation = { + trigger = { + scope:1033_second_character = { 1010_has_irrational_traits = yes } + } + animation = laugh + } + #A bit awkward + triggered_animation = { + trigger = { + scope:1033_second_character = { 1010_has_standoffish_traits = yes } + } + animation = disbelief + } + animation = hero_flex + } + right_portrait = { + trigger = { exists = scope:1033_third_character } + character = scope:1033_third_character + camera = camera_event_scheme_center_forward + triggered_animation = { + trigger = { exists = scope:laamp_generic_jane } + animation = personality_zealous + } + triggered_animation = { + trigger = { + scope:recruit_loc_tracker ?= 1 + NOT = { exists = scope:laamp_generic_jane } + } + animation = disapproval + } + #Friendly + triggered_animation = { + trigger = { + scope:1033_third_character = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:1033_third_character = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:1033_third_character = { 1010_has_uninterested_traits = yes } + } + animation = disapproval + } + #Irrational + triggered_animation = { + trigger = { + scope:1033_third_character = { 1010_has_irrational_traits = yes } + } + animation = eccentric + } + #A bit awkward + triggered_animation = { + trigger = { + scope:1033_third_character = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = scheme + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #For the background + scope:visiting_location.county.holder = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = recruit } + #Create the characters + if = { + limit = { + NOT = { exists = scope:laamp_first_recruit } + } + #First character + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + #Remotely interesting + 1033_has_interesting_skillset_trigger = yes + } + save_scope_as = laamp_first_recruit + } + #Otherwise create 'em + if = { + limit = { + NOT = { exists = scope:laamp_first_recruit } + } + #Create first recruit to stuff in pool + save_scope_as = laamp_first_recruit + 1033_generate_character_effect = { SCOPE = scope:laamp_first_recruit } + } + #Set their cost + 1033_set_cost_effect = { CHARACTER = scope:laamp_first_recruit VALUE_NAME = first_recruit_cost } + #Second character + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + #Remotely interesting + 1033_has_interesting_skillset_trigger = yes + this != scope:laamp_first_recruit + } + save_scope_as = laamp_second_recruit + } + #Otherwise create 'em + if = { + limit = { + NOT = { exists = scope:laamp_second_recruit } + } + #Create second recruit to stuff in pool + save_scope_as = laamp_second_recruit + 1033_generate_character_effect = { SCOPE = scope:laamp_second_recruit } + } + #Set their cost + 1033_set_cost_effect = { CHARACTER = scope:laamp_second_recruit VALUE_NAME = second_recruit_cost } + #You have no one? Well. Have a generic Joe + if = { + limit = { + any_courtier = { count <= 2 } + } + #Grab someone random + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + is_available_healthy_adult = yes + NOR = { + this = scope:laamp_first_recruit + this = scope:laamp_second_recruit + } + } + #More fun this way + weight = { + base = 1 + modifier = { + any_secret = { exists = this } + factor = 2 + } + } + save_scope_as = laamp_generic_jane + } + #Otherwise create 'em + if = { + limit = { + NOT = { exists = scope:laamp_generic_jane } + } + #Create generic to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_generic_jane + } + #... you didn't think it would be _that_ easy, right? + scope:laamp_generic_jane ?= { + hidden_effect = { + random = { + chance = 20 + random_list = { + #Have a murderer + 10 = { + trigger = { is_murderer_trigger = no } + #Create a victim to kill + create_character = { + template = generic_peasant_character + culture = scope:visiting_location.location.county.culture + faith = scope:visiting_location.location.county.faith + location = scope:visiting_location.location + after_creation = { set_to_lowborn = yes } + save_scope_as = 1030_previous_victim + } + scope:1030_previous_victim = { + death = { + death_reason = death_murder + killer = scope:laamp_generic_jane + } + } + #Set up secret + scope:laamp_generic_jane = { + add_secret = { + type = secret_murder + target = scope:1030_previous_victim + } + } + } + #Or a witch + 10 = { + trigger = { is_witch_trigger = no } + add_secret = { type = secret_witch } + } + #Or a cannibal + 10 = { + trigger = { is_cannibal_trigger = no } + add_secret = { type = secret_cannibal } + } + #Maybe a deviant? + 10 = { + trigger = { is_deviant_trigger = no } + add_secret = { type = secret_deviant } + } + } + } + } + } + } + } + #Third character + if = { + limit = { + NOT = { exists = scope:laamp_generic_jane } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + #Remotely interesting + 1033_has_interesting_skillset_trigger = yes + NOR = { + this = scope:laamp_first_recruit + this = scope:laamp_second_recruit + } + } + save_scope_as = laamp_third_recruit + } + if = { + limit = { + NOT = { exists = scope:laamp_third_recruit } + } + #Create third recruit to stuff in pool + save_scope_as = laamp_third_recruit + 1033_generate_character_effect = { SCOPE = scope:laamp_third_recruit } + } + #Set their cost + if = { + limit = { exists = scope:laamp_third_recruit } + 1033_set_cost_effect = { CHARACTER = scope:laamp_third_recruit VALUE_NAME = third_recruit_cost } + } + } + } + #Determine whom to display + if = { + limit = { + NOT = { exists = scope:1033_second_character } + } + if = { + limit = { exists = scope:laamp_first_recruit } + scope:laamp_first_recruit = { save_scope_as = 1033_first_character } + } + if = { + limit = { exists = scope:laamp_second_recruit } + scope:laamp_second_recruit = { save_scope_as = 1033_second_character } + } + if = { + limit = { exists = scope:laamp_generic_jane } + scope:laamp_generic_jane = { save_scope_as = 1033_third_character } + } + if = { + limit = { + NOT = { exists = scope:1033_third_character } + exists = scope:laamp_third_recruit + } + scope:laamp_third_recruit = { save_scope_as = 1033_third_character } + } + if = { + limit = { + NOT = { exists = scope:1033_first_character } + exists = scope:visiting_partner + } + scope:visiting_partner = { save_scope_as = 1033_first_character } + } + if = { + limit = { + NOT = { exists = scope:1033_second_character } + } + save_scope_as = 1033_second_character + } + } + } + #Recruit character A + option = { + name = ep3_laamp_decision_event.1033.a + #Pay gold + pay_short_term_gold = { + target = scope:laamp_first_recruit + gold = scope:first_recruit_cost + } + #Hire wo/manpower + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_first_recruit } + #Set the variables and redirect us back to the tavern main room + 1033_recruited_effect = yes + #Rewards for the Camp Party + hidden_effect = { + if = { + limit = { + has_character_flag = better_recruitment_visit_holding_flag + } + scope:laamp_first_recruit = { + ep3_camp_party_visit_holding_skills_boost = yes + } + } + } + ai_chance = { + base = 50 + modifier = { + short_term_gold < scope:first_recruit_cost + short_term_gold < laamp_ai_spending_pants_value + any_courtier = { count <= 2 } + factor = 0 + } + } + } + #Recruit character B + option = { + name = ep3_laamp_decision_event.1033.b + #Pay gold + pay_short_term_gold = { + target = scope:laamp_second_recruit + gold = scope:second_recruit_cost + } + #Hire wo/manpower + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_second_recruit } + #Set the variables and redirect us back to the tavern main room + 1033_recruited_effect = yes + hidden_effect = { + if = { + limit = { + has_character_flag = better_recruitment_visit_holding_flag + } + scope:laamp_second_recruit = { + ep3_camp_party_visit_holding_skills_boost = yes + } + } + } + ai_chance = { + base = 50 + modifier = { + short_term_gold < scope:second_recruit_cost + short_term_gold < laamp_ai_spending_pants_value + any_courtier = { count <= 2 } + factor = 0 + } + } + } + #Recruit character C + option = { + name = ep3_laamp_decision_event.1033.c + trigger = { + NOT = { exists = scope:laamp_generic_jane } + } + #Pay gold + pay_short_term_gold = { + target = scope:laamp_third_recruit + gold = scope:third_recruit_cost + } + #Hire wo/manpower + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_third_recruit } + #Set the variables and redirect us back to the tavern main room + 1033_recruited_effect = yes + hidden_effect = { + if = { + limit = { + has_character_flag = better_recruitment_visit_holding_flag + } + scope:laamp_third_recruit = { + ep3_camp_party_visit_holding_skills_boost = yes + } + } + } + ai_chance = { + base = 50 + modifier = { + short_term_gold < scope:third_recruit_cost + short_term_gold < laamp_ai_spending_pants_value + any_courtier = { count <= 2 } + factor = 0 + } + } + } + #Generic Jane keeps waving their hand + option = { + name = ep3_laamp_decision_event.1033.d + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1033.d.cooldown.tt + NOT = { has_variable = 1033_generic_jane_cooldown } + exists = scope:laamp_generic_jane + } + } + show_as_unavailable = { + #Show that it's unavailable if it would actually be available + trigger_if = { + limit = { + exists = scope:laamp_generic_jane + has_variable = 1033_generic_jane_cooldown + } + always = yes + } + trigger_else = { always = no } + } + #Add 'em + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_generic_jane } + set_variable = { + name = 1033_generic_jane_cooldown + days = visit_settlement_minimum_cooldown_days + } + #Set the variables and redirect us back to the tavern main room + 1033_recruited_effect = yes + hidden_effect = { + if = { + limit = { + has_character_flag = better_recruitment_visit_holding_flag + } + scope:laamp_generic_jane = { + ep3_camp_party_visit_holding_skills_boost = yes + } + } + } + ai_chance = { + base = 1000 #Just do it + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1033.e + #Set the variables and redirect us back to the tavern main room + 1031_been_to_effect = { GUILD = recruit } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:recruit } + } +} + + +#Set the correct variable to block off the Spouse option and remove the desc flavor variable +scripted_effect 1035_spoused_effect = { + save_scope_value_as = { + name = laamp_decision_has_spoused + value = flag:yes + } + #Cooldown for prowling + set_variable = { + name = 1035_has_spoused_recently + days = visit_settlement_minimum_cooldown_days + } + #Go back to the tavern main room + hidden_effect = { 1031_return_to_tavern_effect = yes } +} + + +#Spouse material +ep3_laamp_decision_event.1035 = { + type = character_event + title = ep3_laamp_decision_event.1035.t + window = visit_settlement_window + desc = { + #Well, hello there + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_spouse + scope:spouse_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1035.desc_returned_01 + } + triggered_desc = { + trigger = { scope:spouse_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1035.desc_returned_02 + } + } + #FIRST TIME: We've seen this spouse-r before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_spouse + NOT = { exists = scope:been_to_spouse } + } + desc = ep3_laamp_decision_event.1035.desc_reused_spouse + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_spouse } + } + desc = ep3_laamp_decision_event.1035.desc + } + } + } + theme = seduction + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_seduction" } + override_background = { + trigger = { 1000_is_a_nomadic_holding_trigger = yes } + reference = ep3_military_tent #Give me other variations - like a yurt - and I'll use a yurt. Otherwise you get a tent. + } + override_background = { + trigger = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + reference = tavern + } + override_background = { reference = tavern } + center_portrait = { + character = root + camera = camera_event_scheme_vs_right_look_right + triggered_animation = { + trigger = { + OR = { + has_trait = paranoid + has_trait = craven + has_trait = shy + } + } + animation = shame + } + animation = ecstasy + } + right_portrait = { + character = scope:laamp_spouse_material + #First time engaging them + triggered_animation = { + trigger = { + NOT = { exists = scope:been_to_spouse } + } + animation = personality_callous + } + animation = personality_cynical + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Run this once: Re-save the portrait so the Spouse is not the 1030_second_character / 1030_third_character + if = { + limit = { scope:1030_second_character ?= scope:laamp_spouse_material } + #If we have a partner, shuffle the portraits + if = { + limit = { exists = scope:visiting_partner } + #Move ROOT into the second character slot + save_scope_as = 1030_second_character + scope:visiting_partner = { save_scope_as = 1030_first_character } + } + #Otherwise overwrite the portrait with ROOT to disappear the second one + else = { save_scope_as = 1030_second_character } + } + else_if = { + limit = { scope:1030_third_character ?= scope:laamp_spouse_material } + #Overwrite the portrait with ROOT to disappear the third one + save_scope_as = 1030_third_character + #And move ROOT into the second character slot + save_scope_as = 1030_second_character + } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = spouse } + #Remember this potential spouse -- for a while, at least + add_to_variable_list = { + name = 1025_remembered_spouse_potential_list + target = scope:laamp_spouse_material + days = visit_settlement_minimum_cooldown_days + } + #Set the drink cost + if = { + limit = { + NOT = { exists = scope:spouse_drink_cost } + } + save_scope_value_as = { + name = spouse_drink_cost + value = { + integer_range = { + min = tiny_gold_laamps_value + max = minor_gold_laamps_value + } + } + } + } + #Pick a pick-up line + if = { + limit = { + NOT = { exists = scope:1035_saved_pickup_line } + } + random_list = { + 10 = { + save_scope_value_as = { + name = 1035_saved_pickup_line + value = flag:first + } + } + 10 = { + save_scope_value_as = { + name = 1035_saved_pickup_line + value = flag:second + } + } + 10 = { + save_scope_value_as = { + name = 1035_saved_pickup_line + value = flag:third + } + } + 10 = { + save_scope_value_as = { + name = 1035_saved_pickup_line + value = flag:fourth + } + } + 10 = { + save_scope_value_as = { + name = 1035_saved_pickup_line + value = flag:fifth + } + } + } + } + } + #Buy 'em a drink + option = { + name = ep3_laamp_decision_event.1035.a + #Pay gold + remove_short_term_gold = scope:spouse_drink_cost + #Have them join your camp + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_spouse_material } + #Set the variables and redirect us back to the tavern main room + 1035_spoused_effect = yes + ai_chance = { + base = 300 + modifier = { + short_term_gold < scope:spouse_drink_cost + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Intrigue Duel + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { scope:1035_saved_pickup_line ?= flag:first } + desc = ep3_laamp_decision_event.1035.b_first + } + triggered_desc = { + trigger = { scope:1035_saved_pickup_line ?= flag:second } + desc = ep3_laamp_decision_event.1035.b_second + } + triggered_desc = { + trigger = { scope:1035_saved_pickup_line ?= flag:third } + desc = ep3_laamp_decision_event.1035.b_third + } + triggered_desc = { + trigger = { scope:1035_saved_pickup_line ?= flag:fourth } + desc = ep3_laamp_decision_event.1035.b_fourth + } + triggered_desc = { + trigger = { scope:1035_saved_pickup_line ?= flag:fifth } + desc = ep3_laamp_decision_event.1035.b_fifth + } + #Fallback + desc = ep3_laamp_decision_event.1035.b_fallback + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1035.b.cooldown.tt + NOT = { has_variable = 1035_spouse_duelled_recently } + } + } + show_as_unavailable = { always = yes } + duel = { + skill = intrigue + value = average_skill_rating + #Success: Hire 'em up + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1035.b.success + send_interface_toast = { + title = ep3_laamp_decision_event.1035.b.success + left_icon = root + right_icon = scope:laamp_spouse_material + #Yippee! + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_spouse_material } + #This 'finished' is different since it changes between flag:yes and flag:no + 1035_spoused_effect = yes + } + } + #Failure: Bye, now + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1035.b.failure + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1035.b.failure + desc = ep3_laamp_decision_event.1035.b.failure.tt + left_icon = root + right_icon = scope:laamp_spouse_material + #Oh well + custom_tooltip = ep3_laamp_decision_event.1035.b.failure.tt + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_has_spoused + value = flag:no + } + #Go back to the tavern main room + 1031_return_to_tavern_effect = yes + } + } + } + #Cooldown for the action + set_variable = { + name = 1035_spouse_duelled_recently + days = visit_settlement_minimum_cooldown_days + } + ai_chance = { base = 200 } + } + #Triggered Option: Seducer + option = { + name = ep3_laamp_decision_event.1035.c + trigger = { + has_trait = seducer + is_ai = no + trigger_if = { + limit = { has_variable = 1035_spouse_unwinded_recently } + custom_tooltip = { + text = ep3_laamp_decision_event.1035.c.cooldown.tt + always = no + } + } + } + show_as_unavailable = { always = yes } + #Pick 'em up + progress_towards_lover_effect = { + CHARACTER = scope:laamp_spouse_material + REASON = lover_tavern_hookup + OPINION = 50 + } + add_courtier = scope:laamp_spouse_material + save_scope_as = 1035_unwinded_with_spouse_potential + #Cooldown for the action + set_variable = { + name = 1035_spouse_unwinded_recently + months = visit_settlement_minimum_cooldown_days + } + #Set the variables and redirect us back to the tavern main room + 1035_spoused_effect = yes + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1035.d + #Set the variables and redirect us back to the tavern main room + 1031_been_to_effect = { GUILD = spouse } + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:spouse } + } +} + + +#Set the correct variable to block off the Hood option and remove the desc flavor variable +scripted_effect 1037_hooded_effect = { + save_scope_value_as = { + name = laamp_decision_recruited_hood + value = flag:no + } + #Go back to the tavern main room + hidden_effect = { 1031_return_to_tavern_effect = yes } +} + +#This implementation hurts me as much as it hurts you +scripted_effect 1037_determine_highest_gallowsbait_track_effect = { + if = { + limit = { has_trait = gallowsbait } + #Is any of it aced? + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value = 100 #Max value + } + } + save_scope_as = ace_gallowsbait_bandit + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value = 100 #Max value + } + } + save_scope_as = ace_gallowsbait_trickster + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = thief + value = 100 #Max value + } + } + save_scope_as = ace_gallowsbait_thief + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value = 100 #Max value + } + } + save_scope_as = ace_gallowsbait_poacher + } + else_if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value = 100 #Max value + } + } + save_scope_as = ace_gallowsbait_marauder + } + #If two are roughly the same, randomize it + random_list = { + 10 = { + trigger = { exists = scope:ace_gallowsbait_bandit } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:bandit + } + } + 10 = { + trigger = { exists = scope:ace_gallowsbait_trickster } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:trickster + } + } + 10 = { + trigger = { exists = scope:ace_gallowsbait_thief } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:thief + } + } + 10 = { + trigger = { exists = scope:ace_gallowsbait_poacher } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:poacher + } + } + 10 = { + trigger = { exists = scope:ace_gallowsbait_marauder } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:marauder + } + } + } + #No? Then find an intermediate. + if = { + limit = { + NOT = { exists = scope:1037_highest_gallowsbait_track } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= medium_lifestyle_random_xp_high + } + } + save_scope_as = intermediate_gallowsbait_bandit + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= medium_lifestyle_random_xp_high + } + } + save_scope_as = intermediate_gallowsbait_trickster + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = thief + value >= medium_lifestyle_random_xp_high + } + } + save_scope_as = intermediate_gallowsbait_thief + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= medium_lifestyle_random_xp_high + } + } + save_scope_as = intermediate_gallowsbait_poacher + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= medium_lifestyle_random_xp_high + } + } + save_scope_as = intermediate_gallowsbait_marauder + } + #If two are roughly the same, randomize it + random_list = { + 10 = { + trigger = { exists = scope:intermediate_gallowsbait_bandit } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:bandit + } + } + 10 = { + trigger = { exists = scope:intermediate_gallowsbait_trickster } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:trickster + } + } + 10 = { + trigger = { exists = scope:intermediate_gallowsbait_thief } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:thief + } + } + 10 = { + trigger = { exists = scope:intermediate_gallowsbait_poacher } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:poacher + } + } + 10 = { + trigger = { exists = scope:intermediate_gallowsbait_marauder } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:marauder + } + } + } + } + #Still nothing? How about an average. + if = { + limit = { + NOT = { exists = scope:1037_highest_gallowsbait_track } + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= medium_lifestyle_random_xp_low + } + } + save_scope_as = average_gallowsbait_bandit + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= medium_lifestyle_random_xp_low + } + } + save_scope_as = average_gallowsbait_trickster + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = thief + value >= medium_lifestyle_random_xp_low + } + } + save_scope_as = average_gallowsbait_thief + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= medium_lifestyle_random_xp_low + } + } + save_scope_as = average_gallowsbait_poacher + } + if = { + limit = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= medium_lifestyle_random_xp_low + } + } + save_scope_as = average_gallowsbait_marauder + } + #If two are roughly the same, randomize it + random_list = { + 10 = { + trigger = { exists = scope:average_gallowsbait_bandit } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:bandit + } + } + 10 = { + trigger = { exists = scope:average_gallowsbait_trickster } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:trickster + } + } + 10 = { + trigger = { exists = scope:average_gallowsbait_thief } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:thief + } + } + 10 = { + trigger = { exists = scope:average_gallowsbait_poacher } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:poacher + } + } + 10 = { + trigger = { exists = scope:average_gallowsbait_marauder } + save_scope_value_as = { + name = 1037_highest_gallowsbait_track + value = flag:marauder + } + } + } + } + #If we still don't have a scope here, we need to have another look at the character pool pull/create, 'cause then it didn't reach medium_lifestyle_random_xp_low in any track + } +} + +#Yupyup +scripted_effect 1037_hire_thief_effect = { + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_hooded_figure + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_hooded_figure + #The actual effect happens in after + show_as_tooltip = { + camp_officer_grant_effect = { + EMPLOYER = root + POS = master_thief + CANDIDATE = scope:laamp_hooded_figure + } + } + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_hood + value = flag:yes + } + #Go back to tavern + hidden_effect = { 1031_return_to_tavern_effect = yes } +} + +#Pretty self-explanatory +scripted_trigger 1037_maxed_gallowsbait_track_trigger = { + OR = { + has_trait_xp = { + trait = gallowsbait + track = bandit + value = 100 #Max value + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value = 100 #Max value + } + has_trait_xp = { + trait = gallowsbait + track = thief + value = 100 #Max value + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value = 100 #Max value + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value = 100 #Max value + } + } +} + +scripted_effect 1037_noble_reward_effect = { + add_contact = scope:laamp_disguised_noble + add_hook_if_possible_default_length_effect = { + TARGET = scope:laamp_disguised_noble + TYPE = favor_hook + } + progress_towards_friend_effect = { + REASON = friend_rescued_from_tavern_brawl + CHARACTER = scope:laamp_disguised_noble + OPINION = default_friend_opinion + } +} + +#Duel for your highest skill stat +scripted_effect 1037_highest_skill_duel_effect = { + if = { + limit = { highest_skill = diplomacy } + 1037_duel_effect = { SKILL = diplomacy } + } + else_if = { + limit = { highest_skill = stewardship } + 1037_duel_effect = { SKILL = stewardship } + } + else_if = { + limit = { highest_skill = intrigue } + 1037_duel_effect = { SKILL = intrigue } + } + else_if = { + limit = { highest_skill = learning } + 1037_duel_effect = { SKILL = learning } + } + else_if = { + limit = { highest_skill = martial } + 1037_duel_effect = { SKILL = martial } + } + else_if = { + limit = { highest_skill_including_prowess = prowess } + 1037_duel_effect = { SKILL = prowess } + } +} + +#Actual duel effect +scripted_effect 1037_duel_effect = { + duel = { + skill = $SKILL$ + value = medium_skill_rating + #Success: Yay, free contact + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1037.b.success + send_interface_toast = { + title = ep3_laamp_decision_event.1037.b.success.t + left_icon = root + right_icon = scope:laamp_disguised_noble + #Woo rewards + show_as_tooltip = { #Don't need two toasts for the hook + add_contact = scope:laamp_disguised_noble + progress_towards_friend_effect = { + REASON = friend_rescued_from_tavern_brawl + CHARACTER = scope:laamp_disguised_noble + OPINION = default_friend_opinion + } + } + hidden_effect = { 1037_noble_reward_effect = yes } + #Go back to the main event + 1037_hooded_effect = yes + } + } + #Failure: Whoopsie, they became wounded + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1037.b.failure + send_interface_toast = { + title = ep3_laamp_decision_event.1037.b.failure.t + left_icon = root + right_icon = scope:laamp_disguised_noble + random_list = { + 50 = { + #Less chance that _we_ get hurt if we're buff + compare_modifier = { value = prowess } + #Oops + scope:laamp_disguised_noble = { + increase_wounds_effect = { REASON = fight } + } + } + 50 = { + #Owwie + increase_wounds_effect = { REASON = fight } + } + } + save_scope_value_as = { + name = laamp_decision_recruited_hood + value = flag:wounded + } + #Go back to the tavern main room + 1037_hooded_effect = yes + } + } + } +} + + +#The hooded figure +ep3_laamp_decision_event.1037 = { + type = character_event + window = visit_settlement_window + title = { + first_valid = { + #Noble + triggered_desc = { + trigger = { exists = scope:laamp_disguised_noble } + desc = ep3_laamp_decision_event.1037.t_noble + } + #Thief + desc = ep3_laamp_decision_event.1037.t + } + } + desc = { + #Hello, hooded person + first_valid = { + #We've returned to this scene, now what + #RETURN: Noble + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_hood + exists = scope:laamp_disguised_noble + scope:hood_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1037.desc_noble_returned_01 + } + triggered_desc = { + trigger = { + exists = scope:laamp_disguised_noble + scope:hood_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1037.desc_noble_returned_02 + } + } + #RETURN: Thief + random_valid = { + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + exists = scope:been_to_hood + exists = scope:1037_neighboring_holding + scope:hood_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1037.desc_returned_01 + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + exists = scope:been_to_hood + exists = scope:1037_neighboring_holding + scope:hood_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1037.desc_nomad_returned_01 + } + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + exists = scope:been_to_hood + scope:hood_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1037.desc_returned_02 + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + exists = scope:been_to_hood + scope:hood_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1037.desc_nomad_returned_02 + } + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + scope:hood_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1037.desc_returned_03 + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + scope:hood_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1037.desc_nomad_returned_03 + } + } + #FIRST TIME: We've seen this thief before + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + exists = scope:laamp_recurring_thief + NOT = { exists = scope:been_to_hood } + } + desc = ep3_laamp_decision_event.1037.desc_reused_thief + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + exists = scope:laamp_recurring_thief + NOT = { exists = scope:been_to_hood } + } + desc = ep3_laamp_decision_event.1037.desc_nomad_reused_thief + } + #FIRST TIME: Hooded noble is in trouble! + triggered_desc = { + trigger = { + exists = scope:laamp_disguised_noble + NOT = { exists = scope:been_to_hood } + } + desc = ep3_laamp_decision_event.1037.desc_noble + } + #FIRST TIME: Hooded thief + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = no + NOT = { exists = scope:been_to_hood } + } + desc = ep3_laamp_decision_event.1037.desc + } + #Nomad variant + triggered_desc = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + NOT = { exists = scope:been_to_hood } + } + desc = ep3_laamp_decision_event.1037.desc_nomad + } + } + } + theme = landless_adventurer + override_sound = { + trigger = { exists = scope:laamp_disguised_noble } + reference = "event:/SFX/Events/Themes/sfx_event_theme_type_dynasty" + } + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_intrigue" } + override_icon = { + trigger = { + NOT = { exists = scope:laamp_disguised_noble } + } + reference = "gfx/interface/icons/event_types/type_intrigue.dds" + } + override_background = { + trigger = { exists = scope:laamp_disguised_noble } + reference = tavern + } + override_background = { + trigger = { 1000_is_a_nomadic_holding_trigger = yes } + reference = ep3_relaxing_tent + } + override_background = { reference = bp1_wine_cellar } + left_portrait = { + trigger = { exists = scope:1037_left_character } + character = scope:1037_left_character + #Noble: Engaging the noble + triggered_animation = { + trigger = { + exists = scope:laamp_disguised_noble + NOT = { exists = scope:been_to_hood } + } + animation = disbelief + } + #Noble: They're fighting + triggered_animation = { + trigger = { exists = scope:laamp_disguised_noble } + animation = personality_coward + } + animation = interested + } + center_portrait = { + character = scope:1037_center_character + camera = camera_event_scheme_center_look_semi_right + #Noble: First time engaging the noble + triggered_animation = { + trigger = { + exists = scope:laamp_disguised_noble + NOT = { exists = scope:been_to_hood } + } + #_Seating tax_?! + animation = anger + } + #Noble: I am NOT paying + triggered_animation = { + trigger = { exists = scope:laamp_disguised_noble } + animation = disapproval + } + #Thief: Is... cleaning up blood? + triggered_animation = { + trigger = { scope:hood_loc_tracker ?= 1 } + animation = disbelief + } + #Thief: Don't like this + triggered_animation = { + trigger = { has_trait = honest } + animation = stress + } + #Thief + animation = personality_rational + } + right_portrait = { + character = scope:1037_right_character + camera = camera_event_scheme_far_right + #Noble: Ruffian: First time engaging the noble + triggered_animation = { + trigger = { + exists = scope:laamp_disguised_noble + NOT = { exists = scope:been_to_hood } + } + #Menacing + animation = menacing + } + #Noble: Ruffian: I am NOT paying + triggered_animation = { + trigger = { exists = scope:laamp_disguised_noble } + animation = threatening + } + #Thief: Just cleaned up some blood. 's fine. + triggered_animation = { + trigger = { + 1000_is_a_nomadic_holding_trigger = yes + scope:hood_loc_tracker ?= 1 + } + #Happy to see you + animation = spymaster + } + #Thief: First time engaging the thief + triggered_animation = { + trigger = { + exists = scope:laamp_recurring_thief + NOT = { exists = scope:been_to_hood } + } + #Happy to see you + animation = ecstasy + } + #Thief: Whadda ya want + triggered_animation = { + trigger = { + NOT = { exists = scope:been_to_hood } + } + #A bit reserved + animation = disapproval + } + animation = chess_cocky + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Run this once: Re-save the portrait so the Hood is not the 1030_third_character + if = { + limit = { scope:1030_third_character ?= scope:laamp_hooded_figure } + #Shuffle Spouse over, if they exist + if = { + limit = { scope:1030_second_character ?= scope:laamp_spouse_material } + scope:laamp_spouse_material ?= { save_scope_as = 1030_third_character } + } + #Otherwise overwrite the portrait with ROOT to disappear the third one + else = { save_scope_as = 1030_third_character } + #Move ROOT into the second character slot + if = { + limit = { + NOT = { scope:1030_second_character ?= root } + } + save_scope_as = 1030_second_character + } + #Remember the thief + if = { + limit = { + NOT = { exists = scope:laamp_disguised_noble } + } + 1010_remember_vendor_character_effect = { GUILD = thief CHARACTER = scope:laamp_hooded_figure } + } + } + #Tweak the portraits for the noble-fight + if = { + limit = { + exists = scope:laamp_disguised_noble + NOT = { scope:1037_left_character ?= root } + } + #Move ourselves to the left + save_scope_as = 1037_left_character + #Plonk the perilous noble in the middle + scope:laamp_disguised_noble = { save_scope_as = 1037_center_character } + #Shove a ruffian on the right + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + after_creation = { set_to_lowborn = yes } + save_scope_as = 1037_local_ruffian + } + scope:1037_local_ruffian = { save_scope_as = 1037_right_character } + } + #Otherwise set up the thief situation + else_if = { + limit = { + NOR = { + exists = scope:laamp_disguised_noble + exists = scope:1037_center_character + } + } + #We go in the middle + save_scope_as = 1037_center_character + #... and the thief on the right + scope:laamp_hooded_figure = { save_scope_as = 1037_right_character } + } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = hood } + #Thief effects + if = { + limit = { + NOR = { + exists = scope:laamp_disguised_noble + exists = scope:1037_neighboring_holding + } + } + #Save a neighboring holding + location = { + random_neighboring_province = { + limit = { + is_sea_province = no + has_holding = yes + } + save_scope_as = 1037_neighboring_holding + } + } + #Figure their highest Gallowbait track + scope:laamp_hooded_figure = { 1037_determine_highest_gallowsbait_track_effect = yes } + } + #Noble effects + if = { + limit = { exists = scope:laamp_disguised_noble } + #Exactly how much does the hooded noble owe? + save_scope_value_as = { + name = noble_tab_value + value = { + value = scope:laamp_disguised_noble.medium_gold_value + #Go outside of the city to drink, eh + if = { + limit = { + scope:visiting_location = { + OR = { + has_holding_type = tribal_holding + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + multiply = 0.5 + } + } + } + } + } + #Noble: Pay their tab + option = { + name = ep3_laamp_decision_event.1037.a + trigger = { exists = scope:laamp_disguised_noble } + flavor = ep3_laamp_decision_event.1037.a.flavor + #Pay up + remove_short_term_gold = scope:noble_tab_value + #Woo rewards + 1037_noble_reward_effect = yes + #Quite the molah + stress_impact = { greedy = minor_stress_impact_gain } + #Set the variables and redirect us back to the tavern main room + 1037_hooded_effect = yes + } + #Noble: Duel the villain + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { highest_skill_including_prowess = diplomacy } + desc = ep3_laamp_decision_event.1037.b_diplomacy + } + triggered_desc = { + trigger = { highest_skill_including_prowess = stewardship } + desc = ep3_laamp_decision_event.1037.b_stewardship + } + triggered_desc = { + trigger = { highest_skill_including_prowess = intrigue } + desc = ep3_laamp_decision_event.1037.b_intrigue + } + triggered_desc = { + trigger = { highest_skill_including_prowess = learning } + desc = ep3_laamp_decision_event.1037.b_learning + } + triggered_desc = { + trigger = { + OR = { + highest_skill_including_prowess = martial + highest_skill_including_prowess = prowess + } + } + desc = ep3_laamp_decision_event.1037.b_martial + } + } + } + } + trigger = { exists = scope:laamp_disguised_noble } + flavor = ep3_laamp_decision_event.1037.b.flavor + #Duel effect + 1037_highest_skill_duel_effect = yes + } + #Noble Triggered Option: We're pretty bad, bro + option = { + name = ep3_laamp_decision_event.1037.c + trigger = { + exists = scope:laamp_disguised_noble + has_trait = gallowsbait + OR = { + #Bandit + has_trait_xp = { + trait = gallowsbait + track = bandit + value > 50 #Half-way + } + #Trickster + has_trait_xp = { + trait = gallowsbait + track = trickster + value > 50 #Half-way + } + #Thief + has_trait_xp = { + trait = gallowsbait + track = thief + value > 50 #Half-way + } + #Poacher + has_trait_xp = { + trait = gallowsbait + track = poacher + value > 50 #Half-way + } + #Marauder + has_trait_xp = { + trait = gallowsbait + track = marauder + value > 50 #Half-way + } + } + } + flavor = ep3_laamp_decision_event.1037.c.flavor + if = { + limit = { + NOT = { + has_trait_xp = { + trait = gallowsbait + track = marauder + value = 100 #Max + } + } + } + add_trait_xp = { + trait = gallowsbait + track = marauder + value = small_lifestyle_random_xp_low + } + } + #Woo rewards + 1037_noble_reward_effect = yes + #I just don't like being criminal, OK? + stress_impact = { + honest = minor_stress_impact_gain + } + #Set the variables and redirect us back to the tavern main room + 1037_hooded_effect = yes + } + #Thief: Recruit them (expensive) + option = { + name = { + text = { + first_valid = { + #I have an open position... + triggered_desc = { + trigger = { can_employ_court_position_type = master_thief_camp_officer } + desc = ep3_laamp_decision_event.1037.d_thief_position + } + #Standard reply + desc = ep3_laamp_decision_event.1037.d + } + } + } + #Replace it with the strongarm option if we have aced a Gallowsbait track + trigger = { + 1037_maxed_gallowsbait_track_trigger = no + #Not available if it's the hooded noble + NOT = { exists = scope:laamp_disguised_noble } + } + #Half if you can offer them an attractive position + if = { + limit = { can_employ_court_position_type = master_thief_camp_officer } #If we, sometime in the future, easily can determine which track of a scaling trait is highest, let's gate it to Thief track + pay_short_term_gold = { + target = scope:laamp_hooded_figure + gold = { + value = major_gold_laamps_value + divide = 2 + } + } + #Hire them (effect in After) + 1037_hire_thief_effect = yes + } + #Otherwise pay up + else = { + pay_short_term_gold = { + target = scope:laamp_hooded_figure + gold = major_gold_laamps_value + } + #Have them join your camp + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_hooded_figure } + #Set the variables and redirect us back to the tavern main room + 1037_hooded_effect = yes + } + } + #Thief: Intrigue Duel + option = { + name = ep3_laamp_decision_event.1037.e + #Replace it with the strongarm option if we have aced a Gallowsbait track + trigger = { + 1037_maxed_gallowsbait_track_trigger = no + #Not available if it's the hooded noble + NOT = { exists = scope:laamp_disguised_noble } + } + duel = { + skill = intrigue + target = scope:laamp_hooded_figure + #Success: Hire 'em up + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 2 + desc = ep3_laamp_decision_event.1037.e.success + send_interface_toast = { + title = ep3_laamp_decision_event.1037.e.success + left_icon = root + right_icon = scope:laamp_hooded_figure + #Yippee! + if = { + limit = { can_employ_court_position_type = master_thief_camp_officer } + #Hire them (effect in After) + 1037_hire_thief_effect = yes + } + else = { + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_hooded_figure } + + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_hood + value = flag:yes + } + #Go back to tavern + hidden_effect = { 1031_return_to_tavern_effect = yes } + } + } + } + #Failure: Bye, now + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1037.e.failure + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1037.e.failure + desc = ep3_laamp_decision_event.1037.e.failure.tt + left_icon = root + right_icon = scope:laamp_hooded_figure + #Oh well + custom_tooltip = ep3_laamp_decision_event.1037.e.failure.tt + #This 'finished' is different since it changes between flag:yes and flag:no + 1037_hooded_effect = yes + } + } + } + } + #Thief: Teach me about Gallowsbait... + option = { + name = ep3_laamp_decision_event.1037.f + trigger = { + #Unless you are full in whatever the hooded figure offers + NOR = { + #Bandit + AND = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 100 #Max value + } + scope:1037_highest_gallowsbait_track ?= flag:bandit + } + #Trickster + AND = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 100 #Max value + } + scope:1037_highest_gallowsbait_track ?= flag:trickster + } + #Thief + AND = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 100 #Max value + } + scope:1037_highest_gallowsbait_track ?= flag:thief + } + #Poacher + AND = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 100 #Max value + } + scope:1037_highest_gallowsbait_track ?= flag:poacher + } + #Marauder + AND = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 100 #Max value + } + scope:1037_highest_gallowsbait_track ?= flag:marauder + } + } + #Not available if it's the hooded noble + NOT = { exists = scope:laamp_disguised_noble } + } + #Get trait + if = { + limit = { + NOT = { has_trait = gallowsbait } + } + add_trait = gallowsbait + } + #Or get a significant amount of experience in trait + else = { + #Pay gold + pay_short_term_gold = { + target = scope:laamp_hooded_figure + gold = medium_gold_laamps_value + } + if = { + limit = { scope:1037_highest_gallowsbait_track ?= flag:bandit } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = trait_third_level_value + } + } + else_if = { + limit = { scope:1037_highest_gallowsbait_track ?= flag:trickster } + add_trait_xp = { + trait = gallowsbait + track = trickster + value = trait_third_level_value + } + } + else_if = { + limit = { scope:1037_highest_gallowsbait_track ?= flag:thief } + add_trait_xp = { + trait = gallowsbait + track = thief + value = trait_third_level_value + } + } + else_if = { + limit = { scope:1037_highest_gallowsbait_track ?= flag:poacher } + add_trait_xp = { + trait = gallowsbait + track = poacher + value = trait_third_level_value + } + } + else_if = { + limit = { scope:1037_highest_gallowsbait_track ?= flag:marauder } + add_trait_xp = { + trait = gallowsbait + track = marauder + value = trait_third_level_value + } + } + } + #Some Intrigue lifestyle gain, coming up + add_intrigue_lifestyle_xp = medium_lifestyle_xp + #Stressful for honest characters + stress_impact = { + honest = minor_stress_impact_gain + } + #Set the variables and redirect us back to the tavern main room + 1037_hooded_effect = yes + } + #Thief Triggered Option: You have aced Gallowsbait in a track + option = { + name = ep3_laamp_decision_event.1037.g + trigger = { + has_trait = gallowsbait + 1037_maxed_gallowsbait_track_trigger = yes + #Not available if it's the hooded noble + NOT = { exists = scope:laamp_disguised_noble } + } + 1033_add_courtier_with_opinion_effect = { TARGET = scope:laamp_hooded_figure } + #Set the variables and redirect us back to the tavern main room + 1037_hooded_effect = yes + ai_chance = { + base = 100 + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1037.h + #Set the variables and redirect us back to the tavern main room + 1031_been_to_effect = { GUILD = hood } + } + after = { + if = { + limit = { scope:laamp_decision_recruited_hood ?= flag:yes } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_hooded_figure + COURT_POS = master_thief_camp_officer + } + } + camp_officer_grant_effect = { + EMPLOYER = root + POS = master_thief + CANDIDATE = scope:laamp_hooded_figure + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:hood } + } +} + + +###################################################################### +# CHURCH GROUNDS +# ep3_laamp_decision_event.1040 +###################################################################### + +#Set the correct variable to block off the Church option and remove the desc flavor variable +scripted_effect 1040_finished_churched_effect = { + remove_list_variable = { + name = list_of_options + target = flag:has_church_option + } + save_scope_as = laamp_decision_finished_church_option +} + +#Nothing left for us to do +scripted_trigger 1040_done_with_church_trigger = { + exists = scope:laamp_decision_has_healed + exists = scope:laamp_decision_has_churched + exists = scope:laamp_decision_has_gardened + trigger_if = { + limit = { exists = scope:laamp_physician_recruit } + exists = scope:laamp_decision_recruited_physician + } +} + +#One of your sick kids who wouldn't fit the visiting_partner trigger +scripted_trigger 1040_sickly_minor_trigger = { + location = root.location + is_courtier_of = root + is_travelling = no + is_imprisoned = no + 1000_has_illness_or_wound_to_treat_trigger = yes + age < 10 +} + + +#Church Holding: Visit the local church grounds +ep3_laamp_decision_event.1040 = { + type = character_event + title = ep3_laamp_decision_event.1040.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #We've returned to this scene, now what + #RETURN: We've returned from Main Square + random_valid = { + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + exists = scope:been_to_church_grounds + OR = { + scope:church_grounds_loc_tracker ?= 0 + scope:church_grounds_loc_tracker ?= 2 + } + } + desc = ep3_laamp_decision_event.1040.desc_returned_01 + } + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + scope:church_grounds_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1040.desc_returned_02 + } + } + #RETURN: We've returned from the Healer + triggered_desc = { + trigger = { var:return_from_location ?= flag:healer } + desc = ep3_laamp_decision_event.1040.desc_returned_from_healer + } + #RETURN: We've returned from the Church + triggered_desc = { + trigger = { var:return_from_location ?= flag:church } + desc = ep3_laamp_decision_event.1040.desc_returned_from_church + } + #RETURN: We've returned from the Garden + triggered_desc = { + trigger = { var:return_from_location ?= flag:garden } + desc = ep3_laamp_decision_event.1040.desc_returned_from_garden + } + #RETURN: We've returned from the Physician + triggered_desc = { + trigger = { var:return_from_location ?= flag:physician } + desc = ep3_laamp_decision_event.1040.desc_returned_from_physician + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc + } + } + #Outro + first_valid = { + #FIRST TIME: For some reason, you have both Sickly Minor and Physician + triggered_desc = { + trigger = { + exists = scope:laamp_physician_recruit + exists = scope:1040_sickly_minor + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc_outro_physician_sickly_minor + } + #FIRST TIME: First time here, look at the physician + triggered_desc = { + trigger = { + exists = scope:laamp_physician_recruit + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc_outro_physician + } + #FIRST TIME: First time here, sickly minor + triggered_desc = { + trigger = { + exists = scope:1040_sickly_minor + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc_outro_sickly_minor + } + #FIRST TIME: First time here, curious partner + triggered_desc = { + trigger = { + exists = scope:visiting_partner + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc_outro_partner + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_church_grounds } + } + desc = ep3_laamp_decision_event.1040.desc_outro + } + #RETURN: Partner - there is nothing left for us here + triggered_desc = { + trigger = { + exists = scope:visiting_partner + 1040_done_with_church_trigger = yes + } + desc = ep3_laamp_decision_event.1040.desc_outro_return_partner_finished + } + #RETURN: There is nothing left for us here + triggered_desc = { + trigger = { 1040_done_with_church_trigger = yes } + desc = ep3_laamp_decision_event.1040.desc_outro_return_finished + } + #RETURN: Physician did not move to their study, yet + triggered_desc = { + trigger = { + exists = scope:laamp_physician_recruit + NOR = { + exists = scope:been_to_physician + exists = scope:laamp_decision_recruited_physician + } + } + desc = ep3_laamp_decision_event.1040.desc_outro_physician_return + } + #RETURN: We've been here before + first_valid = { + #RETURN: Sickly minor is still at the healer's + triggered_desc = { + trigger = { + exists = scope:1040_sickly_minor + var:return_from_location ?= flag:healer + scope:1040_sickly_minor = { has_any_illness = yes } + } + desc = ep3_laamp_decision_event.1040.desc_outro_sickly_minor_return + } + random_valid = { + #RETURN: Partner flavor + triggered_desc = { + trigger = { + exists = scope:visiting_partner + exists = scope:been_to_church_grounds + scope:church_grounds_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1040.desc_outro_return_partner_01 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:church_grounds_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1040.desc_outro_return_partner_02 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:church_grounds_loc_tracker ?= 2 + } + desc = ep3_laamp_decision_event.1040.desc_outro_return_partner_03 + } + #RETURN: Generics + triggered_desc = { + trigger = { + exists = scope:been_to_church_grounds + scope:church_grounds_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1040.desc_outro_return_01 + } + triggered_desc = { + trigger = { scope:church_grounds_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1040.desc_outro_return_02 + } + triggered_desc = { + trigger = { scope:church_grounds_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1040.desc_outro_return_03 + } + } + } + } + } + theme = faith + #Get outta here already + override_effect_2d = { + trigger = { + 1040_done_with_church_trigger = yes + scope:visiting_location = { is_drylands_or_desert_trigger = no } + } + reference = rain + } + override_background = { + trigger = { + location = { + culture = { has_graphical_east_asia_culture_group_trigger = no } + geographical_region = world_asia_southeast + } + } + reference = holy_site_generic + } + override_background = { reference = courtyard_location } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #If it's our (tired) visiting partner + triggered_animation = { + trigger = { 1040_done_with_church_trigger = yes } + animation = boredom + } + #Concerned about our kid + triggered_animation = { + trigger = { + exists = scope:1040_sickly_minor + is_close_family_of = scope:1040_sickly_minor + OR = { + AND = { + var:return_from_location ?= flag:healer + scope:1040_sickly_minor = { has_any_illness = yes } + } + NOT = { exists = scope:been_to_church_grounds } + } + } + animation = stress + } + #Zealous dudette + triggered_animation = { + trigger = { + scope:visiting_partner = { has_trait = zealous } + } + animation = personality_zealous + } + #Cynical dude + triggered_animation = { + trigger = { + scope:visiting_partner = { has_trait = cynical } + } + animation = personality_cynical + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = personality_forgiving + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = personality_callous + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = personality_coward + } + animation = survey + } + center_portrait = { + character = root + #Concerned about our kid + triggered_animation = { + trigger = { + exists = scope:1040_sickly_minor + OR = { + AND = { + var:return_from_location ?= flag:healer + scope:1040_sickly_minor = { has_any_illness = yes } + } + NOT = { exists = scope:been_to_church_grounds } + } + } + animation = worry + } + #Bah, humbug + triggered_animation = { + trigger = { + OR = { + has_trait = cynical + any_secret = { type = secret_non_believer } + } + } + animation = boredom + } + animation = personality_content + } + #Do we have a Physician? + right_portrait = { + trigger = { + exists = scope:1040_third_character + #If this is root, then that means we have talked to the Physician, so let's disappear the portrait + scope:1040_third_character != root + } + camera = camera_event_scheme_center_forward + character = scope:1040_third_character + #Otherwise it's the Physician + animation = personality_zealous + } + #Shove the Physician as long as we've visited them but haven't actioned them + lower_left_portrait = { + trigger = { + exists = scope:1040_fourth_character + #Unless we've actioned them and overwritten them with ROOT + scope:1040_fourth_character != root + } + character = scope:1040_fourth_character + } + #Show the kid here if not actioned + lower_center_portrait = { + trigger = { + exists = scope:1040_fifth_character + scope:1040_sickly_minor = { has_any_illness = yes } + scope:1040_fifth_character != root + } + character = scope:1040_fifth_character + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Set up the ancillary portraits to remind the player of the characters + if = { + #Physician exists + limit = { + #We've been to them at least once + exists = scope:been_to_physician + #We're not done with them yet + AND = { + exists = scope:laamp_physician_recruit + NOT = { exists = scope:laamp_decision_recruited_physician } + } + #This isn't already the state + NAND = { + exists = scope:1040_fourth_character + scope:1040_fourth_character ?= scope:laamp_physician_recruit + } + } + scope:laamp_physician_recruit = { save_scope_as = 1040_fourth_character } + } + #Clear out the ancillary portrait(s) + if = { + limit = { + exists = scope:1040_fourth_character + scope:laamp_physician_recruit ?= scope:1040_fourth_character + exists = scope:laamp_decision_recruited_physician + } + #Overwrite with ROOT to hide that portrait + save_scope_as = 1040_fourth_character + } + if = { + limit = { + exists = scope:1040_fifth_character + scope:1040_sickly_minor ?= scope:1040_fifth_character + exists = scope:laamp_decision_has_healed + } + #Overwrite with ROOT to hide that portrait + save_scope_as = 1040_fifth_character + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = church_grounds } + #Do we have a sick minor we snuck along? + if = { + limit = { + NOT = { exists = scope:1040_sickly_minor } + any_close_family_member = { 1040_sickly_minor_trigger = yes } + } + random_close_family_member = { + limit = { 1040_sickly_minor_trigger = yes } + save_scope_as = 1040_sickly_minor + save_scope_as = 1040_fifth_character + } + } + #Rare: Spawn a spectacular Physician + if = { + limit = { + NOT = { has_variable = laamp_decision_1000_checked_for_physician } + } + random_list = { + 80 = { + #No Physician + } + 20 = { + #Has this person been our physician in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_physician_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_physician_recruit + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_physician + } + #Otherwise find a physician in the pool + if = { + limit = { + NOT = { exists = scope:laamp_physician_recruit } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + has_trait = devoted + learning >= 15 + OR = { + has_trait = lifestyle_physician + has_trait = lifestyle_herbalist + has_trait = lifestyle_mystic + } + } + save_scope_as = laamp_physician_recruit + } + } + #Otherwise create a physician + if = { + limit = { + NOT = { exists = scope:laamp_physician_recruit } + } + #Create physician to stuff in pool + create_character = { + template = bp1_yearly_2021_learning_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + learning = { decent_skill_rating high_skill_rating } + save_scope_as = laamp_physician_recruit + } + scope:laamp_physician_recruit ?= { + #Chance to add a malus trait to this spectatular being + if = { + limit = { + NOR = { + has_trait = possessed_1 + has_trait = lunatic_1 + has_trait = depressed_1 + has_trait = drunkard + has_trait = hashishiyah + has_trait = irritable + any_secret = { type = secret_witch } + } + } + hidden_effect = { + random = { + chance = 20 + random_list = { + 10 = { add_trait = possessed_1 } + 10 = { add_trait = lunatic_1 } + 10 = { add_trait = depressed_1 } + 10 = { add_trait = drunkard } + 10 = { add_trait = hashishiyah } + 10 = { add_trait = irritable } + 10 = { + add_secret = { type = secret_witch } + } + } + } + } + } + if = { + limit = { + NOT = { has_trait = devoted } + } + add_trait = devoted + } + } + } + scope:laamp_physician_recruit = { save_scope_as = 1040_third_character } + #Remember the physician + 1010_remember_vendor_character_effect = { GUILD = physician CHARACTER = scope:laamp_physician_recruit } + } + } + #No decision-scumming + set_variable = { + name = laamp_decision_1000_checked_for_physician + days = visit_settlement_cooldown_days + } + } + #Make sure we remember the church isn't available because you were a thieving heathen + if = { + limit = { + NOT = { exists = scope:laamp_decision_has_churched } + has_variable = 1040_caught_stealing + } + save_scope_as = laamp_decision_has_churched + } + } + #Attempt to improve your health // OR // Attempt to cure (curable) illness + option = { + name = { + text = { + first_valid = { + #Sickly child is still waiting at the healer's + triggered_desc = { + trigger = { + exists = scope:been_to_healer + exists = scope:1040_sickly_minor + NOT = { exists = scope:laamp_decision_has_healed } + } + desc = ep3_laamp_decision_event.1040.a_second_sickly_minor + } + #Return to healer + triggered_desc = { + trigger = { exists = scope:been_to_healer } + desc = ep3_laamp_decision_event.1040.a_second + } + #We are meeting a sickly child at the healer's + triggered_desc = { + trigger = { exists = scope:1040_sickly_minor } + desc = ep3_laamp_decision_event.1040.a_sickly_minor + } + #First time going to healer + desc = ep3_laamp_decision_event.1040.a + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1040.a.cooldown.tt + NOT = { exists = scope:laamp_decision_has_healed } + } + } + show_as_unavailable = { always = yes } + reason = visit_healer + custom_tooltip = ep3_laamp_decision_event.1040.a.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = church_grounds } + #Go to the Healer screen + trigger_event = ep3_laamp_decision_event.1041 + ai_chance = { base = 100 } + } + #Visit church + option = { + name = { + text = { + first_valid = { + #Return to church + triggered_desc = { + trigger = { exists = scope:been_to_church } + desc = ep3_laamp_decision_event.1040.b_second + } + #First time at church + desc = ep3_laamp_decision_event.1040.b + } + } + } + trigger = { + #You were recently caught stealing from the church + trigger_if = { + limit = { has_variable = 1040_caught_stealing } + custom_tooltip = { + text = caught_stealing.tt + always = no + } + } + trigger_else = { + custom_tooltip = { + text = ep3_laamp_decision_event.1040.b.cooldown.tt + NOT = { exists = scope:laamp_decision_has_churched } + } + } + } + show_as_unavailable = { always = yes } + reason = visit_church + custom_tooltip = ep3_laamp_decision_event.1040.b.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = church_grounds } + #Go to the Church screen + trigger_event = ep3_laamp_decision_event.1043 + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 2 + } + modifier = { + has_trait = pilgrim + factor = 2 + } + } + } + #Convert to local faith // OR // Contemplate faith + option = { + name = { + text = { + first_valid = { + #Convert to faith + triggered_desc = { + trigger = { exists = scope:been_to_garden } + desc = ep3_laamp_decision_event.1040.c_second + } + #Contemplate faith + desc = ep3_laamp_decision_event.1040.c + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1040.c.cooldown.tt + NOT = { exists = scope:laamp_decision_has_gardened } + } + } + show_as_unavailable = { always = yes } + reason = visit_garden + custom_tooltip = ep3_laamp_decision_event.1040.c.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = church_grounds } + #Go to the Garden screen + trigger_event = ep3_laamp_decision_event.1045 + ai_chance = { + base = 100 + modifier = { + stress_level >= 2 + add = 400 + } + } + } + #Rare Option: Hire cheaper, skilled, Physician + option = { + name = { + text = { + first_valid = { + #Return to talk to physician + triggered_desc = { + trigger = { exists = scope:been_to_physician } + desc = ep3_laamp_decision_event.1040.d_second + } + #First time talking to physician + desc = ep3_laamp_decision_event.1040.d + } + } + } + trigger = { + exists = scope:laamp_physician_recruit + NOT = { exists = scope:laamp_decision_recruited_physician } + } + reason = recruit_physician + custom_tooltip = ep3_laamp_decision_event.1040.d.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = church_grounds } + #For the Physician screen + trigger_event = ep3_laamp_decision_event.1047 + ai_chance = { + base = 1000 #Just do it + } + } + #I want to do something else + option = { + name = { + text = { + first_valid = { + #Nothing left to do + triggered_desc = { + trigger = { 1040_done_with_church_trigger = yes } + desc = ep3_laamp_decision_event.1040.e_second + } + #Back to main square + desc = ep3_laamp_decision_event.1040.e + } + } + } + #Have we done everything? Are we closing off the option? + if = { + limit = { 1040_done_with_church_trigger = yes } + #Clean up unnecessary variables and close off the option + 1040_finished_churched_effect = yes + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = church_grounds } + #Go back to the main event + 1000_return_to_main_effect = yes + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:church_grounds } + } +} + + +#Pretty straight forward +scripted_effect 1041_chance_to_buff_item_rarity_effect = { + random_list = { + 20 = { + trigger = { + exists = scope:laamp_healer_character + $VENDOR$ = scope:laamp_healer_character + } + set_artifact_rarity_famed = yes + } + 40 = { + modifier = { + exists = scope:laamp_jeweler_craftsman + $VENDOR$ = scope:laamp_jeweler_craftsman + factor = 2 + } + set_artifact_rarity_masterwork = yes + } + 80 = { + set_artifact_rarity_common = yes + } + } +} + +#Reused effect to set the value variables +scripted_effect 1041_set_item_value_effect = { + #Weapon cost + if = { + limit = { has_variable = 1061_laamp_decision_weapon } + if = { + limit = { rarity = masterwork } + set_variable = { + name = 1061_weapon_value + value = { + value = root.major_gold_value + multiply = { 1 1.5 } + } + } + } + else = { + set_variable = { + name = 1061_weapon_value + value = { + value = root.medium_gold_value + multiply = { 0.75 1.25 } + } + } + } + } + #Armor cost + if = { + limit = { has_variable = 1063_laamp_decision_armor } + if = { + limit = { rarity = masterwork } + set_variable = { + name = 1063_armor_value + value = { + value = root.major_gold_value + multiply = { 1.5 2 } + } + } + } + else = { + set_variable = { + name = 1063_armor_value + value = { + value = root.medium_gold_value + multiply = { 1.25 1.75 } + } + } + } + } + #Accessory cost + if = { + limit = { + OR = { + has_variable = 1041_laamp_decision_health_artifact + has_variable = 1065_laamp_decision_accessory + } + } + if = { + limit = { + rarity = famed + has_variable = 1041_laamp_decision_health_artifact + } + set_variable = { + name = 1065_accessory_value + value = { + value = root.massive_gold_value + multiply = { 1 1.5 } + } + } + } + else_if = { + limit = { rarity = masterwork } + set_variable = { + name = 1065_accessory_value + value = { + value = root.major_gold_value + multiply = { 1.25 1.75 } + } + } + } + else = { + set_variable = { + name = 1065_accessory_value + value = { + value = root.medium_gold_value + multiply = { 1 1.5 } + } + } + } + } +} + +#We return to the church grounds event to peruse other options +scripted_effect 1041_return_to_church_grounds_effect = { + custom_tooltip = ep3_laamp_decision_event.1041.return.tt + trigger_event = ep3_laamp_decision_event.1040 +} + +#Set the correct variable to block off the Healer option and remove the desc flavor variable +scripted_effect 1041_healed_effect = { + scope:1041_health_artifact = { remove_variable ?= 1065_accessory_value } + remove_variable ?= 1041_healer_aptitude + remove_variable ?= 1041_partner_healer_aptitude + save_scope_as = laamp_decision_has_healed + #Go back to church grounds + hidden_effect = { 1041_return_to_church_grounds_effect = yes } +} + +#Determine the variable effect based on their aptitude, one for the healer and one for the physician-partner +scripted_effect 1041_calculate_aptitude_modifier_effect = { + if = { + limit = { + $CHARACTER$ = { + aptitude = { + court_position = court_physician_court_position + value >= 1 + } + } + } + change_variable = { + name = $VARIABLE$ + add = 1 + } + } + if = { + limit = { + $CHARACTER$ = { + aptitude = { + court_position = court_physician_court_position + value >= 2 + } + } + } + change_variable = { + name = $VARIABLE$ + add = 1 + } + } + if = { + limit = { + $CHARACTER$ = { + aptitude = { + court_position = court_physician_court_position + value >= 3 + } + } + } + change_variable = { + name = $VARIABLE$ + add = 1 + } + } + if = { + limit = { + $CHARACTER$ = { + aptitude = { + court_position = court_physician_court_position + value >= 4 + } + } + } + change_variable = { + name = $VARIABLE$ + add = 1 + } + } + if = { + limit = { + $CHARACTER$ = { + aptitude = { + court_position = court_physician_court_position + value >= 5 + } + } + } + change_variable = { + name = $VARIABLE$ + add = 1 + } + } +} + +#The actual removal-of-illness +scripted_effect 1041_remove_illness_or_wound_effect = { + random_list = { + 100 = { + trigger = { has_character_modifier = infected_wound_modifier } + remove_character_modifier = infected_wound_modifier + } + 100 = { + trigger = { has_character_modifier = gangrene_modifier } + remove_character_modifier = gangrene_modifier + } + 100 = { + trigger = { has_trait = wounded_1 } + remove_trait = wounded_1 + } + 100 = { + trigger = { has_trait = wounded_2 } + remove_trait = wounded_2 + } + 100 = { + trigger = { has_trait = wounded_3 } + remove_trait = wounded_3 + } + 100 = { + trigger = { has_trait = ill } + remove_trait = ill + } + 100 = { + trigger = { has_trait = pneumonic } + remove_trait = pneumonic + } + 50 = { + trigger = { has_trait = typhus } + remove_trait = typhus + } + 50 = { + trigger = { has_trait = gout_ridden } + remove_trait = gout_ridden + } + 50 = { + trigger = { has_trait = consumption } + remove_trait = consumption + } + 50 = { + trigger = { has_trait = smallpox } + remove_trait = smallpox + } + 50 = { + trigger = { has_trait = great_pox } + remove_trait = great_pox + } + 25 = { + trigger = { has_trait = cancer } + remove_trait = cancer + } + 25 = { + trigger = { has_trait = bubonic_plague } + remove_trait = bubonic_plague + } + 25 = { + trigger = { has_trait = leper } + remove_trait = leper + } + } +} + +#Do you feel lucky? +scripted_effect 1041_treatment_roll_effect = { + random_list = { + #Failure + 70 = { + #Some weighting based on the aptitude of the performing party (healer/physician-partner) + modifier = { + exists = $VARIABLE$ + $VARIABLE$ >= 5 + add = -15 + } + modifier = { + exists = $VARIABLE$ + $VARIABLE$ >= 4 + add = -15 + } + modifier = { + exists = $VARIABLE$ + $VARIABLE$ >= 3 + add = -15 + } + #Notify us about the outcome + if = { + limit = { + NOT = { $TARGET_CHARACTER$ = root } #If our partner gets treated + } + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1041.treatment_failure.t + desc = ep3_laamp_decision_event.1041.treatment_failure.desc + left_icon = root + right_icon = $TARGET_CHARACTER$ + } + } + else = { + send_interface_toast = { + type = event_toast_text_bad #If we get treated + title = ep3_laamp_decision_event.1041.treatment_failure.t + desc = ep3_laamp_decision_event.1041.treatment_failure.desc + left_icon = root + } + } + #Nothing happens + } + #Success + 30 = { + modifier = { + NOT = { $TARGET_CHARACTER$ = root } #The scoped character is either visiting_partner or sickly_minor + $TARGET_CHARACTER$ = { + age < 20 + is_child_of = root + } + add = 30 + } + modifier = { + NOT = { $TARGET_CHARACTER$ = root } #... a cold-hearted person can tweak this back later on when people complain about too low child mortality rates + $TARGET_CHARACTER$ = { + age < 10 + is_child_of = root + } + add = 30 + } + #If our partner gets treated + if = { + limit = { + NOT = { $TARGET_CHARACTER$ = root } #The scoped character is either visiting_partner or sickly_minor + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1041.treatment_success.t + left_icon = root + right_icon = $TARGET_CHARACTER$ + $TARGET_CHARACTER$ = { 1041_remove_illness_or_wound_effect = yes } + } + } + #If we get treated, automatic toast + else = { 1041_remove_illness_or_wound_effect = yes } + } + } +} + +#Someone learn-y or mystic +scripted_trigger 1041_physician_partner_trigger = { + OR = { + learning >= 15 + has_trait = lifestyle_physician + has_trait = lifestyle_mystic + has_trait = witch + } +} + + +#Visit Healer +ep3_laamp_decision_event.1041 = { + type = character_event + title = ep3_laamp_decision_event.1041.t + window = visit_settlement_window + desc = { + #What are they up to? + first_valid = { + #We've returned to this scene, now what + #RETURN: A sick minor... is still here + triggered_desc = { + trigger = { + exists = scope:1040_sickly_minor + exists = scope:been_to_healer + } + desc = ep3_laamp_decision_event.1041.desc_returned_sickly_minor + } + #RETURN: Physician partner wants a stab at it + triggered_desc = { + trigger = { + scope:visiting_partner ?= { + 1041_physician_partner_trigger = yes + 1000_has_illness_or_wound_to_treat_trigger = no + } + exists = scope:been_to_healer + } + desc = ep3_laamp_decision_event.1041.desc_returned_physician_partner + } + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_healer + scope:healer_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1041.desc_returned_01 + } + triggered_desc = { + trigger = { scope:healer_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1041.desc_returned_02 + } + } + #FIRST TIME: A sick minor was snuck along + triggered_desc = { + trigger = { + exists = scope:1040_sickly_minor + NOT = { exists = scope:been_to_healer } + } + desc = ep3_laamp_decision_event.1041.desc_sickly_minor + } + #FIRST TIME: Our partner is actually pretty physician-y + triggered_desc = { + trigger = { + scope:visiting_partner ?= { + 1041_physician_partner_trigger = yes + 1000_has_illness_or_wound_to_treat_trigger = no + } + NOT = { exists = scope:been_to_healer } + } + desc = ep3_laamp_decision_event.1041.desc_physician_partner + } + #FIRST TIME: We've seen this healer before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_healer_character + NOT = { exists = scope:been_to_healer } + } + desc = ep3_laamp_decision_event.1041.desc_reused_healer + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_healer } + } + desc = ep3_laamp_decision_event.1041.desc + } + } + #Describe the artifact + first_valid = { + #RETURN: Horn artifact + triggered_desc = { + trigger = { + exists = scope:been_to_healer + scope:1041_health_artifact = { has_variable = health_horn } + } + desc = ep3_laamp_decision_event.1041.desc_outro_return_horn + } + #FIRST TIME: Horn artifact + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_healer } + scope:1041_health_artifact = { has_variable = health_horn } + } + desc = ep3_laamp_decision_event.1041.desc_outro_horn + } + #RETURN: Other artifacts + triggered_desc = { + trigger = { + exists = scope:been_to_healer + scope:1041_health_artifact = { + NOT = { has_variable = health_horn } + } + } + desc = ep3_laamp_decision_event.1041.desc_outro_return_artifact + } + #FIRST TIME: Other artifacts + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_healer } + scope:1041_health_artifact = { + NOT = { has_variable = health_horn } + } + } + desc = ep3_laamp_decision_event.1041.desc_outro_artifact + } + } + } + theme = medicine + #Someone close to you is sick + override_sound = { + trigger = { + OR = { + scope:visiting_partner ?= { 1000_has_illness_or_wound_to_treat_trigger = yes } + exists = scope:1040_sickly_minor + } + } + reference = "event:/MUSIC/Cues/Events/Illness/mx_cue_illness" + } + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_medicine" } + override_background = { reference = physicians_study } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #If it's our (tired) visiting partner + triggered_animation = { + trigger = { 1040_done_with_church_trigger = yes } + animation = boredom + } + #Concerned about our kid + triggered_animation = { + trigger = { + exists = scope:1040_sickly_minor + is_close_family_of = scope:1040_sickly_minor + } + animation = stress + } + #Sick dudette + triggered_animation = { + trigger = { 1000_has_illness_or_wound_to_treat_trigger = yes } + animation = pain + } + #Doctor dude + triggered_animation = { + trigger = { 1041_physician_partner_trigger = yes } + animation = ecstasy + } + animation = thinking + } + center_portrait = { + character = root + triggered_animation = { + trigger = { exists = scope:1040_sickly_minor } + animation = worry + } + animation = personality_content + } + right_portrait = { + character = scope:laamp_healer_character + camera = camera_event_scheme_far_right + animation = physician + } + #Do we have a sick minor? + lower_left_portrait = { + trigger = { exists = scope:1040_sickly_minor } + character = scope:1040_sickly_minor + } + artifact = { + target = scope:1041_health_artifact + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = healer } + #Find our healer + if = { + #Do we already have a healer? + limit = { + NOT = { exists = scope:laamp_healer_character } + } + #Has this person been our healer in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_healer_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_healer_character + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_healer_character + } + #Otherwise find a healer in the pool + if = { + limit = { + NOT = { exists = scope:laamp_healer_character } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + has_trait = lifestyle_physician + } + save_scope_as = laamp_healer_character + } + } + #Otherwise create a healer + if = { + limit = { + NOT = { exists = scope:laamp_healer_character } + } + #Create healer to stuff in pool + create_character = { + template = physician_high_character_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_healer_character + } + } + #Remember the healer + 1010_remember_vendor_character_effect = { GUILD = healer CHARACTER = scope:laamp_healer_character } + #Find our healing artifact + if = { + limit = { + NOT = { exists = scope:1041_health_artifact } + } + scope:laamp_healer_character ?= { + #Have we created healing artifacts recently, which we can pull? + if = { + limit = { + any_character_artifact ?= { has_variable = 1041_laamp_decision_health_artifact } + } + random_character_artifact = { + limit = { has_variable = 1041_laamp_decision_health_artifact } + save_scope_as = 1041_health_artifact + } + } + #If we don't have any old healing artifacts; generate a new one! + hidden_effect_new_object = { #HAZMAT SUIT OF ERROR SUPRESSION + if = { + limit = { + NOT = { exists = scope:1041_health_artifact } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_healer_character } + #Generate healing artifact + generate_health_trinket_effect = yes + #Finalization + scope:newly_created_health_artifact ?= { + set_variable = { + name = 1041_laamp_decision_health_artifact + days = visit_settlement_cooldown_days + } + #Belt & suspenders + set_variable = 1041_laamp_decision_health_artifact + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1041_health_artifact + } + } + #Set the value of the health artifact + scope:1041_health_artifact = { 1041_set_item_value_effect = yes } + } + } + } + if = { + limit = { + exists = scope:laamp_healer_character + NOT = { has_variable = 1041_healer_aptitude } + } + #Calculate the healer's aptitude + set_variable = { + name = 1041_healer_aptitude + value = 0 + } + 1041_calculate_aptitude_modifier_effect = { CHARACTER = scope:laamp_healer_character VARIABLE = 1041_healer_aptitude } + #Calculate our physician friend's aptitude + if = { + limit = { + scope:visiting_partner ?= { 1041_physician_partner_trigger = yes } + } + set_variable = { + name = 1041_partner_healer_aptitude + value = 0 + } + 1041_calculate_aptitude_modifier_effect = { CHARACTER = scope:visiting_partner VARIABLE = 1041_partner_healer_aptitude } + } + } + } + #For the background + scope:laamp_healer_character = { + if = { + limit = { + is_ruler = no + exists = court_owner + } + court_owner = { save_scope_as = bg_override_char } + } + else = { + save_scope_as = bg_override_char + } + } + } + #Attempt to improve your health // OR // Attempt to cure (curable) illness + option = { + name = { + text = { + first_valid = { + #We're ill + triggered_desc = { + trigger = { 1000_has_illness_or_wound_to_treat_trigger = yes } + desc = ep3_laamp_decision_event.1041.a_ill + } + #Just a standard procedure + desc = ep3_laamp_decision_event.1041.a + } + } + } + #We're ill, roll for some treatment + if = { + limit = { 1000_has_illness_or_wound_to_treat_trigger = yes } + 1041_treatment_roll_effect = { TARGET_CHARACTER = root VARIABLE = var:1041_healer_aptitude } + } + #Standard procedure health modifier + else = { + if = { + limit = { has_character_modifier = laamp_decision_church_health_modifier } + hidden_effect = { remove_character_modifier = laamp_decision_church_health_modifier } + } + add_character_modifier = { + modifier = laamp_decision_church_health_modifier + days = visit_settlement_cooldown_days + } + } + pay_short_term_gold = { + target = scope:laamp_healer_character + gold = minor_gold_value + } + #Set the variables and redirect us back to the Church Grounds + 1041_healed_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + 1000_has_illness_or_wound_to_treat_trigger = no + has_character_modifier = laamp_decision_church_health_modifier + factor = 0 + } + } + } + #Buy the health artifact + option = { + name = ep3_laamp_decision_event.1041.b + scope:1041_health_artifact = { + root = { + pay_short_term_gold = { + target = scope:laamp_healer_character + gold = prev.var:1065_accessory_value + } + } + set_owner = root + } + #Set the variables and redirect us back to the Church Grounds + 1041_healed_effect = yes + ai_chance = { + base = 50 + modifier = { + short_term_gold < scope:1041_health_artifact.var:1065_accessory_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Triggered Option: Your partner wants to try their hand at the procedure + option = { + name = ep3_laamp_decision_event.1041.c + trigger = { + scope:visiting_partner ?= { + 1041_physician_partner_trigger = yes + 1000_has_illness_or_wound_to_treat_trigger = no + } + NOT = { exists = scope:1040_sickly_minor } + } + flavor = ep3_laamp_decision_event.1041.c.flavor + #We're ill, roll for some treatment + if = { + limit = { 1000_has_illness_or_wound_to_treat_trigger = yes } + 1041_treatment_roll_effect = { TARGET_CHARACTER = root VARIABLE = var:1041_partner_healer_aptitude } + } + #Standard procedure health modifier + else = { + if = { + limit = { has_character_modifier = laamp_decision_church_health_partner_modifier } + hidden_effect = { remove_character_modifier = laamp_decision_church_health_partner_modifier } + } + add_character_modifier = { + modifier = laamp_decision_church_health_partner_modifier + days = visit_settlement_cooldown_days + } + } + progress_towards_friend_effect = { + REASON = friend_allowed_to_treat + CHARACTER = scope:visiting_partner + OPINION = default_friend_opinion + } + scope:visiting_partner = { + if = { + limit = { + NOT = { has_trait = lifestyle_physician } + } + add_trait = lifestyle_physician + } + else_if = { + limit = { + has_trait = lifestyle_physician + has_trait_xp = { + trait = lifestyle_physician + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_physician + value = 40 + } + } + else = { + add_learning_skill = 1 + } + } + #Set the variables and redirect us back to the Church Grounds + 1041_healed_effect = yes + ai_chance = { base = 200 } + } + #Triggered Option: Your partner or sickly minor is ill + option = { + name = { + text = ep3_laamp_decision_event.1041.d + trigger = { exists = scope:1040_sickly_minor } + } + name = { + text = ep3_laamp_decision_event.1041.d.partner + trigger = { exists = scope:visiting_partner } + } + trigger = { + OR = { + scope:visiting_partner ?= { 1000_has_illness_or_wound_to_treat_trigger = yes } + exists = scope:1040_sickly_minor + } + } + if = { + limit = { exists = scope:1040_sickly_minor } + 1041_treatment_roll_effect = { TARGET_CHARACTER = scope:1040_sickly_minor VARIABLE = var:1041_healer_aptitude } + progress_towards_friend_effect = { + REASON = friend_got_treatment + CHARACTER = scope:1040_sickly_minor + OPINION = default_friend_opinion + } + } + else = { + 1041_treatment_roll_effect = { TARGET_CHARACTER = scope:visiting_partner VARIABLE = var:1041_healer_aptitude } + progress_towards_friend_effect = { + REASON = friend_got_treatment + CHARACTER = scope:visiting_partner + OPINION = default_friend_opinion + } + } + pay_short_term_gold = { + target = scope:laamp_healer_character + gold = minor_gold_value + } + #Set the variables and redirect us back to the Church Grounds + 1041_healed_effect = yes + ai_chance = { + base = 300 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1041.e + #Sets variables and returns us to church grounds screen + 1031_been_to_effect = { GUILD = healer } + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:healer } + } +} + + +#Set the correct variable to block off the Church option and remove the desc flavor variable +scripted_effect 1043_churched_effect = { + save_scope_as = laamp_decision_has_churched + #Go back to church grounds + hidden_effect = { 1041_return_to_church_grounds_effect = yes } +} + +#Not really into religion +scripted_trigger 1043_is_unzealous_trigger = { + OR = { + has_trait = cynical + any_secret = { type = secret_non_believer } + } +} + + +#Visit Church +ep3_laamp_decision_event.1043 = { + type = character_event + title = ep3_laamp_decision_event.1043.t + window = visit_settlement_window + desc = { + #What are they up to? + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_church + scope:church_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1043.desc_returned_01 + } + triggered_desc = { + trigger = { scope:church_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1043.desc_returned_02 + } + } + #FIRST TIME: We've seen this NunMonk before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_clergy_character + NOT = { exists = scope:been_to_church } + } + desc = ep3_laamp_decision_event.1043.desc_reused_clergy + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_church } + } + desc = ep3_laamp_decision_event.1043.desc + } + } + #How about some theft + first_valid = { + #RETURN: Longing master thief + triggered_desc = { + trigger = { + scope:visiting_partner ?= { has_court_position = master_thief_camp_officer } + exists = scope:been_to_church + } + desc = ep3_laamp_decision_event.1043.desc_return_outro_thief + } + #RETURN: Outro + triggered_desc = { + trigger = { exists = scope:been_to_church } + desc = ep3_laamp_decision_event.1043.desc_return_outro + } + #FIRST TIME: Longing master thief + triggered_desc = { + trigger = { + scope:visiting_partner ?= { has_court_position = master_thief_camp_officer } + NOT = { exists = scope:been_to_church } + } + desc = ep3_laamp_decision_event.1043.desc_outro_thief + } + #FIRST TIME: Outro + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_church } + } + desc = ep3_laamp_decision_event.1043.desc_outro + } + } + } + theme = faith + override_sound = { reference = "event:/MUSIC/Cues/Events/Sacral Happening/mx_cue_epic_sacral_moment" } + override_background = { reference = temple } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Master thief + triggered_animation = { + trigger = { has_court_position = master_thief_camp_officer } + animation = scheme + } + #Unzealous + triggered_animation = { + trigger = { 1043_is_unzealous_trigger = yes } + animation = personality_cynical + } + #Zealous + triggered_animation = { + trigger = { + scope:visiting_partner = { has_trait = zealous } + } + animation = ecstasy + } + #Friendly + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_friendly_traits = yes } + } + animation = interested + } + #Business-minded + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_commerce_traits = yes } + } + animation = personality_greedy + } + #Uninterested + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_uninterested_traits = yes } + } + animation = boredom + } + #Irrational + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_irrational_traits = yes } + } + animation = personality_irrational + } + #A bit awkward + triggered_animation = { + trigger = { + scope:visiting_partner = { 1010_has_standoffish_traits = yes } + } + animation = disapproval + } + animation = personality_honorable + } + center_portrait = { + character = root + triggered_animation = { + trigger = { 1043_is_unzealous_trigger = yes } + animation = disapproval + } + animation = personality_content + } + right_portrait = { + character = scope:laamp_clergy_character + animation = personality_forgiving + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #For the background + scope:visiting_location.county.holder = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = church } + #Find our clergy + if = { + #Do we already have a clergy? + limit = { + NOT = { exists = scope:laamp_clergy_character } + } + #Has this person been our clergy in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + faith = scope:visiting_location.faith + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_clergy_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_clergy_character + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_clergy_character + } + #Otherwise find a clergy in the pool + if = { + limit = { + NOT = { exists = scope:laamp_clergy_character } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + has_trait = devoted + faith = scope:visiting_location.faith + } + save_scope_as = laamp_clergy_character + } + } + #Otherwise create a clergy + if = { + limit = { + NOT = { exists = scope:laamp_clergy_character } + } + #Create clergy to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + trait = devoted + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_clergy_character + } + } + #Remember the clerger + 1010_remember_vendor_character_effect = { GUILD = clergy CHARACTER = scope:laamp_clergy_character } + } + #How much gold is in the collect; and how difficult is it? + if = { + limit = { + NOT = { exists = scope:1043_collect_gold_value } + } + #Randomize the initial value + set_variable = { + name = 1043_collect_gold_difficulty + value = { + integer_range = { + min = 0 + max = 2 + } + } + } + #Then add difficulty based on how much gold is in the collect + random_list = { + 10 = { + save_scope_value_as = { + name = 1043_collect_gold_value + value = minor_gold_laamps_value + } + change_variable = { + name = 1043_collect_gold_difficulty + add = 1 + } + } + 10 = { + save_scope_value_as = { + name = 1043_collect_gold_value + value = medium_gold_laamps_value + } + change_variable = { + name = 1043_collect_gold_difficulty + add = 2 + } + } + 10 = { + save_scope_value_as = { + name = 1043_collect_gold_value + value = major_gold_laamps_value + } + change_variable = { + name = 1043_collect_gold_difficulty + add = 3 + } + } + } + #Did we go robbing a bunch of churches previously? + if = { + limit = { + has_variable = 1043_heightened_security + exists = var:1043_collect_gold_difficulty + } + change_variable = { + name = 1043_collect_gold_difficulty + add = var:1043_heightened_security + } + + } + #Set the difficulty + if = { + limit = { exists = var:1043_collect_gold_difficulty } + if = { + limit = { var:1043_collect_gold_difficulty >= 5 } + save_scope_value_as = { + name = 1043_collect_gold_difficulty_rating + value = monumentally_high_skill_rating #Had to invent a new difficulty, just for you :hmmyes: + } + } + else_if = { + limit = { var:1043_collect_gold_difficulty = 4 } + save_scope_value_as = { + name = 1043_collect_gold_difficulty_rating + value = extremely_high_skill_rating + } + } + else_if = { + limit = { var:1043_collect_gold_difficulty = 3 } + save_scope_value_as = { + name = 1043_collect_gold_difficulty_rating + value = high_skill_rating + } + } + else_if = { + limit = { var:1043_collect_gold_difficulty = 2 } + save_scope_value_as = { + name = 1043_collect_gold_difficulty_rating + value = medium_skill_rating + } + } + else = { + save_scope_value_as = { + name = 1043_collect_gold_difficulty_rating + value = low_skill_rating + } + } + } + } + } + #Donate some gold for piety + option = { + name = ep3_laamp_decision_event.1043.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { 1043_is_unzealous_trigger = yes } + desc = ep3_laamp_decision_event.1043.a.flavor_unzealous + } + } + } + if = { + limit = { NOT = { exists = var:visit_settlement_church_donation } } + set_variable = { + name = visit_settlement_church_donation + years = visit_settlement_medium_cooldown_year + value = 1 + } + } + else = { + set_local_variable = { + name = visit_settlement_church_donation_temp + value = var:visit_settlement_church_donation + } + set_variable = { + name = visit_settlement_church_donation + years = visit_settlement_medium_cooldown_year + value = { + value = local_var:visit_settlement_church_donation_temp + add = 1 + } + } + } + #Pay gold, feel more pious + pay_short_term_gold = { + target = scope:laamp_clergy_character + gold = minor_gold_value + } + add_piety = visit_settlement_piety_gain_value + #Roll for epiphanous clergy + hidden_effect = { + scope:laamp_clergy_character = { + random_list = { + 95 = { + modifier = { + has_trait = possessed_1 + factor = 0.5 + } + #Nothing happens + } + 5 = { + modifier = { + piety_level = high_piety_level + add = 5 + } + modifier = { + piety_level = very_high_piety_level + add = 5 + } + modifier = { + piety_level = max_piety_level + add = 5 + } + set_variable = 1043_is_epiphanous + } + } + } + } + stress_impact = { + greedy = minor_stress_impact_gain + zealous = minor_stress_impact_loss + generous = minor_stress_impact_loss + improvident = medium_stress_impact_loss #Throw 'em a bone + } + trigger_event = ep3_laamp_decision_event.1044 + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Ask for blessing + option = { + name = ep3_laamp_decision_event.1043.b + trigger = { + NOR = { + has_character_modifier = laamp_decision_church_blessing_stress_loss_modifier + has_character_modifier = laamp_decision_church_blessing_stress_gain_modifier + piety_level < low_piety_level + } + } + show_as_unavailable = { always = yes } + reason = piety + #Pokémon blue? + add_character_modifier = { + modifier = laamp_decision_church_blessing_stress_loss_modifier + years = 5 + } + #Set the variables and redirect us back to the Church Grounds + 1043_churched_effect = yes + ai_chance = { + base = 200 + modifier = { + piety_level > medium_piety_level + add = 300 + } + } + } + #'Borrow' gold from the collect + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:visiting_partner ?= { has_court_position = master_thief_camp_officer } + } + desc = ep3_laamp_decision_event.1043.c_master_thief + } + triggered_desc = { + trigger = { has_variable = 1043_heightened_security } + desc = ep3_laamp_decision_event.1043.c_guarded + } + desc = ep3_laamp_decision_event.1043.c + } + } + } + trigger = { is_ai = no } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + has_variable = 1043_heightened_security + var:1043_heightened_security != 0 + } + desc = ep3_laamp_decision_event.1043.c.flavor_guarded + } + desc = ep3_laamp_decision_event.1043.c.flavor + } + } + duel = { + skill = intrigue + value = scope:1043_collect_gold_difficulty_rating + #Success: Coin! + 50 = { + modifier = { + scope:visiting_partner ?= { has_court_position = master_thief_camp_officer } + factor = 2 + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 10 + desc = ep3_laamp_decision_event.1043.c.thievery_success.desc + send_interface_toast = { + title = ep3_laamp_decision_event.1043.c.thievery_success.t + left_icon = root + add_gold = scope:1043_collect_gold_value + } + hidden_effect = { + #... fool me twice; shame on you. + if = { + limit = { has_variable = 1043_heightened_security } + random_list = { + 50 = { + #Nothing + } + 50 = { + #Save old value as temp + set_variable = { + name = 1043_heightened_security_temp + value = var:1043_heightened_security + } + #Remove the variable we'll refresh + remove_variable ?= 1043_heightened_security + #Set the new proper variable and add the old value as well + set_variable = { + name = 1043_heightened_security + value = { + value = var:1043_heightened_security_temp + add = 1 + } + years = visit_settlement_medium_cooldown_year + } + #Then remove the temp + remove_variable ?= 1043_heightened_security_temp + } + } + } + #Fool me once, shame on me... + else = { + set_variable = { + name = 1043_heightened_security + value = 0 + years = visit_settlement_medium_cooldown_year + } + } + } + } + #Failure: Banished! + 50 = { + modifier = { + scope:visiting_partner ?= { has_court_position = master_thief_camp_officer } + factor = 0.5 + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1043.c.thievery_failure.desc + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1043.c.thievery_failure.t + desc = ep3_laamp_decision_event.1043.c.thievery_failure.desc + left_icon = root + custom_tooltip = ep3_laamp_decision_event.1041.return.tt + #Shame on you + add_piety = medium_piety_loss + #Shame shame + if = { + limit = { + NOT = { has_trait = gallowsbait } + } + add_trait = gallowsbait + } + else_if = { + limit = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = thief + value < 100 + } + } + add_trait_xp = { + trait = gallowsbait + track = thief + value = small_lifestyle_random_xp_low + } + } + } + #You will not be going back to the church any time soon + set_variable = { + name = 1040_caught_stealing + days = visit_settlement_small_cooldown_days + } + } + #Critical Failure: The local guards are summoned + 10 = { + trigger = { + trigger_if = { + limit = { exists = scope:visiting_partner } + NOT = { + scope:visiting_partner = { has_court_position = master_thief_camp_officer } + } + } + trigger_else = { always = yes } + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + min = 5 + desc = ep3_laamp_decision_event.1043.c.thievery_critical_failure.desc + send_interface_toast = { + title = ep3_laamp_decision_event.1043.c.thievery_critical_failure.t + left_icon = root + #Quite the tussle + increase_wounds_effect = { REASON = fight } + #Shame on you + add_piety = medium_piety_loss + #Violent shame, even + if = { + limit = { + NOT = { has_trait = gallowsbait } + } + add_trait = gallowsbait + } + else_if = { + limit = { + has_trait = gallowsbait + has_trait_xp = { + trait = gallowsbait + track = bandit + value < 100 + } + } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = small_lifestyle_random_xp_mid + } + } + } + #You will not be going back to the church any time soon + set_variable = { + name = 1040_caught_stealing + days = visit_settlement_small_cooldown_days + } + } + } + #Super-stressful for honest characters and zealous characters, IF you share faith + if = { + limit = { scope:visiting_location.county.faith = root.faith } + stress_impact = { + honest = major_stress_impact_gain + zealous = major_stress_impact_gain + deceitful = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + } + else = { + stress_impact = { + honest = major_stress_impact_gain + deceitful = minor_stress_impact_loss + } + } + #Set the variables and redirect us back to the Church Grounds + 1043_churched_effect = yes + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1043.d + #Sets variables and returns us to church grounds screen + 1031_been_to_effect = { GUILD = church } + ai_chance = { base = 200 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:church } + } +} + +#Post-Donation +ep3_laamp_decision_event.1044 = { + type = character_event + title = ep3_laamp_decision_event.1043.t + window = visit_settlement_window + desc = { + first_valid = { + #Strange person thinks you're a reincarnation or something? Why not. + triggered_desc = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + desc = ep3_laamp_decision_event.1044.desc_epiphany + } + desc = ep3_laamp_decision_event.1044.desc + } + } + theme = faith + override_sound = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + reference = "event:/DLC/FP4/MUSIC/Stingers/mx_stinger_legends_lvl_03" + } + override_sound = { reference = "event:/MUSIC/Cues/Events/Low Key Positive/mx_cue_low_key_postive" } + override_background = { reference = temple } + override_effect_2d = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + reference = legend_glow #Too much? + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + animation = disbelief + } + triggered_animation = { + trigger = { 1043_is_unzealous_trigger = yes } + animation = shock + } + animation = admiration + } + right_portrait = { + character = scope:laamp_clergy_character + triggered_animation = { + trigger = { has_variable = 1043_is_epiphanous } + animation = shock + } + animation = happiness + } + #Do we have someone to display? + lower_left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + hidden_effect = { + scope:laamp_clergy_character = { + if = { + limit = { has_variable = 1043_is_epiphanous } + add_trait = loyal + add_trait = holy_warrior + } + } + } + } + #Ask for blessing + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + desc = ep3_laamp_decision_event.1044.a_epiphany + } + desc = ep3_laamp_decision_event.1044.a + } + } + } + trigger = { + NOR = { + has_character_modifier = laamp_decision_church_blessing_stress_loss_modifier + has_character_modifier = laamp_decision_church_blessing_stress_gain_modifier + piety_level < low_piety_level + } + } + show_as_unavailable = { always = yes } + reason = piety + #Or Pokémon red? + add_character_modifier = { + modifier = laamp_decision_church_blessing_stress_gain_modifier + years = 5 + } + ai_chance = { + base = 100 + modifier = { + piety_level > medium_piety_level + add = 300 + } + } + } + #Triggered Option: Clergy Person wants to join your camp + option = { + name = ep3_laamp_decision_event.1044.b + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + add_courtier = scope:laamp_clergy_character + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 0 + } + } + } + #Nah + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:laamp_clergy_character = { has_variable = 1043_is_epiphanous } + } + desc = ep3_laamp_decision_event.1044.c_epiphany + } + desc = ep3_laamp_decision_event.1044.c + } + } + } + #Tooltip so we know where we're going + custom_tooltip = ep3_laamp_decision_event.1041.return.tt + ai_chance = { + base = 100 + } + } + after = { + #Set the variables and redirect us back to the Church Grounds + 1043_churched_effect = yes + } +} + + +#Set the correct variable to block off the Garden option and remove the desc flavor variable +scripted_effect 1045_gardened_effect = { + save_scope_as = laamp_decision_has_gardened + #Go back to church grounds + hidden_effect = { 1041_return_to_church_grounds_effect = yes } +} + +#Right? +scripted_trigger 1045_probably_knows_gardening_trigger = { + OR = { + has_trait = lifestyle_gardener + has_trait = lifestyle_herbalist + learning > high_skill_rating + } +} + +#Used in enough places to warrant a trigger +scripted_trigger 1045_could_harvest_garden_trigger = { + OR = { + trigger_if = { + limit = { exists = scope:visiting_partner } + scope:visiting_partner = { 1045_probably_knows_gardening_trigger = yes } + } + 1045_probably_knows_gardening_trigger = yes + } +} + +#Ditto +scripted_trigger 1045_could_unwind_in_garden_trigger = { + scope:visiting_partner ?= { + OR = { + AND = { + has_relation_potential_lover = root + root = { might_cheat_on_every_partner_trigger = yes } + } + has_relation_lover = root + } + } +} + + +#Visit Garden +ep3_laamp_decision_event.1045 = { + type = character_event + title = ep3_laamp_decision_event.1045.t + window = visit_settlement_window + desc = { + #What's going down in the garden + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_garden + scope:garden_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1045.desc_returned_01 + } + triggered_desc = { + trigger = { scope:garden_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1045.desc_returned_02 + } + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_garden } + } + desc = ep3_laamp_decision_event.1045.desc + } + } + #Hey look, some plants + first_valid = { + #RETURN: Still partner plants + triggered_desc = { + trigger = { + scope:visiting_partner ?= { 1045_probably_knows_gardening_trigger = yes } + exists = scope:been_to_garden + } + desc = ep3_laamp_decision_event.1045.desc_outro_return_partner + } + #RETURN: Still plants + triggered_desc = { + trigger = { + 1045_probably_knows_gardening_trigger = yes + exists = scope:been_to_garden + } + desc = ep3_laamp_decision_event.1045.desc_outro_return_gardener + } + #FIRST TIME: Partner PLAAANTSSS + triggered_desc = { + trigger = { + scope:visiting_partner ?= { 1045_probably_knows_gardening_trigger = yes } + NOT = { exists = scope:been_to_garden } + } + desc = ep3_laamp_decision_event.1045.desc_outro_partner + } + #FIRST TIME: PLAAANTSSS + triggered_desc = { + trigger = { + 1045_probably_knows_gardening_trigger = yes + NOT = { exists = scope:been_to_garden } + } + desc = ep3_laamp_decision_event.1045.desc_outro_gardener + } + } + } + theme = faith + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_health_good" } + override_background = { reference = garden } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + triggered_animation = { + trigger = { + NOT = { has_variable = 1045_has_harvested_recently } + 1045_probably_knows_gardening_trigger = yes + } + animation = survey + } + animation = happiness + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + NOT = { has_variable = 1045_has_harvested_recently } + scope:visiting_partner ?= { 1045_probably_knows_gardening_trigger = yes } + } + animation = interested + } + triggered_animation = { + trigger = { 1045_probably_knows_gardening_trigger = yes } + animation = survey + } + triggered_animation = { + trigger = { faith != scope:visiting_location.faith } + animation = stress + } + animation = thinking + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #For the background + scope:visiting_location.county.holder = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = garden } + } + #Convert / contemplate faith + option = { + name = { + text = { + first_valid = { + #Convert to faith + triggered_desc = { + trigger = { + faith != scope:visiting_location.faith + } + desc = ep3_laamp_decision_event.1045.a_convert + } + #Contemplate faith + desc = ep3_laamp_decision_event.1045.a + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1045.a.cooldown.tt + NOT = { has_variable = 1045_contemplated_garden_recently } + } + } + show_as_unavailable = { always = yes } + #Convert + if = { + limit = { + faith != scope:visiting_location.faith + } + set_character_faith = scope:visiting_location.faith + if = { + limit = { + scope:visiting_location.faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + stress_impact = { + base = minor_stress_impact_loss + zealous = major_stress_impact_gain + } + } + #Contemplate faith + else = { + stress_impact = { + base = medium_stress_impact_loss + content = minor_stress_impact_loss + zealous = medium_stress_impact_loss + } + } + #Cooldown for the action + set_variable = { + name = 1045_contemplated_garden_recently + days = visit_settlement_minimum_cooldown_days + } + #Set the variables and redirect us back to the Church Grounds + 1045_gardened_effect = yes + ai_chance = { + base = 100 + modifier = { + faith != scope:visiting_location.faith + has_trait = zealous + factor = 0 + } + modifier = { + faith != scope:visiting_location.faith + any_secret ?= { secret_type = secret_non_believer } + add = 300 + } + } + } + #Triggered Option: Those plants look edible + option = { + name = { + text = { + first_valid = { + #Gardener friend + triggered_desc = { + trigger = { + scope:visiting_partner ?= { 1045_probably_knows_gardening_trigger = yes } + } + desc = ep3_laamp_decision_event.1045.b_partner + } + #Gardener self + desc = ep3_laamp_decision_event.1045.b + } + } + } + trigger = { + trigger_if = { + limit = { has_variable = 1045_has_harvested_recently } + custom_tooltip = { + text = ep3_laamp_decision_event.1045.b.cooldown.tt + always = no + } + } + trigger_else = { 1045_could_harvest_garden_trigger = yes } + } + show_as_unavailable = { + #Only show it if you could've actually done it + trigger_if = { + limit = { 1045_could_harvest_garden_trigger = yes } + always = yes + } + trigger_else = { always = no } + } + #Get some provisions + if = { + limit = { + domicile ?= { provisions < max_provisions } + } + domicile ?= { + change_provisions = { + value = { + value = root.minor_gold_laamps_value + multiply = { + value = max_provisions + divide = 250 + round = yes + min = 1 + } + } + } + } + } + #... or sell the morsels, if capped + else = { add_gold = minor_gold_laamps_value } + #Probably holy somewhere + if = { + limit = { + faith = { + OR = { + has_doctrine = tenet_sanctity_of_nature + trait_is_virtue = lifestyle_gardener + trait_is_virtue = lifestyle_herbalist + } + } + } + add_piety = medium_piety_gain + } + #Cooldown for the action + set_variable = { + name = 1045_has_harvested_recently + days = visit_settlement_minimum_cooldown_days + } + #Set the variables and redirect us back to the Church Grounds + 1045_gardened_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #Triggered Option: Stress relief? Stress relief. + option = { + name = ep3_laamp_decision_event.1045.c + trigger = { + trigger_if = { + limit = { has_variable = 1045_garden_unwinded_recently } + custom_tooltip = { + text = ep3_laamp_decision_event.1045.c.cooldown.tt + always = no + } + } + trigger_else = { 1045_could_unwind_in_garden_trigger = yes } + } + show_as_unavailable = { + #Only show it if you could've actually done it + trigger_if = { + limit = { 1045_could_unwind_in_garden_trigger = yes } + always = yes + } + trigger_else = { always = no } + } + #Stress relief + had_sex_with_effect = { CHARACTER = scope:visiting_partner PREGNANCY_CHANCE = pregnancy_chance } + progress_towards_lover_effect = { + CHARACTER = scope:visiting_partner + REASON = lover_contemplative_sex + OPINION = default_lover_opinion + } + #Probably holy to some? + if = { + limit = { + faith = { has_doctrine = tenet_carnal_exaltation } + } + add_piety = medium_piety_gain + } + #Or not + else_if = { + limit = { + faith = { + OR = { + trait_is_sin = lustful + trait_is_sin = rakish + trait_is_sin = seducer + } + } + } + add_piety = minor_piety_loss + } + #Cooldown for the action + set_variable = { + name = 1045_garden_unwinded_recently + days = visit_settlement_minimum_cooldown_days + } + #Stress loss with some factors + stress_impact = { + base = medium_stress_impact_loss + rakish = medium_stress_impact_loss + seducer = minor_stress_impact_loss + lustful = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + chaste = minor_stress_impact_gain + } + #Set the variables and redirect us back to the Church Grounds + 1045_gardened_effect = yes + ai_chance = { + base = 100 + modifier = { + has_trait = lustful + add = 500 + } + modifier = { + has_trait = rakish + add = 500 + } + modifier = { + has_trait = chaste + factor = 0 + } + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1045.d + #Everything is on cooldown, I guess + if = { + limit = { + has_variable = 1045_contemplated_garden_recently + trigger_if = { + limit = { 1045_could_harvest_garden_trigger = yes } + has_variable = 1045_has_harvested_recently + } + trigger_if = { + limit = { 1045_could_unwind_in_garden_trigger = yes } + has_variable = 1045_garden_unwinded_recently + } + } + 1045_gardened_effect = yes + } + else = { + #Sets variables and returns us to church grounds screen + 1031_been_to_effect = { GUILD = garden } + } + ai_chance = { base = 100 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:garden } + } +} + + +#Hire the Physician, show/set the effects and variables +scripted_effect 1047_hire_physician_effect = { + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_physician_recruit + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_physician_recruit + #The actual effect happens in after + show_as_tooltip = { + court_position_grant_effect = { + EMPLOYER = root + POS = court_physician + CANDIDATE = scope:laamp_physician_recruit + } + } + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_physician + value = flag:yes + } + #Go back to church grounds + hidden_effect = { 1041_return_to_church_grounds_effect = yes } +} + + +#Visit Physician +ep3_laamp_decision_event.1047 = { + type = character_event + title = ep3_laamp_decision_event.1047.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_physician + scope:physician_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1047.desc_returned_01 + } + triggered_desc = { + trigger = { scope:physician_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1047.desc_returned_02 + } + triggered_desc = { + trigger = { scope:physician_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1047.desc_returned_03 + } + } + #FIRST TIME: We've seen this physician before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_physician + NOT = { exists = scope:been_to_physician } + } + desc = ep3_laamp_decision_event.1047.desc_reused_physician + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_physician } + } + desc = ep3_laamp_decision_event.1047.desc + } + } + } + theme = learning + override_sound = { reference = "event:/MUSIC/Cues/Events/Positive/mx_cue_postive_effect" } + override_background = { reference = location_study } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + triggered_animation = { + trigger = { 1041_physician_partner_trigger = yes } + animation = interested + } + animation = personality_compassionate + } + center_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:laamp_physician_recruit + camera = camera_event_scheme_far_right + animation = reading + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Run this once: Re-save the portrait so the Physician is not the 1040_third_character (since they narratively moved to their study) + if = { + limit = { scope:1040_third_character = scope:laamp_physician_recruit } + #Overwrite with ROOT to block off the portrait + save_scope_as = 1040_third_character + #Remember the bodyguard + 1010_remember_vendor_character_effect = { GUILD = physician CHARACTER = scope:laamp_physician_recruit } + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = physician } + } + #Pay gold + option = { + name = ep3_laamp_decision_event.1047.a + pay_short_term_gold = { + target = scope:laamp_physician_recruit + gold = minor_gold_value + } + #Wrap effect to hire 'em, set scope & return to church + 1047_hire_physician_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Have x piety + option = { + name = ep3_laamp_decision_event.1047.b + trigger = { piety >= 1000 } + show_as_unavailable = { always = yes } + reason = piety + #Wrap effect to hire 'em, set scope & return to church + 1047_hire_physician_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #Learning duel + option = { + name = ep3_laamp_decision_event.1047.c + duel = { + skill = learning + value = average_skill_rating + #Success: Hire 'em up + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + OR = { + has_trait = scholar + has_trait = whole_of_body + has_trait = crusader_king + } + factor = 2 + } + desc = ep3_laamp_decision_event.1047.c.success + send_interface_toast = { + title = ep3_laamp_decision_event.1047.c.success + left_icon = root + right_icon = scope:laamp_physician_recruit + #Yippee! + 1047_hire_physician_effect = yes + } + } + #Failure: Bye, now + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + modifier = { + has_trait = zealous + factor = 0.5 + } + desc = ep3_laamp_decision_event.1047.c.failure + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1047.c.failure + desc = ep3_laamp_decision_event.1047.c.failure.tt + left_icon = root + right_icon = scope:laamp_physician_recruit + #Oh well + custom_tooltip = ep3_laamp_decision_event.1047.c.failure.tt + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_physician + value = flag:no + } + 1041_return_to_church_grounds_effect = yes + } + } + } + ai_chance = { + base = 100 + modifier = { + piety >= 1000 + factor = 0 + } + } + } + #I want to go back + option = { + name = ep3_laamp_decision_event.1047.d + #Sets variables and returns us to church grounds screen + 1031_been_to_effect = { GUILD = physician } + ai_chance = { + base = 100 + modifier = { + employs_court_position = court_physician_court_position + factor = 2 + } + } + } + after = { + if = { + limit = { scope:laamp_decision_recruited_physician ?= flag:yes } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_physician_recruit + COURT_POS = court_physician_court_position + } + } + court_position_grant_effect = { + EMPLOYER = root + POS = court_physician + CANDIDATE = scope:laamp_physician_recruit + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:physician } + } +} + + + +###################################################################### +# CASTLE GROUNDS +# ep3_laamp_decision_event.1050 +###################################################################### + +#Set the correct variable to block off the Castle option and remove the desc flavor variable +scripted_effect 1050_finished_castle_effect = { + remove_list_variable = { + name = list_of_options + target = flag:has_castle_option + } + save_scope_as = laamp_decision_finished_castle_option +} + +#Can reinforce MaA +scripted_trigger 1050_has_maa_to_reinforce_trigger = { + any_maa_regiment ?= { maa_current_troops_count < maa_max_troops_count } +} + +#Nothing left for us to do +scripted_trigger 1050_done_with_castle_trigger = { + exists = scope:laamp_decision_has_trained + exists = scope:laamp_decision_has_garrisoned + trigger_if = { + limit = { 1050_has_maa_to_reinforce_trigger = yes } + exists = scope:laamp_decision_has_reinforced + } + trigger_if = { + limit = { exists = scope:laamp_bodyguard_recruit } + exists = scope:laamp_decision_recruited_bodyguard + } +} + + +#Castle Holding: Visit the local castle grounds +ep3_laamp_decision_event.1050 = { + type = character_event + title = ep3_laamp_decision_event.1050.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #We've returned to this scene, now what + #RETURN: We've returned from Main Square + random_valid = { + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + exists = scope:been_to_castle_grounds + OR = { + scope:castle_loc_tracker ?= 0 + scope:castle_loc_tracker ?= 2 + } + } + desc = ep3_laamp_decision_event.1050.desc_returned_01 + } + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + scope:castle_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1050.desc_returned_02 + } + } + #RETURN: We've returned from the Training ground + triggered_desc = { + trigger = { var:return_from_location ?= flag:training } + desc = ep3_laamp_decision_event.1050.desc_returned_from_training + } + #RETURN: We've returned from the Garrison + triggered_desc = { + trigger = { var:return_from_location ?= flag:garrison } + desc = ep3_laamp_decision_event.1050.desc_returned_from_garrison + } + #RETURN: We've returned from the Reinforcers + triggered_desc = { + trigger = { var:return_from_location ?= flag:reinforcers } + desc = ep3_laamp_decision_event.1050.desc_returned_from_reinforcers + } + #RETURN: We've returned from the Bodyguard + triggered_desc = { + trigger = { var:return_from_location ?= flag:bodyguard } + desc = ep3_laamp_decision_event.1050.desc_returned_from_bodyguard + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.desc + } + } + #Mid - MaA option or not? + first_valid = { + #FIRST TIME: Yup, we can reinforce MaA + triggered_desc = { + trigger = { + 1050_has_maa_to_reinforce_trigger = yes + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.mid_maa + } + #FIRST TIME: Nope, no MaA to reinforce + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.mid_no_maa + } + } + #Outro + first_valid = { + #FIRST TIME: First time here, look at the bodyguard + triggered_desc = { + trigger = { + exists = scope:laamp_bodyguard_recruit + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.desc_outro_bodyguard + } + #FIRST TIME: First time here, curious partner + triggered_desc = { + trigger = { + exists = scope:visiting_partner + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.desc_outro_partner + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_castle_grounds } + } + desc = ep3_laamp_decision_event.1050.desc_outro + } + #RETURN: Partner - there is nothing left for us here + triggered_desc = { + trigger = { + exists = scope:visiting_partner + 1050_done_with_castle_trigger = yes + } + desc = ep3_laamp_decision_event.1050.desc_outro_return_partner_finished + } + #RETURN: There is nothing left for us here + triggered_desc = { + trigger = { 1050_done_with_castle_trigger = yes } + desc = ep3_laamp_decision_event.1050.desc_outro_return_finished + } + #RETURN: Bodyguard did not deviate, yet + triggered_desc = { + trigger = { + exists = scope:laamp_bodyguard_recruit + NOR = { + exists = scope:been_to_bodyguard + exists = scope:laamp_decision_recruited_bodyguard + } + } + desc = ep3_laamp_decision_event.1050.desc_outro_bodyguard_return + } + #RETURN: We've been here before + random_valid = { + #RETURN: Partner flavor + triggered_desc = { + trigger = { + exists = scope:visiting_partner + exists = scope:been_to_castle_grounds + scope:castle_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1050.desc_outro_return_partner_01 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:castle_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1050.desc_outro_return_partner_02 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:castle_loc_tracker ?= 2 + } + desc = ep3_laamp_decision_event.1050.desc_outro_return_partner_03 + } + #RETURN: Generics + triggered_desc = { + trigger = { + exists = scope:been_to_castle_grounds + scope:castle_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1050.desc_outro_return_01 + } + triggered_desc = { + trigger = { scope:castle_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1050.desc_outro_return_02 + } + triggered_desc = { + trigger = { scope:castle_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1050.desc_outro_return_03 + } + } + } + } + theme = martial + #Get outta here already + override_effect_2d = { + trigger = { + 1050_done_with_castle_trigger = yes + scope:visiting_location = { is_drylands_or_desert_trigger = no } + } + reference = rain + } + override_background = { + trigger = { + scope:visiting_location = { + geographical_region = world_europe + NOT = { geographical_region = world_europe_west_iberia } + } + } + reference = gallows + } + override_background = { reference = ep3_city_gate } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #If it's our (tired) visiting partner + triggered_animation = { + trigger = { 1050_done_with_castle_trigger = yes } + animation = boredom + } + animation = survey + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:laamp_bodyguard_recruit + NOR = { + exists = scope:been_to_bodyguard + exists = scope:laamp_decision_recruited_bodyguard + } + } + animation = interested + } + triggered_animation = { + trigger = { prowess < average_skill_rating } + animation = personality_coward + } + animation = personality_bold + } + #Do we have someone to display? + right_portrait = { + trigger = { + exists = scope:1050_third_character + #If this is root, then that means we have talked to the Bodyguard, so let's disappear the portrait + scope:1050_third_character != root + } + character = scope:1050_third_character + camera = camera_event_scheme_vs_extra_right_look_right + #We've returned here and it's still the bodyguard + triggered_animation = { + trigger = { exists = scope:been_to_castle_grounds } + animation = disapproval + } + #Otherwise some seething to go + animation = rage + } + lower_left_portrait = { + trigger = { + exists = scope:1050_fourth_character + scope:1050_fourth_character != root + } + character = scope:1050_fourth_character + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Set up the ancillary portraits to remind the player of the characters + if = { + #Bodyguard exists + limit = { + #We've been to them at least once + exists = scope:been_to_bodyguard + #We're not done with them yet + AND = { + exists = scope:laamp_bodyguard_recruit + NOT = { exists = scope:laamp_decision_recruited_bodyguard } + } + #This isn't already the state + NAND = { + exists = scope:1050_fourth_character + scope:1050_fourth_character ?= scope:laamp_bodyguard_recruit + } + } + scope:laamp_bodyguard_recruit = { save_scope_as = 1050_fourth_character } + } + #Clear out the ancillary portrait(s) + if = { + limit = { + exists = scope:1050_fourth_character + scope:laamp_bodyguard_recruit ?= scope:1050_fourth_character + exists = scope:laamp_decision_recruited_bodyguard + } + #Overwrite with ROOT to hide that portrait + save_scope_as = 1050_fourth_character + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = castle } + #Rare: Spawn a spectacular Bodyguard + if = { + limit = { + NOT = { has_variable = laamp_decision_1000_checked_for_bodyguard } + } + random_list = { + 80 = { + #No Bodyguard + } + 20 = { + #Has this person been our bodyguard in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_bodyguard_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:saved_character_check } + } + save_scope_as = laamp_bodyguard_recruit + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_bodyguard + } + #Otherwise find a bodyguard in the pool + if = { + limit = { + NOT = { exists = scope:laamp_bodyguard_recruit } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + is_available_healthy_adult = yes + prowess > 15 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = this } + } + save_scope_as = laamp_bodyguard_recruit + } + } + #Otherwise create a bodyguard + if = { + limit = { + NOT = { exists = scope:laamp_bodyguard_recruit } + } + #Create bodyguard to stuff in pool + create_character = { + template = bp1_yearly_2021_martial_person_template + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + prowess = { decent_skill_rating high_skill_rating } + save_scope_as = laamp_bodyguard_recruit + } + scope:laamp_bodyguard_recruit ?= { + #Chance to add a malus trait to this spectatular being + if = { + limit = { + NOR = { + has_trait = possessed_1 + has_trait = lunatic_1 + has_trait = depressed_1 + has_trait = drunkard + has_trait = hashishiyah + has_trait = irritable + } + } + hidden_effect = { + random = { + chance = 20 + random_list = { + 10 = { add_trait = possessed_1 } + 10 = { add_trait = lunatic_1 } + 10 = { add_trait = depressed_1 } + 10 = { add_trait = drunkard } + 10 = { add_trait = hashishiyah } + 10 = { add_trait = irritable } + } + } + } + } + } + } + scope:laamp_bodyguard_recruit = { save_scope_as = 1050_third_character } + } + } + #No decision-scumming + set_variable = { + name = laamp_decision_1000_checked_for_bodyguard + days = visit_settlement_cooldown_days + } + } + } + #Train prowess + option = { + name = { + text = { + first_valid = { + #Return to the training grounds + triggered_desc = { + trigger = { exists = scope:been_to_training } + desc = ep3_laamp_decision_event.1050.a_second + } + #First time at the training grounds + desc = ep3_laamp_decision_event.1050.a + } + } + } + trigger = { + #Recruited the Master of Arms + trigger_if = { + limit = { + exists = scope:laamp_disgruntled_moa + scope:laamp_decision_has_trained ?= flag:no + } + custom_tooltip = { + text = recruited_maa.tt + always = no + } + } + #Been there, done that + trigger_else_if = { + limit = { scope:laamp_decision_has_trained ?= flag:yes } + custom_tooltip = { + text = ep3_laamp_decision_event.1050.a.cooldown.tt + always = no + } + } + trigger_else = { always = yes } + } + show_as_unavailable = { always = yes } + reason = visit_training_grounds + custom_tooltip = ep3_laamp_decision_event.1050.a.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = castle_grounds } + #Go to the training grounds + trigger_event = ep3_laamp_decision_event.1051 + ai_chance = { base = 100 } + } + #Scout knights at the garrison + option = { + name = { + text = { + first_valid = { + #Return to the garrison + triggered_desc = { + trigger = { exists = scope:been_to_garrison } + desc = ep3_laamp_decision_event.1050.b_second + } + #First time at the garrison + desc = ep3_laamp_decision_event.1050.b + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1050.b.cooldown.tt + NOT = { exists = scope:laamp_decision_has_garrisoned } + } + } + show_as_unavailable = { always = yes } + reason = visit_garrison + custom_tooltip = ep3_laamp_decision_event.1050.b.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = castle_grounds } + #Go to the garrison screen + trigger_event = ep3_laamp_decision_event.1053 + ai_chance = { base = 100 } + } + #Check out the demoralized soldiers + option = { + name = { + text = { + first_valid = { + #Already scoped out contract + triggered_desc = { + trigger = { exists = scope:been_to_reinforcers } + desc = ep3_laamp_decision_event.1050.c_second + } + #First time reading contract + desc = ep3_laamp_decision_event.1050.c + } + } + } + trigger = { + trigger_if = { + limit = { exists = scope:laamp_decision_has_reinforced } + custom_tooltip = { + text = ep3_laamp_decision_event.1050.c.cooldown.tt + NOT = { exists = scope:laamp_decision_has_reinforced } + } + } + trigger_else_if = { + limit = { + any_in_list = { + variable = 1055_reinforced_recently + this = scope:visiting_location + } + } + custom_tooltip = { + text = ep3_laamp_decision_event.1050.c.cooldown_province.tt + NOT = { + any_in_list = { + variable = 1055_reinforced_recently + this = scope:visiting_location + } + } + } + } + trigger_else = { 1050_has_maa_to_reinforce_trigger = yes } + } + show_as_unavailable = { + OR = { + 1050_has_maa_to_reinforce_trigger = yes + exists = scope:laamp_decision_has_reinforced + } + } + reason = reinforce_maa + custom_tooltip = ep3_laamp_decision_event.1050.c.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = castle_grounds } + #Go to the Town Crier + trigger_event = ep3_laamp_decision_event.1055 + ai_chance = { base = 100 } + } + #Rare Option: Hire cheaper, skilled, Bodyguard + option = { + name = { + text = { + first_valid = { + #Return to the Bodyguard + triggered_desc = { + trigger = { exists = scope:been_to_bodyguard } + desc = ep3_laamp_decision_event.1050.d_second + } + #First time at the Bodyguard + desc = ep3_laamp_decision_event.1050.d + } + } + } + trigger = { + exists = scope:laamp_bodyguard_recruit + NOT = { exists = scope:laamp_decision_recruited_bodyguard } + } + reason = recruit_bodyguard + #Been there once already + if = { + limit = { exists = scope:been_to_bodyguard } + custom_tooltip = ep3_laamp_decision_event.1050.d.tt_second + } + else = { + custom_tooltip = ep3_laamp_decision_event.1050.d.tt + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = castle_grounds } + #Go to the bodyguard screen + trigger_event = ep3_laamp_decision_event.1057 + ai_chance = { + base = 500 + } + } + #I want to do something else + option = { + name = { + text = { + first_valid = { + #Nothing left to do + triggered_desc = { + trigger = { 1050_done_with_castle_trigger = yes } + desc = ep3_laamp_decision_event.1050.e_second + } + #Back to main square + desc = ep3_laamp_decision_event.1050.e + } + } + } + #Have we done everything? Are we closing off the option? + if = { + limit = { 1050_done_with_castle_trigger = yes } + #Clean up unnecessary variables and close off the option + 1050_finished_castle_effect = yes + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = castle_grounds } + #Go back to the main event + 1000_return_to_main_effect = yes + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = greedy + has_trait = paranoid + } + add = 300 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:castle_grounds } + } +} + + +#We return to the castle event to peruse other options +scripted_effect 1051_return_to_castle_effect = { + custom_tooltip = ep3_laamp_decision_event.1051.return.tt + trigger_event = ep3_laamp_decision_event.1050 +} + +#One, two, one, two, hepp-hepp-hepp +scripted_effect 1051_actual_training_effect = { + #Pay for training if it ain't scope:visiting_partner + if = { + limit = { $TRAINER$ = scope:laamp_disgruntled_moa } + pay_short_term_gold = { + target = scope:laamp_disgruntled_moa + gold = visit_settlement_paid_training_value + } + } + #Add the prowess + random_list = { + #Athletisism! + 10 = { + trigger = { + has_trait = athletic + 1051_skill_cap_trigger = no + } + desc = ep3_laamp_decision_event.1051.a_athletic.desc + send_interface_toast = { + type = event_toast_effect_good + title = travel_events.2007.a_success_tt + desc = ep3_laamp_decision_event.1051.a_athletic.desc + left_icon = root + #Increase skill + add_prowess_skill = 2 + } + hidden_effect = { 1051_increment_skill_gain_effect = yes } + } + #Regular prowess + 25 = { + trigger = { 1051_skill_cap_trigger = no } + desc = ep3_laamp_decision_event.1051.a.desc + send_interface_toast = { + type = event_toast_effect_good + title = travel_events.2032.a_learning.tt + desc = ep3_laamp_decision_event.1051.a.desc + left_icon = root + #Increase skill + add_prowess_skill = 1 + } + hidden_effect = { 1051_increment_skill_gain_effect = yes } + } + #Blademaster + 25 = { + trigger = { + 1051_skill_cap_trigger = yes + 1051_maxed_blademaster_trigger = no + } + desc = ep3_laamp_decision_event.1051.a.desc + send_interface_toast = { + type = event_toast_effect_good + title = travel_events.2007.a_soft_success_tt + desc = ep3_laamp_decision_event.1051.a.desc + left_icon = root + #Gain trait + if = { + limit = { + NOT = { has_trait = lifestyle_blademaster } + } + add_trait = lifestyle_blademaster + add_trait_xp = { + trait = lifestyle_blademaster + value = scope:blademaster_xp + } + } + #Or be educated + else = { + add_trait_xp = { + trait = lifestyle_blademaster + value = scope:blademaster_xp + } + } + } + } + #... fallback. + 25 = { + trigger = { + 1051_skill_cap_trigger = yes + 1051_maxed_blademaster_trigger = yes + } + desc = ep3_laamp_decision_event.1051.a.desc + send_interface_toast = { + type = event_toast_effect_good + title = travel_events.2003.b_success_tt + desc = ep3_laamp_decision_event.1051.a.desc + left_icon = root + #Gain martial lifestyle xp + add_martial_lifestyle_xp = medium_lifestyle_xp + #... and some stress relief? + stress_impact = { + base = medium_stress_impact_loss + } + } + } + #Too much joshing around + 25 = { + trigger = { scope:visiting_partner ?= $TRAINER$ } + desc = ep3_laamp_decision_event.1051.c_joshing.desc + send_interface_toast = { + type = event_toast_text_neutral + title = ep3_laamp_decision_event.1051.c_joshing.t + desc = ep3_laamp_decision_event.1051.c_joshing.desc + left_icon = root + right_icon = scope:visiting_partner + } + } + #Too much joshing around + 5 = { + trigger = { scope:visiting_partner ?= $TRAINER$ } + min = 5 + desc = ep3_laamp_decision_event.1051.c_wounded.desc + send_interface_toast = { + type = event_toast_text_neutral + title = ep3_laamp_decision_event.1051.c_wounded.t + desc = ep3_laamp_decision_event.1051.c_wounded.desc + left_icon = root + right_icon = scope:visiting_partner + scope:visiting_partner = { + increase_wounds_effect = { REASON = training_accident } + } + } + } + } + #Set the variables and redirect us back to the Castle + 1051_finished_training_effect = yes +} + +scripted_effect 1051_increment_skill_gain_effect = { + #We cap the max amount of skill points gained + if = { + limit = { + NOT = { has_variable = 1051_skill_gain_variable } + } + set_variable = { + name = 1051_skill_gain_variable + value = 1 + } + } + else_if = { + limit = { + has_variable = 1051_skill_gain_variable + var:1051_skill_gain_variable != visit_settlement_skill_gain_cap_value + } + change_variable = { + name = 1051_skill_gain_variable + add = 1 + } + } + else = { + #Nothing happens + } +} + +#Set the correct variable to block off the Training option and remove the desc flavor variable +scripted_effect 1051_finished_training_effect = { + save_scope_value_as = { + name = laamp_decision_has_trained + value = flag:yes + } + #Go back to castle grounds + hidden_effect = { 1051_return_to_castle_effect = yes } +} + +#Find someone who isn't saved, doesn't dislike you and is pretty martial +scripted_trigger 1051_random_martial_character_trigger = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:saved_character_check } + OR = { + martial >= average_skill_rating + prowess >= high_skill_rating + } +} + +scripted_trigger 1051_can_sparr_trigger = { + is_adult = yes + scope:visiting_partner ?= { + is_adult = yes + is_healthy = yes + martial >= high_skill_rating + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } +} + +scripted_trigger 1051_skill_cap_trigger = { + has_variable = 1051_skill_gain_variable + var:1051_skill_gain_variable >= visit_settlement_skill_gain_cap_value +} + +scripted_trigger 1051_maxed_blademaster_trigger = { + has_trait = lifestyle_blademaster + has_trait_xp = { + trait = lifestyle_blademaster + value = 100 #Max + } +} + +#Training Grounds +ep3_laamp_decision_event.1051 = { + type = character_event + title = ep3_laamp_decision_event.1051.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_training + scope:training_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1051.desc_returned_01 + } + triggered_desc = { + trigger = { scope:training_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1051.desc_returned_02 + } + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_training } + } + desc = ep3_laamp_decision_event.1051.desc + } + } + #Martial partner outro + first_valid = { + #RETURN: + triggered_desc = { + trigger = { + exists = scope:been_to_training + 1051_can_sparr_trigger = yes + } + desc = ep3_laamp_decision_event.1051.desc_outro_return_martial_partner + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_training } + 1051_can_sparr_trigger = yes + } + desc = ep3_laamp_decision_event.1051.desc_outro_martial_partner + } + } + } + theme = martial + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_activity" } + override_background = { reference = ep2_tournament } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + triggered_animation = { + trigger = { 1051_can_sparr_trigger = yes } + animation = marshal_shield + } + animation = thinking + } + center_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:laamp_disgruntled_moa + camera = camera_event_scheme_far_right + animation = disapproval + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = training } + #Find our potential Master of Arms (MoA) character + if = { + #Do we already have a MoA? + limit = { + NOT = { exists = scope:laamp_disgruntled_moa } + } + #Don't really care about saving this character in a list + random_pool_character = { + province = scope:visiting_location + limit = { + 1051_random_martial_character_trigger = yes + has_trait = overseer + has_trait = disloyal + } + alternative_limit = { + 1051_random_martial_character_trigger = yes + has_trait = overseer + } + alternative_limit = { + 1051_random_martial_character_trigger = yes + has_trait = disloyal + } + alternative_limit = { 1051_random_martial_character_trigger = yes } + save_scope_as = laamp_disgruntled_moa + } + #Otherwise create a suiting candidate + if = { + limit = { + NOT = { exists = scope:laamp_disgruntled_moa } + } + #Create MoA to stuff in pool + create_character = { + template = new_warrior_character + location = scope:visiting_location + dynasty = none + trait = disloyal + gender_female_chance = root_soldier_female_chance + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_disgruntled_moa + } + } + hidden_effect = { + scope:laamp_disgruntled_moa = { + if = { + limit = { + NOT = { has_trait = overseer } + } + random_list = { + 75 = { + #No trait + } + 25 = { + add_trait = overseer + } + } + } + } + } + if = { + limit = { 1051_can_sparr_trigger = yes } + scope:visiting_partner ?= { save_scope_as = fighting_child } + } + } + #Save the xp trait as a static number + if = { + limit = { + NOR = { + 1051_maxed_blademaster_trigger = yes + exists = scope:blademaster_xp + } + } + save_scope_value_as = { + name = blademaster_xp + value = { + integer_range = { + min = small_lifestyle_random_xp_low + max = small_lifestyle_random_xp_mid + } + } + } + } + } + #RAAAH TRAINING + option = { + name = ep3_laamp_decision_event.1051.a + trigger = { + gold >= visit_settlement_paid_training_value + } + show_as_unavailable = { always = yes } + #Cue training montage + 1051_actual_training_effect = { TRAINER = scope:laamp_disgruntled_moa } + ai_chance = { + base = 100 + modifier = { + prowess < low_skill_rating + short_term_gold < tiny_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + prowess < mediocre_skill_rating + short_term_gold < minor_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + prowess < decent_skill_rating + short_term_gold < medium_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + prowess < high_skill_rating + short_term_gold < major_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + prowess < extremely_high_skill_rating + short_term_gold < massive_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Hire the guy as Master of Arms? + option = { + name = ep3_laamp_decision_event.1051.b + trigger = { + custom_description = { + text = not_have_master_of_arms_building + OR = { + can_employ_court_position_type = master_of_arms_camp_officer + employs_court_position = master_of_arms_camp_officer + } + } + } + reason = unlocked_master_of_arms + show_as_unavailable = { always = yes } + #Pay up + pay_short_term_gold = { + target = scope:laamp_disgruntled_moa + gold = medium_gold_laamps_value + } + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_disgruntled_moa + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_disgruntled_moa + #The actual effect happens in after + show_as_tooltip = { + camp_officer_grant_effect = { + EMPLOYER = root + POS = master_of_arms + CANDIDATE = scope:laamp_disgruntled_moa + } + } + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_has_trained + value = flag:no + } + #Go back to castle grounds + hidden_effect = { 1051_return_to_castle_effect = yes } + ai_chance = { + base = 100 + modifier = { + short_term_gold < medium_gold_laamps_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + employs_court_position = master_of_arms_camp_officer + factor = 0 + } + } + } + #Triggered Option: Sparr with your martial partner + option = { + name = ep3_laamp_decision_event.1051.c + trigger = { 1051_can_sparr_trigger = yes } + #This erroneously claims that the option is available because of ROOT's martial + show_unlock_reason = no + #Training? Hopefully. + 1051_actual_training_effect = { TRAINER = scope:visiting_partner } + #Do some bonding + progress_towards_friend_effect = { + CHARACTER = scope:visiting_partner + REASON = friend_castle_sparring + OPINION = 15 + } + ai_chance = { + base = 400 + } + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1051.d + #Sets variables and returns us to castle grounds screen + 1031_been_to_effect = { GUILD = training } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + if = { + limit = { scope:laamp_decision_has_trained ?= flag:no } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_disgruntled_moa + COURT_POS = master_of_arms_camp_officer + } + } + camp_officer_grant_effect = { + EMPLOYER = root + POS = master_of_arms + CANDIDATE = scope:laamp_disgruntled_moa + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:training } + } +} + + +#Set the correct variable to block off the Garrison option and remove the desc flavor variable +scripted_effect 1053_finished_garrison_effect = { + save_scope_as = laamp_decision_has_garrisoned + #Go back to castle grounds + hidden_effect = { 1051_return_to_castle_effect = yes } +} + +#Add the guard to your camp +scripted_effect 1053_add_guard_effect = { + hidden_effect = { + reverse_add_opinion = { + target = $GUARD$ + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = $GUARD$ + #Go back to castle grounds + 1053_finished_garrison_effect = yes +} + +#Find someone who isn't saved, doesn't dislike you and is worse martial +scripted_trigger 1053_random_martial_character_trigger = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:saved_character_check } + OR = { + martial >= average_skill_rating + prowess >= average_skill_rating + } +} + +#Find someone who isn't saved, doesn't dislike you and is less martial +scripted_trigger 1053_worse_martial_character_trigger = { + 1010_basic_merchant_checks_trigger = yes + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:saved_character_check } + 1033_has_interesting_skillset_trigger = no +} + +#Garrison +ep3_laamp_decision_event.1053 = { + type = character_event + title = ep3_laamp_decision_event.1053.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_garrison + scope:garrison_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1053.desc_returned_01 + } + triggered_desc = { + trigger = { scope:garrison_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1053.desc_returned_02 + } + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_garrison } + } + desc = ep3_laamp_decision_event.1053.desc + } + } + } + theme = landless_adventurer + override_icon = { reference = "gfx/interface/icons/event_types/type_duty.dds" } + override_background = { reference = armory } + left_portrait = { + character = scope:1053_first_character + #PARTNER: + triggered_animation = { + trigger = { scope:1053_first_character ?= scope:visiting_partner } + animation = interested + } + #ROOT: Return + triggered_animation = { + trigger = { + scope:1053_first_character = root + exists = scope:been_to_garrison + } + animation = chess_cocky + } + #ROOT + animation = admiration + } + center_portrait = { + character = scope:laamp_talented_guard + #They're counting coins + triggered_animation = { + trigger = { scope:garrison_loc_tracker ?= 1 } + animation = steward + } + #They just won a game of cards + triggered_animation = { + trigger = { + exists = scope:been_to_garrison + scope:garrison_loc_tracker ?= 0 + } + animation = personality_dishonorable + } + animation = hero_flex + } + right_portrait = { + character = scope:laamp_plain_guard + camera = camera_event_scheme_far_right + #They were just asleep + triggered_animation = { + trigger = { scope:garrison_loc_tracker ?= 1 } + animation = boredom + } + #They're tending their wounds + triggered_animation = { + trigger = { + exists = scope:been_to_garrison + scope:garrison_loc_tracker ?= 0 + } + animation = pain + } + animation = disapproval + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = garrison } + #Find our garrison guards + if = { + #Do we already have the guards? + limit = { + NOT = { exists = scope:laamp_plain_guard } + } + #Don't really care about saving this character in a list + random_pool_character = { + province = scope:visiting_location + limit = { 1053_worse_martial_character_trigger = yes } + save_scope_as = laamp_plain_guard + } + #Otherwise create a suiting plain guard + if = { + limit = { + NOT = { exists = scope:laamp_plain_guard } + } + #Create guard character to stuff in pool + create_character = { + template = bandit_character + location = scope:visiting_location + dynasty = none + gender_female_chance = root_soldier_female_chance + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_plain_guard + } + } + #Set their cost + 1033_set_cost_effect = { CHARACTER = scope:laamp_plain_guard VALUE_NAME = plain_guard_cost } + #Don't really care about saving this character in a list + random_pool_character = { + province = scope:visiting_location + limit = { 1053_random_martial_character_trigger = yes } + save_scope_as = laamp_plain_guard + } + #Otherwise create a suiting talented guard + if = { + limit = { + NOT = { exists = scope:laamp_talented_guard } + } + #Create guard character to stuff in pool + create_character = { + template = new_warrior_character + location = scope:visiting_location + dynasty = none + gender_female_chance = root_soldier_female_chance + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_talented_guard + } + } + #Set their cost + 1033_set_cost_effect = { CHARACTER = scope:laamp_talented_guard VALUE_NAME = talented_guard_cost } + } + #Set up the portrait + if = { + limit = { + NOT = { exists = scope:1053_first_character } + } + #Partner first + if = { + limit = { exists = scope:visiting_partner } + scope:visiting_partner = { save_scope_as = 1053_first_character } + } + #Otherwise ROOT + else = { save_scope_as = 1053_first_character } + } + #For the background + scope:laamp_plain_guard = { + if = { + limit = { + is_ruler = no + exists = court_owner + } + court_owner = { save_scope_as = bg_override_char } + } + else = { + save_scope_as = bg_override_char + } + } + } + #Hey, FirstPerson, want to join us? + option = { + name = ep3_laamp_decision_event.1053.a + pay_short_term_gold = { + target = scope:laamp_plain_guard + gold = scope:plain_guard_cost + } + #The actual adding of the guard and redirecting to castle grounds + 1053_add_guard_effect = { GUARD = scope:laamp_plain_guard } + ai_chance = { + base = 200 + modifier = { + short_term_gold > scope:plain_guard_cost + factor = 2 + } + } + } + #How about you, more skilled SecondPerson? + option = { + name = ep3_laamp_decision_event.1053.b + pay_short_term_gold = { + target = scope:laamp_talented_guard + gold = scope:talented_guard_cost + } + #The actual adding of the guard and redirecting to castle grounds + 1053_add_guard_effect = { GUARD = scope:laamp_talented_guard } + ai_chance = { + base = 100 + modifier = { + short_term_gold > scope:talented_guard_cost + factor = 2 + } + } + } + #I just wanna play some dice. + option = { + name = ep3_laamp_decision_event.1053.c + random_list = { + 35 = { + desc = ep3_laamp_decision_event.1053.c.plain_wins + send_interface_toast = { + title = ep3_laamp_decision_event.1053.c.plain_wins + left_icon = root + right_icon = scope:laamp_plain_guard + pay_short_term_gold = { + target = scope:laamp_plain_guard + gold = minor_gold_value + } + } + } + 35 = { + desc = ep3_laamp_decision_event.1053.c.talented_wins + send_interface_toast = { + title = ep3_laamp_decision_event.1053.c.talented_wins + left_icon = root + right_icon = scope:laamp_talented_guard + pay_short_term_gold = { + target = scope:laamp_talented_guard + gold = minor_gold_value + } + } + } + 30 = { + desc = ep3_laamp_decision_event.1053.c.you_win + send_interface_toast = { + title = ep3_laamp_decision_event.1053.c.you_win + left_icon = root + scope:laamp_plain_guard = { + pay_short_term_gold = { + target = root + gold = minor_gold_value + } + } + scope:laamp_talented_guard = { + pay_short_term_gold = { + target = root + gold = minor_gold_value + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + improvident = minor_stress_impact_loss + } + #Go back to castle grounds + 1053_finished_garrison_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1053.d + #Sets variables and returns us to castle grounds screen + 1031_been_to_effect = { GUILD = garrison } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:garrison } + } +} + + +#Set the correct scopes, and transfer us back to main +scripted_effect 1055_finished_reinforcers_effect = { + save_scope_as = laamp_decision_has_reinforced + add_to_variable_list = { + name = 1055_reinforced_recently + target = root.location + days = visit_settlement_minimum_cooldown_days + } + #Go back to castle grounds + hidden_effect = { 1051_return_to_castle_effect = yes } +} + +#Pretty self-explanatory +scripted_effect 1055_calculate_reinforcements_effect = { + if = { + limit = { $RESOURCE$_level >= max_$RESOURCE$_level } + custom_tooltip = { + text = ep3_laamp_decision_event.1055.$RESOURCE$_full.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = replenishable_troops_value + } + } + } + # 80% + else_if = { + limit = { $RESOURCE$_level >= very_high_$RESOURCE$_level } + custom_tooltip = { + text = ep3_laamp_decision_event.1055.$RESOURCE$_partial_80.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = { + value = replenishable_troops_value + multiply = 0.8 + } + } + } + } + # 60% + else_if = { + limit = { $RESOURCE$_level >= high_$RESOURCE$_level } + custom_tooltip = { + text = ep3_laamp_decision_event.1055.$RESOURCE$_partial_60.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = { + value = replenishable_troops_value + multiply = 0.6 + } + } + } + } + # 40% + else_if = { + limit = { $RESOURCE$_level >= medium_$RESOURCE$_level } + custom_tooltip = { + text = ep3_laamp_decision_event.1055.$RESOURCE$_partial_40.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = { + value = replenishable_troops_value + multiply = 0.4 + } + } + } + } + # 20% + else = { + custom_tooltip = { + text = ep3_laamp_decision_event.1055.$RESOURCE$_partial_20.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = { + value = replenishable_troops_value + multiply = 0.2 + } + } + } + } +} + +#Well, are ya, punk? +scripted_trigger 1055_is_famous_trigger = { + OR = { + AND = { + prestige_level = max_prestige_level + NOT = { has_variable = 1055_reinforced_with_prestige_recently } + } + AND = { + piety_level = max_piety_level + NOT = { has_variable = 1055_reinforced_with_piety_recently } + } + AND = { + has_trait = knight_errant + has_trait_xp = { + trait = knight_errant + value = 100 #Max XP + } + NOT = { has_variable = 1055_reinforced_with_knight_errant_recently } + } + } +} + + +#Reinforcers +ep3_laamp_decision_event.1055 = { + type = character_event + title = ep3_laamp_decision_event.1055.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #RETURN: Maxed prestige or piety + triggered_desc = { + trigger = { + exists = scope:been_to_reinforcers + 1055_is_famous_trigger = yes + } + desc = ep3_laamp_decision_event.1055.desc_maxed_out_returned + } + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_reinforcers + scope:reinforcers_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1055.desc_returned_01 + } + triggered_desc = { + trigger = { scope:reinforcers_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1055.desc_returned_02 + } + } + #FIRST TIME: Maxed prestige or piety + triggered_desc = { + trigger = { 1055_is_famous_trigger = yes } + desc = ep3_laamp_decision_event.1055.desc_maxed_out + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_reinforcers } + } + desc = ep3_laamp_decision_event.1055.desc + } + } + } + theme = landless_adventurer + override_sound = { + trigger = { 1055_is_famous_trigger = yes } + reference = "event:/DLC/FP4/MUSIC/Stingers/mx_stinger_legends_lvl_03" + } + override_icon = { reference = "gfx/interface/icons/event_types/type_martial.dds" } + override_background = { reference = ep3_camp } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + triggered_animation = { + trigger = { + root = { 1055_is_famous_trigger = yes } + } + animation = happiness + } + animation = survey + } + center_portrait = { + character = root + #Defender + triggered_animation = { + trigger = { + has_trait = knight_errant + has_trait_xp = { + trait = knight_errant + value = 100 #Max XP + } + NOT = { has_variable = 1055_reinforced_with_knight_errant_recently } + } + animation = marshal_shield + } + #Zealous + triggered_animation = { + trigger = { + piety_level = max_piety_level + NOT = { has_variable = 1055_reinforced_with_piety_recently } + } + animation = personality_zealous + } + #Prestigious + triggered_animation = { + trigger = { + prestige_level = max_prestige_level + NOT = { has_variable = 1055_reinforced_with_prestige_recently } + } + animation = hero_flex + } + triggered_animation = { + trigger = { has_trait = greedy } + animation = thinking + } + animation = betting + } + right_portrait = { + character = scope:laamp_maa_reinforcer + camera = camera_event_scheme_far_right + triggered_animation = { + trigger = { + root = { 1055_is_famous_trigger = yes } + } + animation = personality_coward + } + animation = dismissal + } + #Am I overusing this? + override_effect_2d = { + trigger = { 1055_is_famous_trigger = yes } + reference = legend_glow + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = reinforcers } + #Find a spokesperson + if = { + #Do we already have a spokesperson? + limit = { + NOT = { exists = scope:laamp_maa_reinforcer } + } + #Don't really care about saving this character in a list + random_pool_character = { + province = scope:visiting_location + limit = { 1053_random_martial_character_trigger = yes } + save_scope_as = laamp_maa_reinforcer + } + #Otherwise create a spokesperson + if = { + limit = { + NOT = { exists = scope:laamp_plain_guard } + } + #Create spokesperson to stuff in pool + create_character = { + template = bandit_character + location = scope:visiting_location + dynasty = none + gender_female_chance = root_soldier_female_chance + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_maa_reinforcer + } + } + } + scope:laamp_maa_reinforcer = { + add_character_flag = { + flag = wear_armor + weeks = 1 + } + } + #Run this once + if = { + limit = { + NOT = { exists = scope:least_damaged_maa_missing_soldiers } + } + every_maa_regiment = { + limit = { maa_current_troops_count < maa_max_troops_count } + add_to_list = damaged_maa_regiments + } + ordered_in_list = { + list = damaged_maa_regiments + order_by = { + value = replenishable_troops_value + multiply = -1 + } + save_scope_value_as = { + name = least_damaged_maa_missing_soldiers + value = this.replenishable_troops_value + } + } + save_scope_value_as = { + name = num_damaged_maa_regiments + value = list_size:damaged_maa_regiments + } + } + } + #Based on Prestige level + option = { + name = ep3_laamp_decision_event.1055.a + trigger = { #This could be upgraded to diminishing returns + custom_tooltip = { + text = ep3_laamp_decision_event.1055.a.cooldown.tt + NOT = { has_variable = 1055_reinforced_with_prestige_recently } + } + } + show_as_unavailable = { always = yes } + flavor = ep3_laamp_decision_event.1055.a.flavor + reason = prestige_level + #Basically the same as piety + 1055_calculate_reinforcements_effect = { RESOURCE = prestige } + #Le cooldown + set_variable = { + name = 1055_reinforced_with_prestige_recently + days = visit_settlement_minimum_cooldown_days + } + #Checkmark and block off the option + 1055_finished_reinforcers_effect = yes + ai_chance = { + base = 200 + } + } + #Based on Piety level + option = { + name = ep3_laamp_decision_event.1055.b + trigger = { + piety_level >= low_piety_level + } + show_as_unavailable = { always = yes } + flavor = ep3_laamp_decision_event.1055.b.flavor + reason = piety_level + #Basically the same as prestige + 1055_calculate_reinforcements_effect = { RESOURCE = piety } + #Le cooldown + set_variable = { + name = 1055_reinforced_with_piety_recently + days = visit_settlement_minimum_cooldown_days + } + #Checkmark and block off the option + 1055_finished_reinforcers_effect = yes + ai_chance = { + base = 200 + } + } + #Scrounging for desperate soldiers with lower cost Provisions + option = { + name = ep3_laamp_decision_event.1055.c + trigger = { + domicile ?= { provisions >= scope:least_damaged_maa_missing_soldiers } + } + #Pick a random MaA to reinforce, fully + custom_tooltip = { + text = ep3_laamp_decision_event.1055.c.tt + random_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = replenishable_troops_value + } + } + #For a cheaper sandwich + domicile ?= { + change_provisions = { + subtract = scope:least_damaged_maa_missing_soldiers + divide = visit_settlement_provision_refill_value + } + } + #No cooldown. For now. + #Checkmark and block off the option + 1055_finished_reinforcers_effect = yes + ai_chance = { + base = 100 + modifier = { + domicile ?= { provisions < sixty_percent_provisions_value } + factor = 0 + } + } + } + #I am a Knight-Errant, you _fool_! Bask in my righteousness. + option = { + name = ep3_laamp_decision_event.1055.d + trigger = { + has_trait = knight_errant + has_trait_xp = { + trait = knight_errant + value = 100 #Max XP + } + NOT = { has_variable = 1055_reinforced_with_knight_errant_recently } + } + show_as_unavailable = { has_variable = 1055_reinforced_with_knight_errant_recently } + flavor = ep3_laamp_decision_event.1055.d.flavor + reason = knight_errant + #You're just that _good_ + custom_tooltip = { + text = ep3_laamp_decision_event.1055.d.tt + every_in_list = { + list = damaged_maa_regiments + change_maa_troops_count = replenishable_troops_value + } + } + #Le cooldown + set_variable = { + name = 1055_reinforced_with_knight_errant_recently + days = visit_settlement_minimum_cooldown_days + } + #Checkmark and block off the option + 1055_finished_reinforcers_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1055.e + #Sets variables and returns us to castle grounds screen + 1031_been_to_effect = { GUILD = reinforcers } + ai_chance = { base = 200 } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:reinforcers } + } +} + +#Hire the Bodyguard, show/set the effects and variables +scripted_effect 1057_hire_bodyguard_effect = { + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_bodyguard_recruit + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_bodyguard_recruit + #The actual effect happens in after + show_as_tooltip = { + court_position_grant_effect = { + EMPLOYER = root + POS = bodyguard + CANDIDATE = scope:laamp_bodyguard_recruit + } + } + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_bodyguard + value = flag:yes + } + #Go back to castle grounds + hidden_effect = { 1051_return_to_castle_effect = yes } +} + + +#Visit Bodyguard +ep3_laamp_decision_event.1057 = { + type = character_event + title = ep3_laamp_decision_event.1057.t + window = visit_settlement_window + desc = { + #What're they doing? + first_valid = { + #We've returned to this scene, now what + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_bodyguard + scope:bodyguard_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1057.desc_returned_01 + } + triggered_desc = { + trigger = { scope:bodyguard_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1057.desc_returned_02 + } + triggered_desc = { + trigger = { scope:bodyguard_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1057.desc_returned_03 + } + } + #FIRST TIME: We've seen this bodyguard before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_bodyguard + NOT = { exists = scope:been_to_bodyguard } + } + desc = ep3_laamp_decision_event.1057.desc_reused_bodyguard + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_bodyguard } + } + desc = ep3_laamp_decision_event.1057.desc + } + } + } + theme = landless_adventurer + override_sound = { reference = "event:/MUSIC/Cues/Events/Positive/mx_cue_postive_effect" } + override_background = { reference = alley_day } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #Slicing up carcasses + triggered_animation = { + trigger = { scope:bodyguard_loc_tracker ?= 1 } + animation = disbelief + } + animation = worry + } + center_portrait = { + character = root + camera = camera_event_scheme_vs_extra_right_look_right + #Slicing up carcasses + triggered_animation = { + trigger = { scope:bodyguard_loc_tracker ?= 1 } + animation = fear + } + #Literal *flex* + triggered_animation = { + trigger = { + OR = { + has_trait = gallant + prowess > high_skill_rating + } + } + animation = hero_flex + } + animation = flirtation + } + right_portrait = { + character = scope:laamp_bodyguard_recruit + camera = camera_event_scheme_far_right + #Still angry + triggered_animation = { + trigger = { + NOT = { exists = scope:been_to_bodyguard } + } + animation = rage + } + #Had a pleasant conversation prior to interaction + triggered_animation = { + trigger = { + exists = scope:been_to_bodyguard + scope:bodyguard_loc_tracker ?= 0 + } + animation = personality_compassionate + } + #Slicing up carcasses + triggered_animation = { + trigger = { scope:bodyguard_loc_tracker ?= 1 } + animation = hunting_knife_start + } + #State of life + animation = disappointed + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Run this once: Re-save the portrait so the Bodyguard is not the 1050_third_character (since they narratively moved to the alley) + if = { + limit = { scope:1050_third_character = scope:laamp_bodyguard_recruit } + #Overwrite with ROOT to block off the portrait + save_scope_as = 1050_third_character + #Remember the bodyguard + 1010_remember_vendor_character_effect = { GUILD = bodyguard CHARACTER = scope:laamp_bodyguard_recruit } + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = bodyguard } + } + #Pay gold + option = { + name = ep3_laamp_decision_event.1057.a + pay_short_term_gold = { + target = scope:laamp_bodyguard_recruit + gold = minor_gold_value + } + #Wrap effect to hire 'em, set scope & return to castle + 1057_hire_bodyguard_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + OR = { + prowess > high_skill_rating + has_trait = gallant + } + factor = 0 + } + } + } + #Flex Prowess + option = { + name = ep3_laamp_decision_event.1057.b + trigger = { + prowess > high_skill_rating + NOT = { has_trait = gallant } + } + #Wrap effect to hire 'em, set scope & return to castle + 1057_hire_bodyguard_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #Diplomacy duel + option = { + name = ep3_laamp_decision_event.1057.c + duel = { + skill = diplomacy + value = average_skill_rating + #Success: Hire 'em up + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + OR = { + has_trait = overseer + has_trait = strategist + } + factor = 2 + } + desc = ep3_laamp_decision_event.1057.c.success + send_interface_toast = { + title = ep3_laamp_decision_event.1057.c.success + left_icon = root + right_icon = scope:laamp_bodyguard_recruit + #Yippee! + 1057_hire_bodyguard_effect = yes + } + } + #Failure: Bye, now + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + modifier = { + has_trait = zealous + factor = 0.5 + } + desc = ep3_laamp_decision_event.1057.c.failure + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1057.c.failure + desc = ep3_laamp_decision_event.1057.c.failure.tt + left_icon = root + right_icon = scope:laamp_bodyguard_recruit + #Oh well + custom_tooltip = ep3_laamp_decision_event.1057.c.failure.tt + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_bodyguard + value = flag:no + } + 1051_return_to_castle_effect = yes + } + } + } + ai_chance = { + base = 100 + modifier = { + OR = { + prowess > high_skill_rating + has_trait = gallant + } + factor = 0 + } + } + } + #Triggered Option: Gallant-flex them + option = { + name = ep3_laamp_decision_event.1057.d + trigger = { has_trait = gallant } + show_as_unavailable = { always = yes } + reason = gallant + #Have a cherry on top + scope:laamp_bodyguard_recruit = { + hidden_effect = { + if = { + limit = { has_trait = disloyal } + remove_trait = disloyal + } + } + if = { + limit = { + NOT = { has_trait = loyal } + } + add_trait = loyal + } + } + #Wrap effect to hire 'em, set scope & return to castle + 1057_hire_bodyguard_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #I want to do something else + option = { + name = ep3_laamp_decision_event.1057.e + #Saves scopes and returns us to castle grounds screen + 1031_been_to_effect = { GUILD = bodyguard } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = greedy + has_trait = paranoid + } + add = 300 + } + } + } + after = { + if = { + limit = { scope:laamp_decision_recruited_bodyguard ?= flag:yes } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_bodyguard_recruit + COURT_POS = bodyguard_court_position + } + } + court_position_grant_effect = { + EMPLOYER = root + POS = bodyguard + CANDIDATE = scope:laamp_bodyguard_recruit + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:bodyguard } + } +} + + +###################################################################### +# CRAFTSMEN +# ep3_laamp_decision_event.1060 +###################################################################### + +#Set the correct variable to block off the Craftsmen option and remove the desc flavor variable +scripted_effect 1060_finished_craftsmen_effect = { + remove_list_variable = { + name = list_of_options + target = flag:has_craftsman_option + } + save_scope_as = laamp_decision_finished_craftsmen_option +} + +#Nothing left for us to do +scripted_trigger 1060_done_with_craftsmen_trigger = { + exists = scope:laamp_decision_bought_weapon + exists = scope:laamp_decision_bought_armor + exists = scope:laamp_decision_bought_accessory + trigger_if = { + limit = { exists = scope:laamp_quartermaster_recruit } + exists = scope:laamp_decision_recruited_quartermaster + } +} + +scripted_trigger 1060_is_quartermaster_available_trigger = { + #They exist + exists = scope:laamp_quartermaster_recruit + #We've been there + exists = scope:been_to_quartermaster + #But we're not done with 'em + NOT = { exists = scope:laamp_decision_recruited_quartermaster } +} + + +#City Holding: Visit the local city craftsmen +ep3_laamp_decision_event.1060 = { + type = character_event + title = ep3_laamp_decision_event.1060.t + window = visit_settlement_window + desc = { + #Intro + first_valid = { + #We've returned to this scene, now what + #RETURN: We've returned from Main Square + random_valid = { + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + exists = scope:been_to_craftsmen + OR = { + scope:craftsmen_loc_tracker ?= 0 + scope:craftsmen_loc_tracker ?= 2 + } + } + desc = ep3_laamp_decision_event.1060.desc_returned_01 + } + triggered_desc = { + trigger = { + var:return_from_location ?= flag:main_square + scope:craftsmen_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1060.desc_returned_02 + } + } + #RETURN: We've returned from the Weaponsmith + triggered_desc = { + trigger = { var:return_from_location ?= flag:weaponsmith } + desc = ep3_laamp_decision_event.1060.desc_returned_from_weaponsmith + } + #RETURN: We've returned from the Armorer + triggered_desc = { + trigger = { var:return_from_location ?= flag:armorer } + desc = ep3_laamp_decision_event.1060.desc_returned_from_armorer + } + #RETURN: We've returned from the Jeweler + triggered_desc = { + trigger = { var:return_from_location ?= flag:jeweler } + desc = ep3_laamp_decision_event.1060.desc_returned_from_jeweler + } + #RETURN: We've returned from the Quartermaster + triggered_desc = { + trigger = { var:return_from_location ?= flag:quartermaster } + desc = ep3_laamp_decision_event.1060.desc_returned_from_quartermaster + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_craftsmen } + } + desc = ep3_laamp_decision_event.1060.desc + } + } + #Outro + first_valid = { + #FIRST TIME: First time here, look at the quartermaster + triggered_desc = { + trigger = { + exists = scope:laamp_quartermaster_recruit + NOT = { exists = scope:been_to_craftsmen } + } + desc = ep3_laamp_decision_event.1060.desc_outro_quartermaster + } + #FIRST TIME: First time here, curious partner + triggered_desc = { + trigger = { + exists = scope:visiting_partner + NOT = { exists = scope:been_to_craftsmen } + } + desc = ep3_laamp_decision_event.1060.desc_outro_partner + } + #FIRST TIME: First time here + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_craftsmen } + } + desc = ep3_laamp_decision_event.1060.desc_outro + } + #RETURN: Partner - there is nothing left for us here + triggered_desc = { + trigger = { + exists = scope:visiting_partner + 1060_done_with_craftsmen_trigger = yes + } + desc = ep3_laamp_decision_event.1060.desc_outro_return_partner_finished + } + #RETURN: There is nothing left for us here + triggered_desc = { + trigger = { 1060_done_with_craftsmen_trigger = yes } + desc = ep3_laamp_decision_event.1060.desc_outro_return_finished + } + #RETURN: Quartermaster did not move to the tavern, yet + triggered_desc = { + trigger = { + exists = scope:laamp_quartermaster_recruit + NOR = { + exists = scope:been_to_quartermaster + exists = scope:laamp_decision_recruited_quartermaster + } + } + desc = ep3_laamp_decision_event.1060.desc_outro_quartermaster_return + } + #RETURN: We've been here before + random_valid = { + #RETURN: Partner flavor + triggered_desc = { + trigger = { + exists = scope:visiting_partner + exists = scope:been_to_craftsmen + scope:craftsmen_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1060.desc_outro_return_partner_01 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:craftsmen_loc_tracker ?= 1 + } + desc = ep3_laamp_decision_event.1060.desc_outro_return_partner_02 + } + triggered_desc = { + trigger = { + exists = scope:visiting_partner + scope:craftsmen_loc_tracker ?= 2 + } + desc = ep3_laamp_decision_event.1060.desc_outro_return_partner_03 + } + #RETURN: Generics + triggered_desc = { + trigger = { + exists = scope:been_to_craftsmen + scope:craftsmen_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1060.desc_outro_return_01 + } + triggered_desc = { + trigger = { scope:craftsmen_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1060.desc_outro_return_02 + } + triggered_desc = { + trigger = { scope:craftsmen_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1060.desc_outro_return_03 + } + } + } + } + theme = stewardship + #Get outta here already + override_effect_2d = { + trigger = { + 1060_done_with_craftsmen_trigger = yes + scope:visiting_location = { is_drylands_or_desert_trigger = no } + } + reference = rain + } + override_background = { reference = market } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #If it's our (tired) visiting partner + triggered_animation = { + trigger = { 1060_done_with_craftsmen_trigger = yes } + animation = boredom + } + #If it's our visiting partner + animation = survey + } + center_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = greedy } + animation = stress + } + animation = personality_forgiving + } + #Do we have someone to display? + right_portrait = { + trigger = { + exists = scope:1060_third_character + #If this is root, then that means we have talked to the Quartermaster so let's disappear the portrait + scope:1060_third_character != root + } + character = scope:1060_third_character + #Le Quartermaster + animation = eyeroll + } + #The craftsmen + lower_left_portrait = { + #Let's remove them when the option is no longer available + trigger = { + scope:1060_fourth_character != root + } + character = scope:1060_fourth_character + } + lower_center_portrait = { + #Let's remove them when the option is no longer available + trigger = { + scope:1060_fifth_character != root + } + character = scope:1060_fifth_character + } + lower_right_portrait = { + #Let's remove them when the option is no longer available + trigger = { + scope:1060_sixth_character != root + } + character = scope:1060_sixth_character + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = craftsmen } + #Find our weaponsmith + if = { + #Do we already have a weaponsmith? + limit = { + NOT = { exists = scope:laamp_weaponsmith_craftsman } + } + #Has this person been our weaponsmith in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_weaponsmith_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_weaponsmith_craftsman + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_weaponsmith_craftsman + } + #Otherwise find a weaponsmith in the pool + if = { + limit = { + NOT = { exists = scope:laamp_weaponsmith_craftsman } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + } + save_scope_as = laamp_weaponsmith_craftsman + } + } + #Otherwise create a weaponsmith + if = { + limit = { + NOT = { exists = scope:laamp_weaponsmith_craftsman } + } + #Create weaponsmith to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_weaponsmith_craftsman + } + } + scope:laamp_weaponsmith_craftsman = { save_scope_as = 1060_fourth_character } + } + #And our armorer + if = { + #Do we already have an armorer? + limit = { + NOT = { exists = scope:laamp_armorer_craftsman } + } + #Has this person been our armorer in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_armorer_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_jeweler_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_armorer_craftsman + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_armorer_craftsman + } + #Otherwise find an armorer in the pool + if = { + limit = { + NOT = { exists = scope:laamp_armorer_craftsman } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + } + save_scope_as = laamp_armorer_craftsman + } + } + #Otherwise create an armorer + if = { + limit = { + NOT = { exists = scope:laamp_armorer_craftsman } + } + #Create armorer to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_armorer_craftsman + } + } + scope:laamp_armorer_craftsman = { save_scope_as = 1060_fifth_character } + } + #And finally, our jeweler + if = { + #Do we already have a jeweler? + limit = { + NOT = { exists = scope:laamp_jeweler_craftsman } + } + #Has this person been our jeweler in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_jeweler_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_quartermaster_trigger = no + } + save_scope_as = laamp_jeweler_craftsman + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_jeweler_craftsman + } + #Otherwise find a jeweler in the pool + if = { + limit = { + NOT = { exists = scope:laamp_jeweler_craftsman } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + } + save_scope_as = laamp_jeweler_craftsman + } + } + #Otherwise create a jeweler + if = { + limit = { + NOT = { exists = scope:laamp_jeweler_craftsman } + } + #Create jeweler to stuff in pool + create_character = { + template = generic_peasant_character + location = scope:visiting_location + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + save_scope_as = laamp_jeweler_craftsman + } + } + scope:laamp_jeweler_craftsman = { save_scope_as = 1060_sixth_character } + } + #Rare: Spawn a spectacular Quartermaster + if = { + limit = { + can_employ_court_position_type = quartermaster_camp_officer + NOT = { has_variable = laamp_decision_1000_checked_for_quartermaster } + } + random_list = { + 80 = { + #No Quartermaster + } + 20 = { + trigger = { can_employ_court_position_type = quartermaster_camp_officer } + #Has this person been our quartermaster in the past 10 years? + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + save_temporary_scope_as = saved_character_check + #Let's avoid double-dipping + 1010_is_a_saved_quartermaster_trigger = yes + 1010_is_a_saved_merchant_trigger = no + 1010_is_a_saved_peddler_trigger = no + 1010_is_a_saved_crier_trigger = no + 1010_is_a_saved_storyteller_trigger = no + 1010_is_a_saved_thief_trigger = no + 1010_is_a_saved_healer_trigger = no + 1010_is_a_saved_clergy_trigger = no + 1010_is_a_saved_physician_trigger = no + 1010_is_a_saved_bodyguard_trigger = no + 1010_is_a_saved_weaponsmith_trigger = no + 1010_is_a_saved_armorer_trigger = no + 1010_is_a_saved_jeweler_trigger = no + } + save_scope_as = laamp_quartermaster_recruit + #Some more loc flavor shenanigans for these saved scopes + save_scope_as = laamp_recurring_quartermaster + } + #Otherwise find a quartermaster in the pool + if = { + limit = { + NOT = { exists = scope:laamp_quartermaster_recruit } + } + random_pool_character = { + province = scope:visiting_location + limit = { + 1010_basic_merchant_checks_trigger = yes + NOT = { has_trait = devoted } #Look, I like weaponsmith nuns as much as the next person, but it looked _slightly_ off + stewardship >= 15 + NOR = { + has_trait = generous + has_trait = profligate + has_trait = improvident + } + } + save_scope_as = laamp_quartermaster_recruit + } + } + #Or create a quartermaster + if = { + limit = { + NOT = { exists = scope:laamp_quartermaster_recruit } + } + #Create quartermaster to stuff in pool + create_character = { + template = bp1_yearly_2021_stewardship_person_template + location = scope:visiting_location + trait = arrogant + dynasty = none + culture = scope:visiting_location.culture + faith = scope:visiting_location.faith + stewardship = { decent_skill_rating high_skill_rating } + save_scope_as = laamp_quartermaster_recruit + } + scope:laamp_quartermaster_recruit ?= { + #Chance to add a malus trait to this spectatular being + if = { + limit = { + NOR = { + has_trait = possessed_1 + has_trait = lunatic_1 + has_trait = depressed_1 + has_trait = drunkard + has_trait = hashishiyah + has_trait = irritable + } + } + hidden_effect = { + random = { + chance = 20 + random_list = { + 10 = { add_trait = possessed_1 } + 10 = { add_trait = lunatic_1 } + 10 = { add_trait = depressed_1 } + 10 = { add_trait = drunkard } + 10 = { add_trait = hashishiyah } + 10 = { add_trait = irritable } + } + } + } + } + } + } + scope:laamp_quartermaster_recruit = { save_scope_as = 1060_third_character } + } + } + #No decision-scumming + set_variable = { + name = laamp_decision_1000_checked_for_quartermaster + days = visit_settlement_cooldown_days + } + } + #Fourth portrait + if = { + limit = { + OR = { + #If we've already finished off the Weaponsmith + AND = { + scope:1060_fourth_character = scope:laamp_weaponsmith_craftsman + exists = scope:laamp_decision_bought_weapon + } + #And we did that before talking to the Quartermaster + AND = { + 1060_is_quartermaster_available_trigger = yes + scope:1060_fourth_character = root + } + } + } + #Put the Quartermaster in the slot, if they exist + if = { + limit = { 1060_is_quartermaster_available_trigger = yes } + scope:laamp_quartermaster_recruit = { save_scope_as = 1060_fourth_character } + #Hide the portrait with ROOT if they already are saved somewhere else + if = { + limit = { scope:1060_fifth_character ?= scope:laamp_quartermaster_recruit } + save_scope_as = 1060_fifth_character + } + #Hide the portrait with ROOT if they already are saved somewhere else + if = { + limit = { scope:1060_sixth_character ?= scope:laamp_quartermaster_recruit } + save_scope_as = 1060_sixth_character + } + } + #Otherwise hide the portrait with ROOT + else = { save_scope_as = 1060_fourth_character } + } + #Fifth portrait + if = { + limit = { + OR = { + #If we've already finished off the Armorer + AND = { + scope:1060_fifth_character = scope:laamp_armorer_craftsman + exists = scope:laamp_decision_bought_armor + } + #And we did that before talking to the Quartermaster + AND = { + 1060_is_quartermaster_available_trigger = yes + scope:1060_fifth_character = root + } + } + } + #Put the Quartermaster in the slot, if they exist + if = { + limit = { + 1060_is_quartermaster_available_trigger = yes + NOR = { + scope:1060_fourth_character ?= scope:laamp_quartermaster_recruit + scope:1060_sixth_character ?= scope:laamp_quartermaster_recruit + } + } + scope:laamp_quartermaster_recruit = { save_scope_as = 1060_fifth_character } + } + #Otherwise hide the portrait with ROOT + else = { save_scope_as = 1060_fifth_character } + } + #Sixth portrait + if = { + limit = { + OR = { + #If we've already finished off the Jeweler + AND = { + scope:1060_sixth_character = scope:laamp_jeweler_craftsman + exists = scope:laamp_decision_bought_accessory + } + #And we did that before talking to the Quartermaster + AND = { + 1060_is_quartermaster_available_trigger = yes + scope:1060_sixth_character = root + } + } + } + #Put the Quartermaster in the slot, if they exist + if = { + limit = { + 1060_is_quartermaster_available_trigger = yes + NOR = { + scope:1060_fourth_character ?= scope:laamp_quartermaster_recruit + scope:1060_fifth_character ?= scope:laamp_quartermaster_recruit + } + } + scope:laamp_quartermaster_recruit = { save_scope_as = 1060_sixth_character } + } + #Otherwise hide the portrait with ROOT + else = { save_scope_as = 1060_sixth_character } + } + } + #Visit Weaponsmith + option = { + name = { + text = { + first_valid = { + #Return to look at the weapons + triggered_desc = { + trigger = { exists = scope:been_to_weaponsmith } + desc = ep3_laamp_decision_event.1060.a_second + } + #First time looking at weapons + desc = ep3_laamp_decision_event.1060.a + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1060.a.cooldown.tt + NOT = { exists = scope:laamp_decision_bought_weapon } + } + } + show_as_unavailable = { always = yes } + reason = visit_weaponsmith + highlight_portrait = scope:laamp_weaponsmith_craftsman + custom_tooltip = ep3_laamp_decision_event.1060.a.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = craftsmen } + #Go to the Weaponsmith screen + trigger_event = ep3_laamp_decision_event.1061 + ai_chance = { base = 100 } + } + #Visit Armorer + option = { + name = { + text = { + first_valid = { + #Return to look at the armor + triggered_desc = { + trigger = { exists = scope:been_to_armorer } + desc = ep3_laamp_decision_event.1060.b_second + } + #First time looking at armor + desc = ep3_laamp_decision_event.1060.b + } + } + } + trigger = { + #Recruited the armorer + trigger_if = { + limit = { scope:laamp_decision_bought_armor ?= flag:no } + custom_tooltip = { + text = recruited_armorer.tt + always = no + } + } + #Been there, done that + trigger_else_if = { + limit = { scope:laamp_decision_bought_armor ?= flag:yes } + custom_tooltip = { + text = ep3_laamp_decision_event.1060.b.cooldown.tt + always = no + } + } + trigger_else = { exists = scope:laamp_armorer_craftsman } + } + show_as_unavailable = { always = yes } + reason = visit_armorsmith + highlight_portrait = scope:laamp_armorer_craftsman + custom_tooltip = ep3_laamp_decision_event.1060.b.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = craftsmen } + #Go to the Armorer screen + trigger_event = ep3_laamp_decision_event.1063 + ai_chance = { base = 100 } + } + #Visit Jeweler + option = { + name = { + text = { + first_valid = { + #Return to look at the accessories + triggered_desc = { + trigger = { exists = scope:been_to_jeweler } + desc = ep3_laamp_decision_event.1060.c_second + } + #First time looking at accessories + desc = ep3_laamp_decision_event.1060.c + } + } + } + trigger = { + custom_tooltip = { + text = ep3_laamp_decision_event.1060.c.cooldown.tt + NOT = { exists = scope:laamp_decision_bought_accessory } + } + } + show_as_unavailable = { always = yes } + reason = visit_jeweler + highlight_portrait = scope:laamp_jeweler_craftsman + custom_tooltip = ep3_laamp_decision_event.1060.c.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = craftsmen } + #Go to the Jeweler screen + trigger_event = ep3_laamp_decision_event.1065 + ai_chance = { base = 100 } + } + #Rare Option: Hire cheaper, skilled, Quartermaster + option = { + name = { + text = { + first_valid = { + #Return to talk to the Quartermaster + triggered_desc = { + trigger = { exists = scope:been_to_quartermaster } + desc = ep3_laamp_decision_event.1060.d_second + } + #First time talking to the Quartermaster + desc = ep3_laamp_decision_event.1060.d + } + } + } + trigger = { + exists = scope:laamp_quartermaster_recruit + NOT = { exists = scope:laamp_decision_recruited_quartermaster } + } + reason = unlocked_quartermaster + highlight_portrait = scope:laamp_quartermaster_recruit + custom_tooltip = ep3_laamp_decision_event.1060.d.tt + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = craftsmen } + #For the Quartermaster screen + trigger_event = ep3_laamp_decision_event.1067 + ai_chance = { base = 500 } + } + #I want to do something else + option = { + name = { + text = { + first_valid = { + #Nothing left to do + triggered_desc = { + trigger = { 1060_done_with_craftsmen_trigger = yes } + desc = ep3_laamp_decision_event.1060.e_second + } + #Back to main square + desc = ep3_laamp_decision_event.1060.e + } + } + } + #Have we done everything? Are we closing off the option? + if = { + limit = { 1060_done_with_craftsmen_trigger = yes } + #Clean up unnecessary variables and close off the option + 1060_finished_craftsmen_effect = yes + } + #*Withered* - This needs to be done manually because the scope isn't saved before the next event is triggered if it's run in After = { ... } + 1030_save_hub_scope_effect = { HUB = craftsmen } + #Go back to the main event + 1000_return_to_main_effect = yes + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = greedy + has_trait = paranoid + } + add = 300 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:craftsmen } + } +} + + +#Identify the weapon artifacts +scripted_effect 1061_set_weapon_variable_effect = { + set_variable = { + name = 1061_laamp_decision_weapon + days = visit_settlement_cooldown_days + } +} + +#Simple enough +scripted_trigger 1061_is_rare_item_trigger = { + OR = { + rarity = masterwork + rarity = famed + rarity = illustrious + } +} + +#Chance to flush the inventory to simulate someone else buying the item or similar. Refresh the stock. +scripted_effect 1061_chance_to_flush_inventory_effect = { + hidden_effect = { + random_list = { + #We didn't buy this one + 50 = { + trigger = { + $FIRST_ITEM$ = { artifact_owner = $VENDOR$ } + } + #Less chance to destroy premium stuff + modifier = { + $FIRST_ITEM$ = { 1061_is_rare_item_trigger = yes } + factor = 0.5 + } + destroy_artifact = $FIRST_ITEM$ + } + #Or this one + 50 = { + trigger = { + $SECOND_ITEM$ = { artifact_owner = $VENDOR$ } + } + #Less chance to destroy premium stuff + modifier = { + $SECOND_ITEM$ = { 1061_is_rare_item_trigger = yes } + factor = 0.5 + } + destroy_artifact = $SECOND_ITEM$ + } + #Nor this one? + 50 = { + trigger = { + $THIRD_ITEM$ = { artifact_owner = $VENDOR$ } + } + #Less chance to destroy premium stuff + modifier = { + $THIRD_ITEM$ = { 1061_is_rare_item_trigger = yes } + factor = 0.5 + } + destroy_artifact = $THIRD_ITEM$ + } + } + } +} + +#Chance for the vendor to have a real gem, once in a while +scripted_effect 1061_buff_item_modifiers_effect = { + #Masterwork modifiers + if = { + limit = { rarity = masterwork } + if = { + limit = { has_variable = 1061_laamp_decision_weapon } + add_scaled_artifact_modifier_prowess_effect = yes + add_scaled_artifact_modifier_combat_effect = yes + } + if = { + limit = { has_variable = 1063_laamp_decision_armor } + add_scaled_artifact_modifier_negate_prowess_penalty_effect = yes + add_scaled_artifact_modifier_terrain_advantage_effect = yes + } + if = { + limit = { has_variable = 1065_laamp_decision_accessory } + add_scaled_artifact_modifier_hire_mercenary_effect = yes + add_scaled_artifact_modifier_prestige_effect = yes + } + } +} + +#We return to the craftsmen event to peruse other options +scripted_effect 1061_return_to_craftsmen_effect = { + custom_tooltip = ep3_laamp_decision_event.1061.return.tt + trigger_event = ep3_laamp_decision_event.1060 +} + +#Set the correct variable to block off the Weaponsmith option and remove the desc flavor variable +scripted_effect 1061_bought_weapon_effect = { + scope:1061_first_weapon = { remove_variable ?= 1061_weapon_value } + scope:1061_second_weapon = { remove_variable ?= 1061_weapon_value } + scope:1061_third_weapon = { remove_variable ?= 1061_weapon_value } + save_scope_as = laamp_decision_bought_weapon + #Simulate shifting inventory + 1061_chance_to_flush_inventory_effect = { + FIRST_ITEM = scope:1061_first_weapon + SECOND_ITEM = scope:1061_second_weapon + THIRD_ITEM = scope:1061_third_weapon + VENDOR = scope:laamp_weaponsmith_craftsman + } + #Go back to craftsmen district + hidden_effect = { 1061_return_to_craftsmen_effect = yes } +} + +#The actual transfer +scripted_effect 1061_buy_item_effect = { + #Weapon + if = { + limit = { has_variable = 1061_laamp_decision_weapon } + root = { + pay_short_term_gold = { + target = scope:laamp_weaponsmith_craftsman + gold = prev.var:1061_weapon_value #Is set via the 1041_set_item_value_effect on the artifact itself + } + } + } + #Armor + if = { + limit = { has_variable = 1063_laamp_decision_armor } + root = { + pay_short_term_gold = { + target = scope:laamp_armorer_craftsman + gold = prev.var:1063_armor_value + } + } + } + #Accessory + if = { + limit = { has_variable = 1065_laamp_decision_accessory } + root = { + pay_short_term_gold = { + target = scope:laamp_jeweler_craftsman + gold = prev.var:1065_accessory_value + } + } + } + set_owner = root +} + + +#Visit Weaponsmith +ep3_laamp_decision_event.1061 = { + type = character_event + title = ep3_laamp_decision_event.1061.t + window = visit_settlement_window + desc = { + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_weaponsmith + scope:weaponsmith_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1061.desc_returned_01 + } + triggered_desc = { + trigger = { scope:weaponsmith_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1061.desc_returned_02 + } + } + #FIRST TIME: We've seen this weaponsmith before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_weaponsmith_craftsman + NOT = { exists = scope:been_to_weaponsmith } + } + desc = ep3_laamp_decision_event.1061.desc_reused_weaponsmith + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_weaponsmith } + } + desc = ep3_laamp_decision_event.1061.desc + } + } + } + theme = stewardship + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_martial" } + override_background = { reference = armory } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + animation = marshal_random_weapon + } + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:laamp_weaponsmith_craftsman + camera = camera_event_scheme_far_right + animation = inspect_weapon + } + artifact = { + target = scope:1061_first_weapon + position = lower_left_portrait + } + artifact = { + target = scope:1061_second_weapon + position = lower_center_portrait + } + artifact = { + target = scope:1061_third_weapon + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + location.province_owner = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = weaponsmith } + #Find our weapons + if = { + limit = { + NOT = { exists = scope:1061_first_weapon } + } + scope:laamp_weaponsmith_craftsman = { + #Have we created weapons recently, which we can pull? + if = { + limit = { + any_character_artifact ?= { has_variable = 1061_laamp_decision_weapon } + } + every_character_artifact = { + limit = { has_variable = 1061_laamp_decision_weapon } + add_to_list = list_of_potential_weapons + } + random_in_list = { + list = list_of_potential_weapons + save_scope_as = 1061_first_weapon + } + random_in_list = { + list = list_of_potential_weapons + limit = { + this != scope:1061_first_weapon + } + save_scope_as = 1061_second_weapon + } + random_in_list = { + list = list_of_potential_weapons + limit = { + NOR = { + this = scope:1061_first_weapon + this = scope:1061_second_weapon + } + } + save_scope_as = 1061_third_weapon + } + } + #If we don't have any old weapons; generate new ones! + hidden_effect_new_object = { #HAZMAT SUIT OF ERROR SUPRESSION + if = { + limit = { + NOT = { exists = scope:1061_first_weapon } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_weaponsmith_craftsman } + #Generate weapon + create_artifact_weapon_effect = { + OWNER = scope:laamp_weaponsmith_craftsman + CREATOR = scope:laamp_weaponsmith_craftsman + SET_WEAPON_TYPE = flag:no + } + #Finalization + scope:newly_created_artifact ?= { + 1061_set_weapon_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1061_first_weapon + } + } + if = { + limit = { + NOT = { exists = scope:1061_second_weapon } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_weaponsmith_craftsman } + #Generate weapon + create_artifact_weapon_effect = { + OWNER = scope:laamp_weaponsmith_craftsman + CREATOR = scope:laamp_weaponsmith_craftsman + SET_WEAPON_TYPE = flag:no + } + #Finalization + scope:newly_created_artifact ?= { + 1061_set_weapon_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1061_second_weapon + } + } + if = { + limit = { + NOT = { exists = scope:1061_third_weapon } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_weaponsmith_craftsman } + #Generate weapon + create_artifact_weapon_effect = { + OWNER = scope:laamp_weaponsmith_craftsman + CREATOR = scope:laamp_weaponsmith_craftsman + SET_WEAPON_TYPE = flag:no + } + #Finalization + scope:newly_created_artifact ?= { + 1061_set_weapon_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1061_third_weapon + } + } + #Set the value of the weapons + scope:1061_first_weapon = { 1041_set_item_value_effect = yes } + scope:1061_second_weapon = { 1041_set_item_value_effect = yes } + scope:1061_third_weapon = { 1041_set_item_value_effect = yes } + } + } + #Remember the weaponsmith + 1010_remember_vendor_character_effect = { GUILD = weaponsmith CHARACTER = scope:laamp_weaponsmith_craftsman } + } + } + #Weapon #1 + option = { + name = ep3_laamp_decision_event.1061.a + #Pay gold, transfer weapon + scope:1061_first_weapon = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1061_bought_weapon_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1061_first_weapon.var:1061_weapon_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Weapon #2 + option = { + name = ep3_laamp_decision_event.1061.b + #Pay gold, transfer weapon + scope:1061_second_weapon = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1061_bought_weapon_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1061_second_weapon.var:1061_weapon_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Weapon #3 + option = { + name = ep3_laamp_decision_event.1061.c + #Pay gold, transfer weapon + scope:1061_third_weapon = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1061_bought_weapon_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1061_third_weapon.var:1061_weapon_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #I want to visit another craftsman + option = { + name = ep3_laamp_decision_event.1061.d + #Sets variables and returns us to craftman screen + 1031_been_to_effect = { GUILD = weaponsmith } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:weaponsmith } + } +} + + +#Identify the armor artifacts +scripted_effect 1063_set_armor_variable_effect = { + set_variable = { + name = 1063_laamp_decision_armor + days = visit_settlement_cooldown_days + } +} + +#Set the correct variable to block off the Armorer option and remove the desc flavor variable +scripted_effect 1063_bought_armor_effect = { + scope:1063_first_armor = { remove_variable ?= 1063_armor_value } + scope:1063_second_armor = { remove_variable ?= 1063_armor_value } + scope:1063_third_armor = { remove_variable ?= 1063_armor_value } + save_scope_value_as = { + name = laamp_decision_bought_armor + value = flag:yes + } + #Simulate shifting inventory + 1061_chance_to_flush_inventory_effect = { + FIRST_ITEM = scope:1063_first_armor + SECOND_ITEM = scope:1063_second_armor + THIRD_ITEM = scope:1063_third_armor + VENDOR = scope:laamp_armorer_craftsman + } + #Go back to craftsmen district + hidden_effect = { 1061_return_to_craftsmen_effect = yes } +} + + +#Visit Armorer +ep3_laamp_decision_event.1063 = { + type = character_event + title = ep3_laamp_decision_event.1063.t + window = visit_settlement_window + desc = { + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_armorer + scope:armorer_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1063.desc_returned_01 + } + triggered_desc = { + trigger = { scope:armorer_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1063.desc_returned_02 + } + } + #FIRST TIME: We've seen this armorer before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_armorer_craftsman + NOT = { exists = scope:been_to_armorer } + } + desc = ep3_laamp_decision_event.1063.desc_reused_armorer + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_armorer } + } + desc = ep3_laamp_decision_event.1063.desc + } + } + } + theme = stewardship + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_generic" } + override_background = { reference = armory } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + animation = personality_content + } + center_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:laamp_armorer_craftsman + camera = camera_event_scheme_far_right + animation = personality_bold + } + artifact = { + target = scope:1063_first_armor + position = lower_left_portrait + } + artifact = { + target = scope:1063_second_armor + position = lower_center_portrait + } + artifact = { + target = scope:1063_third_armor + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + location.province_owner = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = armorer } + #Find our armors + if = { + limit = { + NOT = { exists = scope:1063_first_armor } + } + scope:laamp_armorer_craftsman = { + #Have we created armors recently, which we can pull? + if = { + limit = { + any_character_artifact ?= { has_variable = 1063_laamp_decision_armor } + } + every_character_artifact = { + limit = { has_variable = 1063_laamp_decision_armor } + add_to_list = list_of_potential_armors + } + random_in_list = { + list = list_of_potential_armors + save_scope_as = 1063_first_armor + } + random_in_list = { + list = list_of_potential_armors + limit = { + this != scope:1063_first_armor + } + save_scope_as = 1063_second_armor + } + random_in_list = { + list = list_of_potential_armors + limit = { + NOR = { + this = scope:1063_first_armor + this = scope:1063_second_armor + } + } + save_scope_as = 1063_third_armor + } + } + #If we don't have any old armors; generate new ones! + hidden_effect_new_object = { #HAZMAT SUIT OF ERROR SUPRESSION + if = { + limit = { + NOT = { exists = scope:1063_first_armor } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate armor + create_artifact_armor_effect = { + OWNER = scope:laamp_armorer_craftsman + CREATOR = scope:laamp_armorer_craftsman + SET_ARMOR_TYPE = flag:no + } + #Finalization + scope:newly_created_artifact ?= { + 1063_set_armor_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1063_first_armor + } + } + if = { + limit = { + NOT = { exists = scope:1063_second_armor } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate armor + create_artifact_armor_effect = { + OWNER = scope:laamp_armorer_craftsman + CREATOR = scope:laamp_armorer_craftsman + SET_ARMOR_TYPE = flag:armor_type_lamellar + } + #Finalization + scope:newly_created_artifact ?= { + 1063_set_armor_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1063_second_armor + } + } + if = { + limit = { + NOT = { exists = scope:1063_third_armor } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate armor + create_artifact_armor_effect = { + OWNER = scope:laamp_armorer_craftsman + CREATOR = scope:laamp_armorer_craftsman + SET_ARMOR_TYPE = flag:armor_type_scale + } + #Finalization + scope:newly_created_artifact ?= { + 1063_set_armor_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1063_third_armor + } + } + #Set the value of the armors + scope:1063_first_armor = { 1041_set_item_value_effect = yes } + scope:1063_second_armor = { 1041_set_item_value_effect = yes } + scope:1063_third_armor = { 1041_set_item_value_effect = yes } + } + } + #Remember the armorer + 1010_remember_vendor_character_effect = { GUILD = armorer CHARACTER = scope:laamp_armorer_craftsman } + } + } + #Armor #1 + option = { + name = ep3_laamp_decision_event.1063.a + #Pay gold, transfer armor + scope:1063_first_armor = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1063_bought_armor_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1063_first_armor.var:1063_armor_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Armor #2 + option = { + name = ep3_laamp_decision_event.1063.b + #Pay gold, transfer armor + scope:1063_second_armor = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1063_bought_armor_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1063_second_armor.var:1063_armor_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Armor #3 + option = { + name = ep3_laamp_decision_event.1063.c + #Pay gold, transfer armor + scope:1063_third_armor = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1063_bought_armor_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1063_third_armor.var:1063_armor_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #TRIGGERED OPTION: Attempt to recruit the armorer + option = { + name = ep3_laamp_decision_event.1063.d + trigger = { + custom_description = { + text = not_have_armorer_building + can_employ_court_position_type = armorer_camp_officer + } + } + reason = unlocked_armorer + pay_short_term_gold = { + target = scope:laamp_armorer_craftsman + gold = minor_gold_value + } + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_armorer_craftsman + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_armorer_craftsman + #The actual effect happens in after + show_as_tooltip = { + camp_officer_grant_effect = { + EMPLOYER = root + POS = armorer + CANDIDATE = scope:laamp_armorer_craftsman + } + } + #Sets variables and returns us to craftman screen + save_scope_value_as = { + name = laamp_decision_bought_armor + value = flag:no + } + #Go back to craftsmen district + hidden_effect = { 1061_return_to_craftsmen_effect = yes } + ai_chance = { + base = 100 + modifier = { + short_term_gold < minor_gold_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + modifier = { + employs_court_position = armorer_camp_officer + factor = 0 + } + } + } + #I want to visit another craftsman + option = { + name = ep3_laamp_decision_event.1063.e + #Sets variables and returns us to craftman screen + 1031_been_to_effect = { GUILD = armorer } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + if = { + limit = { scope:laamp_decision_bought_armor ?= flag:no } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_armorer_craftsman + COURT_POS = armorer_camp_officer + } + } + camp_officer_grant_effect = { + EMPLOYER = root + POS = armorer + CANDIDATE = scope:laamp_armorer_craftsman + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:armorer } + } +} + + +#Identify the accessory artifacts +scripted_effect 1065_set_accessory_variable_effect = { + set_variable = { + name = 1065_laamp_decision_accessory + days = visit_settlement_cooldown_days + } +} + +#Set the correct variable to block off the Jeweler option and remove the desc flavor variable +scripted_effect 1065_bought_accessory_effect = { + scope:1065_first_accessory = { remove_variable ?= 1065_accessory_value } + scope:1065_second_accessory = { remove_variable ?= 1065_accessory_value } + scope:1065_third_accessory = { remove_variable ?= 1065_accessory_value } + save_scope_as = laamp_decision_bought_accessory + #Simulate shifting inventory + 1061_chance_to_flush_inventory_effect = { + FIRST_ITEM = scope:1065_first_accessory + SECOND_ITEM = scope:1065_second_accessory + THIRD_ITEM = scope:1065_third_accessory + VENDOR = scope:laamp_jeweler_craftsman + } + #Go back to craftsmen district + hidden_effect = { 1061_return_to_craftsmen_effect = yes } +} + + +#Visit Jeweler +ep3_laamp_decision_event.1065 = { + type = character_event + title = ep3_laamp_decision_event.1065.t + window = visit_settlement_window + desc = { + first_valid = { + #We've returned to this scene, now what + #RETURN: Generics + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_jeweler + scope:jeweler_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1065.desc_returned_01 + } + triggered_desc = { + trigger = { scope:jeweler_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1065.desc_returned_02 + } + } + #FIRST TIME: We've seen this jeweler before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_jeweler_craftsman + NOT = { exists = scope:been_to_jeweler } + } + desc = ep3_laamp_decision_event.1065.desc_reused_jeweler + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_jeweler } + } + desc = ep3_laamp_decision_event.1065.desc + } + } + } + theme = stewardship + override_background = { reference = physicians_study } + left_portrait = { + trigger = { exists = scope:visiting_partner } + character = scope:visiting_partner + #It kinda makes sense, doesn't it? + triggered_animation = { + trigger = { + exists = scope:been_to_jeweler + scope:jeweler_loc_tracker ?= 0 + } + animation = interested + } + animation = war_over_tie + } + center_portrait = { + character = root + #It kinda makes sense, doesn't it? + triggered_animation = { + trigger = { + exists = scope:been_to_jeweler + scope:jeweler_loc_tracker ?= 0 + } + animation = disbelief + } + animation = thinking + } + right_portrait = { + character = scope:laamp_jeweler_craftsman + camera = camera_event_scheme_vs_center_look_left + #It kinda makes sense, doesn't it? + triggered_animation = { + trigger = { + exists = scope:been_to_jeweler + scope:jeweler_loc_tracker ?= 0 + } + animation = paranoia + } + triggered_animation = { + trigger = { scope:jeweler_loc_tracker ?= 1 } + animation = writing + } + animation = chess_cocky + } + artifact = { + target = scope:1065_first_accessory + position = lower_left_portrait + } + artifact = { + target = scope:1065_second_accessory + position = lower_center_portrait + } + artifact = { + target = scope:1065_third_accessory + position = lower_right_portrait + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + location.province_owner = { save_scope_as = bg_override_char } + #Can we _not_ repeat the loc? + 1025_set_and_check_scene_loc_tracker_scope_effect = { SCENE = jeweler } + #Find our accessories + if = { + limit = { + NOT = { exists = scope:1065_first_accessory } + } + scope:laamp_jeweler_craftsman = { + #Have we created accessories recently, which we can pull? + if = { + limit = { + any_character_artifact ?= { has_variable = 1065_laamp_decision_accessory } + } + every_character_artifact = { + limit = { has_variable = 1065_laamp_decision_accessory } + add_to_list = list_of_potential_accessories + } + random_in_list = { + list = list_of_potential_accessories + save_scope_as = 1065_first_accessory + } + random_in_list = { + list = list_of_potential_accessories + limit = { + this != scope:1065_first_accessory + } + save_scope_as = 1065_second_accessory + } + random_in_list = { + list = list_of_potential_accessories + limit = { + NOR = { + this = scope:1065_first_accessory + this = scope:1065_second_accessory + } + } + save_scope_as = 1065_third_accessory + } + } + #If we don't have any old accessories; generate new ones! + hidden_effect_new_object = { #HAZMAT SUIT OF ERROR SUPRESSION + if = { + limit = { + NOT = { exists = scope:1065_first_accessory } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate accessory + random_list = { + 50 = { + create_artifact_brooch_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + 50 = { + create_artifact_ring_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + 50 = { + create_artifact_necklace_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + } + #Finalization + scope:newly_created_artifact ?= { + 1065_set_accessory_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1065_first_accessory + } + } + if = { + limit = { + NOT = { exists = scope:1065_second_accessory } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate accessory + random_list = { + 50 = { + create_artifact_crown_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + 50 = { + create_artifact_regalia_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + } + #Finalization + scope:newly_created_artifact ?= { + 1065_set_accessory_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1065_second_accessory + } + } + if = { + limit = { + NOT = { exists = scope:1065_third_accessory } + } + #Set rarity, maybe + 1041_chance_to_buff_item_rarity_effect = { VENDOR = scope:laamp_armorer_craftsman } + #Generate accessory + random_list = { + #Don't need two rings etc + 50 = { + trigger = { + NOT = { + scope:1065_first_accessory = { artifact_type = brooch } + } + } + create_artifact_brooch_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + 50 = { + trigger = { + NOT = { + scope:1065_first_accessory = { artifact_type = ring } + } + } + create_artifact_ring_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + 50 = { + trigger = { + NOT = { + scope:1065_first_accessory = { artifact_type = necklace } + } + } + create_artifact_necklace_effect = { + OWNER = scope:laamp_jeweler_craftsman + SMITH = scope:laamp_jeweler_craftsman + } + } + } + #Finalization + scope:newly_created_artifact ?= { + 1065_set_accessory_variable_effect = yes + 1061_buff_item_modifiers_effect = yes + #Don't need no notification about this + 1020_suppress_artifact_notifications_effect = yes + save_scope_as = 1065_third_accessory + } + } + #Set the value of the accessories + scope:1065_first_accessory = { 1041_set_item_value_effect = yes } + scope:1065_second_accessory = { 1041_set_item_value_effect = yes } + scope:1065_third_accessory = { 1041_set_item_value_effect = yes } + } + #Remember the jeweler + 1010_remember_vendor_character_effect = { GUILD = jeweler CHARACTER = scope:laamp_jeweler_craftsman } + } + } + } + #Accessory #1 + option = { + name = ep3_laamp_decision_event.1065.a + #Pay gold, transfer Accessory + scope:1065_first_accessory = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1065_bought_accessory_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1065_first_accessory.var:1065_accessory_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Accessory #2 + option = { + name = ep3_laamp_decision_event.1065.b + #Pay gold, transfer Accessory + scope:1065_second_accessory = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1065_bought_accessory_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1065_second_accessory.var:1065_accessory_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #Accessory #3 + option = { + name = ep3_laamp_decision_event.1065.c + #Pay gold, transfer Accessory + scope:1065_third_accessory = { 1061_buy_item_effect = yes } + #Then set correct variables and reroute us to the craftsmen + 1065_bought_accessory_effect = yes + ai_chance = { + base = 100 + modifier = { + short_term_gold < scope:1065_third_accessory.var:1065_accessory_value + short_term_gold < laamp_ai_spending_pants_value + factor = 0 + } + } + } + #I want to visit another craftsman + option = { + name = ep3_laamp_decision_event.1065.d + #Sets variables and returns us to craftman screen + 1031_been_to_effect = { GUILD = jeweler } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + } + } + after = { + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:jeweler } + } +} + + +#Hire the Quartermaster, show/set the effects and variables +scripted_effect 1067_hire_quartermaster_effect = { + hidden_effect = { + reverse_add_opinion = { + target = scope:laamp_quartermaster_recruit + modifier = recruited_me_opinion + opinion = 30 + } + } + add_courtier = scope:laamp_quartermaster_recruit + #The actual effect happens in after + show_as_tooltip = { + camp_officer_grant_effect = { + EMPLOYER = root + POS = quartermaster + CANDIDATE = scope:laamp_quartermaster_recruit + } + } + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_quartermaster + value = flag:yes + } + #Go back to craftsmen district + hidden_effect = { 1061_return_to_craftsmen_effect = yes } +} + + +#Visit Quartermaster +ep3_laamp_decision_event.1067 = { + type = character_event + title = ep3_laamp_decision_event.1067.t + window = visit_settlement_window + desc = { + first_valid = { + #We've returned to this scene, now what + #RETURN: + random_valid = { + triggered_desc = { + trigger = { + exists = scope:been_to_quartermaster + scope:quartermaster_loc_tracker ?= 0 + } + desc = ep3_laamp_decision_event.1067.desc_returned_01 + } + triggered_desc = { + trigger = { scope:quartermaster_loc_tracker ?= 1 } + desc = ep3_laamp_decision_event.1067.desc_returned_02 + } + triggered_desc = { + trigger = { scope:quartermaster_loc_tracker ?= 2 } + desc = ep3_laamp_decision_event.1067.desc_returned_03 + } + } + #FIRST TIME: We've seen this quartermaster before + triggered_desc = { + trigger = { + exists = scope:laamp_recurring_quartermaster + NOT = { exists = scope:been_to_quartermaster } + } + desc = ep3_laamp_decision_event.1067.desc_reused_quartermaster + } + #FIRST TIME: + triggered_desc = { + trigger = { + NOT = { exists = scope:been_to_quartermaster } + } + desc = ep3_laamp_decision_event.1067.desc + } + } + } + theme = landless_adventurer + override_sound = { reference = "event:/MUSIC/Cues/Events/Positive/mx_cue_postive_effect" } + override_background = { reference = tavern } + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:laamp_quartermaster_recruit + animation = drink_goblet + } + immediate = { + #To prevent the character, for whatever reason, managing to not have the variable be removed when exiting VS + temporarily_lock_visit_settlement_effect = yes + #Run this once: Re-save the portrait so the Quartermaster is not the 1060_third_character (since they narratively moved to the tavern) + if = { + limit = { scope:1060_third_character = scope:laamp_quartermaster_recruit } + #Overwrite the portrait with ROOT to disable it + save_scope_as = 1060_third_character + #Remember the Quartermaster + 1010_remember_vendor_character_effect = { GUILD = quartermaster CHARACTER = scope:laamp_quartermaster_recruit } + } + #Can we _not_ repeat the loc? + 1025_set_and_check_hub_loc_tracker_scope_effect = { HUB = quartermaster } #This is only a hub because it has 3 random locs + } + #Pay up + option = { + name = ep3_laamp_decision_event.1067.a + pay_short_term_gold = { + target = scope:laamp_quartermaster_recruit + gold = minor_gold_value + } + #Wrap effect to hire 'em and also set up variables + 1067_hire_quartermaster_effect = yes + ai_chance = { + base = 100 + modifier = { + any_courtier = { count >= many_followers_value } + factor = 0 + } + } + } + #I have a sizeable camp for you to manage + option = { + name = ep3_laamp_decision_event.1067.b + trigger = { + custom_tooltip = { + text = not_enough_followers.tt + any_courtier = { count >= many_followers_value } + } + } + reason = many_followers + #_Oh noes_ + show_as_unavailable = { always = yes } + #Wrap effect to hire 'em and also set up variables + 1067_hire_quartermaster_effect = yes + ai_chance = { + base = 1000 #Just do it + } + } + #Intrigue duel + option = { + name = ep3_laamp_decision_event.1067.c + duel = { + skill = intrigue + value = average_skill_rating + #Success: Hire 'em up + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_decision_event.1067.c.success + send_interface_toast = { + title = ep3_laamp_decision_event.1067.c.success + left_icon = root + right_icon = scope:laamp_quartermaster_recruit + #Yippee! + 1067_hire_quartermaster_effect = yes + } + } + #Failure: Bye, now + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -20 + } + desc = ep3_laamp_decision_event.1067.c.failure + send_interface_toast = { + type = event_toast_text_bad + title = ep3_laamp_decision_event.1067.c.failure + desc = ep3_laamp_decision_event.1067.c.failure.tt + left_icon = root + right_icon = scope:laamp_quartermaster_recruit + #Oh well + custom_tooltip = ep3_laamp_decision_event.1067.c.failure.tt + #This 'finished' is different since it changes between flag:yes and flag:no + save_scope_value_as = { + name = laamp_decision_recruited_quartermaster + value = flag:no + } + 1061_return_to_craftsmen_effect = yes + } + } + } + ai_chance = { + base = 100 + modifier = { + any_courtier = { count >= many_followers_value } + factor = 0 + } + } + } + #Let's not + option = { + name = ep3_laamp_decision_event.1067.d + #Sets variables and returns us to craftman screen + 1031_been_to_effect = { GUILD = quartermaster } + ai_chance = { + base = 100 + modifier = { + any_courtier = { count >= many_followers_value } + factor = 0 + } + } + } + after = { + if = { + limit = { scope:laamp_decision_recruited_quartermaster ?= flag:yes } + #Appoint them + if = { + limit = { + can_appoint_char_to_court_position = { + CHAR = scope:laamp_quartermaster_recruit + COURT_POS = quartermaster_camp_officer + } + } + camp_officer_grant_effect = { + EMPLOYER = root + POS = quartermaster + CANDIDATE = scope:laamp_quartermaster_recruit + } + } + } + #What was our last location + 1000_update_last_location_effect = { LOCATION_FLAG = flag:quartermaster } + } +} + + +###################################################################### +# END +###################################################################### + + +#Seasoned Visitor Decision + +scripted_effect 1100_book_creation_effect = { + if = { + limit = { + has_variable = poi_visited + } + if = { + limit = { + artifacts_use_indian_books_trigger = yes + } + create_artifact = { + name = marco_polo_book_title + type = journal + template = marco_polo_book + creator = root + description = marco_polo_book_desc + visuals = indian_book + save_scope_as = newly_created_artifact + modifier = artifact_monthly_prestige_1_modifier + wealth = 50 + quality = 10 + } + } + else = { + create_artifact = { + name = marco_polo_book_title + type = journal + template = marco_polo_book + creator = root + description = marco_polo_book_desc + visuals = book + save_scope_as = newly_created_artifact + modifier = artifact_monthly_prestige_1_modifier + wealth = 50 + quality = 10 + } + } + hidden_effect = { + if = { + limit = { + var:poi_visited >= 60 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_lifestyle_xp_4_modifier + set_artifact_rarity = illustrious + } + } + else_if = { + limit = { + var:poi_visited >= 48 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_lifestyle_xp_3_modifier + set_artifact_rarity = famed + } + } + else_if = { + limit = { + var:poi_visited >= 36 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_lifestyle_xp_2_modifier + set_artifact_rarity = masterwork + } + } + else_if = { + limit = { + var:poi_visited >= 24 + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_monthly_lifestyle_xp_1_modifier + set_artifact_rarity = common + } + } + + scope:newly_created_artifact = { + remove_artifact_modifier = artifact_monthly_prestige_1_modifier + } + } + } +} + +scripted_effect 1100_lifestyle_perk_effect = { + if = { + limit = { + has_variable = poi_visited + } + if = { + limit = { + var:poi_visited >= 56 + } + add_relevant_lifestyle_perk_point_effect = { NUMBER = 5 } + } + else_if = { + limit = { + var:poi_visited >= 48 + } + add_relevant_lifestyle_perk_point_effect = { NUMBER = 4 } + } + else_if = { + limit = { + var:poi_visited >= 40 + } + add_relevant_lifestyle_perk_point_effect = { NUMBER = 3 } + } + else_if = { + limit = { + var:poi_visited >= 32 + } + add_relevant_lifestyle_perk_point_effect = { NUMBER = 2 } + } + else_if = { + limit = { + var:poi_visited >= 24 + } + add_relevant_lifestyle_perk_point_effect = { NUMBER = 1 } + } + } +} + +ep3_laamp_decision_event.1100 = { + type = character_event + title = ep3_laamp_decision_event.1100.t + desc = ep3_laamp_decision_event.1100.desc + window = visit_settlement_window + theme = travel + override_background = { reference = relaxing_room } + + left_portrait = { + character = root + animation = writing + } + + immediate = { + add_character_flag = had_seasoned_visitor_decision + } + + option = { #I will take it to my grave + name = ep3_laamp_decision_event.1100.a + flavor = ep3_laamp_decision_event.1100.a.flavor + custom_tooltip = ep3_laamp_decision_event.1100.a.desc + 1100_lifestyle_perk_effect = yes + + ai_chance = { + base = 50 + } + } + + option = { #I will write it down for future generations + name = ep3_laamp_decision_event.1100.b + flavor = ep3_laamp_decision_event.1100.b.flavor + 1100_book_creation_effect = yes + custom_tooltip = ep3_laamp_decision_event.1100.b.desc + + ai_chance = { + base = 100 + } + } + + option = { #Postpone the decision + name = ep3_laamp_decision_event.1100.c + flavor = ep3_laamp_decision_event.1100.c.flavor + custom_tooltip = ep3_laamp_decision_event.1100.c.desc + + remove_character_flag = had_seasoned_visitor_decision + + hidden_effect = { + add_prestige_no_experience = 1500 + add_gold = 500 + } + + ai_chance = { + base = 0 + } + } +} + +#Zealous Missionary Decision + +ep3_laamp_decision_event.1101 = { + type = character_event + title = ep3_laamp_decision_event.1101.t + desc = ep3_laamp_decision_event.1101.desc + window = visit_settlement_window + theme = faith + override_background = { reference = holy_site_generic } + + left_portrait = { + character = root + animation = prayer + } + + override_effect_2d = { + reference = legend_glow + } + + immediate = { + location = { + save_scope_as = holy_site_location + } + set_variable = { + name = holy_site_ascension + value = scope:holy_site_location + } + } + + option = { + name = ep3_laamp_decision_event.1101.a + custom_tooltip = ep3_laamp_decision_event.1101.a.desc + } +} + +ep3_laamp_decision_event.1102 = { + type = character_event + title = ep3_laamp_decision_event.1102.t + desc = ep3_laamp_decision_event.1102.desc + window = visit_settlement_window + theme = faith + override_background = { reference = terrain } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + learning >= 12 + } + animation = prayer + } + animation = personality_zealous + } + + immediate = { + add_character_flag = zealous_missionary_start + } + + trigger = { + has_variable = holy_site_ascension + } + + option = { + name = ep3_laamp_decision_event.1102.a + give_nickname = nick_the_missionary + custom_tooltip = ep3_laamp_decision_event.1102.a.desc + add_character_flag = { + flag = zealous_missionary_timer + years = 10 + } + trigger_event = ep3_laamp_decision_event.1103 + trigger_event = { + id = ep3_laamp_decision_event.1104 + months = 122 #2 months after the timer runs out + } + set_variable = { + name = num_counties_converted + value = 0 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = ep3_laamp_decision_event.1102.b + custom_tooltip = ep3_laamp_decision_event.1102.b.desc + remove_character_flag = zealous_missionary_start + ai_chance = { + base = 0 + } + } + +} +ep3_laamp_decision_event.1103 = { + type = character_event + title = ep3_laamp_decision_event.1103.t + window = visit_settlement_window + desc = { + random_valid = { + triggered_desc = { + trigger = { scope:current_location.county.faith = scope:current_location.county.holder.faith } + desc = ep3_laamp_decision_event.1103.desc + } + desc = ep3_laamp_decision_event.1103.desc.alternative + } + } + theme = faith + override_background = { reference = terrain } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + martial >= 12 + } + animation = inspect_weapon + } + triggered_animation = { + trigger = { + learning >= 12 + } + animation = prayer + } + triggered_animation = { + trigger = { + always = yes + } + animation = personality_zealous + } + } + + immediate = { + location = { + save_scope_as = current_location + } + } + + trigger = { #Double safeguard + has_character_flag = zealous_missionary_timer + government_has_flag = government_is_landless_adventurer + location ?= { + has_holding = yes + } + NOT = { + location.faith = root.faith + is_ai = yes + any_player = { + OR = { + this = location.county.holder + this = location.county.holder.top_liege + } + } + } + } + + option = { #pray very hard + name = { + text = { + random_valid = { + desc = ep3_laamp_decision_event.1103.a + desc = ep3_laamp_decision_event.1103.a.alternative + } + } + } + custom_tooltip = ep3_laamp_decision_event.1103.difficulty.desc + custom_tooltip = ep3_laamp_decision_event.1103.a.desc + + duel = { + skills = { diplomacy learning } + value = very_high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = { + subtract = location.county.county_opinion + } + } + modifier = { + factor = 0.75 + location.county.faith.religion = root.religion + } + modifier = { + factor = 0.75 + knows_language_of_culture = location.county.culture + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1103.a.success + left_icon = root + right_icon = location.county + location.county = { + set_county_faith = root.faith + } + ep3_hasan_advance_radicalism = yes + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = location.county.development_level + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1103.a.failure + left_icon = root + right_icon = location.county + add_stress = major_stress_gain + } + } + } + add_stress = miniscule_stress_gain + add_piety = { + value = 10 + multiply = location.county.development_level + min = 20 + } + + reverse_add_opinion = { + modifier = vengeful_opinion + opinion = -75 + target = location.county.holder + } + + ai_chance = { + base = 25 + modifier = { + add = root.learning + } + } + } + + option = { + trigger = { + root.faith = { + NOR = { + has_doctrine = tenet_dharmic_pacifism + has_doctrine = tenet_pacifism + } + } + + } + name = { + text = { + random_valid = { + desc = ep3_laamp_decision_event.1103.b + desc = ep3_laamp_decision_event.1103.b.alternative + } + } + } + flavor = ep3_laamp_decision_event.1103.b.flavor + custom_tooltip = ep3_laamp_decision_event.1103.difficulty.desc + custom_tooltip = ep3_laamp_decision_event.1103.b.desc + + duel = { + skills = { martial intrigue } + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = { + value = root.number_of_knights + multiply = 10 + } + } + modifier = { + add = root.current_military_strength + } + modifier = { + factor = 1.2 + root.faith = { + has_doctrine = tenet_armed_pilgrimages + } + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1103.a.success + left_icon = root + right_icon = location.county + location.county = { + set_county_faith = root.faith + } + ep3_hasan_advance_radicalism = yes + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = location.county.development_level + } + modifier = { + add = location.barony.building_max_garrison + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1103.a.failure + left_icon = root + right_icon = location.county + increase_wounds_effect = { REASON = fight } + random_courtier ?= { + increase_wounds_effect = { REASON = fight } + } + } + } + } + + add_piety = 50 + reverse_add_opinion = { + modifier = vengeful_opinion + opinion = -75 + target = location.county.holder + } + + + ai_chance = { + base = 50 + modifier = { + add = { + value = root.current_military_strength + multiply = 0.1 + } + } + modifier = { + add = { + value = location.barony.building_max_garrison + multiply = -0.1 + } + } + modifier = { + add = root.martial + } + } + } + + option = { + name = { + text = { + random_valid = { + desc = ep3_laamp_decision_event.1103.c + desc = ep3_laamp_decision_event.1103.c.alternative + } + } + } + flavor = ep3_laamp_decision_event.1103.c.flavor + + custom_tooltip = ep3_laamp_decision_event.1103.c.desc + + add_stress = minor_stress_gain + + ai_chance = { + base = 0 + } + } + + after = { + hidden_effect = { + if = { + limit = { + location.county.faith ?= root.faith + exists = var:num_counties_converted + } + change_variable = { + name = num_counties_converted + add = 1 + } + } + } + } +} + +ep3_laamp_decision_event.1104 = { + type = character_event + title = ep3_laamp_decision_event.1104.t + window = visit_settlement_window + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = scope:success + } + desc = ep3_laamp_decision_event.1104.desc + } + triggered_desc = { + trigger = { + exists = scope:failure + } + desc = ep3_laamp_decision_event.1104.desc.failure + } + } + } + theme = faith + override_background = { reference = terrain } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:success + } + animation = happiness + } + triggered_animation = { + trigger = { + exists = scope:failure + } + animation = shame + } + } + + override_effect_2d = { + trigger = { + exists = scope:success + } + reference = legend_glow + } + + override_effect_2d = { + trigger = { + exists = scope:failure + } + reference = rain + } + + trigger = { + has_variable = zealous_missionary_start + NOT = { + has_variable = zealous_missionary_timer + } + } + + immediate = { + if = { + limit = { + has_variable = num_counties_converted + var:num_counties_converted >= 3 + } + save_scope_as = success + } + else = { + save_scope_as = failure + } + } + + option = { + trigger = { + exists = scope:success + } + name = ep3_laamp_decision_event.1104.a + add_piety = omega_piety_gain + add_trait = saint + } + + option = { + trigger = { + exists = scope:failure + } + name = ep3_laamp_decision_event.1104.b + + add_stress = monumental_stress_gain + add_piety_level = -5 + if = { + limit = { + has_nickname = nick_the_missionary + } + remove_nickname = yes + give_nickname = nick_the_unworthy + } + } + +} + +ep3_laamp_decision_event.1110 = { + type = character_event + title = ep3_laamp_decision_event.1110.t + window = visit_settlement_window + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:first_kill } + desc = ep3_laamp_decision_event.1110.desc.has_kill + } + desc = ep3_laamp_decision_event.1110.desc.hasnt_kill + } + desc = ep3_laamp_decision_event.1110.desc.outro + } + + theme = war + + left_portrait = { + character = root + animation = celebrate_sword + } + + override_background = { reference = battlefield } + + override_effect_2d = { + reference = legend_glow + } + + immediate = { + ordered_killed_character = { + order_by = days_since_death + save_scope_as = first_kill + } + } + + option = { + name = ep3_laamp_decision_event.1110.a + flavor = ep3_laamp_decision_event.1110.a.flavor + custom_tooltip = ep3_laamp_decision_event.1110.a.desc + add_character_flag = had_laamp_conq_decision + trigger_event = { + id = conqueror.0001 + months = 4 + } + spawn_army = { + men_at_arms = { + type = accolade_maa_vanguards + stacks = 2 + } + men_at_arms = { + type = accolade_maa_lancers + stacks = 2 + } + men_at_arms = { + type = accolade_maa_archers + stacks = 4 + } + inheritable = no + uses_supply = no + location = root.location + name = event_troop_default_name + } + if = { + limit = { + exists = location.kingdom.holder + } + add_pressed_claim = location.kingdom + start_war = { + cb = ep3_laamp_adventurer_kingdom_invasion + target = location.kingdom.holder + claimant = root + target_title = location.kingdom + target_title = location.kingdom.title_capital_county + } + } + else_if = { + limit = { + exists = location.duchy.holder + } + add_pressed_claim = location.duchy + start_war = { + cb = claim_cb + target = location.duchy.holder + claimant = root + target_title = location.duchy + target_title = location.duchy.title_capital_county + } + } + else_if = { + limit = { + exists = location.county.holder + } + add_pressed_claim = location.county + start_war = { + cb = claim_cb + target = location.county.holder + claimant = root + target_title = location.county + } + } + if = { + limit = { has_dlc_feature = legends } + create_legend_seed = { + type = heroic + quality = famed + chronicle = conqueror_chronicle + } + } + } +} + +ep3_laamp_decision_event.1120 = { + type = character_event + title = ep3_laamp_decision_event.1120.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1120.desc + + theme = intrigue + + left_portrait = { + character = root + animation = personality_dishonorable + } + + override_background = { reference = alley_night } + + override_effect_2d = { + reference = fog + } + + + immediate = { + become_bandit_king_decision_effect = yes + set_variable = { + name = maa_number + value = 0 + } + } + + option = { + name = ep3_laamp_decision_event.1120.a + flavor = ep3_laamp_decision_event.1120.a.flavor + + set_variable = { #error spam prevention + name = maa_number + value = 0 + } + + bandit_king_maa_spawn_effect = yes + } +} + +ep3_laamp_decision_event.1130 = { #begin city construction + type = character_event + title = ep3_laamp_decision_event.1130.t + window = big_event_window + desc = ep3_laamp_decision_event.1130.desc + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + immediate = { + location = { + set_variable = laamp_city_construction + save_scope_as = city_location + } + } + + option = { #less go + name = ep3_laamp_decision_event.1130.a + custom_tooltip = ep3_laamp_decision_event.1130.a.desc + add_character_flag = laamp_city_builder + scope:city_location = { + if = { + limit = { + root = { has_variable = city_construction_is_temple_citadel } + } + begin_create_holding = { type = temple_citadel_holding } + } + else = { + begin_create_holding = { type = castle_holding } + } + } + + trigger_event = { + id = ep3_laamp_decision_event.1131 + months = 1 # Checked monthly in trigger_fail for event + } + trigger_event = { + id = ep3_laamp_decision_event.1133 + months = { 4 6 } + } + + ai_chance = { + base = 10 + } + } + + option = { #I'm a silly goose, nvm + name = ep3_laamp_decision_event.1130.b + add_gold = 400 + + ai_chance = { + base = 0 + } + } +} + +ep3_laamp_decision_event.1131 = { #city is finished, wat do + type = character_event + title = ep3_laamp_decision_event.1131.t + window = big_event_window + desc = ep3_laamp_decision_event.1131.desc + + theme = stewardship + + override_background = { + trigger = { + location = { + culture = { has_building_gfx = southeast_asian_building_gfx } + } + } + reference = mpo_rural_village_asian + } + override_background = { reference = alley_day } + + left_portrait = { + character = root + animation = happiness + } + + trigger = { + scope:city_location = { + OR = { + has_holding_type = temple_citadel_holding + has_holding_type = castle_holding + } + } + } + + immediate = { #reward building spawn + save_scope_value_as = { + name = year_of_construction + value = current_year + } + + if = { + limit = { + scope:city_location = { has_holding_type = temple_citadel_holding } + } + laamp_city_builder_construction_effect = { + FLAG = mill + BUILDING = watermills + } + laamp_city_builder_construction_effect = { + FLAG = temple_citadel + BUILDING = temple_citadel + } + laamp_city_builder_construction_effect = { + FLAG = manor + BUILDING = farm_estates + } + laamp_city_builder_construction_effect = { + FLAG = spice_plantation + BUILDING = spice_plantation + } + laamp_city_builder_construction_effect = { + FLAG = vihara_halls + BUILDING = vihara_halls + } + } + else = { + laamp_city_builder_construction_effect = { + FLAG = mill + BUILDING = watermills + } + laamp_city_builder_construction_effect = { + FLAG = castle + BUILDING = castle + } + laamp_city_builder_construction_effect = { + FLAG = manor + BUILDING = farm_estates + } + laamp_city_builder_construction_effect = { + FLAG = workshops + BUILDING = workshops + } + laamp_city_builder_construction_effect = { + FLAG = prayer_hall + BUILDING = monastic_schools + } + } + + } + + on_trigger_fail = { + if = { + limit = { + scope:city_location = { #somehow, the city is still being built + has_ongoing_construction = yes + has_holding = no + } + } + trigger_event = { + id = ep3_laamp_decision_event.1131 + months = 1 + } + } + } + + option = { #well, actually imma get the whole county + name = ep3_laamp_decision_event.1131.a + + set_variable = { + name = holding_barony + value = scope:city_location.barony + } + add_pressed_claim = scope:city_location.county + add_pressed_claim = scope:city_location.barony + add_character_flag = temp_no_claim_war_cost + start_war = { + cb = claim_cb + target = scope:city_location.county.holder + claimant = root + target_title = scope:city_location.county + target_title = scope:city_location.barony + } + remove_character_flag = temp_no_claim_war_cost + + ai_chance = { + base = 0 + } + } + + option = { #the city existence is a reward enough + name = ep3_laamp_decision_event.1131.b + add_prestige = 2000 + give_nickname = nick_the_city_builder + custom_tooltip = ep3_laamp_decision_event.1131.b.desc + trigger_event = { + id = ep3_laamp_decision_event.1140 + months = { 1 1 } + } + remove_character_flag = laamp_city_builder + remove_variable = city_construction_is_temple_citadel + remove_variable = city_construction_is_castle + + ai_chance = { + base = 10 + } + } + + after = { + remove_character_flag = laamp_city_builder_mill + remove_character_flag = laamp_city_builder_mill_upgrade + remove_character_flag = laamp_city_builder_temple_citadel + remove_character_flag = laamp_city_builder_temple_citadel_upgrade + remove_character_flag = laamp_city_builder_castle + remove_character_flag = laamp_city_builder_castle_upgrade + remove_character_flag = laamp_city_builder_manor + remove_character_flag = laamp_city_builder_manor_upgrade + remove_character_flag = laamp_city_builder_spice_plantation + remove_character_flag = laamp_city_builder_spice_plantation_upgrade + remove_character_flag = laamp_city_builder_workshops + remove_character_flag = laamp_city_builder_workshops_upgrade + remove_character_flag = laamp_city_builder_vihara_halls + remove_character_flag = laamp_city_builder_vihara_halls_upgrade + remove_character_flag = laamp_city_builder_prayer_hall + remove_character_flag = laamp_city_builder_prayer_hall_upgrade + } + +} + +scripted_trigger 1133_holding_still_under_construction_trigger = { + scope:city_location = { + has_ongoing_construction = yes + NOR = { + has_holding_type = temple_citadel_holding + has_holding_type = castle_holding + } + } +} + +ep3_laamp_decision_event.1133 = { #get a mill + type = character_event + title = ep3_laamp_decision_event.1133.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1133.desc + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + trigger = { + 1133_holding_still_under_construction_trigger = yes + OR = { + stewardship >= 18 + has_trait = architect + } + } + + on_trigger_fail = { + trigger_event = { + id = ep3_laamp_decision_event.1134 + months = { 4 6 } + } + } + + option = { #cool + name = ep3_laamp_decision_event.1133.a + add_character_flag = laamp_city_builder_mill + show_as_tooltip = { + scope:city_location = { + add_building = watermills_01 + } + } + remove_short_term_gold = 80 + + ai_chance = { + base = 0 + } + + } + + option = { #go for it! + name = ep3_laamp_decision_event.1133.b + add_character_flag = laamp_city_builder_mill_upgrade + show_as_tooltip = { + scope:city_location = { + add_building = watermills_03 + } + } + remove_short_term_gold = 200 + + ai_chance = { + base = 10 + } + } + + option = { #nah + name = ep3_laamp_decision_event.1133.c + + ai_chance = { + base = 0 + } + } + + after = { + trigger_event = { + id = ep3_laamp_decision_event.1134 + months = { 4 6 } + } + } + +} + +ep3_laamp_decision_event.1134 = { #get more settlers, main building upgrade + type = character_event + title = ep3_laamp_decision_event.1134.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1134.desc + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + trigger = { + 1133_holding_still_under_construction_trigger = yes + OR = { + piety_level >= 3 + prestige_level >= 3 + } + } + + on_trigger_fail = { + trigger_event = { + id = ep3_laamp_decision_event.1135 + months = { 4 6 } + } + } + + option = { #cool + name = ep3_laamp_decision_event.1134.a + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_temple_citadel + scope:city_location = { + show_as_tooltip = { add_building = temple_citadel_02 } + } + } + else = { + add_character_flag = laamp_city_builder_castle + scope:city_location = { + show_as_tooltip = { add_building = castle_02 } + } + } + remove_short_term_gold = { + value = { + add = medium_gold_value + multiply = 2 + } + } + if = { + limit = { + piety_level >= 3 + } + add_piety = -300 + } + else = { + add_prestige = -300 + } + + ai_chance = { + base = 0 + } + + } + + option = { #go for it! + name = ep3_laamp_decision_event.1134.b + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_temple_citadel_upgrade + scope:city_location = { + show_as_tooltip = { add_building = temple_citadel_03 } + } + } + else = { + add_character_flag = laamp_city_builder_castle_upgrade + scope:city_location = { + show_as_tooltip = { add_building = castle_03 } + } + } + remove_short_term_gold = { + value = { + add = major_gold_value + multiply = 2 + } + } + if = { + limit = { + piety_level >= 3 + } + add_piety = -500 + } + else = { + add_prestige = -500 + } + + ai_chance = { + base = 10 + } + } + + option = { #nah + name = ep3_laamp_decision_event.1134.c + + ai_chance = { + base = 0 + } + } + + after = { + trigger_event = { + id = ep3_laamp_decision_event.1135 + months = { 4 6 } + } + } + +} + +ep3_laamp_decision_event.1135 = { #argue for more favorable land assigment from county ruler, get manor houses building + type = character_event + title = ep3_laamp_decision_event.1135.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1135.desc + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + right_portrait = { + character = scope:city_location.county.holder + animation = thinking + } + + trigger = { + 1133_holding_still_under_construction_trigger = yes + scope:city_location.county.holder = { + reverse_opinion = { + target = root + value >= 40 + } + } + NOR = { + scope:city_location = { + terrain = desert + terrain = desert_mountains + } + } + } + + option = { #cool + name = ep3_laamp_decision_event.1135.a + add_character_flag = laamp_city_builder_manor + show_as_tooltip = { + scope:city_location = { + add_building = farm_estates_01 + } + } + pay_short_term_gold = { + target = scope:city_location.county.holder + gold = 80 + } + remove_short_term_gold = 60 + + ai_chance = { + base = 0 + } + } + + option = { #go for it! + name = ep3_laamp_decision_event.1135.b + add_character_flag = laamp_city_builder_manor_upgrade + show_as_tooltip = { + scope:city_location = { + add_building = farm_estates_03 + } + } + pay_short_term_gold = { + target = scope:city_location.county.holder + gold = 120 + } + remove_short_term_gold = 220 + + ai_chance = { + base = 10 + } + } + + option = { #nah + name = ep3_laamp_decision_event.1135.c + + ai_chance = { + base = 0 + } + } + +} + +ep3_laamp_decision_event.1136 = { #utilize connections, get merchant building + type = character_event + title = ep3_laamp_decision_event.1136.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1136.desc + + orphan = yes + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + trigger = { + 1133_holding_still_under_construction_trigger = yes + prestige_level >= 3 + } + + on_trigger_fail = { + trigger_event = { + id = ep3_laamp_decision_event.1137 + months = { 4 6 } + } + } + + option = { #cool + name = ep3_laamp_decision_event.1136.a + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_spice_plantation + scope:city_location = { + show_as_tooltip = { add_building = spice_plantation_01 } + } + } + else = { + add_character_flag = laamp_city_builder_workshops + scope:city_location = { + show_as_tooltip = { add_building = workshops_01 } + } + } + add_prestige = -400 + remove_short_term_gold = 120 + + ai_chance = { + base = 0 + } + + } + + option = { #go for it! + name = ep3_laamp_decision_event.1136.b + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_spice_plantation_upgrade + scope:city_location = { + show_as_tooltip = { add_building = spice_plantation_03 } + } + } + else = { + add_character_flag = laamp_city_builder_workshops_upgrade + scope:city_location = { + show_as_tooltip = { add_building = workshops_03 } + } + } + add_prestige = -600 + remove_short_term_gold = 200 + + ai_chance = { + base = 10 + } + } + + option = { #nah + name = ep3_laamp_decision_event.1136.c + + ai_chance = { + base = 0 + } + } + + after = { + trigger_event = { + id = ep3_laamp_decision_event.1137 + months = { 4 6 } + } + } + +} + +ep3_laamp_decision_event.1137 = { #utilize connections, get prayer hall + type = character_event + title = ep3_laamp_decision_event.1137.t + window = visit_settlement_window + desc = ep3_laamp_decision_event.1137.desc + + theme = stewardship + + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = survey + } + + trigger = { + 1133_holding_still_under_construction_trigger = yes + piety_level >= 3 + } + + option = { #cool + name = ep3_laamp_decision_event.1137.a + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_vihara_halls + scope:city_location = { + show_as_tooltip = { add_building = vihara_halls_01 } + } + } + else = { + add_character_flag = laamp_city_builder_prayer_hall + scope:city_location = { + show_as_tooltip = { add_building = monastic_schools_01 } + } + } + add_piety = -400 + remove_short_term_gold = 120 + + ai_chance = { + base = 0 + } + + } + + option = { #go for it! + name = ep3_laamp_decision_event.1137.b + if = { + limit = { has_variable = city_construction_is_temple_citadel } + add_character_flag = laamp_city_builder_vihara_halls_upgrade + scope:city_location = { + show_as_tooltip = { add_building = vihara_halls_03 } + } + } + else = { + add_character_flag = laamp_city_builder_prayer_hall_upgrade + scope:city_location = { + show_as_tooltip = { add_building = monastic_schools_03 } + } + } + add_piety = -600 + remove_short_term_gold = 200 + + ai_chance = { + base = 10 + } + } + + option = { #nah + name = ep3_laamp_decision_event.1137.c + + ai_chance = { + base = 0 + } + } + +} + +ep3_laamp_decision_event.1140 = { #city pays dividend + hidden = yes + + trigger = { + has_government = landless_adventurer_government + current_year <= laamp_city_construction_year_value + } + + immediate = { + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_decision_event.1140.toast + left_icon = scope:city_location.barony + add_gold = { + value = 0 + add = { + value = 4 + multiply = scope:city_location.combined_building_level + } + add = { + value = 3 + multiply = scope:city_location.county.development_level + } + multiply = { # Slowly decrease over time, by 1% every year + value = { + value = laamp_city_construction_year_value + subtract = current_year + divide = 100 + } + } + min = 25 + max = 200 + } + } + primary_title.holder ?= { + trigger_event = { + id = ep3_laamp_decision_event.1140 + months = { 11 13 } + } + } + } +} + +################################################## +# Butcher Animals +# by Ewan Cowhig Croft +# 1201 - 1210 +################################################## + +scripted_effect 1201_prune_dog_stories_effect = { + remove_dog_story_modifiers_effect = yes + random_owned_story = { + type = story_cycle_pet_dog + hidden_effect = { end_story = yes } + } +} + + +# Your camp eats its dogs. +ep3_laamp_decision_event.1201 = { + type = character_event + title = ep3_laamp_decision_event.1201.t + desc = { + desc = ep3_laamp_decision_event.1201.desc.intro + first_valid = { + # There's a whole kennels being eaten, including our dog. + triggered_desc = { + trigger = { + exists = scope:kennels_gone + has_character_modifier = dog_story_modifier + } + desc = ep3_laamp_decision_event.1201.desc.eaten.kennels.have_dog + } + # There's a whole kennels being eaten, but we lack a dog. + triggered_desc = { + trigger = { exists = scope:kennels_gone } + desc = ep3_laamp_decision_event.1201.desc.eaten.kennels.no_dog + } + # There's one dog being eaten, and it's ours. + triggered_desc = { + trigger = { + scope:dogs_killed = 1 + has_character_modifier = dog_story_modifier + } + desc = ep3_laamp_decision_event.1201.desc.eaten.one.have_dog + } + # There's one dog being eaten, and it's someone else's. + triggered_desc = { + trigger = { scope:dogs_killed = 1 } + desc = ep3_laamp_decision_event.1201.desc.eaten.one.no_dog + } + # There's many dogs being eaten, one of them ours. + triggered_desc = { + trigger = { + scope:dogs_killed >= 4 + has_character_modifier = dog_story_modifier + } + desc = ep3_laamp_decision_event.1201.desc.eaten.many.have_dog + } + # There's many dogs being eaten, none of them ours. + triggered_desc = { + trigger = { scope:dogs_killed >= 4 } + desc = ep3_laamp_decision_event.1201.desc.eaten.many.no_dog + } + # There's a bare handful of dogs being eaten, one of them ours. + triggered_desc = { + trigger = { + scope:dogs_killed <= 3 + has_character_modifier = dog_story_modifier + } + desc = ep3_laamp_decision_event.1201.desc.eaten.some.have_dog + } + # There's a bare handful of dogs being eaten, none of them ours. + desc = ep3_laamp_decision_event.1201.desc.eaten.some.no_dog + } + desc = ep3_laamp_decision_event.1201.desc.outro + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = dismissal + } + animation = stress + } + right_portrait = { + character = scope:portrait_char + animation = fear + } + + immediate = { + # Apply cooldown. + add_character_flag = { + flag = recently_ate_dogs + years = butcher_animals_decision_regular_cooldown_value + } + # Register how many provisions we'll get. + domicile = { + change_provisions = { + value = { + value = 0 + root = { + every_courtier = { + limit = { has_character_modifier = dog_story_modifier } + add = butcher_animals_decision_dog_provision_value + } + if = { + limit = { has_character_modifier = dog_story_modifier } + add = butcher_animals_decision_dog_provision_value + } + } + if = { + limit = { has_domicile_building = baggage_train_kennel } + add = butcher_animals_decision_dog_building_provision_value + } + } + } + } + # Sort our aesthetics. + ## How many dogs are we losing? + save_scope_value_as = { + name = dogs_killed + value = { + every_courtier = { + limit = { has_character_modifier = dog_story_modifier } + add = 1 + } + if = { + limit = { has_character_modifier = dog_story_modifier } + add = 1 + } + } + } + ## Grab a portrait if possible. + random_courtier = { + limit = { + NOT = { has_trait = callous } + has_character_modifier = dog_story_modifier + } + weight = { + modifier = { + add = 1000 + OR = { + is_close_family_of = root + is_consort_of = root + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + } + } + } + save_scope_as = portrait_char + } + # Aaaand remove our dogs. + ## We do this separately in various blocks for proper tooltipping & linking. + every_courtier = { + custom = ep3_laamp_decision_event.1201.tt.followers_with_dogs + limit = { + NOT = { has_trait = callous } + has_character_modifier = dog_story_modifier + } + add_opinion = { + target = root + modifier = butcher_opinion + opinion = -25 + } + } + every_courtier = { + limit = { has_character_modifier = dog_story_modifier } + custom_tooltip = { + text = ep3_laamp_decision_event.1201.tt.dog_lost + subject = this + } + } + hidden_effect = { + every_courtier = { 1201_prune_dog_stories_effect = yes } + } + # Liquidate the kennels. + domicile = { + if = { + limit = { has_domicile_building = baggage_train_kennel } + remove_domicile_building = baggage_train_kennel + # Flag that this happened. + save_scope_value_as = { + name = kennels_gone + value = yes + } + } + } + } + + # Non-callous. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_character_modifier = dog_story_modifier } + desc = ep3_laamp_decision_event.1201.a.own_dog + } + desc = ep3_laamp_decision_event.1201.a + } + } + } + + # We do stress first because it's more if you eat your own pets. + if = { + limit = { has_character_modifier = dog_story_modifier } + # Goodbye, good boy. + custom_tooltip = { + text = ep3_laamp_decision_event.1201.tt.your_dog_lost + 1201_prune_dog_stories_effect = yes + } + stress_impact = { + base = massive_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + } + else = { + stress_impact = { + base = major_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + } + + # The AI only takes this if they have no other option. + ai_chance = { base = 0 } + } + + # Callous. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_character_modifier = dog_story_modifier } + desc = ep3_laamp_decision_event.1201.b.own_dog + } + desc = ep3_laamp_decision_event.1201.b + } + } + } + trigger = { has_trait = callous } + trait = callous + + # Eh, I can get another. + if = { + limit = { has_character_modifier = dog_story_modifier } + custom_tooltip = { + text = ep3_laamp_decision_event.1201.tt.your_dog_lost + 1201_prune_dog_stories_effect = yes + } + } + + stress_impact = { callous = massive_stress_impact_loss } + # If the AI is callous, they should always take this. + ai_chance = { base = 1000 } + } +} + +scripted_effect 1202_prune_cat_stories_effect = { + remove_cat_story_modifiers_effect = yes + random_owned_story = { + type = story_cycle_pet_cat + hidden_effect = { end_story = yes } + } +} + +# Your camp eats its cats. +ep3_laamp_decision_event.1202 = { + type = character_event + title = ep3_laamp_decision_event.1202.t + desc = { + desc = ep3_laamp_decision_event.1202.desc.intro + first_valid = { + # There's one cat being eaten, and it's ours. + triggered_desc = { + trigger = { + scope:cats_killed = 1 + has_character_modifier = cat_story_modifier + } + desc = ep3_laamp_decision_event.1202.desc.eaten.one.have_cat + } + # There's one cat being eaten, and it's someone else's. + triggered_desc = { + trigger = { scope:cats_killed = 1 } + desc = ep3_laamp_decision_event.1202.desc.eaten.one.no_cat + } + # There's many cats being eaten, one of them ours. + triggered_desc = { + trigger = { + scope:cats_killed >= 4 + has_character_modifier = cat_story_modifier + } + desc = ep3_laamp_decision_event.1202.desc.eaten.many.have_cat + } + # There's many cats being eaten, none of them ours. + triggered_desc = { + trigger = { scope:cats_killed >= 4 } + desc = ep3_laamp_decision_event.1202.desc.eaten.many.no_cat + } + # There's a bare handful of cats being eaten, one of them ours. + triggered_desc = { + trigger = { has_character_modifier = cat_story_modifier } + desc = ep3_laamp_decision_event.1202.desc.eaten.some.have_cat + } + # There's a bare handful of cats being eaten, none of them ours. + desc = ep3_laamp_decision_event.1202.desc.eaten.some.no_cat + } + desc = ep3_laamp_decision_event.1202.desc.outro + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = dismissal + } + animation = stress + } + right_portrait = { + character = scope:portrait_char + animation = fear + } + + immediate = { + # Apply cooldown. + add_character_flag = { + flag = recently_ate_cats + years = butcher_animals_decision_regular_cooldown_value + } + # Register how many provisions we'll get. + domicile = { + change_provisions = { + value = { + value = 0 + root = { + every_courtier = { + limit = { has_character_modifier = cat_story_modifier } + add = butcher_animals_decision_cat_provision_value + } + if = { + limit = { has_character_modifier = cat_story_modifier } + add = butcher_animals_decision_cat_provision_value + } + } + } + } + } + # Sort our aesthetics. + ## How many cats are we losing? + save_scope_value_as = { + name = cats_killed + value = { + every_courtier = { + limit = { has_character_modifier = cat_story_modifier } + add = 1 + } + if = { + limit = { has_character_modifier = cat_story_modifier } + add = 1 + } + } + } + ## Grab a portrait if possible. + random_courtier = { + limit = { + NOT = { has_trait = callous } + has_character_modifier = cat_story_modifier + } + weight = { + modifier = { + add = 1000 + OR = { + is_close_family_of = root + is_consort_of = root + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + } + } + } + save_scope_as = portrait_char + } + # Aaaand remove our cats. + ## We do this separately in various blocks for proper tooltipping & linking. + every_courtier = { + custom = ep3_laamp_decision_event.1201.tt.followers_with_cats + limit = { + NOT = { has_trait = callous } + has_character_modifier = cat_story_modifier + } + add_opinion = { + target = root + modifier = butcher_opinion + opinion = -25 + } + } + every_courtier = { + limit = { has_character_modifier = cat_story_modifier } + custom_tooltip = { + text = ep3_laamp_decision_event.1202.tt.cat_lost + subject = this + } + } + hidden_effect = { + every_courtier = { 1202_prune_cat_stories_effect = yes } + } + } + + # Non-callous. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_character_modifier = cat_story_modifier } + desc = ep3_laamp_decision_event.1202.a.own_cat + } + desc = ep3_laamp_decision_event.1202.a + } + } + } + + # We do stress first because it's more if you eat your own pets. + if = { + limit = { has_character_modifier = cat_story_modifier } + # Our regal companionship is ended. + custom_tooltip = { + text = ep3_laamp_decision_event.1202.tt.your_cat_lost + 1202_prune_cat_stories_effect = yes + } + stress_impact = { + base = massive_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + } + else = { + stress_impact = { + base = major_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + } + + # The AI only takes this if they have no other option. + ai_chance = { base = 0 } + } + + # Callous. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_character_modifier = cat_story_modifier } + desc = ep3_laamp_decision_event.1202.b.own_cat + } + desc = ep3_laamp_decision_event.1202.b + } + } + } + trigger = { has_trait = callous } + trait = callous + + # A cat is a cat. + if = { + limit = { has_character_modifier = cat_story_modifier } + # Our regal companionship is ended. + custom_tooltip = { + text = ep3_laamp_decision_event.1202.tt.your_cat_lost + 1202_prune_cat_stories_effect = yes + } + } + + stress_impact = { callous = massive_stress_impact_loss } + # If the AI is callous, they should always take this. + ai_chance = { base = 1000 } + } +} + + +scripted_effect 1203_prune_horse_stories_effect = { + remove_horse_story_modifiers_effect = yes + random_owned_story = { + type = story_cycle_martial_lifestyle_warhorse + end_story = yes + } +} + +# Your camp eats its horses. +ep3_laamp_decision_event.1203 = { + type = character_event + title = ep3_laamp_decision_event.1203.t + desc = { + desc = ep3_laamp_decision_event.1203.desc.intro + first_valid = { + # Both your horse and your reserve steeds are getting eaten. + triggered_desc = { + trigger = { + has_character_modifier = horse_story_modifier + exists = scope:horses_gone + } + desc = ep3_laamp_decision_event.1203.desc.eaten.both + } + # Just your horse is getting eaten. + triggered_desc = { + trigger = { has_character_modifier = horse_story_modifier } + desc = ep3_laamp_decision_event.1203.desc.eaten.own_horse + } + # Just the reserve steeds are getting eaten. + triggered_desc = { + trigger = { exists = scope:horses_gone } + desc = ep3_laamp_decision_event.1203.desc.eaten.reserve_steeds + } + } + desc = ep3_laamp_decision_event.1203.desc.outro + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = dismissal + } + animation = stress + } + + immediate = { + # Apply cooldown. + add_character_flag = { + flag = recently_ate_horses + years = butcher_animals_decision_regular_cooldown_value + } + # Make it look like we've killed our horse, but hold them till after for loc. + show_as_tooltip = { 1203_prune_horse_stories_effect = yes } + # Register how many provisions we'll get. + domicile = { + change_provisions = { + root = { + if = { + limit = { has_character_modifier = horse_story_modifier } + add = butcher_animals_decision_horse_provision_value + } + } + if = { + limit = { has_domicile_building = baggage_train_ample_steeds } + add = butcher_animals_decision_horse_building_provision_value + } + } + # Liquidate the horses. + if = { + limit = { has_domicile_building = baggage_train_ample_steeds } + remove_domicile_building = baggage_train_ample_steeds + # Flag that this happened. + save_scope_value_as = { + name = horses_gone + value = yes + } + } + } + } + + # Non-callous: even in death, they carry us forward.. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:horses_gone } + desc = ep3_laamp_decision_event.1203.a.many_steeds + } + desc = ep3_laamp_decision_event.1203.a.single_steed + } + } + } + + stress_impact = { + base = major_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + # The AI only takes this if they have no other option. + ai_chance = { base = 0 } + } + + # Callous: you know, this isn't that bad actually... + option = { + name = ep3_laamp_decision_event.1203.b + trigger = { has_trait = callous } + trait = callous + + stress_impact = { callous = massive_stress_impact_loss } + # If the AI is callous, they should always take this. + ai_chance = { base = 1000 } + } + + after = { + hidden_effect = { 1203_prune_horse_stories_effect = yes } + } +} + +# Your camp eats its elephants. +ep3_laamp_decision_event.1204 = { + type = character_event + title = ep3_laamp_decision_event.1204.t + desc = ep3_laamp_decision_event.1204.desc + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = callous } + animation = dismissal + } + animation = stress + } + + immediate = { + # Apply cooldown. + add_character_flag = { + flag = recently_ate_elephants + years = butcher_animals_decision_elephant_cooldown_value + } + # Register how many provisions we'll get. + domicile = { + change_provisions = butcher_animals_decision_elephant_building_provision + # Liquidate the elephants. + if = { + limit = { has_domicile_building = proving_grounds_elephantry_reserve } + remove_domicile_building = proving_grounds_elephantry_reserve + } + } + } + + # Non-callous. + option = { + name = ep3_laamp_decision_event.1204.a + + stress_impact = { + base = major_stress_gain + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + # The AI only takes this if they have no other option. + ai_chance = { base = 0 } + } + + # Callous. + option = { + name = ep3_laamp_decision_event.1204.b + trigger = { has_trait = callous } + trait = callous + + stress_impact = { callous = massive_stress_impact_loss } + # If the AI is callous, they should always take this. + ai_chance = { base = 1000 } + } + + # Will there be additional consequences? + after = { + if = { + limit = { + any_maa_regiment = { is_unit_type = elephant_cavalry } + } + trigger_event = { + id = ep3_laamp_decision_event.1205 + years = 1 + } + } + } +} + +# Elephant survivors never forget. +ep3_laamp_decision_event.1205 = { + type = character_event + title = ep3_laamp_decision_event.1205.t + desc = ep3_laamp_decision_event.1205.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + + immediate = { add_character_modifier = ep3_laamp_decision_event_1205_modifier } + + # Damn and blast these recalcitrant beasts! + option = { + name = ep3_laamp_decision_event.1205.a + + custom_tooltip = ep3_laamp_decision_event.1205.a.tt + + # No stress, no AI. + } +} + +scripted_trigger ep3_laamp_decision_event_1300_age_diff_trigger = { + OR = { + age <= { + value = scope:char_current.age + add = 5 + } + scope:char_current.age >= { + value = age + add = 5 + } + } +} + +#Youths of LAAMP-prone cultures consider becoming LAAMPs +ep3_laamp_decision_event.1300 = { + hidden = yes + trigger = { + laamp_youth_cultural_tradition_trigger = yes + #Looser skill reqs for eager-ass Normans + trigger_if = { + limit = { + culture = { + has_cultural_parameter = much_more_likely_to_be_laamps + } + } + OR = { + prowess >= 8 + martial >= 8 + } + } + trigger_else = { + OR = { + prowess >= 10 + martial >= 10 + } + } + ai_boldness > 0 + ai_energy > 0 + } + immediate = { + random = { + chance = 0 + modifier = { add = ep3_laamp_chance_score_value } + #Counteract bonus in above value somewhat + modifier = { + always = yes + add = -50 + } + create_landless_adventurer_title_effect = { + REASON = flag:runaway_allowed + FLAVOR_CHAR = liege + } + # Create a bunch of secondary chars to go on their adventure with them (so that Norman/Turkish bands don't immediately de-Normanify/Turkify). + while = { + count = 3 + create_character = { + template = soldier_friend_character + employer = root + culture = root.culture + faith = root.faith + age = root.age + gender_female_chance = root_soldier_female_chance + after_creation = { add_to_list = created_chars_list } + } + } + while = { + count = 3 + create_character = { + template = mercenary + employer = root + culture = root.culture + faith = root.faith + gender_female_chance = root_soldier_female_chance + after_creation = { add_to_list = created_chars_list } + } + } + ## Plus add starting drama. + every_in_list = { + list = created_chars_list + save_scope_as = char_current + random_list = { + 100 = { + trigger = { + any_in_list = { + list = created_chars_list + can_set_relation_friend_trigger = { CHARACTER = scope:char_current } + } + } + random_in_list = { + list = created_chars_list + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:char_current } + } + set_random_friendship_reason = { TARGET = scope:char_current } + } + } + 100 = { + trigger = { + any_in_list = { + list = created_chars_list + can_set_relation_rival_trigger = { CHARACTER = scope:char_current } + } + } + random_in_list = { + list = created_chars_list + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:char_current } + } + set_random_rivalry_reason = { + TARGET = scope:char_current + RELATION = rival + } + } + } + 100 = { + trigger = { + any_in_list = { + list = created_chars_list + ep3_laamp_decision_event_1300_age_diff_trigger = yes + can_set_relation_lover_trigger = { CHARACTER = scope:char_current } + } + } + random_in_list = { + list = created_chars_list + limit = { + ep3_laamp_decision_event_1300_age_diff_trigger = yes + can_set_relation_lover_trigger = { CHARACTER = scope:char_current } + } + set_random_lover_reason = { TARGET = scope:char_current } + } + } + } + } + trigger_event = ep3_laamps.0003 + if = { # Debug AI tracking + limit = { debug_only = yes } + if = { + limit = { exists = global_var:ai_birthday_cultrad_laamp_count } + change_global_variable = { + name = ai_birthday_cultrad_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_birthday_cultrad_laamp_count + value = 1 + } + } + debug_log = "AI became adventurer due to cultural tradition" + debug_log_scopes = yes + } + } + } +} diff --git a/events/dlc/ep3/ep3_laamp_events.txt b/events/dlc/ep3/ep3_laamp_events.txt new file mode 100644 index 00000000..6813ea2f --- /dev/null +++ b/events/dlc/ep3/ep3_laamp_events.txt @@ -0,0 +1,9084 @@ +namespace = ep3_laamps + +#### +# ep3_laamps.0001-0003 - Become Adventurer - Conquest +# ep3_laamps.0010-0012 - Become Adventurer - Succession +# ep3_laamps.0020-0021 - Become Adventurer - Exile +# ep3_laamps.0030-0032 - Become Adventurer - Voluntary +# ep3_laamps.0040-0042 - Become Adventurer - Revocation +# ep3_laamps.0050-0051 - Become Adventurer - Runaway +# ep3_laamps.0100-0102 - Become Landed - Purchase +# ep3_laamps.0200-0201 - Become Landed - Sponsored Invasion +# ep3_laamps.0300-0302 - Become Landed - Negotiated +# ep3_laamps.0400-0412 - Become Landed - Seize Realm +## +# 5000-5998 - Generalist LAAMP events +### + +# //\ /\\ +# || * \ . . / * || +# \\____\X/____// +# / * /O\ * \ +# \__/ " \__/ +# BRÖTHER +# I CRAVE THE LAAMP + +scripted_effect adventurer_prestige_reset_effect = { + hidden_effect = { + #Save Prestige + save_scope_value_as = { + name = prestige_amount + value = { + value = prestige + add = -100 + } + } + #Invert it, then take it away + add_prestige = { + value = scope:prestige_amount + multiply = -1 + } + #Take away 3 prestige levels + add_prestige_level = -3 + } + # Tooltips + custom_tooltip = lose_all_prestige_tt + custom_tooltip = lose_all_prestige_level_tt +} + +################################################## +# Become Adventurer - Conquest +# by Joe Parkin +# 0001-0002 +################################################## + +# Big comeback + +scripted_trigger ep3_laamp_conquest_title_trigger = { + OR = { + recent_history = { type = conquest days = 1 } + recent_history = { type = conquest_holy_war days = 1 } + recent_history = { type = conquest_claim days = 1 } + recent_history = { type = conquest_populist days = 1 } + } + previous_holder ?= scope:adventurer +} + +# Conquest loser event +ep3_laamps.0001 = { + type = character_event + window = fullscreen_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { is_female = yes } + desc = ep3_laamps.0001.t.female + } + desc = ep3_laamps.0001.t.male + } + } + } + desc = { + desc = ep3_laamps.0001.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:war_memory } + desc = ep3_laamps.0001.memory + } + desc = ep3_laamps.0001.fallback + } + desc = ep3_laamps.0001.desc + } + theme = realm + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:alt_3 + override_background = { reference = ep3_fullscreen_adventurer_negative } + cooldown = { days = 5 } + + trigger = { + is_ai = no + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + clear_saved_scope = lost_primary_title + # Save highest lost title for loc + ordered_in_list = { + list = target_titles + limit = { ep3_laamp_conquest_title_trigger = yes } + order_by = tier + position = 0 + save_scope_as = lost_primary_title + } + if = { + limit = { + NOT = { exists = scope:lost_primary_title } + exists = scope:conquered + } + clear_saved_scope = lost_primary_title + scope:conquered = { save_scope_as = lost_primary_title } + } + # Find alternative rulers to play as + find_playable_relatives_effect = yes + # Portrait scopes + if = { + limit = { + NOR = { + exists = scope:alt_3 + scope:alt_1 ?= scope:winner + scope:alt_2 ?= scope:winner + } + } + scope:winner = { save_scope_as = alt_3 } + } + # Make Adventurer + create_landless_adventurer_title_effect = { + REASON = flag:conquest + FLAVOR_CHAR = scope:attacker + } + adventurer_prestige_reset_effect = yes + } + + option = { + name = ep3_laamps.0001.a + add_unpressed_claim = scope:lost_primary_title + add_internal_flag = special + if = { + limit = { + NOT = { has_relation_rival = scope:winner } + } + set_relation_rival = { + target = scope:winner + reason = rival_conquered_me + } + } + scope:winner = { trigger_event = ep3_laamps.0003 } + } + option = { + name = ep3_laamps.0001.b + trigger = { exists = scope:alt_1 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_1 } + } + option = { + name = ep3_laamps.0001.c + trigger = { exists = scope:alt_2 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_2 } + } + option = { + name = ep3_laamps.0001.d + trigger = { + scope:alt_3 ?= { playable_relative_trigger = yes } + } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_3 } + } + option = { + name = ep3_laamps.0001.e + laamp_game_over_option_effect = yes + } +} + +# Setup event +ep3_laamps.0002 = { + type = character_event + hidden = yes + + trigger = { + has_ep3_dlc_trigger = yes + is_valid_for_laampdom = yes + } + + on_trigger_fail = { + if = { # Ensures depose_effect always deposes, while other event origins do not + limit = { exists = scope:allow_imprisoned_landless } + depose = yes + } + } + + immediate = { + save_scope_as = adventurer + # AI chance + if = { + limit = { + is_ai = yes + ai_can_valid_to_create_laamp_trigger = yes + } + if = { + limit = { is_landed = yes } + depose = yes + } + save_scope_value_as = { + name = ai_laamp_chance + value = ep3_laamp_chance_score_value + } + random = { + chance = scope:ai_laamp_chance + # Plus for our memory variable. + clear_saved_scope = lost_primary_title + ordered_in_list = { + list = target_titles + order_by = tier + position = 0 + save_scope_as = lost_primary_title + } + if = { + limit = { exists = var:deposed_primary_title } + create_landless_adventurer_title_effect = { + REASON = flag:deposition + FLAVOR_CHAR = scope:attacker + } + } + else = { + create_landless_adventurer_title_effect = { + REASON = flag:conquest + FLAVOR_CHAR = scope:attacker + } + } + scope:winner = { trigger_event = ep3_laamps.0003 } + } + } + # Player event + else = { + if = { + limit = { + scope:new_holder ?= { + any_held_title = { ep3_laamp_conquest_title_trigger = yes } + } + } + trigger_event = { id = ep3_laamps.0001 } + } + else_if = { # Land already taken (e.g. by a war) + limit = { is_landed = no } + trigger_event = { id = ep3_laamps.0004 } + } + else = { # Still have land (e.g. in an event) + trigger_event = { id = ep3_laamps.0005 } + } + } + } +} + +# Winner event +ep3_laamps.0003 = { + type = letter_event + opening = ep3_laamps.0003.opening + desc = ep3_laamps.0003.desc + sender = scope:adventurer + + trigger = { is_ai = no } + + immediate = { + if = { + limit = { + NOT = { has_relation_rival = scope:adventurer } + } + set_relation_rival = { + target = scope:adventurer + reason = rival_conquered_me + } + } + scope:adventurer = { create_landless_adventurer_title_tooltip_effect = yes } + } + + option = { + name = ep3_laamps.0003.a + } +} + +# Deposition loser event +ep3_laamps.0004 = { + type = character_event + window = fullscreen_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { is_female = yes } + desc = ep3_laamps.0001.t.female + } + desc = ep3_laamps.0001.t.male + } + } + } + desc = ep3_laamps.0004.desc + theme = realm + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:alt_3 + override_background = { reference = ep3_fullscreen_adventurer_negative } + + trigger = { + is_ai = no + exists = var:deposed_primary_title + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + clear_saved_scope = lost_primary_title + var:deposed_primary_title ?= { + # Save highest lost title for loc + save_scope_as = conquered + # And for memory variables. + save_scope_as = lost_primary_title + save_scope_as = heir + } + # Create Adventurer + hidden_effect = { + create_landless_adventurer_title_effect = { + REASON = flag:deposition + FLAVOR_CHAR = scope:attacker + } + } + # Find alternative rulers to play as + find_playable_relatives_effect = yes + # Portrait scopes + if = { + limit = { + NOT = { exists = scope:alt_3 } + } + if = { + limit = { exists = scope:conquered.holder } + scope:conquered.holder = { save_scope_as = alt_3 } + } + else_if = { + limit = { + NOR = { + scope:alt_1 ?= scope:winner + scope:alt_2 ?= scope:winner + } + } + scope:winner ?= { save_scope_as = alt_3 } + } + } + } + + option = { + name = ep3_laamps.0001.a + create_landless_adventurer_title_tooltip_effect = yes + add_internal_flag = special + scope:winner = { trigger_event = ep3_laamps.0003 } + } + option = { + name = ep3_laamps.0001.b + trigger = { exists = scope:alt_1 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_1 } + } + option = { + name = ep3_laamps.0001.c + trigger = { exists = scope:alt_2 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_2 } + } + option = { + name = ep3_laamps.0001.d + trigger = { + scope:alt_3 ?= { playable_relative_trigger = yes } + } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_3 } + } + option = { + name = ep3_laamps.0001.e + laamp_game_over_option_effect = yes + hidden_effect = { move_to_pool = yes } + } +} + +# Depose loser event +ep3_laamps.0005 = { + type = character_event + window = fullscreen_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { is_female = yes } + desc = ep3_laamps.0001.t.female + } + desc = ep3_laamps.0001.t.male + } + } + } + desc = ep3_laamps.0004.desc + theme = realm + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:alt_3 + override_background = { reference = ep3_fullscreen_adventurer_negative } + + trigger = { + is_ai = no + exists = var:deposed_primary_title + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + clear_saved_scope = lost_primary_title + var:deposed_primary_title ?= { + # Save highest lost title for loc + save_scope_as = conquered + # And for memory variables. + save_scope_as = lost_primary_title + } + # Find alternative rulers to play as + find_playable_relatives_effect = yes + # Portrait scopes + if = { + limit = { + NOT = { exists = scope:alt_3 } + } + if = { + limit = { exists = scope:conquered.holder } + scope:conquered.holder = { save_scope_as = alt_3 } + } + else_if = { + limit = { + NOR = { + scope:alt_1 ?= scope:winner + scope:alt_2 ?= scope:winner + } + } + scope:winner ?= { save_scope_as = alt_3 } + } + } + scope:conquered.current_heir = { save_scope_as = heir } + } + + option = { + name = ep3_laamps.0001.a + show_as_tooltip = { depose = yes } # depose not actually used as it is immediate gameover + hidden_effect = { + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + every_held_title = { + title_tier >= county + change_title_holder_include_vassals = { + holder = scope:heir + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + # Create Adventurer + create_landless_adventurer_title_effect = { + REASON = flag:deposition + FLAVOR_CHAR = scope:attacker + } + } + create_landless_adventurer_title_tooltip_effect = yes + add_internal_flag = special + scope:winner = { trigger_event = ep3_laamps.0003 } + } + option = { + name = ep3_laamps.0001.b + trigger = { exists = scope:alt_1 } + show_as_tooltip = { depose = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_1 } + hidden_effect = { + depose = yes + move_to_pool = yes + } + } + option = { + name = ep3_laamps.0001.c + trigger = { exists = scope:alt_2 } + show_as_tooltip = { depose = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_2 } + hidden_effect = { + depose = yes + move_to_pool = yes + } + } + option = { + name = ep3_laamps.0001.d + trigger = { + scope:alt_3 ?= { playable_relative_trigger = yes } + } + show_as_tooltip = { depose = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_3 } + hidden_effect = { + depose = yes + move_to_pool = yes + } + } + option = { + name = ep3_laamps.0001.e + show_as_tooltip = { depose = yes } + laamp_game_over_option_effect = yes + hidden_effect = { + depose = yes + move_to_pool = yes + } + } +} + +################################################## +# Become Adventurer - Succession +# by Joe Parkin +# 0010-0012 +################################################## + +# My sibling is more interesting than me + +scripted_trigger ep3_laamp_inheritor_title_trigger = { + recent_history = { + type = inheritance + days = 5 + } + previous_holder = scope:deceased +} + +# Player event +ep3_laamps.0010 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.0010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + any_sibling = { count >= 2 } + } + desc = ep3_laamps.0010.multi + } + desc = ep3_laamps.0010.single + } + desc = ep3_laamps.0010.desc + triggered_desc = { + trigger = { exists = scope:inheritor_1 } + desc = ep3_laamps.0010.inheritor_1 + } + triggered_desc = { + trigger = { exists = scope:inheritor_2 } + desc = ep3_laamps.0010.inheritor_2 + } + triggered_desc = { + trigger = { exists = scope:inheritor_3 } + desc = ep3_laamps.0010.inheritor_3 + } + desc = ep3_laamps.0010.laamp + } + theme = realm + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:potential_laamp + animation = marshal + outfit_tags = { military_outfit } + } + lower_right_portrait = scope:deceased + override_background = { reference = ep3_fullscreen_adventurer_positive } + cooldown = { years = 25 } + + trigger = { + is_ai = no + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + # Save highest inherited title + ordered_held_title = { + limit = { ep3_laamp_inheritor_title_trigger = yes } + order_by = tier + position = 0 + save_scope_as = inherited + } + # Save inheritors for loc + every_sibling = { + limit = { + any_held_title = { ep3_laamp_inheritor_title_trigger = yes } + } + add_to_list = inheritors + } + ordered_in_list = { + list = inheritors + order_by = age + max = 3 + check_range_bounds = no + if = { + limit = { exists = scope:inheritor_2 } + save_scope_as = inheritor_3 + } + else_if = { + limit = { exists = scope:inheritor_1 } + save_scope_as = inheritor_2 + } + else = { save_scope_as = inheritor_1 } + ordered_held_title = { + limit = { ep3_laamp_inheritor_title_trigger = yes } + order_by = tier + position = 0 + if = { + limit = { exists = scope:inherited_2 } + save_scope_as = inherited_3 + } + else_if = { + limit = { exists = scope:inherited_1 } + save_scope_as = inherited_2 + } + else = { save_scope_as = inherited_1 } + } + } + scope:potential_laamp = { + create_landless_adventurer_title_effect = { + REASON = flag:succession + FLAVOR_CHAR = root + } + adventurer_prestige_reset_effect = yes + } + } + + option = { + name = ep3_laamps.0010.a + } + + option = { + name = ep3_laamps.0010.b + add_internal_flag = special + set_player_character = scope:potential_laamp + } +} + +# Setup event - heir +ep3_laamps.0011 = { + type = character_event + hidden = yes + + trigger = { + save_temporary_scope_as = heir_temp + any_sibling = { + ep3_laamp_interesting_sibling_trigger = { COMPARISON = scope:heir_temp } + } + } + + immediate = { + save_scope_as = heir + # Save potential laamp + ordered_sibling = { + limit = { + ep3_laamp_interesting_sibling_trigger = { COMPARISON = scope:heir } + } + order_by = ep3_laamp_chance_score_value + save_scope_as = potential_laamp + } + random = { + chance = 0 + modifier = { # Bonus for players + is_ai = no + add = 25 + } + modifier = { add = scope:potential_laamp.ep3_laamp_chance_score_value } + if = { + limit = { + is_ai = yes + ai_can_valid_to_create_laamp_trigger = yes + } + scope:potential_laamp = { + create_landless_adventurer_title_effect = { + REASON = flag:succession + FLAVOR_CHAR = scope:heir + } + } + if = { # Debug tracking + limit = { exists = global_var:ai_succession_laamp_count } + change_global_variable = { + name = ai_succession_laamp_count + add = 1 + } + } + else = { + set_global_variable = { + name = ai_succession_laamp_count + value = 1 + } + } + debug_log = "AI became adventurer by succession" + debug_log_scopes = yes + } + else = { trigger_event = ep3_laamps.0010 } + } + } +} + +# Setup event - deceased +ep3_laamps.0012 = { + hidden = yes + type = character_event + + trigger = { + has_ep3_dlc_trigger = yes + is_landed = yes + player_heir ?= { + save_temporary_scope_as = heir_temp + any_sibling = { + ep3_laamp_interesting_sibling_trigger = { COMPARISON = scope:heir_temp } + } + } + } + + immediate = { + save_scope_as = deceased + player_heir = { + trigger_event = { + id = ep3_laamps.0011 + days = 5 + } + } + } +} + +################################################## +# Become Adventurer - Banish +# by Joe Parkin +# 0020-0021 +################################################## + +# I have been banished + +# Banished event +ep3_laamps.0020 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.0020.t + desc = ep3_laamps.0020.desc + theme = realm + left_portrait = { + character = root + animation = marshal + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:alt_3 + override_background = { reference = ep3_fullscreen_adventurer_negative } + cooldown = { days = 5 } + + trigger = { + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + save_scope_as = adventurer + liege = { save_scope_as = liege } + # Save highest lost title for loc + clear_saved_scope = lost_primary_title + ordered_held_title = { + order_by = tier + position = 0 + save_scope_as = revoked + # Plus for our memory variable. + save_scope_as = lost_primary_title + } + find_playable_relatives_effect = yes + # Portrait scopes + if = { + limit = { + NOR = { + exists = scope:alt_3 + scope:alt_1 ?= scope:banisher + scope:alt_2 ?= scope:banisher + } + } + scope:banisher = { save_scope_as = alt_3 } + } + adventurer_prestige_reset_effect = yes + } + + option = { + name = ep3_laamps.0020.a + show_as_tooltip = { banish = yes } + hidden_effect = { + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = no + } + every_held_title = { + title_tier >= county + change_title_holder_include_vassals = { + holder = scope:liege + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + # Create Adventurer + create_landless_adventurer_title_effect = { + REASON = flag:exile + FLAVOR_CHAR = scope:banisher + } + } + create_landless_adventurer_title_tooltip_effect = yes + add_internal_flag = special + add_unpressed_claim = scope:lost_primary_title + scope:banisher = { + trigger_event = { + id = ep3_laamps.0022 + days = 5 + } + } + scope:liege = { + if = { + limit = { + this != scope:banisher + } + trigger_event = { + id = ep3_laamps.0022 + days = 5 + } + } + } + } + + option = { + name = ep3_laamps.0001.b + trigger = { exists = scope:alt_1 } + show_as_tooltip = { banish = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_1 } + hidden_effect = { + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + } + option = { + name = ep3_laamps.0001.c + trigger = { exists = scope:alt_2 } + show_as_tooltip = { banish = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_2 } + hidden_effect = { + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + } + option = { + name = ep3_laamps.0001.d + trigger = { + scope:alt_3 ?= { playable_relative_trigger = yes } + } + show_as_tooltip = { banish = yes } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_3 } + hidden_effect = { + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + } + option = { + name = ep3_laamps.0001.e + show_as_tooltip = { banish = yes } + laamp_game_over_option_effect = yes + hidden_effect = { + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + } +} + +# Setup event +ep3_laamps.0021 = { + type = character_event + hidden = yes + + trigger = { + has_ep3_dlc_trigger = yes + is_valid_for_laampdom = yes + } + + on_trigger_fail = { + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + + immediate = { + save_scope_as = adventurer + liege = { save_scope_as = liege } + clear_saved_scope = lost_primary_title + # Save highest lost title for loc + ordered_held_title = { + order_by = tier + position = 0 + save_scope_as = revoked + # Plus for our memory variable. + save_scope_as = lost_primary_title + } + add_character_flag = { + flag = block_for_prison_release_notification + days = 1 + } + # AI chance + if = { + limit = { + is_ai = yes + ai_can_valid_to_create_laamp_trigger = yes + } + random = { + chance = 0 + modifier = { add = ep3_laamp_chance_score_value } + # Plus for our memory variable. + add_character_flag = { + flag = block_for_prison_release_message + days = 1 + } + create_title_and_vassal_change = { + type = revoked + save_scope_as = change + add_claim_on_loss = no + } + every_held_title = { + title_tier >= county + change_title_holder_include_vassals = { + holder = scope:liege + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + create_landless_adventurer_title_effect = { + REASON = flag:exile + FLAVOR_CHAR = scope:actor + } + adventurer_prestige_reset_effect = yes + add_unpressed_claim = scope:lost_primary_title + scope:banisher = { + trigger_event = { + id = ep3_laamps.0022 + days = 5 + } + } + scope:liege = { + if = { + limit = { + this != scope:banisher + } + trigger_event = { + id = ep3_laamps.0022 + days = 5 + } + } + } + } + if = { + limit = { + NOT = { + government_has_flag = government_is_landless_adventurer + } + } + if = { + limit = { + government_allows = administrative + } + force_step_down_landed_titles = yes + } + banish = yes + } + } + # Player event + else = { + trigger_event = { id = ep3_laamps.0020 } + } + } +} + +# Banisher event +ep3_laamps.0022 = { + type = letter_event + opening = ep3_laamps.0003.opening + desc = ep3_laamps.0022.desc + sender = scope:adventurer + + trigger = { is_ai = no } + + immediate = { + scope:adventurer = { create_landless_adventurer_title_tooltip_effect = yes } + } + + option = { + name = ep3_laamps.0022.a + } +} + +################################################## +# Become Adventurer - Voluntary +# by Joe Parkin +# 0030-0031 +################################################## + +# Adventure awaits + +ep3_laamps.0030 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.0030.t + desc = { + desc = ep3_laamps.0030.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:laamp_heir } + desc = ep3_laamps.0030.heir + } + triggered_desc = { + trigger = { exists = scope:laamp_liege } + desc = ep3_laamps.0030.liege + } + desc = ep3_laamps.0030.new + } + } + theme = realm + left_portrait = { + character = root + animation = marshal + } + lower_right_portrait = scope:laamp_inheritor + override_background = { reference = ep3_fullscreen_adventurer_positive } + cooldown = { days = 5 } + + trigger = { exists = scope:laamp_inheritor } + + immediate = { + play_music_cue = adventure_begin_cue + # Save scopes for loc + primary_title = { save_scope_as = old_primary_title } + capital_province = { save_scope_as = old_capital_province } + if = { + limit = { top_liege != this } + liege = { save_scope_as = old_liege } + } + # Transfer landed titles + every_held_title = { + title_tier > barony + limit = { + OR = { + is_landless_type_title = no + is_nomad_title = yes + } + } + add_to_list = target_titles + } + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = no + } + hidden_effect = { + every_in_list = { + list = target_titles + change_title_holder_include_vassals = { + holder = scope:laamp_inheritor + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + # Create Adventurer + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = scope:laamp_inheritor + } + scope:laamp_inheritor = { + # Tooltip for player + custom_tooltip = become_landless_adventurer_decision_title_scope_tt + # Create a loving family so inheritance isn't so borked + if = { + limit = { has_character_flag = new_laamp_inheritor } + trigger_event = game_rule.1001 + remove_character_flag = new_laamp_inheritor + } + } + scope:old_liege ?= { trigger_event = ep3_laamps.0032 } + adventurer_prestige_reset_effect = yes + hidden_effect = { + every_held_title = { + limit = { + is_noble_family_title = yes + } + root = { destroy_title = prev } + } + } + } + + option = { + name = ep3_laamps.0030.a + create_landless_adventurer_title_tooltip_effect = yes + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_voluntary_laamp_character_modifier + years = 5 + } + } +} + +# Liege event +ep3_laamps.0032 = { + type = letter_event + opening = ep3_laamps.0032.opening + desc = ep3_laamps.0032.desc + sender = scope:adventurer + + trigger = { is_ai = no } + + immediate = { + scope:adventurer = { create_landless_adventurer_title_tooltip_effect = yes } + } + + option = { + name = ep3_laamps.0032.a + } +} + +################################################## +# Become Adventurer - Revocation +# by Joe Parkin +# 0040-0041 +################################################## + +# Come back + +scripted_trigger ep3_laamp_revoked_title_trigger = { + recent_history = { type = revoked days = 1 } + previous_holder = root +} + +ep3_laamps.0040 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.0040.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:actor = { is_close_family_of = root } + } + desc = ep3_laamps.0040.family + } + desc = ep3_laamps.0040.other + } + desc = ep3_laamps.0040.desc + } + theme = realm + left_portrait = { + character = root + animation = marshal + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:alt_3 + override_background = { reference = ep3_fullscreen_adventurer_negative } + cooldown = { days = 5 } + + # The AI was managing to get this event somehow. + trigger = { + is_ai = no + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + immediate = { + play_music_cue = adventure_begin_cue + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + # Find alternative rulers to play as + find_playable_relatives_effect = yes + # Portrait scopes + if = { + limit = { + NOR = { + exists = scope:alt_3 + scope:alt_1 ?= scope:actor + scope:alt_2 ?= scope:actor + } + } + scope:actor = { save_scope_as = alt_3 } + } + # Create Adventurer + hidden_effect = { + create_landless_adventurer_title_effect = { + REASON = flag:revocation + FLAVOR_CHAR = scope:actor + } + } + adventurer_prestige_reset_effect = yes + } + + option = { + name = ep3_laamps.0040.a + create_landless_adventurer_title_tooltip_effect = yes + add_internal_flag = special + scope:actor = { trigger_event = ep3_laamps.0042 } + } + + option = { + name = ep3_laamps.0001.b + trigger = { exists = scope:alt_1 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_1 } + } + option = { + name = ep3_laamps.0001.c + trigger = { exists = scope:alt_2 } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_2 } + } + option = { + name = ep3_laamps.0001.d + trigger = { + exists = scope:alt_3 + scope:alt_3 = { playable_relative_trigger = yes } + } + laamp_switch_playable_character_effect = { NEW_CHARACTER = scope:alt_3 } + } + option = { + name = ep3_laamps.0001.e + laamp_game_over_option_effect = yes + } +} + +# Setup event +ep3_laamps.0041 = { + type = character_event + hidden = yes + + trigger = { + has_ep3_dlc_trigger = yes + is_landed = no + is_valid_for_laampdom = yes + } + + immediate = { + save_scope_as = adventurer + # AI chance + if = { + limit = { + is_ai = yes + ai_can_valid_to_create_laamp_trigger = yes + trigger_if = { # Don't fill the adventurer pool with revoked counts + limit = { + scope:lost_primary_title.tier <= tier_county + } + global_variable_list_size = { + name = laamps_tally + value < seventyfive_percent_of_max_desired_laamps_value + } + } + } + random = { + chance = 0 + modifier = { add = ep3_laamp_chance_score_value } + create_landless_adventurer_title_effect = { + REASON = flag:revocation + FLAVOR_CHAR = scope:actor + } + scope:actor = { trigger_event = ep3_laamps.0042 } + } + } + # Player event + else = { + trigger_event = { id = ep3_laamps.0040 } + } + } +} + +# Revoker event +ep3_laamps.0042 = { + type = letter_event + opening = ep3_laamps.0003.opening + desc = ep3_laamps.0042.desc + sender = scope:adventurer + + trigger = { is_ai = no } + + immediate = { + create_landless_adventurer_title_tooltip_effect = yes + } + + option = { + name = ep3_laamps.0042.a + } +} + +################################################## +# Become Adventurer - Runaway +# by Joe Parkin +# 0050-0051 +################################################## + +# Close family + +scripted_trigger ep3_laamp_runaway_child_trigger = { + is_ai = yes + liege ?= { + this = root + is_landed = yes + highest_held_title_tier >= tier_duchy + } + NOT = { root.primary_heir ?= this } + is_valid_for_laampdom = yes + age <= 25 + NOT = { has_character_flag = failed_laamp_runaway } + save_temporary_scope_as = runaway_temp + # Less important kids as rank increases + liege ?= { + primary_title = { + trigger_if = { + limit = { tier = tier_empire } + place_in_line_of_succession = { target = scope:runaway_temp value < 6 } + } + trigger_else_if = { + limit = { tier = tier_kingdom } + place_in_line_of_succession = { target = scope:runaway_temp value < 4 } + } + trigger_else = { + place_in_line_of_succession = { target = scope:runaway_temp value < 2 } + } + } + } +} + +ep3_laamps.0050 = { + type = character_event + title = ep3_laamps.0050.t + desc = ep3_laamps.0050.desc + theme = family + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:potential_laamp + animation = war_over_win + } + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + is_landed_or_landless_administrative = yes + any_close_family_member = { ep3_laamp_runaway_child_trigger = yes } + OR = { + is_ai = no + ai_can_valid_to_create_laamp_trigger = yes + } + NOT = { has_character_flag = become_laamp_event_cooldown } + } + + weight_multiplier = { + base = 1 + modifier = { + is_ai = no + add = 1 + } + modifier = { + highest_held_title_tier > tier_county # 2 + add = { + value = 2 + subtract = highest_held_title_tier + } + } + modifier = { + any_child = { + ep3_laamp_runaway_child_trigger = yes + ep3_laamp_interesting_enough_to_be_a_laamp_trigger = { COMPARISON = root } + } + add = 1 + } + modifier = { + add = 1 + exists = var:runaway_laamp_encourager + } + } + + immediate = { + add_character_flag = { + flag = become_laamp_event_cooldown + days = 5 + } + var:runaway_laamp_encourager ?= { save_scope_as = encouraged_laamp } + every_close_family_member = { + limit = { ep3_laamp_runaway_child_trigger = yes } + add_to_list = potential_runaways + } + ordered_in_list = { + list = potential_runaways + order_by = ep3_laamp_chance_score_value + save_scope_as = potential_laamp + save_scope_as = adventurer + } + } + + option = { # Encourage + name = ep3_laamps.0050.a + trigger = { is_ai = no } + hidden_effect = { + scope:potential_laamp = { + create_landless_adventurer_title_effect = { + REASON = flag:runaway_allowed + FLAVOR_CHAR = root + } + } + } + add_internal_flag = special + set_player_character = scope:potential_laamp + scope:potential_laamp = { + create_landless_adventurer_title_tooltip_effect = yes + } + stress_impact = { + arrogant = medium_stress_impact_gain + craven = minor_stress_impact_gain + } + } + + option = { # Allow + name = ep3_laamps.0050.b + reverse_add_opinion = { + target = scope:potential_laamp + modifier = allowed_runaway_laamp_opinion + } + scope:potential_laamp = { + create_landless_adventurer_title_effect = { + REASON = flag:runaway_allowed + FLAVOR_CHAR = root + } + adventurer_prestige_reset_effect = yes + } + set_variable = { + name = runaway_laamp_encourager + value = scope:potential_laamp + } + stress_impact = { + arrogant = medium_stress_impact_gain + craven = minor_stress_impact_gain + } + ai_chance = { + base = 0 + ai_value_modifier = { + ai_boldness = 0.25 + ai_energy = 0.25 + } + opinion_modifier = { + opinion_target = scope:potential_laamp + multiplier = -0.25 + } + modifier = { + add = 50 + culture = { + has_cultural_parameter = more_likely_to_be_laamps + } + } + modifier = { + add = 150 + culture = { + has_cultural_parameter = much_more_likely_to_be_laamps + } + } + } + } + + option = { # Forbid + name = ep3_laamps.0050.c + reverse_add_opinion = { + target = scope:potential_laamp + modifier = forbidden_runaway_laamp_opinion + } + duel = { + target = scope:potential_laamp + skill = intrigue + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + add_prestige = minor_prestige_loss + scope:potential_laamp = { add_character_flag = failed_laamp_runaway } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + scope:potential_laamp = { create_landless_adventurer_title_tooltip_effect = yes } + trigger_event = { + id = ep3_laamps.0051 + days = 1 + } + } + } + stress_impact = { + brave = medium_stress_impact_gain + } + ai_chance = { + base = 25 + opinion_modifier = { + opinion_target = scope:potential_laamp + multiplier = 0.25 + } + } + } +} + +ep3_laamps.0051 = { + type = character_event + title = ep3_laamps.0050.t + desc = ep3_laamps.0051.desc + theme = family + left_portrait = { + character = root + animation = stress + } + lower_right_portrait = scope:potential_laamp + + trigger = { + has_ep3_dlc_trigger = yes + scope:potential_laamp = { ep3_laamp_runaway_child_trigger = yes } + } + + immediate = { + # Create Adventurer + scope:potential_laamp = { + create_landless_adventurer_title_effect = { + REASON = flag:runaway_forbidden + FLAVOR_CHAR = root + } + adventurer_prestige_reset_effect = yes + } + add_prestige = minor_prestige_loss + } + + option = { + name = ep3_laamps.0051.a + } + + option = { + name = ep3_laamps.0051.b + trigger = { + is_ai = no + scope:potential_laamp = { is_playable_character = yes } # For Safety + } + add_internal_flag = special + set_player_character = scope:potential_laamp + } +} + +################################################## +# Become Landed - Purchase +# by Joe Parkin +# 0100-0102 +################################################## + +ep3_laamps.0100 = { + type = character_event + title = ep3_laamps.0100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { government_has_flag = government_is_nomadic } + desc = ep3_laamps.0100.desc_nomadic + } + desc = ep3_laamps.0100.desc + } + first_valid = { + triggered_desc = { + trigger = { scope:new_liege ?= scope:recipient } + desc = ep3_laamps.0100.liege + } + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0100.fellow_vassal + } + desc = ep3_laamps.0100.independent + } + first_valid = { + triggered_desc = { + trigger = { + NOT = { government_has_flag = government_is_nomadic } + exists = scope:new_liege + } + desc = ep3_laamps.0100.unpopular + } + triggered_desc = { + trigger = { + NOT = { government_has_flag = government_is_nomadic } + } + desc = ep3_laamps.0100.fallback + } + } + } + theme = crown + left_portrait = { + character = root + animation = war_over_tie + } + right_portrait = { + character = scope:recipient + animation = steward + } + lower_left_portrait = { + trigger = { + scope:recipient != scope:new_liege + } + character = scope:new_liege + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + purchase_land_interaction_effect = yes + scope:recipient = { trigger_event = ep3_laamps.0101 } + } + + option = { + name = ep3_laamps.0100.a + if = { # Vassal obligations + limit = { scope:vassal_obligation = yes } + vassal_contract_set_obligation_level = { type = feudal_government_taxes level = 4 } + vassal_contract_set_obligation_level = { type = feudal_government_levies level = 4 } + } + } +} + +ep3_laamps.0101 = { + type = letter_event + opening = ep3_laamps.0101.opening + desc = { + desc = ep3_laamps.0101.desc + first_valid = { + triggered_desc = { + trigger = { scope:new_liege ?= scope:recipient } + desc = ep3_laamps.0101.liege + } + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0101.fellow_vassal + } + desc = ep3_laamps.0100.independent + } + } + sender = scope:actor + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + show_as_tooltip = { purchase_land_interaction_effect = yes } + if = { + limit = { + top_liege != this + scope:actor.liege != root + } + hidden_effect = { + liege = { + send_interface_message = { + type = event_landless_adventurer_neutral + title = ep3_laamps.0101.liege_message.title + left_icon = scope:actor + right_icon = scope:recipient + show_as_tooltip = { purchase_land_interaction_effect = yes } + } + } + } + } + } + + option = { + name = ep3_laamps.0101.a + trigger = { scope:new_liege ?= scope:recipient } + } + + option = { + name = ep3_laamps.0101.b + trigger = { + exists = scope:new_liege + NOT = { scope:new_liege ?= scope:recipient } + } + } + + option = { + name = ep3_laamps.0101.c + trigger = { + NOT = { exists = scope:new_liege } + } + } +} + +ep3_laamps.0102 = { + type = letter_event + opening = ep3_laamps.0102.opening + desc = ep3_laamps.0102.desc + sender = scope:actor + + trigger = { + has_ep3_dlc_trigger = yes + } + + option = { + name = ep3_laamps.0102.a + } +} + +################################################## +# Become Landed - Invasion +# by Joe Parkin +# 0200-0201 +################################################## + +# Interaction + +ep3_laamps.0200 = { + type = letter_event + opening = ep3_laamps.0101.opening + desc = ep3_laamps.0200.desc + sender = scope:recipient + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + if = { + limit = { scope:offer_gold = yes } + show_as_tooltip = { + pay_short_term_gold = { + gold = scope:recipient.request_laamp_invasion_sponsorship_gold_cost + target = scope:recipient + } + } + hidden_effect = { + scope:recipient = { add_short_term_gold = scope:recipient.request_laamp_invasion_sponsorship_gold_cost } + } + } + scope:recipient = { + if = { + limit = { + scope:request_soldiers = yes + scope:join_war = yes + } + custom_tooltip = adventurer_invasion_supporter_tt + } + else_if = { + limit = { scope:request_soldiers = yes } + custom_tooltip = adventurer_invasion_supporter_soldiers_tt + } + else = { custom_tooltip = adventurer_invasion_supporter_join_tt } + } + scope:actor = { custom_tooltip = adventurer_invasion_supporter_victory_tt } + } + + option = { + name = ep3_laamps.0200.a + } +} + +ep3_laamps.0201 = { + type = letter_event + opening = ep3_laamps.0201.opening + desc = ep3_laamps.0201.desc + sender = scope:recipient + + trigger = { + has_ep3_dlc_trigger = yes + } + + option = { + name = ep3_laamps.0201.a + } +} + +################################################## +# Become Landed - Negotiated +# by Joe Parkin +# 0300-0302 +################################################## + +ep3_laamps.0300 = { + type = character_event + title = ep3_laamps.0300.t + desc = { + desc = ep3_laamps.0300.desc + first_valid = { + triggered_desc = { + trigger = { scope:new_liege ?= scope:actor } + desc = ep3_laamps.0300.liege + } + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0300.fellow_vassal + } + desc = ep3_laamps.0300.independent + } + first_valid = { + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0300.unpopular + } + desc = ep3_laamps.0300.fallback + } + } + theme = realm + left_portrait = { + character = root + animation = worry + } + lower_right_portrait = scope:recipient + lower_left_portrait = { + trigger = { + scope:actor != scope:new_liege + } + character = scope:new_liege + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + negotiate_settlement_interaction_effect = yes + scope:recipient = { trigger_event = ep3_laamps.0301 } + } + + option = { + name = ep3_laamps.0300.a + } +} + +ep3_laamps.0301 = { + type = letter_event + opening = ep3_laamps.0301.opening + desc = { + desc = ep3_laamps.0301.desc + first_valid = { + triggered_desc = { + trigger = { scope:new_liege ?= scope:actor } + desc = ep3_laamps.0301.liege + } + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0301.fellow_vassal + } + desc = ep3_laamps.0300.independent + } + } + sender = scope:actor + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + show_as_tooltip = { negotiate_settlement_interaction_effect = yes } + if = { + limit = { + top_liege != this + scope:recipient.liege != scope:actor + } + hidden_effect = { + liege = { + send_interface_message = { + type = event_landless_adventurer_neutral + title = ep3_laamps.0301.liege_message.title + left_icon = scope:actor + right_icon = scope:recipient + show_as_tooltip = { negotiate_settlement_interaction_effect = yes } + } + } + } + } + } + + option = { + name = ep3_laamps.0301.a + trigger = { scope:new_liege ?= scope:actor } + } + + option = { + name = ep3_laamps.0301.b + trigger = { + exists = scope:new_liege + NOT = { scope:new_liege ?= scope:actor } + } + } + + option = { + name = ep3_laamps.0301.c + trigger = { + NOT = { exists = scope:new_liege } + } + } +} + +ep3_laamps.0302 = { + type = letter_event + opening = ep3_laamps.0302.opening + desc = ep3_laamps.0302.desc + sender = scope:actor + + trigger = { + has_ep3_dlc_trigger = yes + } + + option = { + name = ep3_laamps.0302.a + } +} + +################################################## +# Become Landed - Seize Realm +# by Joe Parkin +# 0401-0412 +################################################## + +### SUCCESS +ep3_laamps.0401 = { + type = character_event + title = ep3_laamps.0401.t + desc = { + desc = ep3_laamps.0401.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:imprison } + desc = ep3_laamps.0401.imprison + } + triggered_desc = { + trigger = { exists = scope:death } + desc = ep3_laamps.0401.death + } + desc = ep3_laamps.0401.outro + } + } + theme = claim_throne_scheme + override_background = { reference = throne_room_scope } + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:target + animation = prisonhouse + override_imprisonment_visuals = yes + } + + trigger = { exists = scope:scheme_successful } + + immediate = { + scope:target = { trigger_event = ep3_laamps.0410 } + seize_realm_scheme_success_effect = yes + } + + option = { + name = ep3_laamps.0401.a + } + + after = { + + } +} + +### FAILURE +ep3_laamps.0402 = { + type = character_event + title = ep3_laamps.0402.t + desc = { + desc = ep3_laamps.0402.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:imprison } + desc = ep3_laamps.0402.imprison + } + triggered_desc = { + trigger = { exists = scope:death } + desc = ep3_laamps.0402.death + } + desc = ep3_laamps.0402.outro + } + } + theme = claim_throne_scheme + override_background = { + trigger = { exists = scope:imprison } + reference = dungeon_scope + } + override_background = { + trigger = { exists = scope:death } + reference = throne_room_scope + } + override_background = { + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + reference = army_camp + } + left_portrait = { + character = root + triggered_animation = { + trigger = { exists = scope:imprison } + animation = prisonhouse + } + triggered_animation = { + trigger = { exists = scope:death } + animation = loss_1 + } + triggered_animation = { + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + animation = stress + } + override_imprisonment_visuals = yes + outfit_tags = { prison } + } + right_portrait = { + character = scope:target + animation = war_over_win + trigger = { + OR = { + exists = scope:imprison + exists = scope:death + } + } + } + lower_right_portrait = { + character = scope:target + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + } + + trigger = { + NOT = { exists = scope:scheme_successful } + } + + immediate = { + scope:target = { trigger_event = ep3_laamps.0411 } + seize_realm_scheme_failure_effect = yes + } + + option = { + name = ep3_laamps.0402.a + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + stress_impact = { + base = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + diligent = minor_stress_impact_gain + impatient = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + lazy = minor_stress_impact_loss + craven = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + } + + option = { + name = ep3_laamps.0402.b + trigger = { exists = scope:imprison } + stress_impact = { + base = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + diligent = minor_stress_impact_gain + impatient = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + lazy = minor_stress_impact_loss + craven = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + } + + option = { + name = ep3_laamps.0402.c + trigger = { exists = scope:death } + } +} + +### SUCCESS - TARGET +ep3_laamps.0410 = { + type = character_event + title = ep3_laamps.0410.t + desc = { + desc = ep3_laamps.0410.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:death } + desc = ep3_laamps.0410.death + } + triggered_desc = { + trigger = { exists = scope:imprison } + desc = ep3_laamps.0410.imprison + } + desc = ep3_laamps.0410.outro + } + } + theme = claim_throne_scheme + override_background = { + trigger = { exists = scope:imprison } + reference = dungeon_scope + } + override_background = { + trigger = { NOT = { exists = scope:imprison } } + reference = throne_room_scope + } + + left_portrait = { + character = scope:owner + animation = war_over_win + } + right_portrait = { + character = scope:target + animation = fear + override_imprisonment_visuals = yes + trigger = { + OR = { + exists = scope:imprison + exists = scope:death + } + } + } + lower_right_portrait = { + character = scope:target + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + } + + immediate = { + show_as_tooltip = { seize_realm_scheme_success_effect = yes } + } + + option = { + name = ep3_laamps.0410.a + trigger = { exists = scope:imprison } + } + + option = { + name = ep3_laamps.0410.b + trigger = { exists = scope:death } + } + + option = { + name = ep3_laamps.0410.c + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + } +} + +### FAILURE - TARGET +ep3_laamps.0411 = { + type = character_event + title = ep3_laamps.0411.t + desc = { + desc = ep3_laamps.0411.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:imprison } + desc = ep3_laamps.0411.imprison + } + desc = ep3_laamps.0411.outro + } + } + theme = claim_throne_scheme + override_background = { + trigger = { exists = scope:imprison } + reference = dungeon_scope + } + override_background = { + trigger = { NOT = { exists = scope:imprison } } + reference = throne_room_scope + } + left_portrait = { + character = scope:target + animation = war_over_win + } + right_portrait = { + character = scope:owner + animation = fear + override_imprisonment_visuals = yes + trigger = { + OR = { + exists = scope:imprison + exists = scope:death + } + } + } + lower_right_portrait = { + character = scope:owner + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + } + + immediate = { + show_as_tooltip = { seize_realm_scheme_failure_effect = yes } + } + + option = { + name = ep3_laamps.0411.a + trigger = { exists = scope:imprison } + } + + option = { + name = ep3_laamps.0411.b + trigger = { exists = scope:death } + } + + option = { + name = ep3_laamps.0411.c + trigger = { + NOR = { + exists = scope:imprison + exists = scope:death + } + } + } +} + +################################################## +# Become Landed - Maintenance +# by Joe Parkin +# 0800 +################################################## + +scripted_trigger grantable_close_family_trigger = { + is_adult = yes + is_playable_character = no + is_ai = yes + house = scope:adventurer.house + is_imprisoned = no + trigger_if = { + limit = { is_clergy = yes } + faith = { has_doctrine_parameter = theocracy_temple_ownership } + } + NOR = { + has_trait = incapable + has_trait = devoted + has_trait = order_member + this = scope:adventurer + this = scope:adventurer.player_heir + is_spouse_of = scope:adventurer + scope:alt_1 ?= this + scope:alt_2 ?= this + scope:alt_3 ?= this + scope:previous_holder ?= this + } +} + +scripted_trigger grantable_claimant_trigger = { + is_adult = yes + is_playable_character = no + is_ai = yes + is_imprisoned = no + trigger_if = { + limit = { is_clergy = yes } + faith = { has_doctrine_parameter = theocracy_temple_ownership } + } + NOR = { + has_trait = incapable + has_trait = devoted + has_trait = order_member + this = scope:adventurer + is_spouse_of = scope:adventurer + is_close_family_of = scope:adventurer + scope:alt_1 ?= this + scope:alt_2 ?= this + scope:alt_3 ?= this + scope:previous_holder ?= this + } +} + +scripted_trigger grantable_gender_preference_trigger = { + trigger_if = { + limit = { is_male = yes } + scope:adventurer = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + trigger_else_if = { + limit = { is_female = yes } + scope:adventurer = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + trigger_else = { always = yes } +} + +scripted_effect grant_land_to_beneficiary_effect = { + save_scope_as = beneficiary + if = { + limit = { is_close_family_of = scope:adventurer } + add_opinion = { + target = scope:adventurer + modifier = renounced_land_to_me_opinion + opinion = 25 + } + every_in_list = { + list = family_list + limit = { + this != scope:beneficiary + } + if = { + limit = { + has_strong_claim_on = scope:new_title + NOT = { + scope:beneficiary = { has_strong_claim_on = scope:new_title } + } + } + add_opinion = { + target = scope:adventurer + modifier = renounced_land_to_weaker_claim_opinion + opinion = -30 + } + } + else = { + add_opinion = { + target = scope:adventurer + modifier = renounced_land_to_other_opinion + opinion = -15 + } + } + } + } + else = { + add_opinion = { + target = scope:adventurer + modifier = renounced_land_to_me_opinion + opinion = 50 + } + if = { + limit = { scope:beneficiary.house != scope:adventurer.house } + every_in_list = { + list = family_list + add_opinion = { + target = scope:adventurer + modifier = renounced_land_outside_family_opinion + opinion = -50 + } + } + } + every_in_list = { + list = claimant_list + limit = { + this != scope:beneficiary + } + if = { + limit = { + has_strong_claim_on = scope:new_title + NOT = { + scope:beneficiary = { has_strong_claim_on = scope:new_title } + } + } + add_opinion = { + target = root + modifier = renounced_land_to_weaker_claim_opinion + opinion = -50 + } + } + else = { + add_opinion = { + target = root + modifier = renounced_land_to_other_opinion + opinion = -25 + } + } + } + } + send_interface_message = { + type = msg_titles_renounced_to_me + title = adventurer_titles_renounced_title + desc = adventurer_titles_renounced_to_me_desc + left_icon = scope:adventurer + scope:adventurer = { + send_interface_message = { + type = msg_titles_renounced_by_me + title = adventurer_titles_renounced_title + desc = adventurer_titles_renounced_by_me_desc + left_icon = scope:beneficiary + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = no + } + scope:new_capital = { + change_title_holder_include_vassals = { + holder = scope:beneficiary + change = scope:change + take_baronies = no + } + } + hidden_effect = { + scope:beneficiary = { + becomes_independent = { change = scope:change } + } + } + every_held_title = { + limit = { + NOT = { has_variable = adventurer_creation_reason } + is_noble_family_title = no + is_landless_type_title = no + this != scope:new_capital + } + if = { + limit = { tier >= scope:new_title.tier } + change_title_holder_include_vassals = { + holder = scope:beneficiary + change = scope:change + take_baronies = no + } + } + else = { + hidden_effect = { + change_title_holder_include_vassals = { + holder = scope:beneficiary + change = scope:change + take_baronies = no + } + } + } + } + } + } + resolve_title_and_vassal_change = scope:change + } + scope:adventurer = { custom_tooltip = ep3_laamps.0800.claim.tt } +} + +scripted_effect transfer_crusader_king_trait_effect = { + if = { + limit = { + has_character_flag = laamp_is_crusader_king + has_trait = crusader_king + } + remove_trait = crusader_king + $BENEFICIARY$ = { add_trait = crusader_king } + } +} + +ep3_laamps.0800 = { # Player adventurer has gained a landed title + type = character_event + title = ep3_laamps.0800.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:transfer_type = flag:inheritance } + desc = ep3_laamps.0800.inherited + } + triggered_desc = { + trigger = { scope:transfer_type = flag:abdication } + desc = ep3_laamps.0800.abdication + } + triggered_desc = { + trigger = { scope:transfer_type = flag:granted } + desc = ep3_laamps.0800.granted + } + triggered_desc = { + trigger = { scope:transfer_type = flag:election } + desc = ep3_laamps.0800.election + } + triggered_desc = { + trigger = { scope:transfer_type = flag:faction_demand } + desc = ep3_laamps.0800.faction + } + triggered_desc = { + trigger = { scope:transfer_type = flag:conquest_claim } + desc = ep3_laamps.0800.claim_war + } + triggered_desc = { + trigger = { scope:transfer_type = flag:conquest_holy_war } + desc = ep3_laamps.0800.holy_war + } + desc = ep3_laamps.0800.conquest + } + first_valid = { + triggered_desc = { + trigger = { exists = scope:new_liege } + desc = ep3_laamps.0800.vassal + } + desc = ep3_laamps.0800.independent + } + desc = ep3_laamps.0800.desc + } + theme = realm + left_portrait = { + character = scope:adventurer + animation = war_over_win + } + lower_left_portrait = scope:alt_1 + lower_center_portrait = scope:alt_2 + lower_right_portrait = scope:portrait_scope + cooldown = { days = 1 } # Do not change this + orphan = yes + + trigger = { + has_ep3_dlc_trigger = yes + is_landed = yes + government_has_flag = government_is_landless_adventurer + NOT = { has_variable = became_landed_through_separatist_uprising_var } # It feels repetitive to get this event after choosing to become landed + NOT = { #Used in the New England event chain + has_character_flag = siward_flag + } + } + + immediate = { + save_scope_as = adventurer + # SAVE LANDED TITLES + every_held_title = { + title_tier >= county + limit = { + NOR = { + has_variable = adventurer_creation_reason + is_landless_type_title = yes + } + } + add_to_list = landed_titles + } + # SAVE TITLES + ordered_in_list = { + list = landed_titles + order_by = tier + save_scope_as = new_title + save_scope_as = target + previous_holder ?= { save_scope_as = previous_holder } + } + capital_county = { save_scope_as = new_capital } + every_in_list = { + list = landed_titles + limit = { tier = scope:new_title.tier } + save_scope_as = tooltip_title + show_as_tooltip = { + scope:adventurer = { get_title = scope:tooltip_title } + } + } + # SAVE LIEGE IF RELEVANT + if = { + limit = { top_liege != this } + liege = { save_scope_as = new_liege } + } + # FIND RELATIVES TO GRANT TO + hidden_effect = { + if = { + limit = { + any_close_family_member = { grantable_close_family_trigger = yes } + } + while = { + count = 3 + random_close_family_member = { + limit = { + grantable_close_family_trigger = yes + OR = { + has_relation_friend = scope:adventurer + has_relation_lover = scope:adventurer + } + grantable_gender_preference_trigger = yes + } + alternative_limit = { + grantable_close_family_trigger = yes + has_strong_claim_on = scope:new_title + grantable_gender_preference_trigger = yes + } + alternative_limit = { + grantable_close_family_trigger = yes + OR = { + has_relation_friend = scope:adventurer + has_relation_lover = scope:adventurer + } + } + alternative_limit = { + grantable_close_family_trigger = yes + has_strong_claim_on = scope:new_title + } + alternative_limit = { + grantable_close_family_trigger = yes + grantable_gender_preference_trigger = yes + } + alternative_limit = { grantable_close_family_trigger = yes } + weight = { + base = 1 + modifier = { + is_child_of = scope:adventurer + add = 10 + } + modifier = { + is_sibling_of = scope:adventurer + add = 5 + } + } + if = { + limit = { NOT = { exists = scope:alt_1 } } + save_scope_as = alt_1 + } + else_if = { + limit = { NOT = { exists = scope:alt_2 } } + save_scope_as = alt_2 + } + else_if = { + limit = { NOT = { exists = scope:alt_3 } } + save_scope_as = alt_3 + } + add_to_list = family_list + } + } + } + ### FIND CLAIMANTS TO GRANT TO + if = { + limit = { + NOT = { exists = scope:alt_3 } + } + scope:new_title = { + while = { + count = 3 + random_claimant = { + limit = { + grantable_claimant_trigger = yes + OR = { + has_relation_friend = scope:adventurer + has_relation_lover = scope:adventurer + is_extended_family_of = scope:adventurer + } + grantable_gender_preference_trigger = yes + } + alternative_limit = { + grantable_claimant_trigger = yes + has_strong_claim_on = scope:new_title + grantable_gender_preference_trigger = yes + } + alternative_limit = { + grantable_claimant_trigger = yes + OR = { + has_relation_friend = scope:adventurer + has_relation_lover = scope:adventurer + is_extended_family_of = scope:adventurer + } + } + alternative_limit = { + grantable_claimant_trigger = yes + has_strong_claim_on = scope:new_title + grantable_gender_preference_trigger = yes + } + alternative_limit = { + grantable_claimant_trigger = yes + grantable_gender_preference_trigger = yes + } + alternative_limit = { grantable_claimant_trigger = yes } + if = { + limit = { NOT = { exists = scope:alt_1 } } + save_scope_as = alt_1 + } + else_if = { + limit = { NOT = { exists = scope:alt_2 } } + save_scope_as = alt_2 + } + else_if = { + limit = { NOT = { exists = scope:alt_3 } } + save_scope_as = alt_3 + } + add_to_list = claimant_list + } + } + } + } + } + # Portrait scopes + if = { + limit = { + exists = scope:new_liege + NOT = { exists = scope:alt_3 } + } + scope:new_liege = { save_scope_as = portrait_scope } + } + else = { + scope:alt_3 ?= { save_scope_as = portrait_scope } + } + } + + option = { # Become Landed + name = ep3_laamps.0800.a + if = { + limit = { + NOT = { has_trait = adventurer } + } + add_trait = adventurer + } + hidden_effect = { + every_courtier = { + set_variable = { + name = former_camp_leader + value = root + } + add_trait = adventurer_follower + } + } + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = root + TITLE_LIST = landed_titles + TYPE = granted + REASON = flag:granted + ENNOBLED_ADVENTURER = flag:yes + } + if = { + limit = { + has_character_modifier = ep3_lust_for_land_modifier + } + remove_character_modifier = ep3_lust_for_land_modifier + } + } + option = { # Give to 1 + name = { + text = ep3_laamps.0800.b + trigger = { scope:alt_1 = { is_close_family_of = scope:adventurer } } + } + name = { + text = ep3_laamps.0800.b.claimant + trigger = { NOT = { scope:alt_1 = { is_close_family_of = scope:adventurer } } } + } + trigger = { exists = scope:alt_1 } + scope:alt_1 = { grant_land_to_beneficiary_effect = yes } + transfer_crusader_king_trait_effect = { BENEFICIARY = scope:alt_1 } + } + option = { # Give to 2 + name = { + text = ep3_laamps.0800.c + trigger = { scope:alt_2 = { is_close_family_of = scope:adventurer } } + } + name = { + text = ep3_laamps.0800.c.claimant + trigger = { NOT = { scope:alt_2 = { is_close_family_of = scope:adventurer } } } + } + trigger = { exists = scope:alt_2 } + scope:alt_2 = { grant_land_to_beneficiary_effect = yes } + transfer_crusader_king_trait_effect = { BENEFICIARY = scope:alt_2 } + } + option = { # Give to 3 + name = { + text = ep3_laamps.0800.d + trigger = { scope:alt_3 = { is_close_family_of = scope:adventurer } } + } + name = { + text = ep3_laamps.0800.d.claimant + trigger = { NOT = { scope:alt_3 = { is_close_family_of = scope:adventurer } } } + } + trigger = { exists = scope:alt_3 } + scope:alt_3 = { grant_land_to_beneficiary_effect = yes } + transfer_crusader_king_trait_effect = { BENEFICIARY = scope:alt_3 } + } + option = { # Give to liege/random dude + name = { + text = ep3_laamps.0800.e.liege + trigger = { exists = scope:new_liege } + } + name = { + text = ep3_laamps.0800.e + trigger = { NOT = { exists = scope:new_liege } } + } + trigger = { + OR = { + NOT = { exists = scope:alt_1 } + exists = scope:new_liege + } + } + if = { + limit = { exists = scope:new_liege } + scope:new_liege = { grant_land_to_beneficiary_effect = yes } + transfer_crusader_king_trait_effect = { BENEFICIARY = scope:new_liege } + } + else = { + hidden_effect_new_object = { + create_character = { + template = laamp_inheritor_template + culture = scope:new_capital.culture + faith = scope:new_capital.faith + dynasty = generate + location = scope:new_capital.title_province + after_creation = { save_scope_as = land_grantee } + } + scope:land_grantee = { grant_land_to_beneficiary_effect = yes } + } + custom_tooltip = become_landless_adventurer_decision_title_created_tt + } + transfer_crusader_king_trait_effect = { BENEFICIARY = scope:land_grantee } + } + + after = { remove_character_flag = laamp_is_crusader_king } +} + +################################################## +# The Roads We Walk +# by Ewan Cowhig Croft +# 1001 - 1010 +################################################## + +scripted_effect ep3_laamps_1001_pick_best_skill_effect = { + if = { + limit = { + NOT = { exists = scope:pick_$PICK$ } + calc_true_if = { + amount >= $POSITION$ + $SKILL_1$ >= $SKILL_2$ + $SKILL_1$ >= $SKILL_3$ + $SKILL_1$ >= $SKILL_4$ + $SKILL_1$ >= $SKILL_5$ + $SKILL_1$ >= $SKILL_6$ + } + } + save_scope_value_as = { + name = $SKILL_1$_char + value = yes + } + save_scope_value_as = { + name = pick_$PICK$ + value = flag:$SKILL_1$ + } + } +} + +scripted_effect ep3_laamps_1001_pick_best_skill_wrapper_effect = { + # Diplomacy. + if = { + limit = { + NOR = { + exists = scope:diplomacy_char + scope:pick_1 ?= flag:diplomacy + scope:pick_2 ?= flag:diplomacy + scope:pick_3 ?= flag:diplomacy + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = diplomacy + POSITION = $POSITION$ + SKILL_2 = martial + SKILL_3 = stewardship + SKILL_4 = intrigue + SKILL_5 = learning + SKILL_6 = prowess + PICK = $PICK$ + } + } + # Martial. + if = { + limit = { + NOR = { + exists = scope:martial_char + scope:pick_1 ?= flag:martial + scope:pick_2 ?= flag:martial + scope:pick_3 ?= flag:martial + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = martial + POSITION = $POSITION$ + SKILL_2 = diplomacy + SKILL_3 = stewardship + SKILL_4 = intrigue + SKILL_5 = learning + SKILL_6 = prowess + PICK = $PICK$ + } + } + # Stewardship. + if = { + limit = { + NOR = { + exists = scope:stewardship_char + scope:pick_1 ?= flag:stewardship + scope:pick_2 ?= flag:stewardship + scope:pick_3 ?= flag:stewardship + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = stewardship + POSITION = $POSITION$ + SKILL_2 = diplomacy + SKILL_3 = martial + SKILL_4 = intrigue + SKILL_5 = learning + SKILL_6 = prowess + PICK = $PICK$ + } + } + # Intrigue. + if = { + limit = { + NOR = { + exists = scope:intrigue_char + scope:pick_1 ?= flag:intrigue + scope:pick_2 ?= flag:intrigue + scope:pick_3 ?= flag:intrigue + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = intrigue + POSITION = $POSITION$ + SKILL_2 = diplomacy + SKILL_3 = martial + SKILL_4 = stewardship + SKILL_5 = learning + SKILL_6 = prowess + PICK = $PICK$ + } + } + # Learning. + if = { + limit = { + NOR = { + exists = scope:learning_char + scope:pick_1 ?= flag:learning + scope:pick_2 ?= flag:learning + scope:pick_3 ?= flag:learning + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = learning + POSITION = $POSITION$ + SKILL_2 = diplomacy + SKILL_3 = martial + SKILL_4 = stewardship + SKILL_5 = intrigue + SKILL_6 = prowess + PICK = $PICK$ + } + } + # Prowess. + if = { + limit = { + NOR = { + exists = scope:prowess_char + scope:pick_1 ?= flag:prowess + scope:pick_2 ?= flag:prowess + scope:pick_3 ?= flag:prowess + } + } + ep3_laamps_1001_pick_best_skill_effect = { + SKILL_1 = prowess + POSITION = $POSITION$ + SKILL_2 = diplomacy + SKILL_3 = martial + SKILL_4 = stewardship + SKILL_5 = intrigue + SKILL_6 = learning + PICK = $PICK$ + } + } +} + +scripted_effect ep3_laamps_1001_generate_diplomacy_char_effect = { + create_character = { + template = pool_repopulate_diplomacy + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = diplomacy_1 + diplomacy = { + min_template_high_skill + max_template_high_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_diplomacy + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = diplomacy_2 + diplomacy = { + min_template_high_skill + max_template_high_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} +scripted_effect ep3_laamps_1001_generate_martial_char_effect = { + create_character = { + template = pool_repopulate_martial + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = martial_1 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_high_skill + max_template_high_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_martial + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = martial_2 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_high_skill + max_template_high_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} +scripted_effect ep3_laamps_1001_generate_stewardship_char_effect = { + create_character = { + template = pool_repopulate_stewardship + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = stewardship_1 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_high_skill + max_template_high_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_stewardship + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = stewardship_2 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_high_skill + max_template_high_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} +scripted_effect ep3_laamps_1001_generate_intrigue_char_effect = { + create_character = { + template = pool_repopulate_intrigue + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = intrigue_1 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_high_skill + max_template_high_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_intrigue + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = intrigue_2 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_high_skill + max_template_high_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} +scripted_effect ep3_laamps_1001_generate_learning_char_effect = { + create_character = { + template = pool_repopulate_learning + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = learning_1 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_high_skill + max_template_high_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_learning + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = learning_2 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_high_skill + max_template_high_skill + } + prowess = { + min_template_average_skill + max_template_average_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} +scripted_effect ep3_laamps_1001_generate_prowess_char_effect = { + create_character = { + template = pool_repopulate_prowess + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = prowess_1 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_high_skill + max_template_high_skill + } + after_creation = { add_to_list = spawned_chars_list } + } + create_character = { + template = pool_repopulate_prowess + dynasty = none + culture = root.location.culture + faith = root.location.faith + location = root.location + save_scope_as = prowess_2 + diplomacy = { + min_template_average_skill + max_template_average_skill + } + martial = { + min_template_average_skill + max_template_average_skill + } + stewardship = { + min_template_average_skill + max_template_average_skill + } + intrigue = { + min_template_average_skill + max_template_average_skill + } + learning = { + min_template_average_skill + max_template_average_skill + } + prowess = { + min_template_high_skill + max_template_high_skill + } + after_creation = { add_to_list = spawned_chars_list } + } +} + +scripted_effect ep3_laamps_1001_boost_courtier_opinion_effect = { + hidden_effect = { + # Improve their opinion of us. + reverse_add_opinion = { + target = scope:$SKILL$_1 + modifier = respect_opinion + opinion = 100 + } + reverse_add_opinion = { + target = scope:$SKILL$_2 + modifier = respect_opinion + opinion = 100 + } + # And, just in case, make sure we like them. + add_opinion = { + target = scope:$SKILL$_1 + modifier = respect_opinion + opinion = 100 + } + add_opinion = { + target = scope:$SKILL$_2 + modifier = respect_opinion + opinion = 100 + } + } +} + +scripted_effect ep3_laamps_1001_add_courtiers_effect = { + # Nab our dudes. + add_courtier = scope:$SKILL$_1 + add_courtier = scope:$SKILL$_2 +} + +scripted_trigger ep3_laamps_1001_basic_trigger = { + NOR = { + has_character_flag = special_laamp_char + has_character_flag = got_starting_courtiers + } + # In case you become a laamp then immediately become landed again. + has_government = landless_adventurer_government +} + +# We generate some starting courtiers for you so that you don't get irredeemably screwed at a basic laamp. +ep3_laamps.1001 = { + type = character_event + title = ep3_laamps.1001.t + desc = { + desc = ep3_laamps.1001.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_trait = blind } + desc = ep3_laamps.1001.desc.blind + } + desc = ep3_laamps.1001.desc.at_least_one_working_eye + } + } + theme = friendly + left_portrait = { + character = root + animation = personality_rational + } + override_background = { reference = wilderness } + + trigger = { + ep3_laamps_1001_basic_trigger = yes + # Must be on land or else we don't know where to take our locals from. + exists = location.county + } + + on_trigger_fail = { + if = { + limit = { ep3_laamps_1001_basic_trigger = yes } + trigger_event = { + id = ep3_laamps.1001 + months = { 1 3 } + } + } + } + + cooldown = { years = 20 } + + immediate = { + # Alright, let's grab our best skills — we care about prowess so we need to do this the manual way. + ## First best. + ep3_laamps_1001_pick_best_skill_wrapper_effect = { POSITION = 5 PICK = 1 } + ## Second best. + ep3_laamps_1001_pick_best_skill_wrapper_effect = { POSITION = 4 PICK = 2 } + ## Third best. + ep3_laamps_1001_pick_best_skill_wrapper_effect = { POSITION = 3 PICK = 3 } + # Cool, now if we're the player, we generate our characters straight away so that we can display them in tooltips. + if = { + limit = { is_ai = no } + if = { + limit = { exists = scope:diplomacy_char } + ep3_laamps_1001_generate_diplomacy_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = diplomacy } + } + if = { + limit = { exists = scope:martial_char } + ep3_laamps_1001_generate_martial_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = martial } + } + if = { + limit = { exists = scope:stewardship_char } + ep3_laamps_1001_generate_stewardship_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = stewardship } + } + if = { + limit = { exists = scope:intrigue_char } + ep3_laamps_1001_generate_intrigue_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = intrigue } + } + if = { + limit = { exists = scope:learning_char } + ep3_laamps_1001_generate_learning_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = learning } + } + if = { + limit = { exists = scope:prowess_char } + ep3_laamps_1001_generate_prowess_char_effect = yes + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = prowess } + } + } + add_character_flag = got_starting_courtiers + # Plus, nicknamify as many as we can. + hidden_effect = { + every_in_list = { + list = spawned_chars_list + assign_random_nickname_effect = yes + } + } + } + + # Diplomacy. + option = { + name = ep3_laamps.1001.a + trigger = { exists = scope:diplomacy_char } + skill = diplomacy + + # Label what this means. + custom_tooltip = ep3_laamps.1001.a.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = diplomacy } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_diplomacy_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = diplomacy } + ep3_laamps_1001_boost_courtier_opinion_effect = { SKILL = diplomacy } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + highest_skill = diplomacy + diplomacy >= prowess + } + } + } + + # Martial. + option = { + name = ep3_laamps.1001.b + trigger = { exists = scope:martial_char } + skill = martial + + # Label what this means. + custom_tooltip = ep3_laamps.1001.b.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = martial } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_martial_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = martial } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + highest_skill = martial + martial >= prowess + } + modifier = { + add = 150 + culture = { + has_cultural_parameter = much_more_likely_to_be_laamps + } + } + modifier = { + add = 50 + culture = { + has_cultural_parameter = more_likely_to_be_laamps + } + } + } + } + + # Stewardship. + option = { + name = ep3_laamps.1001.c + trigger = { exists = scope:stewardship_char } + skill = stewardship + + # Label what this means. + custom_tooltip = ep3_laamps.1001.c.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = stewardship } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_stewardship_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = stewardship } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + highest_skill = stewardship + stewardship >= prowess + } + } + } + + # Intrigue. + option = { + name = ep3_laamps.1001.d + trigger = { exists = scope:intrigue_char } + skill = intrigue + + # Label what this means. + custom_tooltip = ep3_laamps.1001.d.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = intrigue } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_intrigue_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = intrigue } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + highest_skill = intrigue + intrigue >= prowess + } + } + } + + # Learning. + option = { + name = ep3_laamps.1001.e + trigger = { exists = scope:learning_char } + skill = learning + + # Label what this means. + custom_tooltip = ep3_laamps.1001.e.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = learning } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_learning_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = learning } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + highest_skill = learning + learning >= prowess + } + } + } + + # Prowess. + option = { + name = ep3_laamps.1001.f + trigger = { exists = scope:prowess_char } + skill = prowess + + # Label what this means. + custom_tooltip = ep3_laamps.1001.f.tt + # For the player, we just add their pregenerated courtiers. + if = { + limit = { is_ai = no } + ep3_laamps_1001_add_courtiers_effect = { SKILL = prowess } + } + # For the AI, generate their characters here. + else = { + ep3_laamps_1001_generate_prowess_char_effect = yes + ep3_laamps_1001_add_courtiers_effect = { SKILL = prowess } + } + + # No stress for mechanical events. + ai_chance = { + base = 1 + # AI pick best skill, always. + modifier = { + add = 1000 + prowess >= diplomacy + prowess >= martial + prowess >= stewardship + prowess >= intrigue + prowess >= learning + } + modifier = { + add = 150 + culture = { + has_cultural_parameter = much_more_likely_to_be_laamps + } + } + modifier = { + add = 50 + culture = { + has_cultural_parameter = more_likely_to_be_laamps + } + } + } + } + + # Larry Loner of the Clan McNoMates. + option = { + name = ep3_laamps.1001.g + + if = { + limit = { + any_courtier = { count <= 0 } + } + custom_tooltip = ep3_laamps.1001.g.tt.difficulty + } + else = { custom_tooltip = ep3_laamps.1001.g.tt.followers } + + # No stress for mechanical events. + ai_chance = { + # Player opt out. + base = 0 + } + } +} + +# Error suppression for the history files. +ep3_laamps.1002 = { + hidden = yes + orphan = yes + + immediate = { set_variable = special_laamp_char } +} + +################################################## +# Sworn by the Sword +# by Ewan Cowhig Croft +# 1011 - 1020 +################################################## + +# You extract an oath of loyalty from one of your knights. +ep3_laamps.1011 = { + type = character_event + title = ep3_laamps.1011.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:tiles_misc } + desc = ep3_laamps.1011.desc.four_plus_titles + } + triggered_desc = { + trigger = { exists = scope:title_3 } + desc = ep3_laamps.1011.desc.three_titles + } + triggered_desc = { + trigger = { exists = scope:title_2 } + desc = ep3_laamps.1011.desc.two_titles + } + triggered_desc = { + trigger = { exists = scope:title_1 } + desc = ep3_laamps.1011.desc.one_title + } + } + desc = ep3_laamps.1011.desc.midtro + first_valid = { + triggered_desc = { + trigger = { has_character_flag = has_sworn_sword_before } + desc = ep3_laamps.1011.desc.prior_swords + } + desc = ep3_laamps.1011.desc.first_sword + } + desc = ep3_laamps.1011.desc.outro + } + theme = realm + left_portrait = { + character = scope:actor + animation = personality_bold + } + right_portrait = { + character = scope:recipient + animation = throne_room_kneel_1 + } + override_background = { reference = feast } + + immediate = { + # Grab our random claims, as appropriate. + if = { + # We don't care about doing this for the robots. + limit = { is_ai = no } + ordered_claim = { + limit = { tier >= tier_kingdom } + order_by = { + # Our basics. + value = tier + # If we once held them, boost them up the rankings. + if = { + limit = { + any_past_holder = { this = root } + } + multiply = 10 + } + # And if a relative holds them, boost those up too. + else_if = { + limit = { + holder ?= { is_close_or_extended_family_of = root } + } + multiply = 5 + } + } + max = 4 + check_range_bounds = no + # First title. + if = { + limit = { + NOT = { exists = scope:title_1 } + } + save_scope_as = title_1 + } + # Second title. + else_if = { + limit = { + NOT = { + this = scope:title_1 + exists = scope:title_2 + } + } + save_scope_as = title_2 + } + # Third title. + else_if = { + limit = { + NOT = { + this = scope:title_1 + this = scope:title_2 + exists = scope:title_3 + } + } + save_scope_as = title_3 + } + # Are there any other titles? + else_if = { + limit = { + NOT = { + this = scope:title_1 + this = scope:title_2 + this = scope:title_3 + } + } + save_scope_value_as = { + name = tiles_misc + value = yes + } + } + } + } + # Add our hook. + add_hook = { + type = loyalty_hook + target = scope:recipient + } + # And register that we've taken the event once before. + add_character_flag = has_sworn_sword_before + } + + # Mutual loyalty hook. + option = { + name = ep3_laamps.1011.a + + scope:recipient = { + add_hook = { + type = follower_oath_strong_hook + target = scope:actor + } + add_opinion = { + target = scope:actor + modifier = trust_opinion + opinion = 100 + } + } + + stress_impact = { + just = major_stress_impact_loss + arbitrary = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 2 } + } + } + + # One-way + weak hook. + option = { + name = ep3_laamps.1011.b + + scope:recipient = { + add_hook = { + type = follower_oath_hook + target = scope:actor + } + add_opinion = { + target = scope:actor + modifier = respect_opinion + opinion = 30 + } + } + + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } +} + +################################################## +# Camp Purpose Maintenance +# by Ewan Cowhig Croft +# 1021 - 1030 +################################################## + +# Destroy any inappropriate buildings and upgrades. +ep3_laamps.1021 = { + hidden = yes + + immediate = { + if = { + limit = { + domicile = { + OR = { + has_domicile_building = supply_tent_reserve_provisions + has_domicile_construction = supply_tent_reserve_provisions + } + } + NOT = { has_realm_law_flag = unlocks_supply_tent_reserve_provisions } + } + domicile = { remove_domicile_building = supply_tent_reserve_provisions } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = supply_tent_reserve_water + has_domicile_construction = supply_tent_reserve_water + } + } + NOT = { has_realm_law_flag = unlocks_supply_tent_reserve_water } + } + domicile = { remove_domicile_building = supply_tent_reserve_water } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = supply_tent_climbing_gear + has_domicile_construction = supply_tent_climbing_gear + } + } + NOT = { has_realm_law_flag = unlocks_supply_tent_climbing_gear } + } + domicile = { remove_domicile_building = supply_tent_climbing_gear } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = supply_tent_subdued_gear + has_domicile_construction = supply_tent_subdued_gear + } + } + NOT = { has_realm_law_flag = unlocks_supply_tent_subdued_gear } + } + domicile = { remove_domicile_building = supply_tent_subdued_gear } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = barber_tent_reference_corpus + has_domicile_construction = barber_tent_reference_corpus + } + } + NOT = { has_realm_law_flag = unlocks_barber_tent_reference_corpus } + } + domicile = { remove_domicile_building = barber_tent_reference_corpus } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = barber_tent_morticians_tools + has_domicile_construction = barber_tent_morticians_tools + } + } + NOT = { has_realm_law_flag = unlocks_barber_tent_morticians_tools } + } + domicile = { remove_domicile_building = barber_tent_morticians_tools } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_siege_engineers + has_domicile_construction = baggage_train_siege_engineers + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_siege_engineers } + } + domicile = { remove_domicile_building = baggage_train_siege_engineers } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_scribes + has_domicile_construction = baggage_train_scribes + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_scribes } + } + domicile = { remove_domicile_building = baggage_train_scribes } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_proof_of_claims + has_domicile_construction = baggage_train_proof_of_claims + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_proof_of_claims } + } + domicile = { remove_domicile_building = baggage_train_proof_of_claims } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_ransom_cages + has_domicile_construction = baggage_train_ransom_cages + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_ransom_cages } + } + domicile = { remove_domicile_building = baggage_train_ransom_cages } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_negotiators + has_domicile_construction = baggage_train_negotiators + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_negotiators } + } + domicile = { remove_domicile_building = baggage_train_negotiators } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = baggage_train_ascetics + has_domicile_construction = baggage_train_ascetics + } + } + NOT = { has_realm_law_flag = unlocks_baggage_train_ascetics } + } + domicile = { remove_domicile_building = baggage_train_ascetics } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_fire_local_hangers_on + has_domicile_construction = camp_fire_local_hangers_on + } + } + NOT = { has_realm_law_flag = unlocks_camp_fire_local_hangers_on } + } + domicile = { remove_domicile_building = camp_fire_local_hangers_on } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_fire_future_dreams + has_domicile_construction = camp_fire_future_dreams + } + } + NOT = { has_realm_law_flag = unlocks_camp_fire_future_dreams } + } + domicile = { remove_domicile_building = camp_fire_future_dreams } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_fire_nightly_debates + has_domicile_construction = camp_fire_nightly_debates + } + } + NOT = { has_realm_law_flag = unlocks_camp_fire_nightly_debates } + } + domicile = { remove_domicile_building = camp_fire_nightly_debates } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_fire_juicy_rumors + has_domicile_construction = camp_fire_juicy_rumors + } + } + NOT = { has_realm_law_flag = unlocks_camp_fire_juicy_rumors } + } + domicile = { remove_domicile_building = camp_fire_juicy_rumors } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = proving_grounds_lockwagon + has_domicile_construction = proving_grounds_lockwagon + } + } + NOT = { has_realm_law_flag = unlocks_proving_grounds_lockwagon } + } + domicile = { remove_domicile_building = proving_grounds_lockwagon } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = proving_grounds_martial_study + has_domicile_construction = proving_grounds_martial_study + } + } + NOT = { has_realm_law_flag = unlocks_proving_grounds_martial_study } + } + domicile = { remove_domicile_building = proving_grounds_martial_study } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = proving_grounds_the_stick_game + has_domicile_construction = proving_grounds_the_stick_game + } + } + NOT = { has_realm_law_flag = unlocks_proving_grounds_the_stick_game } + } + domicile = { remove_domicile_building = proving_grounds_the_stick_game } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = proving_grounds_bodyguard_drills + has_domicile_construction = proving_grounds_bodyguard_drills + } + } + NOT = { has_realm_law_flag = unlocks_proving_grounds_bodyguard_drills } + } + domicile = { remove_domicile_building = proving_grounds_bodyguard_drills } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_perimeter_extra_watch + has_domicile_construction = camp_perimeter_extra_watch + } + } + NOT = { has_realm_law_flag = unlocks_camp_perimeter_extra_watch } + } + domicile = { remove_domicile_building = camp_perimeter_extra_watch } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_perimeter_palisade + has_domicile_construction = camp_perimeter_palisade + } + } + NOT = { has_realm_law_flag = unlocks_camp_perimeter_palisade } + } + domicile = { remove_domicile_building = camp_perimeter_palisade } + } + if = { + limit = { + domicile = { + OR = { + has_domicile_building = camp_perimeter_ditch + has_domicile_construction = camp_perimeter_ditch + } + } + NOT = { has_realm_law_flag = unlocks_camp_perimeter_ditch } + } + domicile = { remove_domicile_building = camp_perimeter_ditch } + } + } +} + +################################################## +# General LAAMP events +# by Nick Meredith +# 5000-5998 +################################################## + +# Poach for food +ep3_laamps.5000 = { + type = character_event + title = ep3_laamps.5000.t + desc = { + desc = ep3_laamps.5000.desc + first_valid = { + triggered_desc = { + trigger = { + domicile = { + provisions < provisions_privation_threshold_low + } + } + desc = ep3_laamps.5000.provisionslow + } + desc = ep3_laamps.5000.provisionsok + } + desc = ep3_laamps.5000.ending + } + theme = landless_adventurer + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:hunter + animation = personality_rational + } + lower_center_portrait = { + character = scope:local_lord + } + cooldown = { years = 10 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_available = yes + + #Ensure we have a hunter + any_courtier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + age > 16 + } + is_location_valid_for_travel_event_on_land = yes + #Ensure we're in a place that's held by someone + exists = location.county.holder + + is_vegetarian_trigger = no + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + domicile = { + provisions < provisions_privation_threshold_low + } + } + modifier = { + factor = 3 + location = { + has_building_or_higher = royal_forest_01 + } + } + modifier = { + factor = 1.5 + location = { + has_holding = yes + } + } + } + + immediate = { + random_courtier = { + limit = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + age > 16 + } + save_scope_as = hunter + } + location.county.holder = { + save_scope_as = local_lord + } + location = { + save_scope_as = location + } + } + + #Petition them for rights to hunt + option = { + name = ep3_laamps.5000.a + + flavor = ep3_laamps.5000.a.tt + + duel = { + target = scope:local_lord + skill = diplomacy + + 40 = { #They agree + desc = ep3_laamps.5000.a.success + + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5000.a.success + left_icon = root + right_icon = scope:local_lord + + domicile ?= { + change_provisions = medium_provisions_gain + } + } + } + + 40 = { #They agree, but insist on you paying + desc = ep3_laamps.5000.a.failure + + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5000.a.failure + left_icon = root + right_icon = scope:local_lord + + pay_short_term_gold = { + target = scope:local_lord + gold = 10 + } + + domicile ?= { + change_provisions = medium_provisions_gain + } + } + } + + 10 = { #They refuse + desc = ep3_laamps.5000.a.critfailure + + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5000.a.critfailure + left_icon = root + right_icon = scope:local_lord + + add_prestige = minor_prestige_loss + add_stress = minor_stress_gain + } + } + } + + stress_impact = { + honest = miniscule_stress_impact_loss + deceitful = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + } + } + } + + #Risk it for the biscuit + option = { + name = ep3_laamps.5000.b + + scope:hunter = { + duel = { + value = decent_skill_rating + skill = prowess + + 45 = { #They poach successfully + desc = ep3_laamps.5000.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + root = { + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5000.b.success + left_icon = root + right_icon = scope:local_lord + domicile ?= { change_provisions = medium_provisions_gain } + } + } + } + + 45 = { #They are caught and fined + desc = ep3_laamps.5000.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + root = { + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5000.b.failure + left_icon = root + right_icon = scope:local_lord + pay_short_term_gold = { + target = scope:local_lord + gold = 10 + } + domicile ?= { change_provisions = minor_provisions_gain } + } + } + } + + 10 = { #They are caught and imprisoned! + desc = ep3_laamps.5000.b.critfailure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 1 + root = { + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5000.b.critfailure + left_icon = root + right_icon = scope:local_lord + + scope:local_lord = { + imprison = { + target = scope:hunter + type = dungeon + } + } + } + } + } + } + } + + stress_impact = { + honest = medium_stress_impact_gain + deceitful = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #Forage for berries n stuff + option = { + name = ep3_laamps.5000.c + + random_list = { + 10 = { #You find provisions + desc = ep3_laamps.5000.c.success + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5000.c.success + left_icon = root + right_icon = scope:hunter + + domicile ?= { + change_provisions = { + value = { miniscule_provisions_gain minor_provisions_gain } + } + } + } + } + + 5 = { #You don't find provisions + desc = ep3_laamps.5000.c.failure + + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5000.c.failure + left_icon = root + right_icon = scope:hunter + + add_stress = minor_stress_gain + add_character_modifier = { + modifier = ep3_supply_issues_modifier + years = 5 + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + } + } + } +} + +# Meet a wandering priest +ep3_laamps.5005 = { + type = character_event + title = ep3_laamps.5005.t + desc = { + desc = ep3_laamps.5005.desc + first_valid = { + triggered_desc = { + trigger = { + scope:priest.faith = root.faith + } + desc = ep3_laamps.5005.samefaith + } + desc = ep3_laamps.5005.difffaith + } + } + theme = landless_adventurer + override_background = { reference = bp1_bonfire } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:priest + animation = obsequious_bow + } + cooldown = { years = 10 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + #Ensure we're in a place that's held by someone + exists = location.county.holder + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 3 + OR = { + faith = { has_doctrine = tenet_mendicant_preachers } + location.county.holder.faith = { has_doctrine = tenet_mendicant_preachers } + } + } + } + + immediate = { + create_character = { + template = mendicant_mystic_character + gender_female_chance = root_soldier_female_chance + age = { 35 65 } + location = root.location + culture = root.location.county.culture + faith = root.location.county.faith + save_scope_as = priest + after_creation = { + add_character_flag = created + } + } + location.county.holder = { + save_scope_as = location_holder + } + location = { + save_scope_as = location + } + # Plus give 'em a nickname. + hidden_effect = { + scope:priest = { assign_random_nickname_effect = yes } + } + } + + #Ask him to join your followers + option = { + name = ep3_laamps.5005.a + + duel = { + target = scope:priest + skill = diplomacy + + 50 = { #They agree + desc = ep3_laamps.5005.a.success + + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5005.a.success + left_icon = root + right_icon = scope:priest + + add_courtier = scope:priest + + if = { + limit = { + scope:priest.faith = root.faith + } + add_character_modifier = { + modifier = ep3_priest_friend_same_modifier + years = 5 + } + } + else = { + add_character_modifier = { + modifier = ep3_priest_friend_different_modifier + years = 5 + } + } + } + } + + 50 = { #They don't want to stay + desc = ep3_laamps.5005.a.failure + + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5005.a.failure + left_icon = root + right_icon = scope:priest + + add_stress = miniscule_stress_gain + } + } + } + + stress_impact = { + generous = miniscule_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + } + } + } + + #Invite him to sit and stay a night + option = { + name = ep3_laamps.5005.b + + if = { + limit = { + NOT = { + has_trait = lifestyle_traveler + } + } + add_trait = lifestyle_traveler + add_trait_xp = { + trait = lifestyle_traveler + track = travel + value = { + integer_range = { + min = 10 + max = 25 + } + } + } + } + else = { + add_trait_xp = { + trait = lifestyle_traveler + track = travel + value = { + integer_range = { + min = 10 + max = 25 + } + } + } + } + + stress_impact = { + paranoid = minor_stress_impact_gain + trusting = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Turn him away + option = { + name = ep3_laamps.5005.c + + trigger = { + scope:priest.faith = root.faith + } + + flavor = ep3_laamps.5005.c.tt + + every_courtier = { + limit = { + faith != scope:priest.faith + } + custom = every_non_faith_follower + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 15 + } + } + + add_character_modifier = { + modifier = ep3_ungodly_hospitality_modifier + years = 5 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } + + #Turn him away, since he's a heretic + option = { + name = ep3_laamps.5005.d + + trigger = { + scope:priest.faith != root.faith + } + + add_piety = medium_piety_value + + add_character_modifier = { + modifier = ep3_inflexible_worshipper_modifier + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + after = { + scope:priest ?= { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# The rough life begins to hurt +ep3_laamps.5010 = { + type = character_event + title = ep3_laamps.5010.t + desc = ep3_laamps.5010.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:follower + animation = pain + } + cooldown = { years = 10 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + age < 65 #Just for loc tonality + is_location_valid_for_travel_event_on_land = yes + any_courtier = { + is_valid_active_event_recurrer_trigger = { LIEGE = ROOT } + is_adult = yes # is an adult + age < 65 # but not too old, so wincing in pain isn't just from being real old + } + } + + immediate = { + random_courtier = { + limit = { + is_valid_active_event_recurrer_trigger = { LIEGE = ROOT } + is_adult = yes # is an adult + age < 65 # but not too old, so wincing in pain isn't just from being real old + } + save_scope_as = follower + } + location = { + save_scope_as = location + } + if = { + limit = { + domicile = { has_domicile_building = camp_main_01 } + } + save_scope_value_as = { + name = gold_cost + value = { + value = camp_main_02_domicile_building_gold_cost_value + multiply = 0.5 + ceiling = yes + } + } + } + else_if = { + limit = { + domicile = { has_domicile_building = camp_main_02 } + } + save_scope_value_as = { + name = gold_cost + value = { + value = camp_main_03_domicile_building_gold_cost_value + multiply = 0.5 + ceiling = yes + } + } + } + else = { + save_scope_value_as = { + name = gold_cost + value = { + value = camp_main_04_domicile_building_gold_cost_value + multiply = 0.5 + ceiling = yes + } + } + } + } + + #Buy some beds at an inn for the night + option = { + name = ep3_laamps.5010.a + + remove_short_term_gold = minor_gold_value + + add_character_modifier = { + modifier = ep3_rested_and_refreshed_modifier + years = 5 + } + + every_courtier = { + custom = every_follower_custom + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 15 + } + add_character_modifier = { + modifier = ep3_rested_and_refreshed_modifier + years = 5 + } + } + + stress_impact = { + base = medium_stress_impact_loss + generous = miniscule_stress_impact_loss + greedy = medium_stress_impact_gain + compassionate = miniscule_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Build a Pavilion upgrade at a discount + option = { + name = ep3_laamps.5010.b + trigger = { + NOT = { + domicile = { has_domicile_building = camp_main_04 } + } + gold >= scope:gold_cost + } + show_as_unavailable = { + NOT = { + domicile = { has_domicile_building = camp_main_04 } + } + gold <= scope:gold_cost + } + custom_tooltip = ep3_laamps.5010.b.tt + remove_short_term_gold = scope:gold_cost + domicile = { + if = { + limit = { has_domicile_building_or_higher = camp_main_01 } + switch = { + trigger = has_domicile_building + camp_main_01 = { add_domicile_building = camp_main_02 } + camp_main_02 = { add_domicile_building = camp_main_03 } + camp_main_03 = { add_domicile_building = camp_main_04 } + } + } + } + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Soldier on + option = { + name = ep3_laamps.5010.c + + random_list = { + 10 = { #It works out + desc = ep3_laamps.5010.c.success + modifier = { + add = 2 + scope:location = { + OR = { + terrain = farmlands + terrain = plains + terrain = oasis + terrain = forest + } + } + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5010.c.success + left_icon = root + right_icon = scope:follower + + add_stress = minor_stress_loss + } + } + + 5 = { #It doesn't work out + desc = ep3_laamps.5010.c.failure + modifier = { + add = 5 + age > 35 + } + modifier = { + add = 5 + age > 50 + } + modifier = { + add = 2 + scope:location = { + OR = { + terrain = desert + terrain = mountains + terrain = desert_mountains + terrain = wetlands + } + } + } + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5010.c.failure + left_icon = root + right_icon = scope:hunter + + add_stress = minor_stress_gain + add_character_modifier = { + modifier = ep3_cricked_neck_modifier + years = 5 + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } +} + +# Offer a life to hardened fighters +ep3_laamps.5015 = { + type = character_event + title = ep3_laamps.5015.t + desc = ep3_laamps.5015.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = interested + } + right_portrait = { + character = scope:knight + animation = beg + } + artifact = { + target = scope:newly_created_artifact + position = lower_center_portrait + } + cooldown = { years = 35 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + domicile = { + provisions > provisions_threshold_good_value + } + } + modifier = { + factor = 2 + location.county = { + county_control < full_county_control + } + } + } + + immediate = { + location = { + save_scope_as = location + } + if = { + limit = { + any_pool_character = { + province = root.location + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + random_pool_character = { + province = root.location + limit = { + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = knight + } + } + else = { + create_character = { + template = honorable_soldier_character + location = root.location + culture = location.culture + faith = location.faith + gender_female_chance = root_soldier_female_chance + dynasty = none + save_scope_as = knight + after_creation = { + add_character_flag = created + } + } + } + hidden_effect = { + if = { + limit = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = gallowsbait + } + } + scope:knight = { + create_artifact_brooch_effect = { + OWNER = scope:knight + SMITH = scope:knight + } + add_gold = { 15 35 } + } + scope:newly_created_artifact = { + add_artifact_modifier = artifact_prowess_2_modifier + add_artifact_modifier = artifact_knight_effectiveness_2_modifier + set_artifact_rarity = masterwork + } + } + scope:knight = { + change_current_weight = -100 + # Plus give 'em a nickname. + assign_random_nickname_effect = yes + } + } + } + + #Rob him + option = { + name = ep3_laamps.5015.a + + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = gallowsbait + } + } + + flavor = ep3_laamps.5015.a.tt + + scope:knight = { + pay_short_term_gold = { + target = root + gold = { + value = scope:knight.gold + min = 5 + } + } + } + + scope:newly_created_artifact = { + set_owner = root + } + + if = { + limit = { + has_trait = gallowsbait + } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { + integer_range = { + min = 5 + max = 15 + } + } + } + } + else = { + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { + integer_range = { + min = 5 + max = 15 + } + } + } + } + + stress_impact = { + base = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -1 + } + } + } + + #Bring 'em all + option = { + name = ep3_laamps.5015.b + + trigger = { + maa_regiments_count >= 1 + } + + domicile = { + change_provisions = minor_provisions_loss + } + + reinforce_soldiers_regiment_effect = yes + + add_courtier = scope:knight + scope:knight = { + set_knight_status = force + } + + remove_short_term_gold = { 10 30 } + + stress_impact = { + generous = miniscule_stress_impact_loss + greedy = medium_stress_impact_gain + compassionate = miniscule_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Hire the fella as a knight + option = { + name = ep3_laamps.5015.c + + add_courtier = scope:knight + scope:knight = { + set_knight_status = force + } + + stress_impact = { + generous = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Offer them a place to rest, but only that + option = { + name = ep3_laamps.5015.d + + domicile = { + change_provisions = microscopic_provisions_loss + } + + random = { + chance = 25 + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5015.c.success + left_icon = root + + add_character_modifier = { + modifier = ep3_friend_to_old_soldiers_modifier + years = 30 + } + } + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + generous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + after = { + scope:knight = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Learn new local recipes +ep3_laamps.5020 = { + type = character_event + title = ep3_laamps.5020.t + desc = ep3_laamps.5020.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:cook + animation = personality_compassionate + } + cooldown = { years = 10 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + culture != location.culture + any_courtier = { + is_available_ai_adult = yes + count >= 1 + } + culture = { + cultural_acceptance = { + target = root.location.culture + value <= 75 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + domicile = { + provisions < provisions_threshold_good_value + } + } + } + + immediate = { + location = { + save_scope_as = location + } + location.culture = { + save_scope_as = local_culture + } + culture = { + save_scope_as = culture + } + random_courtier = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = cook + } + save_scope_value_as = { + name = food_range + value = { + integer_range = { + min = 1 + max = 20 + } + } + } + } + + #Suggest a *special* new addition + option = { + name = ep3_laamps.5020.a + + trigger = { + has_trait = cannibal + } + + flavor = ep3_laamps.5020.a.tt + + random = { + chance = 50 + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5020.a.tt + left_icon = root + right_icon = scope:cook + + scope:cook = { + add_secret = { type = secret_cannibal } + random_secret = { + type = secret_cannibal + reveal_to = root + } + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 40 + } + } + random_secret = { + type = secret_cannibal + reveal_to = scope:cook + } + } + } + + add_character_modifier = { + modifier = ep3_new_tastes_cannibal_modifier + years = 10 + } + + stress_impact = { + base = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Suggest fusion cuisine + option = { + name = ep3_laamps.5020.b + + trigger = { + custom_tooltip = { + text = ep3_laamps.5020.tt + OR = { + has_trait = lifestyle_traveler + has_trait = eccentric + has_trait = gluttonous + } + } + } + + show_as_unavailable = { + always = yes + } + + trait = lifestyle_traveler + trait = eccentric + trait = gluttonous + + domicile = { + change_provisions = medium_provisions_gain + } + + add_character_modifier = { + modifier = ep3_expanded_culinary_horizons_modifier + years = 15 + } + + every_courtier = { + custom = every_follower_custom + add_character_modifier = { + modifier = ep3_new_tastes_modifier + years = 10 + } + } + + stress_impact = { + base = minor_stress_impact_loss + gluttonous = medium_stress_impact_loss + inappetetic = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #Try some of this local cuisine + option = { + name = ep3_laamps.5020.c + + random_list = { + 45 = { + desc = ep3_laamps.5020.c.success + modifier = { #This is for fuzzying up the random list so it randomises it a bit + add = scope:food_range + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5020.c.success + left_icon = root + + domicile = { + change_provisions = medium_provisions_gain + } + add_character_modifier = { + modifier = ep3_new_tastes_modifier + years = 10 + } + scope:cook = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 15 + } + } + culture = { + change_cultural_acceptance = { + target = scope:local_culture + value = miniscule_positive_culture_acceptance + desc = cultural_acceptance_gain_food_acceptance + } + } + } + } + 55 = { + desc = ep3_laamps.5020.c.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5020.c.failure + left_icon = root + + add_stress = minor_stress_gain + } + } + } + + stress_impact = { + gluttonous = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + humble = miniscule_stress_impact_loss + inappetetic = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Refuse to try it + option = { + name = ep3_laamps.5020.d + + random = { + chance = 30 + modifier = { + is_ai = yes + add = -29 + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5020.d.tt + left_icon = root + + give_nickname = nick_the_narrow_minded + } + } + + stress_impact = { + generous = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } +} + + +scripted_trigger 5025_can_spawn_contract_trigger = { + can_create_criminal_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_diplomacy_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_hireling_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_justicar_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_learning_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_intrigue_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_stewardship_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } + can_create_transport_contract_trigger = { LAAMP = $LAAMP$ EMPLOYER = $EMPLOYER$ } +} + +# What is your purpose? +ep3_laamps.5025 = { + type = character_event + title = ep3_laamps.5025.t + desc = ep3_laamps.5025.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = thinking + } + cooldown = { years = 30 } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + } + + immediate = { + if = { + limit = { exists = location.barony.holder } + location.barony.holder = { + save_scope_as = local_lord + save_scope_as = bg_override_char + #Find potential employers + if = { + limit = { + 5025_can_spawn_contract_trigger = { LAAMP = root EMPLOYER = scope:local_lord } + } + add_to_temporary_list = potential_employers_list + } + every_vassal_or_below ?= { + limit = { + save_temporary_scope_as = vassal_check + 5025_can_spawn_contract_trigger = { LAAMP = root EMPLOYER = scope:vassal_check } + } + add_to_temporary_list = potential_contract_employers + } + } + #Can we _actually_ spawn two contracts? + if = { + limit = { + any_in_list = { + list = potential_contract_employers + count >= 2 + } + } + save_scope_as = spawn_task_contract_option_available + } + } + } + + #I wanna be landed! + option = { + name = ep3_laamps.5025.a + + add_character_modifier = { + modifier = ep3_lust_for_land_modifier + years = 35 + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + ambitious = minor_stress_impact_loss + humble = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = humble + } + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #I like being landless :) + option = { + name = ep3_laamps.5025.b + flavor = ep3_laamps.5025.b.flavor + + if = { + limit = { + NOT = { + has_trait = lifestyle_traveler + } + } + add_trait = lifestyle_traveler + add_trait_xp = { + trait = lifestyle_traveler + track = travel + value = { + integer_range = { + min = 10 + max = 30 + } + } + } + } + else = { + add_trait_xp = { + trait = lifestyle_traveler + track = travel + value = { + integer_range = { + min = 10 + max = 30 + } + } + } + } + + #Can we _actually_ spawn contracts... + if = { + limit = { exists = scope:spawn_task_contract_option_available } + add_prestige = minor_prestige_gain + custom_tooltip = ep3_laamps.5025.b.tt + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 2 + } + } + else = { + add_prestige = medium_prestige_gain + } + + stress_impact = { + ambitious = medium_stress_impact_gain + humble = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + } + } + } + + #It's best to keep options open + option = { + name = ep3_laamps.5025.c + + flavor = ep3_laamps.5025.c.flavor + + if = { + limit = { + NOT = { + has_trait = flexible_leader + } + } + random = { + chance = 65 + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5025.c.toast + left_icon = root + + add_trait = flexible_leader + } + } + } + else = { + add_stress = medium_stress_loss + } + + domicile = { + change_provisions = medium_provisions_gain + } + + stress_impact = { + fickle = medium_stress_impact_loss + stubborn = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } +} + +# Local tavern owner disrespects you +ep3_laamps.5030 = { + type = character_event + title = ep3_laamps.5030.t + desc = ep3_laamps.5030.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:innkeeper + animation = dismissal + } + cooldown = { years = 10 } + override_background = { reference = tavern } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + domicile = { + provisions < provisions_threshold_good_value + } + } + } + + immediate = { + location = { + save_scope_as = location + } + if = { + limit = { + any_pool_character = { + province = root.location + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + } + random_pool_character = { + province = root.location + limit = { + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = innkeeper + } + } + else = { + create_character = { + template = servant_character + location = root.location + culture = location.culture + faith = location.faith + gender_female_chance = { + if = { + limit = { root.faith = { has_doctrine = doctrine_gender_male_dominated } } + add = 100 + } + else_if = { + limit = { root.faith = { has_doctrine = doctrine_gender_female_dominated } } + add = 0 + } + else = { + add = 50 + } + } + dynasty = none + save_scope_as = innkeeper + after_creation = { + add_character_flag = created + } + } + } + } + + #Ah, forget about it, give me a drink + option = { + name = ep3_laamps.5030.a + + trigger = { + has_trait = drunkard + } + + remove_short_term_gold = tiny_gold_value + + add_character_modifier = { + modifier = legend_hangover_modifier + years = 3 + } + + stress_impact = { + base = major_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #Don't you know who I am? + option = { + name = ep3_laamps.5030.b + + trigger = { + dynasty = { + dynasty_prestige_level >= medium_dynasty_prestige_level + } + } + + reason = ep3_laamps.5030.a.tt + + flavor = ep3_laamps.5030.b.tt + + add_internal_flag = special + + add_prestige = medium_prestige_gain + + add_character_modifier = { + modifier = ep3_comfortable_bed_modifier + years = 10 + } + + every_courtier = { + custom = every_follower_custom + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 35 + } + } + + stress_impact = { + base = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + humble = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Threaten them + option = { + name = ep3_laamps.5030.c + + add_internal_flag = dangerous + + add_dread = medium_dread_gain + + random_list = { + 55 = { #They hand it over + desc = ep3_laamps.5030.c.success + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5030.c.success + left_icon = root + right_icon = scope:innkeeper + + remove_short_term_gold = tiny_gold_value + add_character_modifier = { + modifier = ep3_comfortable_bed_modifier + years = 10 + } + } + } + 25 = { #You have to threaten them further + desc = ep3_laamps.5030.c.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5030.c.failure + left_icon = root + right_icon = scope:innkeeper + + if = { + limit = { + has_trait = gallowsbait + } + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { + integer_range = { + min = 10 + max = 20 + } + } + } + } + else = { + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { + integer_range = { + min = 10 + max = 20 + } + } + } + } + } + } + 5 = { #It goes a little too far + desc = ep3_laamps.5030.c.critfailure + + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5030.c.critfailure + left_icon = root + right_icon = scope:innkeeper + + scope:innkeeper = { + death = { killer = ROOT death_reason = death_murder } + } + + add_secret = { + type = secret_murder + target = scope:innkeeper + } + + if = { + limit = { + has_trait = gallowsbait + } + add_trait_xp = { + trait = gallowsbait + track = marauder + value = { + integer_range = { + min = 25 + max = 40 + } + } + } + } + else = { + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = marauder + value = { + integer_range = { + min = 25 + max = 40 + } + } + } + } + } + } + } + + stress_impact = { + generous = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } + + #Try to barter + option = { + name = ep3_laamps.5030.d + + duel = { + target = scope:innkeeper + skill = diplomacy + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.5030.d.success + min = 5 + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5030.d.success + left_icon = root + right_icon = scope:innkeeper + + remove_short_term_gold = minor_gold_value + add_character_modifier = { + modifier = ep3_comfortable_bed_modifier + years = 10 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamps.5030.d.failure + min = 5 + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5030.d.failure + left_icon = root + right_icon = scope:innkeeper + + add_stress = minor_stress_gain + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + #Take the insult + option = { + name = tournament_events.0161.c + + stress_impact = { + base = minor_stress_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + after = { + scope:innkeeper = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Hire a local guide +ep3_laamps.5035 = { + type = character_event + title = ep3_laamps.5035.t + desc = ep3_laamps.5035.desc + theme = landless_adventurer + override_background = { + reference = terrain + } + left_portrait = { + character = root + animation = chancellor + } + right_portrait = { + character = scope:guide + animation = scheme + } + artifact = { + target = scope:newly_created_map + position = lower_right_portrait + } + artifact = { + trigger = { + exists = scope:random_artifact + } + target = scope:random_artifact + position = lower_left_portrait + } + cooldown = { years = 50 } + + trigger = { + static_group_filter = { + group = ep3_laamps.5035 + match = 0.75 + } + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + location = { + OR = { + terrain = mountains + terrain = wetlands + terrain = desert_mountains + terrain = jungle + } + } + } + } + + immediate = { + location = { + save_scope_as = location + } + if = { #Grab a random, inexpensive artifact if you have it + limit = { + any_character_artifact = { + NOT = { + has_artifact_modifier = artifact_guide_map_modifier + } + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:guide } + } + } + random_character_artifact = { + limit = { + NOT = { + has_artifact_modifier = artifact_guide_map_modifier + } + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:guide } + } + weight = { + base = 1 + modifier = { + rarity = common + add = 2 + } + } + save_scope_as = random_artifact + } + } + if = { + limit = { + any_pool_character = { + province = root.location + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + } + random_pool_character = { + province = root.location + limit = { + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = guide + } + } + else = { + create_character = { + template = anatolian_guide_character + location = root.location + culture = location.culture + faith = location.faith + gender_female_chance = 50 + dynasty = none + save_scope_as = guide + after_creation = { + add_character_flag = created + } + } + # Plus give 'em a nickname. + hidden_effect = { + scope:guide = { assign_random_nickname_effect = yes } + } + } + hidden_effect = { + scope:guide = { + create_artifact = { + name = guide_map + description = guide_map_desc + modifier = artifact_guide_map_modifier + type = miscellaneous + visuals = pocket_map + history = { + type = created_before_history + actor = scope:guide + } + save_scope_as = newly_created_map + } + } + scope:newly_created_map = { + set_artifact_rarity = masterwork + set_max_durability = 25 + } + } + } + + #Recruit them permanently + option = { + name = ep3_laamps.5035.a + + pay_short_term_gold = { + target = scope:guide + gold = medium_gold_value + } + + add_courtier = scope:guide + + court_position_grant_effect = { + EMPLOYER = root + POS = travel_leader + CANDIDATE = scope:guide + } + + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + #Buy maps off them + option = { + name = ep3_laamps.5035.b + + pay_short_term_gold = { + target = scope:guide + gold = medium_gold_value + } + + scope:newly_created_map = { + set_owner = root + } + + stress_impact = { + trusting = minor_stress_impact_gain + paranoid = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + } + } + } + + #Trust their guidance + option = { + name = ep3_laamps.5035.c + + pay_short_term_gold = { + target = scope:guide + gold = tiny_gold_value + } + + random_list = { + 60 = { #The guide's info is correct + desc = ep3_laamps.5035.c.success + + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5035.c.success + left_icon = root + right_icon = scope:guide + + add_character_modifier = { + modifier = ep3_well_guided_modifier + years = 10 + } + } + } + 40 = { #The guide's info is sketchy + desc = ep3_laamps.5035.c.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5035.c.failure + left_icon = root + right_icon = scope:guide + + add_character_modifier = { + modifier = ep3_sketchy_guides_modifier + years = 3 + } + } + } + 10 = { #The guide's info leads you into a trap! + desc = ep3_laamps.5035.c.critfailure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5035.c.critfailure + left_icon = root + right_icon = scope:guide + + increase_wounds_no_death_effect = { REASON = fight } + remove_short_term_gold = minor_gold_value + scope:random_artifact ?= { + set_owner = scope:guide + } + } + } + } + + stress_impact = { + generous = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } + + #Reject them + option = { + name = ep3_laamps.5035.d + + flavor = ep3_laamps.5035.d.tt + + random = { + chance = 45 + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5035.d.toast + left_icon = root + + domicile = { + change_provisions = minor_provisions_loss + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } +} + +# Scouting reveals some potential hidden treasures +ep3_laamps.5040 = { + type = character_event + title = ep3_laamps.5040.t + desc = ep3_laamps.5040.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = jockey_idle + camera = camera_event_horse_very_left + } + cooldown = { years = 10 } + override_background = { reference = ep3_campfire } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + } + + immediate = { + location = { + save_scope_as = location + } + if = { + limit = { + any_pool_character = { + province = root.location + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + } + random_pool_character = { + province = root.location + limit = { + is_available_ai_adult = yes + NOT = { + has_any_good_relationship_with_root_trigger = yes + } + } + save_scope_as = merchant + } + } + else = { + create_character = { + template = anatolian_guide_character + location = root.location + culture = location.culture + faith = location.faith + dynasty = none + save_scope_as = merchant + after_creation = { + add_character_flag = created + } + } + # Plus give 'em a nickname. + hidden_effect = { + scope:merchant = { assign_random_nickname_effect = yes } + } + } + } + + #Go searching in the ruins + option = { + name = ep3_laamps.5040.a + + random_list = { + 37 = { #You uncover a dusty sword + desc = ep3_laamps.5040.a.bigsuccess + random_dummy_gender_effect = yes + create_artifact_weapon_effect = { + OWNER = root + CREATOR = scope:dummy_gender + SET_WEAPON_TYPE = flag:artifact_weapon_type_sword + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5040.a.bigsuccess + left_icon = root + right_icon = scope:newly_created_artifact + custom_tooltip = ep3_laamps.5040.a.bigsuccess.tt + } + } + 64 = { #You discover a small trinket + desc = ep3_laamps.5040.a.success + generate_trinket_effect = { + TRINKET_RECEIVER = root + TRINKET_GIVER = root + GRAB_ALL_TRINKETS = yes + HISTORY_TYPE = discovered + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5040.a.success + left_icon = root + right_icon = scope:new_trinket + custom_tooltip = ep3_laamps.5040.a.success.tt + } + } + 43 = { #You come up with nothing + desc = ep3_laamps.5040.a.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5040.a.failure + left_icon = root + + custom_tooltip = ep3_laamps.5040.a.failure.tt + } + } + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + brave = miniscule_stress_impact_loss + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Buy supplies + option = { + name = ep3_laamps.5040.b + + domicile = { + change_provisions = { + value = { minor_provisions_gain medium_provisions_gain } + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + generous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + after = { + scope:merchant = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Meet local lord +ep3_laamps.5045 = { + type = character_event + title = ep3_laamps.5045.t + desc = ep3_laamps.5045.desc + theme = landless_adventurer + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:local_lord + animation = scheme + } + cooldown = { years = 10 } + override_background = { reference = council_chamber } + + trigger = { + #Standard checks + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + is_location_valid_for_travel_event_on_land = yes + location.barony.holder ?= { + is_available_ai_adult = yes + highest_held_title_tier <= root.prestige_level + } + NOT = { #Just ensure _you_ aren't a bandit for loc reasons + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 30 + } + } + } + + immediate = { + location = { + save_scope_as = location + } + location.barony = { + save_scope_as = location_title + } + location.barony.holder = { + save_scope_as = local_lord + save_scope_as = bg_override_char + #Find potential employers + if = { + limit = { + 5025_can_spawn_contract_trigger = { LAAMP = root EMPLOYER = scope:local_lord } + } + add_to_temporary_list = potential_employers_list + } + every_vassal_or_below ?= { + limit = { + save_temporary_scope_as = vassal_check + 5025_can_spawn_contract_trigger = { LAAMP = root EMPLOYER = scope:vassal_check } + } + add_to_temporary_list = potential_contract_employers + } + } + #Can we _actually_ spawn two contracts? + if = { + limit = { + any_in_list = { + list = potential_contract_employers + count >= 2 + } + } + save_scope_as = spawn_task_contract_option_available + } + if = { + limit = { + scope:local_lord = { + highest_held_title_tier > tier_duchy + any_held_title = { + title_tier = county + is_landless_type_title = no + count >= 1 + } + } + } + scope:local_lord = { + ordered_county = { + limit = { + tier = tier_county + holder = scope:local_lord + is_landless_type_title = no + } + #Least developed county as a rough approximation of backwaters + order_by = { + value = development_level + multiply = -1 + } + + save_scope_as = lord_title + } + } + } + } + + #Ask for land + option = { + name = ep3_laamps.5045.a + + trigger = { + scope:local_lord = { + highest_held_title_tier > tier_duchy + any_held_title = { + title_tier = county + count >= 1 + } + } + prestige_level >= 2 + has_character_modifier = ep3_lust_for_land_modifier + } + + custom_tooltip = ep3_laamps.5045.a.tt + + add_internal_flag = special + + duel = { + target = scope:local_lord + skill = diplomacy + + 300 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.5045.a.success + min = 5 + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamps.5045.a.success + left_icon = root + right_icon = scope:local_lord + + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = yes + } + + change_liege = { + liege = scope:local_lord + change = scope:change + } + + scope:lord_title = { + change_title_holder = { + holder = root + change = scope:change + } + } + + resolve_title_and_vassal_change = scope:change + + scope:local_lord = { + add_hook = { + target = root + type = loyalty_hook + } + } + } + } + + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamps.5045.a.failure + min = 5 + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.5045.a.failure + left_icon = root + right_icon = scope:local_lord + } + } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + #Ask for gold + option = { + name = ep3_laamps.5045.b + + add_gold = { 5 20 } + + scope:local_lord = { + add_hook = { + target = root + type = favor_hook + } + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #Ask for provisions + option = { + name = ep3_laamps.5045.c + + domicile = { + change_provisions = { + value = { miniscule_provisions_gain minor_provisions_gain } + } + } + + scope:local_lord = { + add_hook = { + target = root + type = favor_hook + } + } + + stress_impact = { + ambitious = minor_stress_impact_gain + content = miniscule_stress_impact_loss + greedy = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + #Ask for work + option = { + name = ep3_laamps.5045.d + trigger = { exists = scope:spawn_task_contract_option_available } + reverse_add_opinion = { + target = scope:local_lord + modifier = impressed_opinion + opinion = 40 + } + + custom_tooltip = ep3_laamps.5025.b.tt #Re-used + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 2 + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + brave = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + } + } +} + +################################################## +# Hereweard embarks on his destiny +# by Nick Meredith +# 5999-6999 +################################################## + +# Hereward hears of trouble in England +ep3_laamps.5999 = { + type = character_event + title = ep3_laamps.5999.t + desc = ep3_laamps.5999.desc + theme = realm + left_portrait = { + character = root + animation = interested + } + lower_right_portrait = scope:william + lower_center_portrait = scope:harald + lower_left_portrait = scope:harold + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + character:140 = { + if = { + limit = { + is_alive = yes + } + save_scope_as = william + } + } + character:122 = { + if = { + limit = { + is_alive = yes + } + save_scope_as = harold + } + } + character:102531 = { + if = { + limit = { + is_alive = yes + } + save_scope_as = harald + } + } + character:364 = { + if = { + limit = { + is_alive = yes + } + save_scope_as = flanders #I can't be bothered spelling Boujewijingjn ok + } + } + character:114 = { + save_scope_as = edward + } + location = { + save_scope_as = location + } + } + + option = { #Let's wait and see + name = ep3_laamps.5999.a + + add_character_modifier = { + modifier = ep3_foreign_affairs_modifier + years = 5 + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #England concerns me no longer + name = ep3_laamps.5999.b + custom_tooltip = ep3_laamps.5999.b.tt + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 1 + } + + stress_impact = { + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } +} + +# Hereward sets off +ep3_laamps.6000 = { + type = character_event + title = ep3_laamps.6000.t + desc = { + desc = ep3_laamps.6000.intro + first_valid = { + triggered_desc = { + trigger = { scope:brother = { is_alive = yes } } + desc = ep3_laamps.6000.body.alive + } + desc = ep3_laamps.6000.body.dead + } + desc = ep3_laamps.6000.desc + first_valid = { + triggered_desc = { + trigger = { scope:brother = { is_alive = yes } } + desc = ep3_laamps.6000.closing.alive + } + desc = ep3_laamps.6000.closing.dead + } + } + theme = realm + left_portrait = { + character = root + animation = chancellor + } + lower_right_portrait = scope:william + lower_center_portrait = scope:brother + lower_left_portrait = scope:harold + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + character:140 = { + save_scope_as = william + } + character:122 = { + save_scope_as = harold + } + father = { + save_scope_as = father + } + random_sibling = { #Hereweard only has one sibling + even_if_dead = yes + save_scope_as = brother + } + province:1537 = { + save_scope_as = ely + } + } + + option = { #Set sail at once! + name = { + text = ep3_laamps.6000.a.dead + trigger = { + scope:brother = { is_alive = no } + } + } + name = { + text = ep3_laamps.6000.a + trigger = { + scope:brother = { is_alive = yes } + } + } + + flavor = ep3_laamps.6000.a.flavor + + custom_tooltip = ep3_laamps.6000.a.tt + + every_character_active_contract = { invalidate_contract = yes } + add_character_flag = laamp_stay_same_kingdom + + start_travel_plan = { + destination = province:1537 #Ely + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_event = ep3_laamps.6001 + on_arrival_destinations = last + return_trip = no # One way + travel_with_domicile = yes + } + + stress_impact = { + ambitious = minor_stress_impact_loss + } + + ai_chance = { + # Hereward will always do the thing. + base = 1000 + } + } + + option = { #It is time to forget + name = ep3_laamps.6000.b + + custom_tooltip = ep3_laamps.6000.b.tt + + add_character_modifier = { + modifier = ep3_the_restful_modifier + years = 15 + } + add_opinion = { + target = scope:william + modifier = demanded_eviction_opinion + } + + stress_impact = { + ambitious = minor_stress_impact_gain + } + + ai_chance = { + # Hereward will always do the thing. + base = 0 + } + } +} + +# Hereward arrives, finds his brother dead +ep3_laamps.6001 = { + type = character_event + title = ep3_laamps.6001.t + desc = ep3_laamps.6001.desc + theme = death + left_portrait = { + character = root + animation = random_weapon_aggressive + } + right_portrait = { + character = scope:frederick + animation = inspect_weapon + } + lower_center_portrait = scope:brother + override_effect_2d = { + reference = fog + } + override_effect_2d = { + reference = fog + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + random_sibling = { #Hereweard only has one sibling + limit = { + is_alive = yes + } + save_scope_as = brother + } + province:1537 = { + save_scope_as = ely + } + if = { #Either grab Frederick de Warenne, real-life killer of Hereward's brother... + limit = { + character:175 = { + is_alive = yes + is_available_healthy_ai_adult = yes + } + } + character:175 = { + save_scope_as = frederick + } + } + else = { #...or make another Frederick + create_character = { + location = scope:ely + template = knight + culture = culture:norman + faith = faith:catholic + save_scope_as = frederick + } + } + hidden_effect = { #Finally, kill Oslac + scope:brother = { + death = { + death_reason = death_murder + killer = scope:frederick + } + } + } + } + + option = { #Initiate the duel + name = ep3_laamps.6001.a + + custom_tooltip = ep3_laamps.6001.b.two.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:frederick + FATALITY = always + FIXED = sc_attacker #Hereward should _always_ win + LOCALE = wilderness_scope + OUTPUT_EVENT = ep3_laamps.6002 + INVALIDATION_EVENT = fp1_yearly.2002 #Re-use this, though SHOULD never invalidate + } + + stress_impact = { + vengeful = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #Give them a chance to run + name = ep3_laamps.6001.b + + random_list = { + 1 = { + desc = ep3_laamps.6001.b.one + show_chance = no + + custom_tooltip = ep3_laamps.6001.b.one.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:frederick + FATALITY = always + FIXED = sc_attacker #We win these, boys + LOCALE = wilderness_scope + OUTPUT_EVENT = ep3_laamps.6002 + INVALIDATION_EVENT = fp1_yearly.2002 #Re-use this, though SHOULD never invalidate + } + } + 1 = { + desc = ep3_laamps.6001.b.two + show_chance = no + + custom_tooltip = ep3_laamps.6001.b.two.tt + + configure_start_single_combat_effect = { #Ah, the illusion of choice! + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:frederick + FATALITY = always + FIXED = sc_attacker #We win these, boys + LOCALE = wilderness_scope + OUTPUT_EVENT = ep3_laamps.6002 + INVALIDATION_EVENT = fp1_yearly.2002 #Re-use this, though SHOULD never invalidate + } + } + } + + stress_impact = { + wrathful = minor_stress_impact_gain + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } + + after = { trigger_event = ep3_laamps.9983 } +} + +ep3_laamps.6002 = { + type = character_event + hidden = yes + + immediate = { + trigger_event = { id = ep3_laamps.6003 days = 1 } + } +} + +# Hereward swears revenge +ep3_laamps.6003 = { + type = character_event + title = ep3_laamps.6003.t + desc = ep3_laamps.6003.desc + theme = death + left_portrait = { + character = root + animation = grief + } + lower_right_portrait = { + trigger = { + character:172 = { + is_alive = yes + } + } + character = character:172 + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + if = { #If Frederick's brother still exists, Nemesis'em + limit = { + character:172 = { + is_alive = yes + } + } + character:172 = { + set_relation_nemesis = { + target = root + reason = nemesis_killed_brother + } + } + } + } + + option = { #Swear vengeance + name = ep3_laamps.6003.a + + add_trait_xp = { + trait = the_wake + value = 15 + } + + stress_impact = { + base = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #Rifle through Fred's pockets + name = ep3_laamps.6003.b + + flavor = ep3_laamps.6003.b.flavor + + add_gold = minor_gold_value + + random = { + chance = 50 + + create_artifact = { + name = warenne_coin + description = warenne_coin_description + history = { + type = created_before_history + } + type = miscellaneous + visuals = brooch + modifier = artifact_knight_effectiveness_2_modifier + modifier = artifact_raid_speed_4_modifier + modifier = artifact_pursue_efficiency_1_modifier + save_scope_as = new_trinket + } + + + send_interface_toast = { + title = stewardship_general.2001.tt #Re-using this + left_icon = root + right_icon = scope:new_trinket + show_as_tooltip = { + scope:new_trinket = { set_owner = root } + } + } + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } + + after = { + trigger_event = { + id = ep3_laamps.6005 + days = { 25 45 } + } + } +} + +# Hereward sets up a camp in the fens near Ely +ep3_laamps.6005 = { + type = character_event + title = ep3_laamps.6005.t + desc = ep3_laamps.6005.desc + theme = realm + override_background = { reference = wilderness_wetlands } + left_portrait = { + character = root + animation = personality_honorable + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + #Save William + character:140 = { + save_scope_as = william + } + + #Save our location; should be Ely + location = { save_scope_as = location } + + #Set up The Fens + ep3_the_fens_list_effect = yes + + every_in_list = { + list = the_fens + custom = every_fenland_holding + add_province_modifier = { + modifier = ep3_dangerous_fenland_modifier + years = 15 + } + } + + #Create the character here + create_character = { + location = root.capital_province + template = wetlands_commander_character + culture = root.culture + faith = root.faith + save_scope_as = wetlands_commander + } + + ## Used in the after: + # Make a list of every Anglo-Saxon lord + scope:william = { + every_vassal = { + limit = { + has_culture = culture:anglo_saxon + } + add_to_list = aethelings + } + } + + # Pick the most powerful Anglo-Saxon lord + # Most likely Eadwin Aelfgarson + ordered_in_list = { + list = aethelings + order_by = max_military_strength + save_scope_as = powerful_vassal + } + + domicile = { + change_provisions = minor_provisions_gain + } + } + + option = { #Raid to acquire wealth + name = ep3_laamps.6005.a + + flavor = ep3_laamps.6005.a.tt + + add_gold = medium_gold_value + + scope:ely = { + add_province_modifier = { + modifier = ep3_plundered_modifier + years = 5 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } + + option = { #Recruit a local knight + name = ep3_laamps.6005.b + + flavor = ep3_laamps.6005.b.tt + + add_courtier = scope:wetlands_commander + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + after = { + if = { + limit = { + exists = scope:powerful_vassal + } + trigger_event = { + id = ep3_laamps.6010 + days = { 60 120 } + } + } + } +} + +# The Aethelings are disgruntled; go to visit the most powerful one? +ep3_laamps.6010 = { + type = letter_event + opening = ep3_laamps.6010.t + desc = ep3_laamps.6010.desc + sender = scope:powerful_vassal + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + # Make a list of every Anglo-Saxon lord + scope:william = { + every_vassal = { + limit = { + has_culture = culture:anglo_saxon + } + add_to_list = aethelings + } + } + + # Pick the most powerful Anglo-Saxon lord + # Most likely Eadwin Aelfgarson + ordered_in_list = { + list = aethelings + order_by = max_military_strength + save_scope_as = powerful_vassal + } + + scope:powerful_vassal.capital_province = { + save_scope_as = powerful_vassal_capital + } + } + + option = { #Yes! + name = ep3_laamps.6010.a + + flavor = ep3_laamps.6010.a.flavor + + custom_tooltip = ep3_laamps.6010.a.tt + + every_character_active_contract = { invalidate_contract = yes } + + start_travel_plan = { + destination = scope:powerful_vassal_capital + players_use_planner = no + on_arrival_event = ep3_laamps.6015 + on_arrival_destinations = last + return_trip = no + } + + #Just to ensure we get the right one + scope:powerful_vassal = { + add_character_flag = temp_powerful_vassal_flag + } + + ai_chance = { + base = 100 + } + } + + option = { #...no. + name = ep3_laamps.6010.b + + reverse_add_opinion = { + target = scope:powerful_vassal + modifier = annoyed_opinion + opinion = -35 + } + + ai_chance = { + base = 0 + } + } +} + +# You meet with the Aetheling +ep3_laamps.6015 = { + type = character_event + title = ep3_laamps.6015.t + desc = ep3_laamps.6015.desc + theme = realm + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:powerful_vassal + animation = worry + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + character:140 = { + save_scope_as = william + } + + scope:william = { + random_vassal = { + limit = { + has_character_flag = temp_powerful_vassal_flag + } + save_scope_as = powerful_vassal + } + } + } + + option = { #You have my support + name = ep3_laamps.6015.a + + scope:william = { + every_vassal = { + limit = { + culture = culture:norman + } + custom = every_direct_vassal_william + add_opinion = { + target = root + modifier = revanchist_opinion + opinion = -35 + } + } + every_vassal_or_below = { + limit = { + culture = culture:anglo_saxon + } + custom = every_anglo_noble + add_opinion = { + target = root + modifier = revanchist_opinion + opinion = 35 + } + } + } + + scope:powerful_vassal = { + add_character_flag = happy_flag + } + + add_diplomacy_skill = 1 + + reverse_add_opinion = { + target = scope:powerful_vassal + modifier = pleased_opinion + opinion = 50 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #I need time to decide + name = ep3_laamps.6015.b + + scope:powerful_vassal = { + add_character_flag = annoyed_flag + } + + add_character_modifier = { + modifier = ep3_hereward_caution_modifier + years = 5 + } + + reverse_add_opinion = { + target = scope:powerful_vassal + modifier = annoyed_opinion + opinion = -5 + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_boldness = -1 + ai_rationality = 0.5 + } + } + } + + after = { + trigger_event = { + id = ep3_laamps.6016 + days = 1 + } + } +} + +# Bad news arrives +ep3_laamps.6016 = { + type = character_event + title = ep3_laamps.6016.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:powerful_vassal = { + has_character_flag = annoyed_flag + } + } + desc = ep3_laamps.6016.frustrated + } + triggered_desc = { + trigger = { + scope:powerful_vassal = { + has_character_flag = happy_flag + } + } + desc = ep3_laamps.6016.happy + } + } + desc = ep3_laamps.6016.ending + } + theme = realm + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:powerful_vassal + animation = worry + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + character:140 = { + save_scope_as = william + } + } + + option = { #You have my support + name = ep3_laamps.6016.a + + custom_tooltip = ep3_laamps.6016.a.tt + + ai_chance = { + base = 100 + } + } + + after = { + trigger_event = ep3_laamps.6020 #Start the Harrying of the North + + if = { + limit = { + scope:william = { + is_ai = no + } + } + scope:william = { + trigger_event = ep3_laamps.6021 + } + } + if = { + limit = { + exists = domicile + location != domicile.domicile_location + } + start_travel_plan = { + destination = root.domicile.domicile_location + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + return_trip = no # One way + } + } + } +} + +# The Harrying of the North begins +ep3_laamps.6020 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.6020.t + desc = ep3_laamps.6020.desc + theme = realm + override_background = { reference = ep3_fullscreen_harrying_of_the_north } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + play_music_cue = mx_cue_war_declared + + character:140 = { + save_scope_as = william + } + + # Make a list of every Anglo-Saxon lord + scope:william = { + every_vassal = { + limit = { + has_culture = culture:anglo_saxon + } + add_to_list = aethelings + } + } + } + + option = { #Oh lort here we go + name = ep3_laamps.6020.a + + every_in_list = { + list = aethelings + custom = every_aetheling + every_realm_county = { + custom = every_county + change_county_control = 25 + add_county_modifier = { + modifier = ep3_harried_modifier + years = 15 + } + } + } + + scope:william = { + add_character_modifier = { + modifier = ep3_the_conqueror_modifier + years = 15 + } + create_story = story_cycle_harrying_of_the_north + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } +} + +# The Harrying of the North begins - William perspective +# This one doesn't trigger the harrying story cycle, that's held within .6020 +ep3_laamps.6021 = { + type = character_event + window = fullscreen_event + title = ep3_laamps.6020.t + desc = ep3_laamps.6021.desc + theme = realm + override_background = { reference = ep3_fullscreen_harrying_of_the_north } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + play_music_cue = mx_cue_war_declared + + character:140 = { + save_scope_as = william + } + + # Make a list of every Anglo-Saxon lord + scope:william = { + every_vassal = { + limit = { + has_culture = culture:anglo_saxon + } + add_to_list = aethelings + } + } + } + + option = { #Oh lort here we go + name = ep3_laamps.6020.a + + show_as_tooltip = { + every_in_list = { + list = aethelings + custom = every_aetheling + every_realm_county = { + custom = every_county + change_county_control = 25 + add_county_modifier = { + modifier = ep3_harried_modifier + years = 15 + } + } + } + } + + show_as_tooltip = { + scope:william = { + add_character_modifier = { + modifier = ep3_the_conqueror_modifier + years = 15 + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } +} + +################################################## +# Unique LAAMP Events +# by Nick Meredith +# 7000 - 7999 +################################################## + +# Eadgar becomes a LAAMP +ep3_laamps.7000 = { + type = character_event + title = ep3_laamps.7000.t + desc = ep3_laamps.7000.desc + theme = realm + left_portrait = { + character = root + animation = thinking + } + lower_center_portrait = scope:william + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + title:k_england = { + save_scope_as = england + holder = { save_scope_as = william } + } + location = { + save_scope_as = location + } + primary_heir = { + save_scope_as = heir + } + } + + option = { #I'll go to Scotland + name = ep3_laamps.7000.a + + hidden_effect = { + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = no + } + every_held_title = { + change_title_holder_include_vassals = { + holder = scope:heir + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = scope:heir + } + + add_trait = gallivanter + + start_travel_plan = { + destination = province:1741 #St Johnston + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + travel_with_domicile = yes + return_trip = no # One way + } + + stress_impact = { + ambitious = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 0.5 + } + } + } + + option = { #Norman Italy sounds like fun + name = ep3_laamps.7000.b + + hidden_effect = { + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = no + } + every_held_title = { + change_title_holder_include_vassals = { + holder = scope:heir + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = scope:heir + } + + add_trait = gallivanter + + start_travel_plan = { + destination = province:2619 #Trani + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + travel_with_domicile = yes + return_trip = no # One way + } + + stress_impact = { + ambitious = minor_stress_impact_loss + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #Maybe I'll stay + name = ep3_laamps.7000.c + + add_prestige = major_prestige_gain + + stress_impact = { + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } +} + +# Siward Barn turns up at Hereward's camp +# From Hereward's perspective +ep3_laamps.7001 = { + type = character_event + title = ep3_laamps.7001.t + desc = ep3_laamps.7001.desc + theme = realm + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:siward + animation = marshal + } + cooldown = { years = 200 } #Should never happen again + + trigger = { + has_ep3_dlc_trigger = yes + has_government = landless_adventurer_government + character:90028 = { + exists = this + } + character:161266 = { + exists = this + } + } + + immediate = { + character:161266 = { + save_scope_as = siward + move_to_pool_at = root.location + } + location = { + save_scope_as = location + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Of course, come on in! + name = ep3_laamps.7001.a + + add_courtier = scope:siward + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + random = { + chance = { + value = 5 + if = { + limit = { is_ai = no } + add = 95 + } + } + trigger_event = { + id = ep3_laamps.7002 + days = { 150 200 } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #We're full + name = ep3_laamps.7001.b + + reverse_add_opinion = { + target = scope:siward + modifier = annoyed_opinion + opinion = -20 + } + + stress_impact = { + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } +} + +scripted_effect ep3_laamps_7002_ai_siward_leaves_effect = { + scope:siward = { + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = scope:siward + } + start_travel_plan = { + destination = province:5296 #Bata + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + on_arrival_event = ep3_laamps.7003 + travel_with_domicile = yes + return_trip = no # One way + } + } +} + +# Siward Barn leaves Hereward's camp +# From Hereward's perspective +ep3_laamps.7002 = { + type = character_event + title = ep3_laamps.7002.t + desc = ep3_laamps.7002.desc + theme = realm + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:siward + animation = personality_honorable + } + + trigger = { + has_ep3_dlc_trigger = yes + character:90028 = { + exists = this + } + character:161266 = { + exists = this + location = root.location + } + title:e_byzantium = { + exists = this + } + title:k_england = { + exists = this + } + title:c_zichia.holder = { + NOT = { + this = title:e_byzantium.holder + } + } + } + + immediate = { + hidden_effect = { + scope:siward = { #Give him some gold so he can buy land + add_gold = 300 + } + } + title:e_byzantium.holder = { + save_scope_as = emperor + } + title:k_england.holder = { + save_scope_as = king_england + } + } + + option = { #Go with my blessing + name = ep3_laamps.7002.a + + ep3_laamps_7002_ai_siward_leaves_effect = yes + + stress_impact = { + compassionate = minor_stress_impact_loss + } + + ai_chance = { + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { #I SHALL BECOME YOU + name = ep3_laamps.7002.b + + trigger = { + is_ai = no + } + + add_internal_flag = dangerous + + scope:siward = { + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = scope:siward + } + start_travel_plan = { + destination = province:496 #Constantinople + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + on_arrival_event = ep3_laamps.7003 + travel_with_domicile = yes + return_trip = no # One way + } + } + + set_player_character = scope:siward + + ai_chance = { + base = 0 + } + } + + option = { #Duel to stay. + name = bp1_yearly.1020.a + + duel = { + skill = diplomacy + target = scope:siward + # He stays. + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamps.7002.c.success + send_interface_toast = { + title = ep3_laamps.7002.c.success + left_icon = scope:siward + reverse_add_opinion = { + target = scope:siward + modifier = respect_opinion + opinion = 30 + } + } + } + # He goes. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamps.7002.c.failure + send_interface_toast = { + title = ep3_laamps.7002.c.failure + left_icon = scope:siward + ep3_laamps_7002_ai_siward_leaves_effect = yes + } + } + } + + ai_chance = { + ai_value_modifier = { + ai_sociability = 1 + ai_rationality = 1 + } + } + } + + after = { + scope:siward = { add_character_modifier = laamp_provisions_forgiveness_travel_modifier } + } +} + +# Siward Barn arrives in Constantinople +ep3_laamps.7003 = { + type = character_event + title = ep3_laamps.7003.t + desc = ep3_laamps.7003.desc + theme = realm + override_background = { reference = ep3_constantinople } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:emperor + animation = scheme + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + title:e_byzantium.holder = { + save_scope_as = emperor + } + title:c_zichia = { + save_scope_as = zichia + } + } + + option = { #Oh boy I'd love to do a realmy thing! + name = ep3_laamps.7003.a + + custom_tooltip = ep3_laamps.7003.a.tt + + start_travel_plan = { + destination = province:5296 #Bata + players_use_planner = no + on_start_on_action = on_travel_relocation_start + on_arrival_on_action = on_travel_relocation_end + on_arrival_destinations = last + on_arrival_event = ep3_laamps.7004 + travel_with_domicile = yes + return_trip = no # One way + } + + stress_impact = { + ambitious = minor_stress_impact_loss + } + + ai_chance = { #50% chance for AI + base = 50 + } + } + + option = { #Nah I'd rather stay here + name = ep3_laamps.7003.b + + add_character_modifier = { + modifier = ep3_culturally_greek_modifier + years = 20 + } + + reverse_add_opinion = { + target = scope:emperor + modifier = disappointed_opinion + opinion = -5 + } + + ai_chance = { #50% chance for AI + base = 50 + } + } +} + +scripted_effect new_england_holding_names_effect = { + random_list = { + 100 = { set_title_name = b_london } + 100 = { set_title_name = b_southwark } + 100 = { set_title_name = b_woxbrigge } + 100 = { set_title_name = b_gore } + 100 = { set_title_name = b_brentford } + 100 = { set_title_name = b_colchester } + 100 = { set_title_name = b_maldon } + 100 = { set_title_name = b_chelmsford } + 100 = { set_title_name = b_dunmow } + 100 = { set_title_name = b_bedford } + 100 = { set_title_name = b_ampthill } + 100 = { set_title_name = b_luton } + 100 = { set_title_name = b_berkhamsted } + 100 = { set_title_name = b_saint_albans } + 100 = { set_title_name = b_hertford } + 100 = { set_title_name = b_buckingham } + 100 = { set_title_name = b_aylesbury } + 100 = { set_title_name = b_newport } + 100 = { set_title_name = b_wycombe } + 100 = { set_title_name = b_bamburgh } + 100 = { set_title_name = b_rothbury } + 100 = { set_title_name = b_lindisfarne } + 100 = { set_title_name = b_hexham } + 100 = { set_title_name = b_durham } + 100 = { set_title_name = b_hartlepool } + 100 = { set_title_name = b_darlington } + 100 = { set_title_name = b_carlisle } + 100 = { set_title_name = b_whitehaven } + 100 = { set_title_name = b_furness } + 100 = { set_title_name = b_wigton } + 100 = { set_title_name = b_lancaster } + 100 = { set_title_name = b_salford } + 100 = { set_title_name = b_west_derby } + 100 = { set_title_name = b_kendal } + 100 = { set_title_name = b_appleby } + 100 = { set_title_name = b_chester } + 100 = { set_title_name = b_northwich } + 100 = { set_title_name = b_macclesfield } + 100 = { set_title_name = b_derby } + 100 = { set_title_name = b_chesterfield } + 100 = { set_title_name = b_castleton } + 100 = { set_title_name = b_york } + 100 = { set_title_name = b_scarborough } + 100 = { set_title_name = b_whitby } + 100 = { set_title_name = b_richmond } + 100 = { set_title_name = b_yarlestre } + 100 = { set_title_name = b_pockington } + 100 = { set_title_name = b_cottingham } + 100 = { set_title_name = b_bridlington } + 100 = { set_title_name = b_leeds } + 100 = { set_title_name = b_doncaster } + 100 = { set_title_name = b_halifax } + 100 = { set_title_name = b_sheffield } + 100 = { set_title_name = b_bolton } + 100 = { set_title_name = b_ripon } + 100 = { set_title_name = b_lincoln } + 100 = { set_title_name = b_stamford } + 100 = { set_title_name = b_boston } + 100 = { set_title_name = b_bolingsbroke } + 100 = { set_title_name = b_grimsby } + 100 = { set_title_name = b_norwich } + 100 = { set_title_name = b_thetford } + 100 = { set_title_name = b_walsingham } + 100 = { set_title_name = b_lynn } + 100 = { set_title_name = b_ipswich } + 100 = { set_title_name = b_sudbury } + 100 = { set_title_name = b_blything } + 100 = { set_title_name = b_beodericsworth } + 100 = { set_title_name = b_cambridge } + 100 = { set_title_name = b_radfield } + 100 = { set_title_name = b_papworth } + 100 = { set_title_name = b_ely } + 100 = { set_title_name = b_warwick } + 100 = { set_title_name = b_coventry } + 100 = { set_title_name = b_birmingham } + 100 = { set_title_name = b_leicester } + 100 = { set_title_name = b_melton } + 100 = { set_title_name = b_bosworth } + 100 = { set_title_name = b_rutland } + 100 = { set_title_name = b_nottingham } + 100 = { set_title_name = b_newark } + 100 = { set_title_name = b_retford } + 100 = { set_title_name = b_stafford } + 100 = { set_title_name = b_wolverhampton } + 100 = { set_title_name = b_stoke_on_trent } + 100 = { set_title_name = b_worcester } + 100 = { set_title_name = b_evesham } + 100 = { set_title_name = b_kidderminster } + 100 = { set_title_name = b_hurstingstone } + 100 = { set_title_name = b_norman_cross } + 100 = { set_title_name = b_leightonstone } + 100 = { set_title_name = b_northampton } + 100 = { set_title_name = b_peterborough } + 100 = { set_title_name = b_kettering } + 100 = { set_title_name = b_shrewsbury } + 100 = { set_title_name = b_ludlow } + 100 = { set_title_name = b_bishops_castle } + 100 = { set_title_name = b_gloucester } + 100 = { set_title_name = b_bristol } + 100 = { set_title_name = b_winchcombe } + 100 = { set_title_name = b_salisbury } + 100 = { set_title_name = b_wilton } + 100 = { set_title_name = b_ramsbury } + 100 = { set_title_name = b_malmesbury } + 100 = { set_title_name = b_oxford } + 100 = { set_title_name = b_banbury } + 100 = { set_title_name = b_witney } + 100 = { set_title_name = b_reading } + 100 = { set_title_name = b_newbury } + 100 = { set_title_name = b_abingdon } + 100 = { set_title_name = b_dover } + 100 = { set_title_name = b_canterbury } + 100 = { set_title_name = b_rochester } + 100 = { set_title_name = b_tonbridge } + 100 = { set_title_name = b_chertsey } + 100 = { set_title_name = b_guildford } + 100 = { set_title_name = b_kingston } + 100 = { set_title_name = b_tandbridge } + 100 = { set_title_name = b_lewes } + 100 = { set_title_name = b_chichester } + 100 = { set_title_name = b_arun } + 100 = { set_title_name = b_hastings } + 100 = { set_title_name = b_winchester } + 100 = { set_title_name = b_southampton } + 100 = { set_title_name = b_portsmouth } + 100 = { set_title_name = b_basingstoke } + 100 = { set_title_name = b_christchurch } + 100 = { set_title_name = b_carisbrooke } + 100 = { set_title_name = b_wareham } + 100 = { set_title_name = b_poole } + 100 = { set_title_name = b_shaftesbury } + 100 = { set_title_name = b_lyme } + 100 = { set_title_name = b_bath } + 100 = { set_title_name = b_winterstoke } + 100 = { set_title_name = b_ilchester } + 100 = { set_title_name = b_taunton } + 100 = { set_title_name = b_exeter } + 100 = { set_title_name = b_totnes } + 100 = { set_title_name = b_okehampton } + 100 = { set_title_name = b_barnstaple } + 100 = { set_title_name = b_launceston } + 100 = { set_title_name = b_tintagel } + 100 = { set_title_name = b_helston } + } +} + +# Siward Barn arrives in Bata +ep3_laamps.7004 = { + type = character_event + title = ep3_laamps.7004.t + desc = ep3_laamps.7004.desc + theme = realm + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:title_holder + animation = scheme + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + scope:zichia.holder.top_liege = { + save_scope_as = title_holder + } + hidden_effect = { + add_unpressed_claim = title:c_zichia + } + title:c_zichia = { + add_to_list = landed_titles + } + scope:zichia.holder = { + every_realm_province = { + barony = { add_to_list = zichia_names } + } + } + } + + option = { #OK, I'll pay + name = ep3_laamps.7004.a + + add_character_flag = { #Bypass usual event + flag = siward_flag + years = 1 + } + + pay_short_term_gold = { + target = scope:title_holder + gold = 100 + } + + hidden_effect = { #For tooltip reasons + ep3_become_landed_transfer_effect = { + TITLE_RECEIVER = root + TITLE_LIST = landed_titles + TYPE = granted + REASON = flag:granted + ENNOBLED_ADVENTURER = flag:yes + } + every_in_list = { + list = zichia_names + new_england_holding_names_effect = yes + } + } + + custom_tooltip = destroy_laamp_effect.tt.domicile_liquidated + + show_as_tooltip = { + get_title = title:c_zichia + add_character_modifier = { + modifier = ep3_ennobled_adventurer_modifier_1 + years = 10 + } + ## Nomad. + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + scope:new_liege ?= { government_has_flag = government_is_nomadic } + scope:old_government ?= flag:nomad + scope:new_capital.capital_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + change_government = nomad_government + } + ## Administrative. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_administrative } + } + change_government = administrative_government + } + ## Clan. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_clan } + } + change_government = clan_government + } + ## Tribal. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_tribal } + } + change_government = tribal_government + } + ## Else feudal. + else = { change_government = feudal_government } + } + + hidden_effect = { + ## Nomad. + if = { + limit = { + OR = { + government_has_flag = government_is_nomadic + scope:new_liege ?= { government_has_flag = government_is_nomadic } + scope:old_government ?= flag:nomad + scope:new_capital.capital_province = { + OR = { + has_holding_type = nomad_holding + has_holding_type = herder_holding + } + } + } + } + change_government = nomad_government + } + ## Administrative. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_administrative } + } + change_government = administrative_government + } + ## Clan. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_clan } + } + change_government = clan_government + } + ## Tribal. + else_if = { + limit = { + scope:new_liege ?= { government_has_flag = government_is_tribal } + } + change_government = tribal_government + } + ## Else feudal. + else = { change_government = feudal_government } + } + + scope:zichia = { + set_title_name = c_new_england + set_color_from_title = title:k_england + } + + stress_impact = { + ambitious = minor_stress_impact_loss + greedy = medium_stress_impact_gain + } + + ai_chance = { #50% chance for AI + base = 50 + } + } + + option = { #I'll take it by force! + name = ep3_laamps.7004.b + + start_war = { + cb = county_conquest_cb + target = title:c_zichia.holder + target_title = title:c_zichia + } + + stress_impact = { + ambitious = minor_stress_impact_loss + greedy = minor_stress_impact_loss + craven = medium_stress_impact_gain + } + + ai_chance = { #50% chance for AI + base = 50 + } + } +} + + +################################################## +# Pool Weightings +# by Ewan Cowhig Croft +# 9971 - 9979 +################################################## + +# The way pool population works causes a massive over-bias of Jewish (and certain other minority) characters in the first couple of decades, and those then get pulled in as assorted criminals and such by a lot of laamp content. This can lead to chains of rather unfortunate numbers of said-chars put into the role of Designated Bastard time after time, which looks dodgy as all hell. Thus, whenever the player moves from place to place as a laamp in the very early game, we need to flood their local pool with characters until the world fills up suitably with actual random gen characters. +ep3_laamps.9971 = { + hidden = yes + + trigger = { + is_ai = no + has_government = landless_adventurer_government + years_from_game_start <= 25 + } + + immediate = { + while = { + count = 5 + create_character = { + template = default_mystic_character + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + create_character = { + template = wise_woman_character + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + create_character = { + template = merchant_template + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + create_character = { + template = hunter_template + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + create_character = { + template = generic_peasant_character + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + create_character = { + template = bandit_character_generic + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + } + } + } +} + +################################################## +# Passive Contract Spawn +# by Ewan Cowhig Croft +# 9981 - 9989 +################################################## + +# Spawn a contract every now and then whilst we remain in the same location, up to a reasonable limit. +ep3_laamps.9981 = { + hidden = yes + + trigger = { + var:contract_passive_spawn_location ?= location.kingdom + trigger_if = { + limit = { has_variable = contract_passive_spawn_tally } + var:contract_passive_spawn_tally < 3 + } + # Make sure we don't do this if we've got lots of contracts already spawned here. + any_character_task_contract = { + count <= 4 + task_contract_location = { + "squared_distance(root.location)" <= squared_distance_medium + } + } + } + + on_trigger_fail = { + if = { + limit = { var:contract_passive_spawn_location ?= location.kingdom } + trigger_event = { + id = ep3_laamps.9981 + months = { 8 12 } + } + } + } + + immediate = { + # spawn a contract + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 1 + } + # And fire us again in a bit. + if = { + limit = { + var:contract_passive_spawn_tally < 2 + } + trigger_event = { + id = ep3_laamps.9981 + months = 1 + } + } + else = { + trigger_event = { + id = ep3_laamps.9981 + months = 2 + } + } + } +} + +# Populate adventurer contracts on succession. +ep3_laamps.9982 = { + hidden = yes + + trigger = { + is_ai = no + government_has_flag = government_is_landless_adventurer + } + + immediate = { + populate_location_with_contracts_effect = { + AREA_CHAR = root + AMOUNT = 3 + } + } +} + + + +# Keep giving Hereward regular work within England. +ep3_laamps.9983 = { + hidden = yes + + trigger = { + # Must be within England. + domicile.domicile_location.county = { + save_temporary_scope_as = title_temp + title:k_england = { is_de_jure_liege_or_above_target = scope:title_temp } + } + # Make sure we don't do this if we've got lots of contracts already spawned here. + any_character_task_contract = { + count <= 6 + task_contract_location = { "squared_distance(root.location)" <= squared_distance_medium } + } + } + + on_trigger_fail = { + if = { + limit = { var:contract_passive_spawn_location ?= location.kingdom } + trigger_event = { + id = ep3_laamps.9981 + months = 6 + } + } + } + + immediate = { + # Spawn some contracts. + contract_passive_spawn_effect = { + SPAWN_CONTRACTS = 2 + } + # And fire us again in a bit. + trigger_event = { + id = ep3_laamps.9981 + months = { 8 12 } + } + } +} + +################################################## +# Become Landed - Maintenance +# by Joe Parkin +# 9991 - 9999 +################################################## + +ep3_laamps.9999 = { # Error suppression + scope = none + orphan = yes + hidden = yes + trigger = { + exists = var:ascended_throne_reason + exists = var:lost_title_reason + } + immediate = { + set_variable = { + name = lost_title_reason + value = flag:negotiated + } + # Contract animations. + if = { + limit = { exists = var:animation } + # Nothing. + } + } +} diff --git a/events/dlc/ep3/ep3_laamp_events_8.txt b/events/dlc/ep3/ep3_laamp_events_8.txt new file mode 100644 index 00000000..adf1b1db --- /dev/null +++ b/events/dlc/ep3/ep3_laamp_events_8.txt @@ -0,0 +1,3986 @@ +namespace = ep3_laamps + +#### +# ep3_laamps.8000 The Truth +# ep3_laamps.8010 Loyal Companion +# ep3_laamps.8020 The Trip of a Lifetime +# ep3_laamps.8030 A Rare Orepportunity +# ep3_laamps.8040 Let Sleeping Dogs Lie +# ep3_laamps.8050 Without Friends or Protection +# ep3_laamps.8060 Nary a Drop +# ep3_laamps.8070 Foreign Fruits +# ep3_laamps.8080 A Strange Sailor +# ep3_laamps.8090 The Distant Shores +# by James Beaumont + +# The Truth +# Come back to lands you claim, begin rallying support! +# 8000 +ep3_laamps.8000 = { + type = character_event + title = ep3_laamps.8000.t + desc = { + desc = ep3_laamps.8000.desc + first_valid = { + triggered_desc = { + trigger = { + num_sinful_traits >= 1 + num_virtuous_traits < 1 + } + desc = ep3_laamps.8000.desc.outro.sinner + } + desc = ep3_laamps.8000.desc.outro + } + } + theme = laamp + left_portrait = { + character = root + animation = personality_bold + } + + cooldown = { years = 25 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + any_memory = { + memory_type = lost_title_memory + memory_age_years >= 10 + var:landed_title = { + tier >= tier_duchy + save_temporary_scope_as = title_temp + } + } + current_travel_plan.departure_location.county = { + NOR = { + target_is_de_jure_liege_or_above = scope:title_temp + target_is_de_facto_liege_or_above = scope:title_temp + } + } + exists = location.county + location.county = { + target_is_de_jure_liege_or_above = scope:title_temp + OR = { + root = { has_claim_on = prev } + holder = { + any_held_title = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + } + holder = { + any_liege_or_above = { + any_held_title = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + } + } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8000 + VAL = 1 + } + } + if = { + limit = { + location.county.holder = { + any_held_title = { + title_tier >= duchy + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + } + } + location.county.holder = { + random_held_title = { + title_tier >= duchy + limit = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + holder = { save_scope_as = claim_holder } + save_scope_as = claimed_land + } + } + } + else_if = { + limit = { + location.county.holder = { + any_liege_or_above = { + any_held_title = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + } + } + } + location.county.holder = { + random_liege_or_above = { + limit = { + any_held_title = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + } + random_held_title = { + limit = { + is_de_facto_liege_or_above_target = root.location.county + root = { has_claim_on = prev } + } + holder = { save_scope_as = claim_holder } + save_scope_as = claimed_land + } + } + } + } + else = { + root.location.county = { + holder = { save_scope_as = claim_holder } + save_scope_as = claimed_land + } + } + } + + option = { # I'm here to get my title back! + name = ep3_laamps.8000.a + add_character_modifier = { + modifier = laamp_prepping_for_invasion + years = 15 + } + reverse_add_opinion = { + modifier = laamp_claimant_opinion + target = scope:claim_holder + years = 10 + } + + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1.5 + } + } + } + + option = { # I'm just here to have a wander + name = ep3_laamps.8000.b + add_character_modifier = { + modifier = laamp_familiar_lands + years = 15 + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -1.5 + } + } + } +} + +# The Loyal Companion +# Adopt a puppy +# 8010 +# Loyal Companion +ep3_laamps.8010 = { + type = character_event + title = ep3_laamps.8010.t + desc = ep3_laamps.8010.desc + theme = laamp + override_background = { reference = terrain } + left_portrait = { + character = root + animation = personality_compassionate + } + + # Come along puppy + option = { + name = ep3_laamps.8010.a + start_dog_story_cycle_effect = yes + ai_chance = { + base = 10 + } + } +} + +# The Adventure of a Lifetime +# Courtier at your location wants to join you +# 8020 +scripted_trigger valid_adventurous_character = { + NOR = { + # They got that adventuring spirit in em + has_trait = craven + has_trait = lazy + # Don't steal people super important to the realm + is_child_of = root.location.county.holder + is_player_heir_of = root.location.county.holder + is_consort_of = root.location.county.holder + } + # They're at least somewhat in control of their own life + OR = { + AND = { + is_married = no + is_concubine = no + } + AND = { + is_married = yes + is_female = yes + matrilinear_marriage = yes + } + AND = { + is_married = yes + is_male = yes + patrilinear_marriage = yes + } + } + # Someone the player will care about + has_any_high_skill_rating = yes + # And make sure there's more than just animosity here. + opinion = { + target = root + value >= -40 + } + NOT = { + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } + } + # Plus must be eligible for one of your officer positions. + OR = { + camp_officer_generator_pickable_trigger = { POS = second EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = quartermaster EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = armorer EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = chief_forager EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = master_thief EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = head_porter EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = head_groom EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = huntperson EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = kennelperson EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = chief_engineer EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = witness EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = person_haggler EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = camp_cook EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = master_bard EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = stooge EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = master_of_arms EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = light_cavalry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = camelry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = elephantry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = heavy_cavalry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = horse_archer_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = archer_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = heavy_infantry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = light_infantry_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = pike_captain EMPLOYER = root } + camp_officer_generator_pickable_trigger = { POS = master_of_spoils EMPLOYER = root } + } +} +ep3_laamps.8020 = { + type = character_event + title = ep3_laamps.8020.t + desc = ep3_laamps.8020.desc + theme = laamp + left_portrait = { + character = root + animation = schadenfreude + } + right_portrait = { + character = scope:wouldbe_companion + triggered_animation = { + trigger = { + ai_boldness <= ai_compassion + } + animation = beg + } + triggered_animation = { + trigger = { + ai_boldness > ai_compassion + } + animation = personality_bold + } + } + + cooldown = { years = 20 } + + trigger = { + trigger_if = { + limit = { + is_ai = yes + } + static_group_filter = { + group = ep3_laamps.8020 + match = 0.2 + } + } + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + location.county.holder ?= { + is_ai = yes + any_courtier = { + valid_adventurous_character = yes + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8020 + VAL = 1 + } + } + location.county.holder = { + save_scope_as = holder + random_courtier = { + limit = { + valid_adventurous_character = yes + } + save_scope_as = wouldbe_companion + camp_officer_generator_effect = { + VAR = target + EMPLOYER = root + } + } + } + } + + # Come with me + option = { + name = ep3_laamps.8020.a + set_relation_friend = { + target = scope:wouldbe_companion + reason = friend_trip_of_a_lifetime + } + add_courtier = scope:wouldbe_companion + reverse_add_opinion = { + target = scope:wouldbe_companion + modifier = grateful_opinion + opinion = 100 + } + camp_officer_generator_assignment_effect = { + VAR = target + CANDIDATE = scope:wouldbe_companion + EMPLOYER = root + } + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_honor = -2.5 + } + } + } + + # I'll take you on gladly. + option = { + name = ep3_laamps.8020.a.2 + add_courtier = scope:wouldbe_companion + reverse_add_opinion = { + target = scope:wouldbe_companion + modifier = grateful_opinion + opinion = 70 + } + add_prestige = minor_prestige_gain + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = 2.5 + ai_honor = -2.5 + } + } + } + + option = { + name = ep3_laamps.8020.b + progress_towards_friend_effect = { + REASON = friend_returned_my_companion + CHARACTER = root.location.county.holder + OPINION = default_friend_opinion + } + stress_impact = { + gregarious = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = -2.5 + ai_honor = 2.5 + } + } + } +} + +# A Rare Orepportunity +# Local materials are high quality, use them to improve your artifact? +# 8030 +ep3_laamps.8030 = { + type = character_event + title = ep3_laamps.8030.t + desc = ep3_laamps.8030.desc + theme = laamp + left_portrait = { + character = root + animation = war_over_tie + } + right_portrait = { + character = scope:armorer + animation = personality_bold + } + artifact = { + target = scope:artifact + position = lower_left_portrait + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + employs_court_position = armorer_camp_officer + any_equipped_character_artifact = { + OR = { + artifact_slot_type = armor + artifact_slot_type = primary_armament + } + } + location = { + OR = { + is_mountainous_trigger = yes + has_building_or_higher = royal_armory_01 + has_building_or_higher = blacksmiths_01 + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8030 + VAL = 1 + } + } + location = { save_scope_as = location } + court_position:armorer_camp_officer = { + save_scope_as = armorer + } + random_equipped_character_artifact = { + limit = { + OR = { + artifact_slot_type = armor + artifact_slot_type = primary_armament + } + } + save_scope_as = artifact + } + } + + # Improve my artifact! + option = { + name = ep3_laamps.8030.a + scope:armorer = { + duel = { + skill = stewardship + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + root = { + send_interface_toast = { + title = ep3_laamps.8030.a.win + left_icon = scope:armorer + right_icon = scope:artifact + scope:artifact = { + add_artifact_modifier = artifact_durable_materials_02 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + root = { + send_interface_toast = { + title = ep3_laamps.8030.a.lose + left_icon = scope:armorer + right_icon = scope:artifact + scope:artifact = { + add_durability = -10 + } + } + } + } + } + } + stress_impact = { + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + fickle = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_rationality = 2.5 + ai_greed = -2.5 + } + } + } + + # Use the materials to repair my damaged artifacts + option = { + name = ep3_laamps.8030.b + trigger = { + any_character_artifact = { + OR = { + artifact_slot_type = armor + artifact_slot_type = primary_armament + } + artifact_durability <= 75 + } + } + every_character_artifact = { + limit = { + OR = { + artifact_slot_type = armor + artifact_slot_type = primary_armament + } + artifact_durability <= 75 + } + add_durability = 25 + } + stress_impact = { + ambitious = minor_stress_impact_gain + brave = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = -2.5 + ai_rationality = 2.5 + } + } + } + + # Gather the materials, and sell them! + option = { + name = ep3_laamps.8030.c + add_gold = medium_gold_value + stress_impact = { + ambitious = minor_stress_impact_gain + brave = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = -2.5 + ai_greed = 2.5 + } + } + } +} + +# Let Sleeping Dogs Lie +# A pregnant wolf is giving birth in one of your tents +# 8040 +ep3_laamps.8040 = { + type = character_event + title = ep3_laamps.8040.t + desc = ep3_laamps.8040.desc + theme = laamp + override_background = { reference = bp1_bonfire } + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:frightened_courtier + animation = fear + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + location = { + is_wooded_trigger = yes + } + any_courtier = { + NOT = { is_child_of = root } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8040 + VAL = 1 + } + } + random_courtier = { + limit = { + NOT = { is_child_of = root } + } + weight = { + base = 1 + modifier = { + add = { + subtract = ai_boldness + } + } + } + save_scope_as = frightened_courtier + } + } + + # Oh hush, I'll slay the beast + option = { + name = ep3_laamps.8040.a + duel = { + skill = prowess + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + send_interface_toast = { + title = ep3_laamps.8040.a.win + left_icon = root + add_prestige = major_prestige_gain + if = { + limit = { + OR = { + has_any_nickname = no + has_bad_nickname = yes + } + } + if = { + limit = { + is_ai = yes + } + random = { + chance = 5 + give_nickname = nick_wolf_slayer + } + } + else = { + give_nickname = nick_wolf_slayer + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + send_interface_toast = { + title = ep3_laamps.8040.a.lose + left_icon = root + add_prestige = minor_prestige_gain + increase_wounds_effect = { REASON = wolf } + } + } + } + stress_impact = { + brave = medium_stress_impact_loss + craven = medium_stress_impact_gain + humble = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_rationality = -2.5 + } + } + } + + # Slay the mother and give the pups to my kids + option = { + name = ep3_laamps.8040.b + trigger = { + any_child = { + is_courtier_of = root + } + } + every_child = { + limit = { + is_courtier_of = root + } + custom = every_child_in_camp + root = { + progress_towards_friend_effect = { + REASON = friend_gave_them_a_dog + CHARACTER = prev + OPINION = default_friend_opinion + } + } + start_dog_story_cycle_effect = yes + } + if = { + limit = { + is_male = yes + OR = { + has_any_nickname = no + has_bad_nickname = yes + } + } + if = { + limit = { + is_ai = yes + } + random = { + chance = 5 + give_nickname = nick_wolf_father + } + } + else = { + give_nickname = nick_wolf_father + } + } + else_if = { + limit = { + is_female = yes + OR = { + has_any_nickname = no + has_bad_nickname = yes + } + } + if = { + limit = { + is_ai = yes + } + random = { + chance = 5 + give_nickname = nick_wolf_mother + } + } + else = { + give_nickname = nick_wolf_mother + } + } + stress_impact = { + brave = minor_stress_impact_gain + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + greedy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 2.5 + ai_rationality = 1.5 + } + } + } + + # Looks like we have the beginnings of a kennel! + option = { + name = ep3_laamps.8040.c + trigger = { + domicile = { + free_external_domicile_building_slots >= 1 + NOT = { + has_domicile_building = baggage_train_kennel + } + } + OR = { + has_trait = eccentric + has_trait = avaricious + } + } + domicile = { + if = { + limit = { + NOT = { + has_domicile_building = baggage_train_01 + } + } + add_domicile_building = baggage_train_01 + } + add_domicile_building = baggage_train_kennel + } + stress_impact = { + brave = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 2.5 + ai_rationality = 1.5 + } + } + } + + # We'll get you a new tent + option = { + name = ep3_laamps.8040.d + stress_impact = { + craven = medium_stress_impact_loss + brave = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 2.5 + ai_rationality = 1.5 + } + } + } +} + +# Without Friends or Protection +# A talented minority wishes to join you +# 8050 +scripted_trigger laamp_8050_valid_minority = { + save_temporary_scope_as = courtier_to_check + # Someone the player will care about + has_any_high_skill_rating = yes + # Ruling class hates their faith + root.location.county.holder.faith = { + faith_hostility_level = { + target = scope:courtier_to_check.faith + value >= faith_hostile_level + } + } + OR = { + root.location.county.holder = { + OR = { + has_trait = zealous + has_trait = callous + has_trait = sadistic + has_trait = torturer + has_trait = holy_warrior + ai_zeal > ai_compassion + } + } + # Locals hate their faith + root.location.faith = { + faith_hostility_level = { + target = scope:courtier_to_check.faith + value >= faith_hostile_level + } + } + } +} + +ep3_laamps.8050 = { + type = character_event + title = ep3_laamps.8050.t + desc = { + desc = ep3_laamps.8050.desc.intro + first_valid = { + triggered_desc = { + trigger = { + faith = scope:minority.faith + } + desc = ep3_laamps.8050.desc.mid.samefaith + } + triggered_desc = { + trigger = { + root.location.county.holder.faith = { + faith_hostility_level = { + target = root.faith + value >= faith_hostile_level + } + } + } + desc = ep3_laamps.8050.desc.mid.alsohated + } + desc = ep3_laamps.8050.desc.mid.fallback + } + desc = ep3_laamps.8050.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = personality_bold + } + right_portrait = { + character = scope:minority + animation = beg + } + lower_right_portrait = { + character = root.location.county.holder + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + is_location_valid_for_travel_event_on_land = yes + OR = { + any_pool_character = { + province = root.location + laamp_8050_valid_minority = yes + } + AND = { + location.county.holder = { is_ai = yes } + location.county.holder = { + any_courtier_or_guest = { + laamp_8050_valid_minority = yes + } + } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8050 + VAL = 1 + } + } + if = { + limit = { + any_pool_character = { + province = root.location + laamp_8050_valid_minority = yes + } + } + random_pool_character = { + province = root.location + limit = { + laamp_8050_valid_minority = yes + } + weight = { + base = 1 + modifier = { + add = 2 + OR = { + # Smaller religions unlikely to have a *homeland* to return to + religion = religion:dualism_religion + religion = religion:judaism_religion + religion = religion:yazidi_religion + religion = religion:zoroastrianism_religion + religion = religion:zunism_religion + } + } + } + save_scope_as = minority + } + } + else = { + location.county.holder = { + random_courtier_or_guest = { + limit = { + laamp_8050_valid_minority = yes + } + weight = { + base = 1 + modifier = { + add = 2 + OR = { + # Smaller religions unlikely to have a *homeland* to return to + religion = religion:dualism_religion + religion = religion:judaism_religion + religion = religion:yazidi_religion + religion = religion:zoroastrianism_religion + religion = religion:zunism_religion + } + } + } + save_scope_as = minority + } + } + } + } + + # Of course, join me as my companion! + option = { + name = ep3_laamps.8050.a + set_relation_friend = { + target = scope:minority + reason = friend_trip_of_a_lifetime + } + add_courtier = scope:minority + if = { + limit = { + scope:minority.faith = root.faith + } + add_piety = medium_piety_gain + stress_impact = { + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + } + else = { + stress_impact = { + zealous = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_rationality = 2.5 + ai_honor = 2.5 + ai_vengefulness = -2.5 + ai_zeal = -2.5 + } + } + } + + # I shall help you flee to safer lands + option = { + name = ep3_laamps.8050.b + trigger = { + culture = { this != scope:minority.culture } + } + scope:minority = { + if = { + limit = { + is_pool_character = no + } + move_to_pool = yes + } + } + root.culture = { + change_cultural_acceptance = { + target = scope:minority.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_fled_persecution + } + } + if = { + limit = { + scope:minority.faith = root.faith + } + add_piety = medium_piety_gain + stress_impact = { + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + } + } + else = { + stress_impact = { + sadistic = medium_stress_impact_gain + callous = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = -2.5 + ai_sociability = -2.5 + ai_rationality = 2.5 + ai_zeal = -2.5 + } + } + } + + # Run home to your master now. Go on. Get. + option = { + name = ep3_laamps.8050.c + #Oppression is fun, I guess + if = { + limit = { faith = root.location.county.holder.faith } + add_piety = medium_piety_gain + } + else = { add_prestige = medium_prestige_gain } + stress_impact = { + gregarious = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + callous = minor_stress_impact_loss + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = -2.5 + ai_honor = 2.5 + } + } + } +} + +# Nary a Drop +# Your water supplies spring a leak +# 8060 +ep3_laamps.8060 = { + type = character_event + title = ep3_laamps.8060.t + desc = ep3_laamps.8060.desc + theme = laamp + left_portrait = { + character = root + animation = rage + } + right_portrait = { + character = scope:idiot + animation = beg + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + domicile ?= { + domicile_location = { + # Water should be precious + is_desert_trigger = yes + NOT = { terrain = oasis } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8060 + VAL = 1 + } + } + random_courtier = { + weight = { + base = 100 + modifier = { + add = { + subtract = learning + subtract = prowess + } + } + # Clumsy + modifier = { + add = 50 + has_trait = intellect_bad + } + # Clumsy + modifier = { + add = 50 + has_trait = physique_bad + } + modifier = { + factor = 0 + is_adult = no + } + } + save_scope_as = idiot + } + } + + # Quickly, we must find some! + option = { + name = ep3_laamps.8060.a + duel = { + skill = stewardship + value = medium_skill_rating + 50 = { + desc = ep3_laamps.8060.a.win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + title = ep3_laamps.8060.a.win + left_icon = root + domicile ?= { change_provisions = minor_provisions_gain } + } + } + 50 = { + desc = ep3_laamps.8060.a.lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + title = ep3_laamps.8060.a.lose + left_icon = root + domicile ?= { change_provisions = minor_provisions_loss } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = 2.5 + ai_rationality = 2.5 + ai_honor = 2.5 + ai_vengefulness = -5 + } + } + } + + # Maybe we need to... recycle + option = { + name = ep3_laamps.8060.b + trigger = { has_trait = eccentric } + every_courtier = { + custom = every_camp_member + random = { + chance = 15 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = no } + } + } + hidden_effect = { + random = { + chance = 15 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + stress_impact = { + base = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_rationality = -2.5 + ai_vengefulness = -5 + } + } + } + + # You blundering imbecile! You fix this! + option = { + name = ep3_laamps.8060.c + scope:idiot = { + duel = { + skill = stewardship + value = medium_skill_rating + 50 = { + desc = ep3_laamps.8060.c.win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + root = { + send_interface_toast = { + title = ep3_laamps.8060.c.win + left_icon = root + domicile ?= { change_provisions = minor_provisions_gain } + } + } + } + 50 = { + desc = ep3_laamps.8060.c.lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + root = { + send_interface_toast = { + title = ep3_laamps.8060.c.lose + left_icon = root + domicile ?= { change_provisions = minor_provisions_loss } + } + } + } + } + } + stress_impact = { + fickle = medium_stress_impact_gain + humble = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = medium_stress_impact_gain + vengeful = medium_stress_impact_loss + wrathful = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_rationality = 2.5 + ai_vengefulness = 5 + } + } + } + + # Time to ransack some local caravans + option = { + name = ep3_laamps.8060.d + add_gold = medium_gold_value + random = { + chance = 15 + send_interface_toast = { + title = ep3_laamps.8060.d.lose + left_icon = root + right_icon = root.location.county.holder + reverse_add_opinion = { + modifier = theft_opinion + target = root.location.county.holder + } + } + } + stress_impact = { + fickle = medium_stress_impact_gain + humble = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = medium_stress_impact_gain + vengeful = medium_stress_impact_loss + wrathful = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_greed = 2.5 + ai_vengefulness = 5 + } + } + } + + # We can live without it + option = { + name = ep3_laamps.8060.e + domicile = { change_provisions = medium_provisions_loss } + stress_impact = { + wrathful = medium_stress_impact_gain + vengeful = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = 2.5 + ai_rationality = -2.5 + ai_honor = 2.5 + ai_vengefulness = -5 + } + } + } +} + +# Foreign Fruits +# You find some strange looking fruit, eat it? +# 8070 +ep3_laamps.8070 = { + type = character_event + title = ep3_laamps.8070.t + desc = ep3_laamps.8070.desc + theme = laamp + left_portrait = { + character = root + animation = thinking + } + lower_left_portrait = { + character = scope:forager + } + + override_background = { + reference = terrain_scope + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + location = { is_sea_province = no } + domicile ?= { + domicile_location = { + is_likely_to_contain_trees_trigger = yes + } + NOT = { provisions >= max_provisions } + } + } + + immediate = { + domicile.domicile_location ?= { save_scope_as = background_terrain_scope } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8070 + VAL = 1 + } + } + court_position:chief_forager_camp_officer ?= { save_scope_as = forager } + } + + # Forager, what say you? + option = { + name = ep3_laamps.8070.a + trigger = { + exists = scope:forager + scope:forager = { + aptitude = { + court_position = chief_forager_camp_officer + value >= 2 + } + } + } + domicile = { change_provisions = medium_provisions_gain } + ai_chance = { # This is just the best option + base = 1000 + } + } + + # Ah, I know these plants! + option = { + name = ep3_laamps.8070.b + trigger = { + has_trait = lifestyle_herbalist + } + domicile = { change_provisions = medium_provisions_gain } + add_prestige = minor_prestige_gain + ai_chance = { # This is the other best option + base = 1000 + } + } + + # Let's just try... + option = { + name = ep3_laamps.8070.c + random_list = { + 75 = { + send_interface_toast = { + title = ep3_laamps.8070.c.win + domicile = { change_provisions = medium_provisions_gain } + } + } + 25 = { + send_interface_toast = { + title = ep3_laamps.8070.c.lose + hidden_effect = { + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + every_courtier = { + custom = every_camp_member + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = no } + } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + diligent = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_rationality = -2.5 + } + } + } + + # I think we'll survive without them + option = { + name = ep3_laamps.8070.d + stress_impact = { + brave = medium_stress_impact_gain + eccentric = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_rationality = 2.5 + } + } + } +} + +# A Strange Sailor +# You find Tom Baker sitting at a bar missing most of his body parts +# 8080 +scripted_trigger valid_weird_sailor = { + is_adult = yes + has_trait = eccentric + has_any_high_skill_rating = yes + would_be_valid_for_court_position = { + court_position = quartermaster_camp_officer + employer = root + } +} +ep3_laamps.8080 = { + type = character_event + title = ep3_laamps.8080.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + location = { + is_sea_province = yes + } + } + desc = ep3_laamps.8080.desc.intro_sea + } + desc = ep3_laamps.8080.desc.intro + } + desc = ep3_laamps.8080.desc.outro + } + theme = laamp + override_background = { + reference = tavern + } + left_portrait = { + character = root + animation = laugh + } + right_portrait = { + character = scope:sailor + animation = eccentric + } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + location = { + OR = { + is_coastal = yes + any_neighboring_province = { is_river_province = yes } + } + } + NOT = { employs_court_position = quartermaster_camp_officer } + can_employ_court_position_type = quartermaster_camp_officer + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8080 + VAL = 1 + } + } + root.location = { + random_neighboring_province = { + limit = { + is_sea_province = no + } + save_scope_as = sailor_home + } + } + hidden_effect = { + random_pool_character = { + province = scope:sailor_home + limit = { valid_weird_sailor = yes } + if = { + limit = { + has_permanent_physical_injury = no + } + add_trait = one_legged + } + save_scope_as = sailor + } + random_memory = { + limit = { + has_memory_category = positive + has_memory_category = martial + } + save_scope_as = memory + } + } + if = { + limit = { + NOT = { exists = scope:sailor } + } + create_character = { + location = scope:sailor_home + template = weird_sailor_template + culture = scope:sailor_home.culture + faith = scope:sailor_home.faith + save_scope_as = sailor + after_creation = { + random_list = { + 1 = { set_nickname_effect = { NICKNAME = nick_the_mad } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_red } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_drunkard } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_jolly } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_jovial } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_bellower } } + 1 = { set_nickname_effect = { NICKNAME = nick_twistedbeard } } + 1 = { set_nickname_effect = { NICKNAME = nick_foul_fart } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_flash } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_insane } } + 1 = { set_nickname_effect = { NICKNAME = nick_ale_lover } } + 1 = { set_nickname_effect = { NICKNAME = nick_the_gambler } } + } + } + } + } + } + + # AAAAHHHHAAAAAAAAAAHAAHAAAAAAAAA... me laddy! + option = { + name = ep3_laamps.8080.a + trigger = { + has_trait = eccentric + } + set_relation_friend = { + target = scope:sailor + reason = friend_eccentric + } + add_courtier = scope:sailor + camp_officer_grant_effect = { + EMPLOYER = root + POS = second + CANDIDATE = scope:sailor + } + stress_impact = { + eccentric = medium_stress_impact_loss + shy = minor_stress_impact_loss + cynical = medium_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_rationality = -10 + } + } + } + + # Do... do you wanna come with me? + option = { + name = ep3_laamps.8080.b + add_courtier = scope:sailor + camp_officer_grant_effect = { + EMPLOYER = root + POS = quartermaster + CANDIDATE = scope:sailor + } + pay_short_term_gold = { + target = scope:sailor + gold = minor_gold_value + } + stress_impact = { + arrogant = medium_stress_impact_gain + cynical = medium_stress_impact_gain + shy = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_rationality = -2.5 + } + modifier = { + factor = 0 + short_term_gold < minor_gold_value + } + } + } + + # Try to out-macho him + option = { + name = ep3_laamps.8080.c + duel = { + skills = { martial diplomacy } + target = scope:sailor + 50 = { + desc = ep3_laamps.8080.c.win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + title = ep3_laamps.8080.c.win + left_icon = root + right_icon = scope:sailor + add_prestige = medium_prestige_gain + every_courtier = { + custom = every_camp_member + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 15 + } + } + } + } + 50 = { + desc = ep3_laamps.8080.c.lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + title = ep3_laamps.8080.c.lose + left_icon = root + right_icon = scope:sailor + add_prestige = medium_prestige_loss + } + } + } + stress_impact = { + humble = medium_stress_impact_gain + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = 2.5 + ai_rationality = -2.5 + } + } + } + + # Get away from me you mad old sea dog + option = { + name = ep3_laamps.8080.d + stress_impact = { + humble = medium_stress_impact_gain + gregarious = minor_stress_impact_gain + eccentric = major_stress_impact_gain + shy = minor_stress_impact_loss + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = -2.5 + ai_rationality = 2.5 + } + } + } +} + +# The Distant Shores +# You have an out-of-body experience in a strange land and question your identity +# 8090 +ep3_laamps.8090 = { + type = character_event + title = ep3_laamps.8090.t + desc = { + desc = ep3_laamps.8090.desc.intro + first_valid = { + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + OR = { + geographical_region = world_europe + geographical_region = world_asia_minor + } + } + } + desc = ep3_laamps.8090.desc.world_europe + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_middle_east + } + } + desc = ep3_laamps.8090.desc.world_middle_east + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_india + } + } + desc = ep3_laamps.8090.desc.world_india + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_africa + } + } + desc = ep3_laamps.8090.desc.world_africa + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_steppe + } + } + desc = ep3_laamps.8090.desc.world_steppe + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_tibet + } + } + desc = ep3_laamps.8090.desc.world_tibet + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_burma + } + } + desc = ep3_laamps.8090.desc.world_burma + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_asia_china + } + } + desc = ep3_laamps.8090.desc.world_asia_china + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_asia_japan + } + } + desc = ep3_laamps.8090.desc.world_asia_japan + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_asia_korea + } + } + desc = ep3_laamps.8090.desc.world_asia_korea + } + triggered_desc = { + trigger = { + root.domicile.domicile_location = { + geographical_region = world_asia_southeast + } + } + desc = ep3_laamps.8090.desc.world_asia_southeast + } + } + desc = ep3_laamps.8090.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = admiration + } + override_background = { reference = market } + + cooldown = { years = 15 } + + trigger = { + has_government = landless_adventurer_government + is_adult = yes + is_available_allow_travelling = yes + is_location_valid_for_travel_event_on_land = yes + OR = { + AND = { + root.domicile.domicile_location = { + OR = { + geographical_region = world_europe + geographical_region = world_asia_minor + } + } + NOR = { + root.culture = { culture_overlaps_geographical_region = world_europe } + root.culture = { culture_overlaps_geographical_region = world_asia_minor } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_middle_east } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_middle_east } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_india } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_india } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_africa } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_africa } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_steppe } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_steppe } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_tibet } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_tibet } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_burma } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_burma } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_asia_china } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_asia_china } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_asia_japan } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_asia_japan } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_asia_korea } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_asia_korea } + } + } + AND = { + root.domicile.domicile_location = { geographical_region = world_asia_southeast } + NOT = { + root.culture = { culture_overlaps_geographical_region = world_asia_southeast } + } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_nimbo_8090 + VAL = 1 + } + } + root.domicile.domicile_location.county = { save_scope_as = county } + root.domicile.domicile_location.county.culture = { save_scope_as = culture } + } + + # Can a man not be both one culture AND another? + option = { + name = ep3_laamps.8090.a + culture = { + change_cultural_acceptance = { + target = scope:culture + value = medium_cultural_acceptance_gain + desc = cultural_acceptance_distant_hero + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + gregarious = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = -2.5 + ai_sociability = 2.5 + ai_rationality = 2.5 + } + } + } + + # I think it's time I embrace my place here + option = { + name = ep3_laamps.8090.b + every_courtier = { + custom = every_relative_in_camp_your_culture + limit = { + is_close_family_of = root + culture = root.culture + } + set_culture = scope:culture + } + set_culture = scope:culture + stress_impact = { + gregarious = medium_stress_impact_loss + eccentric = medium_stress_impact_loss + arrogant = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 0 # Player only + } + } + + # Maybe I should build a new home here! + option = { + name = ep3_laamps.8090.c + add_character_modifier = { + modifier = laamps_8090_preparing_invasion + years = 15 + } + stress_impact = { + gregarious = medium_stress_impact_gain + humble = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_boldness = 2.5 + ai_sociability = -2.5 + ai_rationality = -2.5 + } + } + } +} + +# LEGITIMIST SUPPORT NEGOTIATION EVENTS +# Choose your title for support +ep3_laamps.8101 = { + type = character_event + title = ep3_laamps.8101.t + desc = ep3_laamps.8101.desc + + theme = diplomacy + + override_background = { reference = study } + + left_portrait = { + character = root + animation = debating + } + + right_portrait = { + character = scope:petitioned_ruler + animation = admiration + } + + trigger = { + any_claim = { + count > 1 + exists = holder + tier >= tier_kingdom + holder != scope:petitioned_ruler + } + NOT = { + has_variable = legitimist_claimed_title + } + } + + immediate = { + ordered_claim = { + limit = { + exists = holder + tier >= tier_kingdom + holder != scope:petitioned_ruler + } + order_by = tier + max = 4 + + # First title. + if = { + limit = { + NOT = { exists = scope:title_1 } + } + save_scope_as = title_1 + } + # Second title. + else_if = { + limit = { + NOT = { + this = scope:title_1 + exists = scope:title_2 + } + } + save_scope_as = title_2 + } + # Third title. + else_if = { + limit = { + NOT = { + this = scope:title_1 + this = scope:title_2 + exists = scope:title_3 + } + } + save_scope_as = title_3 + } + # Fourth title + else_if = { + limit = { + NOT = { + this = scope:title_1 + this = scope:title_2 + this = scope:title_3 + exists = scope:title_4 + } + } + save_scope_as = title_4 + } + } + } + + on_trigger_fail = { + trigger_event = ep3_laamps.8102 + } + + option = { + name = ep3_laamps.8101.a + custom_tooltip = ep3_laamps.8101.a.desc + trigger = { + exists = scope:title_1 + } + scope:title_1 = { + save_scope_as = claimed_title + } + + ai_chance = { + base = 100 + } + } + + option = { + name = ep3_laamps.8101.b + custom_tooltip = ep3_laamps.8101.a.desc + trigger = { + exists = scope:title_2 + } + scope:title_2 = { + save_scope_as = claimed_title + } + } + + option = { + name = ep3_laamps.8101.c + custom_tooltip = ep3_laamps.8101.a.desc + trigger = { + exists = scope:title_3 + } + scope:title_3 = { + save_scope_as = claimed_title + } + } + + option = { + name = ep3_laamps.8101.d + custom_tooltip = ep3_laamps.8101.a.desc + trigger = { + exists = scope:title_4 + } + scope:title_4 = { + save_scope_as = claimed_title + } + } + + after = { + trigger_event = ep3_laamps.8102 + } +} + +#Negotiations intro +ep3_laamps.8102 = { + type = character_event + title = ep3_laamps.8102.t + desc = ep3_laamps.8102.desc + + theme = diplomacy + + override_background = { reference = study } + + left_portrait = { + character = root + animation = debating + } + + right_portrait = { + character = scope:petitioned_ruler + animation = bribing + } + + immediate = { + #save the claim + if = { + limit = { + NOT = { + exists = scope:claimed_title + has_variable = legitimist_claimed_title + } + } + random_claim = { + limit = { + exists = holder + tier >= tier_kingdom + holder != scope:petitioned_ruler + } + save_scope_as = claimed_title + } + } + scope:claimed_title.holder.capital_barony = { save_scope_as = capital_barony } + if = { + limit = { + NOT = { + has_variable = legitimist_claimed_title + } + } + set_variable = { + name = legitimist_claimed_title + value = scope:claimed_title + } + } + else = { + var:legitimist_claimed_title = { + save_scope_as = claimed_title + } + } + + #setup turns + + set_variable = { + name = legitimist_turns + value = { + value = 4 + if = { + limit = { + scope:claimed_title = { + tier = tier_empire + } + } + add = 4 + } + if = { + limit = { + scope:petitioned_ruler.faith = root.faith + } + add = { + value = root.piety_level + subtract = 2 + max = 2 + min = 0 + } + } + add = { + value = root.prestige_level + subtract = 2 + max = 2 + min = 0 + } + add = { + value = root.dynasty.dynasty_prestige_level + subtract = 2 + max = 3 + min = 0 + } + } + } + + #setup support and obligations level + + set_variable = { + name = legitimist_support + value = 1 + } + + set_variable = { + name = legitimist_obligations + value = 2 + } + + } + + option = { #Let us dicuss the deal-o + name = ep3_laamps.8102.a + custom_tooltip = ep3_laamps.8102.a.desc + + if = { + limit = { + is_ai = yes + } + change_variable = { + name = legitimist_support + add = 2 + } + change_variable = { + name = legitimist_obligations + add = 1 + } + } + ai_chance = { + base = 100 + } + } + + option = { #Try to dazzle them with brilliance - more turns + name = ep3_laamps.8102.b + trigger = { + NOT = { + has_relation_friend = scope:petitioned_ruler + } + } + duel = { + target = scope:petitioned_ruler + skill = diplomacy + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + custom_tooltip = ep3_laamps.8102.b.desc + send_interface_toast = { + title = ep3_laamps.8102.b.success + left_icon = scope:petitioned_ruler + } + change_variable = { + name = legitimist_support + add = 1 + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamps.8102.b.failure + send_interface_toast = { + title = ep3_laamps.8102.b.failure + left_icon = scope:petitioned_ruler + } + add_prestige = medium_prestige_loss + change_variable = { + name = legitimist_turns + subtract = 1 + } + } + } + } + + option = { #Or baffle them with bs - more turns + name = ep3_laamps.8102.c + trigger = { + NOT = { + has_relation_friend = scope:petitioned_ruler + } + } + duel = { + target = scope:petitioned_ruler + skill = intrigue + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + custom_tooltip = ep3_laamps.8102.c.desc + send_interface_toast = { + title = ep3_laamps.8102.b.success + left_icon = scope:petitioned_ruler + } + change_variable = { + name = legitimist_turns + add = 4 + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamps.8102.b.failure + send_interface_toast = { + title = ep3_laamps.8102.b.failure + left_icon = scope:petitioned_ruler + } + add_prestige = medium_prestige_loss + change_variable = { + name = legitimist_turns + subtract = 1 + } + } + } + } + + option = { #we are friends, more turns + name = ep3_laamps.8102.d + custom_tooltip = ep3_laamps.8102.d.desc + trigger = { + has_relation_friend = scope:petitioned_ruler + + } + change_variable = { + name = legitimist_turns + add = 4 + } + change_variable = { + name = legitimist_support + add = 1 + } + + } + + option = { #spend hook - more support! + name = ep3_laamps.8102.e + custom_tooltip = ep3_laamps.8102.e.desc + trigger = { + has_hook = scope:petitioned_ruler + } + remove_hook = { target = scope:petitioned_ruler } + change_variable = { + name = legitimist_support + add = 2 + } + } + + after = { + trigger_event = ep3_laamps.8103 + } +} + +#Negotiations for the level of support +ep3_laamps.8103 = { + type = character_event + title = ep3_laamps.8103.t + desc = { + random_valid = { + desc = ep3_laamps.8103.intro_1 + desc = ep3_laamps.8103.intro_2 + desc = ep3_laamps.8103.intro_3 + } + first_valid = { + triggered_desc = { + trigger = { var:legitimist_turns = 0 } + desc = ep3_laamps.8103.no_more_turns_flavor + } + random_valid = { + desc = ep3_laamps.8103.mid_1 + desc = ep3_laamps.8103.mid_2 + desc = ep3_laamps.8103.mid_3 + } + } + + desc = ep3_laamp.8103.turns_left + first_valid = { + triggered_desc = { + trigger = { var:legitimist_support >= 6 } + desc = ep3_laamps.8103.support_6 + } + triggered_desc = { + trigger = { var:legitimist_support >= 5 } + desc = ep3_laamps.8103.support_5 + } + triggered_desc = { + trigger = { var:legitimist_support >= 4 } + desc = ep3_laamps.8103.support_4 + } + triggered_desc = { + trigger = { var:legitimist_support >= 3 } + desc = ep3_laamps.8103.support_3 + } + triggered_desc = { + trigger = { var:legitimist_support >= 2 } + desc = ep3_laamps.8103.support_2 + } + triggered_desc = { + trigger = { var:legitimist_support >= 1 } + desc = ep3_laamps.8103.support_1 + } + } + first_valid = { + triggered_desc = { + trigger = { var:legitimist_obligations = 1 } + desc = ep3_laamps.8103.one_obligations + } + desc = ep3_laamps.8103.obligations + } + } + + theme = diplomacy + override_background = { reference = study } + + left_portrait = { + character = root + animation = debating + } + + right_portrait = { + character = scope:petitioned_ruler + animation = personality_forgiving + } + + trigger = { + var:legitimist_turns >= 1 + } + + on_trigger_fail = { + trigger_event = ep3_laamps.8105 + } + + option = { #Moar troops! + name = ep3_laamps.8103.a + custom_tooltip = ep3_laamps.8103.a.desc + trigger = { + var:legitimist_support < 6 + var:legitimist_turns >= 1 + } + change_variable = { + name = legitimist_support + add = 1 + } + change_variable = { + name = legitimist_obligations + add = 1 + } + trigger_event = ep3_laamps.8103 + } + + option = { #Moar troops, but without obligations increase. harder with obligations/support imbalance + name = ep3_laamps.8103.b + + trigger = { + var:legitimist_support < 6 + var:legitimist_turns >= 1 + } + duel = { + target = scope:petitioned_ruler + skill = diplomacy + + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + custom_tooltip = ep3_laamps.8103.b.desc + send_interface_toast = { + title = ep3_laamps.8103.b.success + left_icon = scope:petitioned_ruler + } + change_variable = { + name = legitimist_support + add = 1 + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = { + value = var:legitimist_support + add = 1 + subtract = var:legitimist_obligations + multiply = 10 + } + } + desc = ep3_laamps.8103.b.failure + send_interface_toast = { + title = ep3_laamps.8103.b.failure + left_icon = scope:petitioned_ruler + } + add_prestige = minor_prestige_loss + } + } + trigger_event = ep3_laamps.8103 + } + + option = { #Try to get the level of obligations down. harder with obligations/support imbalance + name = ep3_laamps.8103.c + custom_tooltip = ep3_laamps.8103.c.desc + trigger = { + var:legitimist_obligations > 1 + var:legitimist_turns >= 1 + } + duel = { + target = scope:petitioned_ruler + skill = stewardship + + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.8103.c.success + send_interface_toast = { + title = ep3_laamps.8103.c.success + left_icon = scope:petitioned_ruler + } + change_variable = { + name = legitimist_obligations + subtract = 1 + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = { + value = var:legitimist_support + add = 1 + subtract = var:legitimist_obligations + multiply = 10 + } + } + desc = ep3_laamps.8103.c.failure + send_interface_toast = { + title = ep3_laamps.8103.c.failure + left_icon = scope:petitioned_ruler + } + add_prestige = minor_prestige_loss + } + } + trigger_event = ep3_laamps.8103 + } + + option = { #I'm good + name = ep3_laamps.8103.d + custom_tooltip = ep3_laamps.8103.d.desc + trigger_event = ep3_laamps.8105 + + ai_chance = { + base = 100 + } + } + + after = { + change_variable = { + name = legitimist_turns + subtract = 1 + } + } +} + +#End on negotiations - spit on it + +scripted_effect legitimist_support_add_effect = { + add_gold = { + value = 300 + multiply = var:legitimist_support + } + spawn_army = { + men_at_arms = { + type = accolade_maa_vanguards + stacks = { + value = 2 + multiply = var:legitimist_support + } + } + men_at_arms = { + type = accolade_maa_archers + stacks = { + value = 2 + multiply = var:legitimist_support + } + } + men_at_arms = { + type = accolade_maa_lancers + stacks = { + value = var:legitimist_support + min = 1 + } + } + inheritable = no + uses_supply = no + location = root.location + name = ep3_legitimist_army + } + scope:petitioned_ruler = { + add_hook = { + target = root + type = favor_hook + } + } +} + +ep3_laamps.8105 = { + type = character_event + title = ep3_laamps.8105.t + desc = ep3_laamps.8105.desc + + theme = diplomacy + override_background = { reference = study } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:petitioned_ruler + animation = toast_goblet + } + + option = { #ask for time extension + name = ep3_laamps.8105.a + custom_tooltip = ep3_laamps.8105.invalidations_reasons + custom_tooltip = ep3_laamps.8105.a.desc + duel = { + target = scope:petitioned_ruler + skill = martial + + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.8105.a.success + send_interface_toast = { + title = ep3_laamps.8105.a.success + left_icon = scope:petitioned_ruler + } + trigger_event = { + id = ep3_laamps.8106 + years = 8 + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.8105.a.failure + send_interface_toast = { + title = ep3_laamps.8105.a.failure + left_icon = scope:petitioned_ruler + } + trigger_event = { + id = ep3_laamps.8106 + years = 4 + } + add_prestige = medium_prestige_loss + } + } + + legitimist_support_add_effect = yes + + add_to_variable_list = { #used to handle root death + name = legitimist_supporters + target = scope:petitioned_ruler + } + + scope:petitioned_ruler = { + set_variable = { + name = legitimist_obligations_left + value = root.var:legitimist_obligations + } + } + hidden_effect = { + scope:task_contract = { + complete_task_contract = success_standard + } + } + } + + option = { #spit on it + name = ep3_laamps.8105.b + custom_tooltip = ep3_laamps.8105.invalidations_reasons + custom_tooltip = ep3_laamps.8105.b.desc + trigger_event = { + id = ep3_laamps.8106 + years = 4 + } + + scope:petitioned_ruler = { + set_variable = { + name = legitimist_obligations_left + value = root.var:legitimist_obligations + } + } + add_prestige = medium_prestige_gain + + legitimist_support_add_effect = yes + + add_to_variable_list = { #used to handle root death + name = legitimist_supporters + target = scope:petitioned_ruler + } + hidden_effect = { + scope:task_contract = { + complete_task_contract = success_standard + } + } + + ai_chance = { + base = 100 + } + } + + option = { #actually, nvm, byeeee + name = ep3_laamps.8105.c + custom_tooltip = ep3_laamps.8105.c.desc + trigger_event = { + id = ep3_laamps.8107 + months = { 1 2 } + } + hidden_effect = { + scope:task_contract = { + complete_task_contract = failure_standard + } + } + } + + after = { + remove_variable = legitimist_turns + remove_variable = legitimist_support + remove_variable = legitimist_obligations + } +} + +scripted_effect ep3_laamps_8106_designate_targets_effect = { + if = { + limit = { + NOT = { exists = scope:target_1 } + } + save_scope_as = target_1 + } + else_if = { + limit = { + NOT = { exists = scope:target_2 } + } + save_scope_as = target_2 + } + else_if = { + limit = { + NOT = { exists = scope:target_3 } + } + save_scope_as = target_3 + } + else_if = { + limit = { + NOT = { exists = scope:target_4 } + } + save_scope_as = target_4 + } + else_if = { + limit = { + NOT = { exists = scope:target_5 } + } + save_scope_as = target_5 + } + else_if = { + limit = { + NOT = { exists = scope:target_6 } + } + save_scope_as = target_6 + } + else_if = { + limit = { + NOT = { exists = scope:target_7 } + } + save_scope_as = target_7 + } + else_if = { + limit = { + NOT = { exists = scope:target_8 } + } + save_scope_as = target_8 + } + else_if = { + limit = { + NOT = { exists = scope:target_9 } + } + save_scope_as = target_9 + } + else_if = { + limit = { + NOT = { exists = scope:target_10 } + } + save_scope_as = target_10 + } +} + +#Reminder about the timer! + +ep3_laamps.8106 = { + type = character_event + title = ep3_laamps.8106.t + desc = ep3_laamps.8106.desc + + theme = diplomacy + override_background = { reference = army_camp } + + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:petitioned_ruler + animation = personality_vengeful + } + + trigger = { + government_has_flag = government_is_landless_adventurer + has_realm_law = camp_purpose_legitimists + NOT = { + is_at_war = yes + any_held_title = { + this = scope:claimed_title + } + } + scope:petitioned_ruler = { + is_alive = yes + is_landed = yes + NOR = { + is_imprisoned_by = root + AND = { + is_at_war = yes + any_character_war = { + OR = { + primary_attacker = root + primary_defender = root + } + } + } + } + } + } + + on_trigger_fail = { + if = { + limit = { + is_at_war = yes + } + trigger_event = { #let us try again later + id = ep3_laamps.8106 + months = { 2 4 } + } + } + else_if = { + limit = { + any_held_title = { + this = scope:claimed_title + } + } + trigger_event = { #payup buddy boi + id = ep3_laamps.8111 + months = { 18 20 } + } + } + else_if = { + limit = { + scope:petitioned_ruler = { + OR = { + is_alive = no + is_landed = no + is_imprisoned_by = root + AND = { + is_at_war = yes + any_character_war = { + OR = { + primary_attacker = root + primary_defender = root + } + } + } + } + } + } + trigger_event = { + id = ep3_laamps.8110 + } + } + else = { + trigger_event = { #you failed + id = ep3_laamps.8107 + months = { 1 2 } + } + } + } + + option = { #go to war + name = ep3_laamps.8106.a + flavor = ep3_laamps.8106.a.desc + #it is ugly, but it seems there is no other way + every_claim = { + limit = { + OR = { + holder = scope:claimed_title.holder + holder.top_liege = scope:claimed_title.holder + } + } + ep3_laamps_8106_designate_targets_effect = yes + } + + # Ugly war targeting. + ## 10 targets. + if = { + limit = { exists = scope:target_10 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + target_title = scope:target_6 + target_title = scope:target_7 + target_title = scope:target_8 + target_title = scope:target_9 + target_title = scope:target_10 + } + } + ## 09 targets. + else_if = { + limit = { exists = scope:target_9 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + target_title = scope:target_6 + target_title = scope:target_7 + target_title = scope:target_8 + target_title = scope:target_9 + } + } + ## 08 targets. + else_if = { + limit = { exists = scope:target_8 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + target_title = scope:target_6 + target_title = scope:target_7 + target_title = scope:target_8 + } + } + ## 07 targets. + else_if = { + limit = { exists = scope:target_7 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + target_title = scope:target_6 + target_title = scope:target_7 + } + } + ## 06 targets. + else_if = { + limit = { exists = scope:target_6 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + target_title = scope:target_6 + } + } + ## 05 targets. + else_if = { + limit = { exists = scope:target_5 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + target_title = scope:target_5 + } + } + ## 04 targets. + else_if = { + limit = { exists = scope:target_4 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + target_title = scope:target_4 + } + } + ## 03 targets. + else_if = { + limit = { exists = scope:target_3 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + target_title = scope:target_3 + } + } + ## 02 targets. + else_if = { + limit = { exists = scope:target_2 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + target_title = scope:target_2 + } + } + ## 01 targets. + else_if = { + limit = { exists = scope:target_1 } + start_war = { + casus_belli = claim_cb + target = scope:claimed_title.holder + claimant = root + target_title = scope:target_1 + } + } + + ai_chance = { + base = 100 + } + + trigger_event = { + id = ep3_laamps.8106 + months = { 11 13 } + } + } + + option = { #ask for a delay + name = ep3_laamps.8106.b + custom_tooltip = ep3_laamps.8106.b.desc + #diplo/martial duel - the time is not right for war you see + #trigger this event after next 2 years + #obligations increase if you don't succeed + duel = { + target = scope:petitioned_ruler + skill = martial + + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + custom_tooltip = ep3_laamps.8106.b.success + send_interface_toast = { + title = ep3_laamps.8106.b.success + left_icon = scope:petitioned_ruler + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + custom_tooltip = ep3_laamps.8106.b.failure + send_interface_toast = { + title = ep3_laamps.8106.b.failure + left_icon = scope:petitioned_ruler + } + scope:petitioned_ruler = { + change_variable = { + name = legitimist_obligations_left + add = 1 + } + } + trigger_event = { + id = ep3_laamps.8106 + years = 2 + } + } + } + } + + option = { #actually, nvm, I have other plans now + name = ep3_laamps.8106.c + custom_tooltip = ep3_laamps.8106.c.desc + + trigger_event = { + id = ep3_laamps.8107 + months = { 1 2 } + } + } +} + +#Invalidation upon changing the camp type or becoming landed + +ep3_laamps.8107 = { + type = letter_event + opening = ep3_laamps.8107.t + desc = ep3_laamps.8107.desc + sender = scope:petitioned_ruler + + option = { #well, fate had another things in mind + name = ep3_laamps.8107.a + add_prestige_level = -1 + if = { + limit = { + NOT = { + has_relation_rival = scope:petitioned_ruler + } + } + set_relation_rival = { + target = scope:petitioned_ruler + reason = rival_nithing + } + } + scope:petitioned_ruler = { + remove_variable = legitimist_obligations_left + remove_character_flag = legitimist_supporter + } + add_to_variable_list = { + name = legitimist_payed_supporters + target = scope:petitioned_ruler + } + scope:petitioned_ruler = { + remove_hook = { + target = root + } + } + } + +} + +#Obligations payment + +ep3_laamps.8108 = { + type = character_event + title = ep3_laamps.8108.t + desc = ep3_laamps.8108.desc + + theme = stewardship + override_background = { reference = study } + + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:petitioned_ruler + animation = personality_greedy + } + + trigger = { + scope:petitioned_ruler = { + is_alive = yes + is_landed = yes + NOR = { + is_imprisoned_by = root + AND = { + is_at_war = yes + any_character_war = { + OR = { + primary_attacker = root + primary_defender = root + } + } + } + } + } + } + + immediate = { + add_to_variable_list = { #error suppresion + name = legitimist_supporters + target = root + } + } + + on_trigger_fail = { + trigger_event = { + id = ep3_laamps.8110 + days = { 1 2 } + } + } + + option = { #gimmie ur lunch monies, pacta sunt servanta + name = ep3_laamps.8108.a + if = { + limit = { + scope:petitioned_ruler.var:legitimist_obligations_left > 1 + } + custom_tooltip = ep3_laamps.8108.payments_left + } + else = { + custom_tooltip = ep3_laamps.8108.no_payments_left + scope:petitioned_ruler = { + remove_variable = legitimist_obligations_left + remove_character_flag = legitimist_supporter + } + add_to_variable_list = { + name = legitimist_payed_supporters + target = scope:petitioned_ruler + } + scope:petitioned_ruler = { + remove_hook = { + target = root + } + } + } + + if = { + limit = { + monthly_character_income <= 50 + } + custom_tooltip = ep3_laamps.8108.legitimist_too_poor + } + + pay_short_term_gold = { + target = scope:petitioned_ruler + gold = { + value = monthly_character_income + multiply = 6 + min = 300 + } + } + add_legitimacy = medium_legitimacy_gain + scope:petitioned_ruler = { + change_variable = { + name = legitimist_obligations_left + subtract = 1 + } + } + + if = { + limit = { + scope:petitioned_ruler.var:legitimist_obligations_left > 1 + } + trigger_event = { + id = ep3_laamps.8111 + months = { 18 20 } + } + } + + ai_chance = { + base = 100 + } + } + + option = { #Alas, I cannot pay you now, but I will in the future + name = ep3_laamps.8108.b + custom_tooltip = ep3_laamps.8108.b.desc + + duel = { + target = scope:petitioned_ruler + skill = stewardship + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamps.8108.b.success + send_interface_toast = { + title = ep3_laamps.8108.b.success + left_icon = scope:petitioned_ruler + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamps.8108.b.failure + send_interface_toast = { + title = ep3_laamps.8108.b.failure + left_icon = scope:petitioned_ruler + add_legitimacy = medium_legitimacy_loss + } + } + } + trigger_event = { + id = ep3_laamps.8111 + months = { 6 7 } + } + if = { + limit = { + scope:petitioned_ruler.var:legitimist_obligations_left > 1 + } + custom_tooltip = ep3_laamps.8108.payments_left + } + else = { + custom_tooltip = ep3_laamps.8108.no_payments_left + } + } + + option = { #GET REKKED + name = ep3_laamps.8108.c + custom_tooltip = ep3_laamps.8108.c.desc + add_legitimacy = massive_legitimacy_loss + add_prestige_level = -1 + trigger_event = { + id = ep3_laamps.8107 + months = { 1 2 } + } + } +} + +#you have died, but you still have obligations to pay - reminder - ??? +ep3_laamps.8109 = { + type = letter_event + opening = ep3_laamps.8109.t + desc = ep3_laamps.8109.desc + sender = scope:petitioned_ruler + + option = { #gulp + name = ep3_laamps.8109.a + custom_tooltip = ep3_laamps.8109.a.desc + + trigger_event = { + id = ep3_laamps.8111 + months = { 6 7 } + } + } +} + +#something has happened to your benefactor, the debt has disappeared in the midst of time + +ep3_laamps.8110 = { + type = character_event + title = ep3_laamps.8110.t + desc = { + desc = ep3_laamps.8110.desc_intro + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:petitioned_ruler = { + is_at_war = yes + any_character_war = { + OR = { + primary_attacker = root + primary_defender = root + } + } + } + } + desc = ep3_laamps.8110.desc_war + } + triggered_desc = { + trigger = { scope:petitioned_ruler = { is_imprisoned_by = root } } + desc = ep3_laamps.8110.desc_imprisoned + } + triggered_desc = { + trigger = { + scope:petitioned_ruler = { + is_alive = no + killer ?= root + } + } + desc = ep3_laamps.8110.desc_killer_root + } + triggered_desc = { + trigger = { scope:petitioned_ruler = { is_alive = no } } + desc = ep3_laamps.8110.desc_dead + } + triggered_desc = { + trigger = { scope:petitioned_ruler = { is_landed = no } } + desc = ep3_laamps.8110.desc_unlanded + } + } + } + desc = ep3_laamps.8110.desc_outro + } + + theme = stewardship + override_background = { reference = study } + + left_portrait = { + character = root + animation = manic + } + + lower_right_portrait = { + character = scope:petitioned_ruler + } + + option = { #huzzah! + name = ep3_laamps.8110.a + stress_impact = { + base = medium_stress_loss + greedy = massive_stress_loss + } + add_to_variable_list = { + name = legitimist_payed_supporters + target = scope:petitioned_ruler + } + } +} + +ep3_laamps.8111 = { + hidden = yes + + immediate = { + trigger_event = { + id = ep3_laamps.8108 + months = 6 + } + save_scope_value_as = { + name = incoming_payment_value + value = { + value = monthly_character_income + multiply = 6 + min = 300 + } + } + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamps.8111.t + left_icon = scope:petitioned_ruler + custom_tooltip = ep3_laamps.8111.desc + } + } +} + +#Interesting Personas LAAMP buildings assorted event + +ep3_laamps.8200 = { + type = character_event + title = ep3_laamps.8200.t + desc = { + random_valid = { + triggered_desc = { + trigger = { scope:char_spawn_type = flag:porters } #porters - himbos + desc = ep3_laamps.8200.desc_1 + } + triggered_desc = { + trigger = { scope:char_spawn_type = flag:fools } #capering fools - fools + desc = ep3_laamps.8200.desc_2 + } + triggered_desc = { + trigger = { scope:char_spawn_type = flag:locals } #hangers on - local ethos people + desc = ep3_laamps.8200.desc_3 + } + } + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:porters + } + animation = admiration + } + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:fools + } + animation = laugh + } + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:locals + } + animation = personality_rational + } + } + right_portrait = { + character = scope:new_person + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:porters + } + animation = hero_flex + } + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:fools + } + animation = dancing + } + triggered_animation = { + trigger = { + scope:char_spawn_type = flag:locals + } + animation = beg + } + triggered_outfit = { + trigger = { scope:char_spawn_type = flag:porters } + outfit_tags = { beggar_rags } + } + triggered_outfit = { + trigger = { scope:char_spawn_type = flag:fools } + outfit_tags = { jester_outfit } + } + } + + override_background = { + reference = bp1_bonfire + } + + trigger = { + NOT = { + has_character_flag = had_ep3_laamps_8200 + } + has_government = landless_adventurer_government + is_available_adult = yes + domicile ?= { + OR = { + has_domicile_parameter = camp_recruit_porters_events + has_domicile_parameter = camp_recruit_fool_events + has_domicile_parameter = camp_recruit_locals_events + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.5 + domicile ?= { + has_domicile_parameter = camp_recruit_porters_events + } + } + modifier = { + add = 0.5 + domicile ?= { + has_domicile_parameter = camp_recruit_fool_events + } + } + modifier = { + add = 0.5 + domicile ?= { + has_domicile_parameter = camp_recruit_locals_events + } + } + } + + immediate = { + location = { + save_scope_as = location + } + location.county = { + save_scope_as = location_county + } + location.county.holder.top_liege = { + save_scope_as = location_top_liege + } + if = { + limit = { + domicile ?= { + has_domicile_parameter = camp_recruit_porters_events + } + } + save_scope_value_as = { + name = porters + value = flag:porters + } + scope:porters = { + add_to_temporary_list = spawn_type_selection + } + } + if = { + limit = { + domicile ?= { + has_domicile_parameter = camp_recruit_fool_events + } + } + save_scope_value_as = { + name = fools + value = flag:fools + } + scope:fools = { + add_to_temporary_list = spawn_type_selection + } + } + if = { + limit = { + domicile ?= { + has_domicile_parameter = camp_recruit_locals_events + } + } + save_scope_value_as = { + name = locals + value = flag:locals + } + scope:locals = { + add_to_temporary_list = spawn_type_selection + } + } + random_in_list = { + list = spawn_type_selection + save_scope_as = char_spawn_type + } + if = { + limit = { + scope:char_spawn_type = flag:porters + } + #create a porter himbo + create_character = { + location = scope:location + age = { 18 28 } + random_traits_list = { + count = 1 + education_martial_prowess_2 = {} + education_martial_prowess_3 = {} + } + random_traits_list = { + count = 1 + brave = {} + diligent = {} + humble = {} + } + random_traits_list = { + honest = {} + gregarious = {} + trusting = {} + compassionate = {} + generous = {} + calm = {} + } + random_traits_list = { + count = 1 + lustful = {} + chaste = {} + wrathful = {} + arrogant = {} + impatient = {} + patient = {} + impatient = {} + ambitious = {} + cynical = {} + zealous = {} + stubborn = {} + } + random_traits = no + martial = { + min_template_low_skill + max_template_low_skill + } + prowess = { + min_template_high_skill + max_template_high_skill + } + faith = location.faith + culture = location.culture + gender_female_chance = { + add = 25 + } + save_scope_as = new_person + } + + hidden_effect = { + scope:new_person = { + random_list = { + 2 = { + add_trait = intellect_bad_2 + add_trait = physique_good_1 + add_trait = strong + } + 2 = { + add_trait = strong + } + 2 = { + add_trait = strong + add_trait = giant + } + 2 = { + add_trait = intellect_bad_1 + add_trait = giant + } + 1 = { + add_trait = giant + add_trait = physique_good_2 + add_trait = strong + } + } + } + } + } + else_if = { + limit = { + scope:char_spawn_type = flag:fools + } + create_character = { + template = poet_template + location = root.location + save_scope_as = new_person + } + hidden_effect = { + scope:new_person = { + add_trait = fecund + add_trait = lifestyle_traveler + add_trait = loyal + } + } + } + else_if = { + limit = { + scope:char_spawn_type = flag:locals + } + create_character = { + template = merchant_template + location = root.location + save_scope_as = new_person + } + hidden_effect = { + scope:new_person = { + random_list = { + 8 = { + add_trait = shrewd + } + 1 = { + add_trait = intellect_good_1 + } + 1 = { + add_trait = intellect_good_2 + } + } + } + } + } + + add_character_flag = { + flag = had_ep3_laamps_8200 + years = 4 + } + } + + option = { #welcome, weary traveler + name = ep3_laamps.8200.a + add_courtier = scope:new_person + add_character_flag = { + flag = had_ep3_laamps_8200 + years = 4 + } + + ai_chance = 100 + + stress_impact = { + compassionate = minor_stress_loss + } + } + + option = { #please go away + name = ep3_laamps.8200.b + add_character_flag = { + flag = had_ep3_laamps_8200 + years = 2 + } + scope:new_person = { + silent_disappearance_effect = yes + } + + stress_impact = { + paranoid = medium_stress_loss + shy = medium_stress_loss + } + } + + option = { #don't bother me again for the next 20 years! + name = ep3_laamps.8200.c + add_character_flag = { + flag = had_ep3_laamps_8200 + years = 20 + } + scope:new_person = { + silent_disappearance_effect = yes + } + stress_impact = { + wrathful = medium_stress_loss + paranoid = major_stress_loss + shy = major_stress_loss + } + } +} + + diff --git a/events/dlc/ep3/ep3_laamp_flavor_oltner.txt b/events/dlc/ep3/ep3_laamp_flavor_oltner.txt new file mode 100644 index 00000000..fdc43fe5 --- /dev/null +++ b/events/dlc/ep3/ep3_laamp_flavor_oltner.txt @@ -0,0 +1,329 @@ +namespace = ep3_laamp_flavor_oltner + +scripted_trigger suitable_pool_marriage_trigger = { + save_temporary_scope_as = pool_marriage_target + is_physically_able_adult = yes + allowed_to_marry_character_gender_trigger = { CHARACTER = $FOLLOWER_TARGET$ } + $FOLLOWER_TARGET$ ?= { allowed_to_marry_character_gender_trigger = { CHARACTER = prev } } + are_characters_sensible_lovers_trigger = { INSTIGATING_LOVER = $FOLLOWER_TARGET$ TARGET_OF_LOVE = scope:pool_marriage_target } + is_married = no + can_marry_trigger = yes + is_concubine = no + NOT = { + exists = betrothed + } + has_no_particular_noble_roots_trigger = yes +} + +scripted_trigger suitable_follower_marriage_character_trigger = { + is_physically_able_adult = yes + this != root + is_married = no + can_marry_trigger = yes + is_concubine = no + age <= 50 + health >= fine_health + is_faith_dominant_gender = no + NOR = { + house = root.house + is_close_family_of = root + exists = betrothed + has_relation_rival = root + } + save_temporary_scope_as = entourage_member + any_pool_character = { + province = root.location + age <= 40 + health >= fine_health + suitable_pool_marriage_trigger = { FOLLOWER_TARGET = scope:entourage_member } + } +} + +# A Follower's Heart +ep3_laamp_flavor_oltner.0001 = { + type = character_event + title = ep3_laamp_flavor_oltner.3001.t + desc = ep3_laamp_flavor_oltner.3001.desc + theme = marriage + override_background = { reference = market_scope } + left_portrait = { + character = scope:entourage_to_marry_2 + animation = beg + camera = camera_event_very_left + } + right_portrait = { + character = scope:marriage_material + animation = dismissal + camera = camera_event_right_pointing_left + } + cooldown = { years = 10 } + + trigger = { + has_government = landless_adventurer_government + location = { + has_holding = yes + } + any_courtier = { + suitable_follower_marriage_character_trigger = yes + } + } + + immediate = { + save_scope_as = root_char + random_courtier = { + limit = { + suitable_follower_marriage_character_trigger = yes + } + save_scope_as = entourage_to_marry_2 + } + random_pool_character = { + province = root.location + limit = { + suitable_pool_marriage_trigger = { FOLLOWER_TARGET = scope:entourage_to_marry_2 } + } + save_scope_as = marriage_material + } + location.county.title_province = { save_scope_as = background_market_scope } + } + + option = { # Tell them to pay it themselves + name = ep3_laamp_flavor_oltner.0001.a + + trigger = { + scope:entourage_to_marry_2.gold >= { + add = scope:marriage_material.sum_of_all_skills_and_prowess_value + } + } + + scope:entourage_to_marry_2 = { + remove_short_term_gold = { + add = scope:marriage_material.sum_of_all_skills_value + add = scope:marriage_material.prowess + } + } + + add_courtier = scope:marriage_material + scope:entourage_to_marry_2 = { + if = { + limit = { + is_female = yes + is_lowborn = no + scope:marriage_material = { + is_lowborn = yes + } + } + marry_matrilineal = scope:marriage_material + } + else_if = { + limit = { + is_male = yes + is_lowborn = yes + scope:marriage_material = { + is_lowborn = no + } + } + marry_matrilineal = scope:marriage_material + } + else = { + marry = scope:marriage_material + } + } + + ai_chance = { + base = 100 + } + } + + option = { # Pay the dowry + name = ep3_laamp_flavor_oltner.0001.b + stress_impact = { + generous = massive_stress_impact_loss + greedy = medium_stress_impact_gain + } + + remove_short_term_gold = { + add = scope:marriage_material.sum_of_all_skills_and_prowess_value + } + + add_courtier = scope:marriage_material + scope:entourage_to_marry_2 = { + if = { + limit = { + is_female = yes + is_lowborn = no + scope:marriage_material = { + is_lowborn = yes + } + } + marry_matrilineal = scope:marriage_material + } + else_if = { + limit = { + is_male = yes + is_lowborn = yes + scope:marriage_material = { + is_lowborn = no + } + } + marry_matrilineal = scope:marriage_material + } + else = { + marry = scope:marriage_material + } + progress_towards_friend_effect = { + CHARACTER = root + OPINION = 0 + REASON = friend_helped_me_marry + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 50 + } + } + + scope:marriage_material = { save_scope_as = relationship_reason_involved_character } + + clear_saved_scope = relationship_reason_involved_character + + ai_chance = { + base = 10 + + modifier = { + factor = 0 + OR = { + has_trait = greedy + gold <= { + add = scope:marriage_material.sum_of_all_skills_and_prowess_value + multiply = 2 + } + } + } + } + } + + option = { # Convince them to run away with you + name = ep3_laamp_flavor_oltner.0001.c + skill = intrigue + stress_impact = { + generous = medium_stress_impact_gain + } + + duel = { + skill = intrigue + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_laamp_flavor_oltner.0001.c.success + send_interface_toast = { + title = ep3_laamp_flavor_oltner.0001.c.success + left_icon = scope:entourage_to_marry_2 + right_icon = scope:marriage_material + add_courtier = scope:marriage_material + scope:entourage_to_marry_2 = { + if = { + limit = { + is_female = yes + is_lowborn = no + scope:marriage_material = { + is_lowborn = yes + } + } + marry_matrilineal = scope:marriage_material + } + else_if = { + limit = { + is_male = yes + is_lowborn = yes + scope:marriage_material = { + is_lowborn = no + } + } + marry_matrilineal = scope:marriage_material + } + else = { + marry = scope:marriage_material + } + progress_towards_friend_effect = { + CHARACTER = root + OPINION = 0 + REASON = friend_helped_me_marry + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 50 + } + } + + scope:marriage_material = { save_scope_as = relationship_reason_involved_character } + clear_saved_scope = relationship_reason_involved_character + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_laamp_flavor_oltner.0001.c.failure + send_interface_toast = { + title = ep3_laamp_flavor_oltner.0001.c.failure + left_icon = scope:entourage_to_marry_2 + right_icon = scope:marriage_material + scope:entourage_to_marry_2 = { + add_stress = medium_stress_gain + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -30 + } + } + } + } + } + + ai_chance = { + base = 10 + + modifier = { + factor = 0 + has_trait = generous + } + } + } + + option = { # Ignore your follower + name = ep3_laamp_flavor_oltner.0001.d + stress_impact = { + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + chaste = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + scope:entourage_to_marry_2 = { + add_opinion = { + target = root + modifier = heartbroken_opinion + opinion = -30 + } + } + ai_chance = { + base = 10 + + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + } + } + } + } +} diff --git a/events/dlc/ep3/ep3_laamp_flavour_ewan_events.txt b/events/dlc/ep3/ep3_laamp_flavour_ewan_events.txt new file mode 100644 index 00000000..30246157 --- /dev/null +++ b/events/dlc/ep3/ep3_laamp_flavour_ewan_events.txt @@ -0,0 +1,23555 @@ +@ep3_laamp_flavour_ewan_event_cooldown = 10 +@ep3_laamp_flavour_ewan_event_cooldown_shorter = 2 +@ep3_laamp_flavour_ewan_event_cooldown_short = 5 +@ep3_laamp_flavour_ewan_event_cooldown_long = 20 +@ep3_laamp_flavour_ewan_event_cooldown_longer = 35 +@ep3_laamp_flavour_ewan_event_cooldown_longest = 70 + +@ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force = 2000 +@ep3_laamp_flavour_ewan_baggage_train_has_very_significant_armed_force = 4000 + +@ep3_laamp_flavour_ewan_1001_dynasty_prestige_level = 3 +@ep3_laamp_flavour_ewan_1041_years_since_rule = 5 +@ep3_laamp_flavour_ewan_1103_age_threshold_young = 6 +@ep3_laamp_flavour_ewan_1103_age_threshold_older = 12 +@ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking = 75 +@ep3_laamp_flavour_ewan_4051_minimum_provisions_count = 150 + +namespace = ep3_laamp_flavour_ewan + +################################################## +# #SIMPLE JOYS +# 0001 - 0010 Pinkish Hues - Watching the sunrise/sunset. +# 0011 - 0020 Fire & Friends - Larks at the campfire. +# 0021 - 0030 A Little Follower - Happy cat or dog follows you. +# 0031 - 0040 Tumbling Down - Stooge falls down hill. +# 0041 - 0050 Travails of a Cook - Recipes on the road. +# 0051 - 0060 A Friendly Clamour - A pleasant evening buzz as the camp settles down. +# 0061 - 0070 An Unexpected Faire - Locals react with impromptu faire. +# 0071 - 0080 Pounding Hooves - Riding with a hangover-stricken friend. +# +# #CHILDREARING +# 1001 - 1010 Friends in Low Places - Highborn befriends a lowborn. +# 1011 - 1020 Learning from Example - Learning from officer. +# 1021 - 1030 Love at First Camp - Crush on a local girl/boy. +# 1031 - 1040 Nurture - Taking after camp purpose. +# 1041 - 1050 The Old Country - Child too young to remember asks what old home was like. +# 1051 - 1060 It Isn't Fair - Child unhappy with life on the road. +# 1061 - 1070 Quick Study - Child picks up local language quickly. +# 1071 - 1080 At the Edge of Camp - Children playing in local terrain. +# 1081 - 1090 Growing Up - Child demands own tent. +# 1091 - 1100 Every Parent's Duty - Teaching a youngling how to ride. +# 1101 - 1110 Helping Out - Child helps with packing. +# 1111 - 1120 A Nose for Trouble - Child adopts puppy. +# +# #PERSONAL TENSIONS +# 2001 - 2010 Plenty in Common - Friendship blooms over shared traits. +# 2011 - 2020 Camp Gossip - Someone shagged someone else's spouse. +# 2021 - 2030 Bound Together - Marriage/concubinage at camp. +# 2031 - 2040 Through with You - Someone who hates you up and leaves. +# 2041 - 2050 Closer Quarters - Lover developing from various sources. +# 2051 - 2060 What's the Point? - Someone abandons bathing. +# 2061 - 2070 My Spot - Fight at dinner over tent pitch location. +# 2071 - 2080 Second-in-Command - People scrabble for empty/ineffectual SiC position. +# 2081 - 2090 A Well-Oiled Machine - Helping each other out at pitch time. +# 2091 - 2100 Crimes of Passion - Followers attack each other. +# +# #CAMP PURPOSE +# 3001 - 3010 Heard of You - Brigands attract cool local criminals, scaled to prestige level. +# 3011 - 3020 Arguing the Toss - Scholars debate a learned follower. +# 3021 - 3030 Over the Horizon - Explorer gets a passion for stories of a distant land, populating contracts there & learning the local language. +# 3031 - 3040 Mine by Right - Legitimist broods & extends their claims. +# 3041 - 3050 People from a Better Time - Old loyalists join legitimist. +# 3051 - 3060 Map Painting - Explorer writes/draws map of local area. +# 3061 - 3070 A Guide to ... - Scholar writes book on local subject. +# 3071 - 3080 The Law in Location.GetNameNoTier - Law attacks criminal gang. +# 3081 - 3090 Wrestle for It - Merc challenged to a wrastlin'. +# +# #TRAVEL DANGER / SUPPLIES +# 4001 - 4010 Bandits! - Bandit raid. +# 4011 - 4020 A Land of Milk & Honey - Bountiful hunting/foraging. +# 4021 - 4030 Parched - Difficulty finding water. +# 4031 - 4040 Sickness in the Herd - Pack animals are sick or wounded. +# 4041 - 4050 Fortuna's Tithe - Bad weather destroys wagons or pack animals. +# 4051 - 4060 Supplies Unaccounted For - Supplies go missing in large armies. +# 4061 - 4070 Eyes in the Night - local predator picking off people each evening. +# 4071 - 4080 Slavers - bastards try to kidnap people from the edges of your train. +# 4081 - 4090 Born of Desperation - hungry locals swarm at you, searching for food. +# 4091 - 4100 Night Attack - unknown group assaults your camp one evening. +# +# #MISC MINOR EVENTS +# 9501 - 9510 Core Tombola - Takes care of returning to camp after a period away. +# 9511 - 9520 Follower Returned - follower comes back to you, mostly the same. +# 9521 - 9530 Not As I Remember You - follower comes back to you, having taken on a local culture/faith. +# 9531 - 9540 Missing Follower - follower fails to come back after a loan. +# 9541 - 9550 Camp Activity Feed Message - something minor happens at camp. +# +# #MAINTENANCE +# 9801 - 9810 General Maintenance - Reserved for w/e turns up. +################################################## + + + + + + + + + + +################################################## +# MISC SCRIPTED TRIGGERS & EFFECTS + +scripted_trigger ep3_laamp_flavour_ewan_available_courtier_trigger = { + is_adult = yes + is_courtier_of = root + location = root.location + is_available_allow_travelling = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_available_child_trigger = { + child_can_have_full_conversations_trigger = yes + is_courtier_of = root + location = root.location + is_available_allow_travelling = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_available_anybody_trigger = { + OR = { + is_adult = yes + child_can_have_full_conversations_trigger = yes + } + is_courtier_of = root + location = root.location + is_available_allow_travelling = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = { + is_adult = yes + location = root.location +} + +scripted_trigger ep3_laamp_flavour_ewan_no_dog_trigger = { + NOR = { + any_owned_story = { type = story_cycle_pet_dog } + has_character_modifier = dog_story_modifier + } +} + +scripted_trigger ep3_laamp_flavour_ewan_no_cat_trigger = { + NOR = { + any_owned_story = { type = story_cycle_pet_cat } + has_character_modifier = cat_story_modifier + } +} + +scripted_effect ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = { + if = { + limit = { number_of_personality_traits >= 3 } + remove_trait = rowdy + remove_trait = charming + remove_trait = curious + remove_trait = pensive + remove_trait = bossy + } +} + +scripted_effect ep3_laamp_flavour_ewan_register_terrain_effect = { + location = { + switch = { + trigger = terrain + plains = { + save_scope_value_as = { + name = terrain_type + value = flag:plains + } + } + farmlands = { + save_scope_value_as = { + name = terrain_type + value = flag:farmlands + } + } + hills = { + save_scope_value_as = { + name = terrain_type + value = flag:hills + } + } + mountains = { + save_scope_value_as = { + name = terrain_type + value = flag:mountains + } + } + desert = { + save_scope_value_as = { + name = terrain_type + value = flag:desert + } + } + desert_mountains = { + save_scope_value_as = { + name = terrain_type + value = flag:desert_mountains + } + } + oasis = { + save_scope_value_as = { + name = terrain_type + value = flag:oasis + } + } + jungle = { + save_scope_value_as = { + name = terrain_type + value = flag:jungle + } + } + forest = { + save_scope_value_as = { + name = terrain_type + value = flag:forest + } + } + taiga = { + save_scope_value_as = { + name = terrain_type + value = flag:taiga + } + } + wetlands = { + save_scope_value_as = { + name = terrain_type + value = flag:wetlands + } + } + steppe = { + save_scope_value_as = { + name = terrain_type + value = flag:steppe + } + } + floodplains = { + save_scope_value_as = { + name = terrain_type + value = flag:floodplains + } + } + drylands = { + save_scope_value_as = { + name = terrain_type + value = flag:drylands + } + } + } + } +} + + + + + + + + + + + +################################################## +# SIMPLE JOYS + +################################################## +# Pinkish Hues +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { + ep3_laamp_flavour_ewan_available_$CONFIG$_trigger = yes + NOT = { has_trait = blind } + opinion = { + target = root + value >= 40 + } + trigger_if = { + limit = { + root = { is_ai = yes } + } + reverse_opinion = { + target = root + value >= 40 + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_0002_watch_partner_trigger = { + ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = courtier } + NOR = { + is_close_family_of = root + is_consort_of = root + trigger_if = { + limit = { exists = scope:watch_partner_1 } + this = scope:watch_partner_1 + } + } +} + +# Watching the sunset. +ep3_laamp_flavour_ewan.0001 = { + type = character_event + title = ep3_laamp_flavour_ewan.0001.t + desc = { + desc = ep3_laamp_flavour_ewan.0001.desc.intro.preamble + first_valid = { + triggered_desc = { + trigger = { has_trait = lazy } + desc = ep3_laamp_flavour_ewan.0001.desc.intro.lazy + } + triggered_desc = { + trigger = { has_trait = diligent } + desc = ep3_laamp_flavour_ewan.0001.desc.intro.diligent + } + desc = ep3_laamp_flavour_ewan.0001.desc.intro.fallback + } + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:terrain_type = flag:plains + scope:terrain_type = flag:farmlands + scope:terrain_type = flag:hills + } + } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_hill + } + triggered_desc = { + trigger = { + OR = { + scope:terrain_type = flag:jungle + scope:terrain_type = flag:forest + scope:terrain_type = flag:taiga + } + } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.tree_covered_hill + } + triggered_desc = { + trigger = { scope:terrain_type = flag:mountains } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_ridge + } + triggered_desc = { + trigger = { + OR = { + scope:terrain_type = flag:desert + scope:terrain_type = flag:oasis + } + } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.small_dune + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert_mountains } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.dusty_ridge + } + triggered_desc = { + trigger = { + OR = { + scope:terrain_type = flag:wetlands + scope:terrain_type = flag:floodplains + scope:terrain_type = flag:steppe + } + } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.stubby_hillock + } + triggered_desc = { + trigger = { scope:terrain_type = flag:drylands } + desc = ep3_laamp_flavour_ewan.0001.desc.midtro.dusty_hill + } + } + first_valid = { + triggered_desc = { + trigger = { scope:terrain_type = flag:plains } + desc = ep3_laamp_flavour_ewan.0001.desc.plains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:farmlands } + desc = ep3_laamp_flavour_ewan.0001.desc.farmlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:hills } + desc = ep3_laamp_flavour_ewan.0001.desc.hills + } + triggered_desc = { + trigger = { scope:terrain_type = flag:mountains } + desc = ep3_laamp_flavour_ewan.0001.desc.mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert } + desc = ep3_laamp_flavour_ewan.0001.desc.desert + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert_mountains } + desc = ep3_laamp_flavour_ewan.0001.desc.desert_mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:oasis } + desc = ep3_laamp_flavour_ewan.0001.desc.oasis + } + triggered_desc = { + trigger = { scope:terrain_type = flag:jungle } + desc = ep3_laamp_flavour_ewan.0001.desc.jungle + } + triggered_desc = { + trigger = { scope:terrain_type = flag:forest } + desc = ep3_laamp_flavour_ewan.0001.desc.forest + } + triggered_desc = { + trigger = { scope:terrain_type = flag:taiga } + desc = ep3_laamp_flavour_ewan.0001.desc.taiga + } + triggered_desc = { + trigger = { scope:terrain_type = flag:wetlands } + desc = ep3_laamp_flavour_ewan.0001.desc.wetlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:steppe } + desc = ep3_laamp_flavour_ewan.0001.desc.steppe + } + triggered_desc = { + trigger = { scope:terrain_type = flag:floodplains } + desc = ep3_laamp_flavour_ewan.0001.desc.floodplains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:drylands } + desc = ep3_laamp_flavour_ewan.0001.desc.drylands + } + } + desc = ep3_laamp_flavour_ewan.0001.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = admiration + } + lower_center_portrait = scope:watch_partner_2 + lower_right_portrait = scope:watch_partner_1 + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0001 } + # And check that we've had this title for a decent amount of time, so that we don't get this immediately every time. + title_held_years >= 10 + } + # And uhhh. Unfortunately. + NOT = { has_trait = blind } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0001 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0001 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longest + } + } + # Grab our terrain. + ep3_laamp_flavour_ewan_register_terrain_effect = yes + # Flag a consort or child to watch it with. + ## Consorts. + every_consort = { + limit = { + ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = courtier } + } + add_to_list = possible_watch_partner_1_list + } + ## Children. + every_child = { + limit = { + ep3_laamp_flavour_ewan_0001_watch_partner_trigger = { CONFIG = child } + } + add_to_list = possible_watch_partner_1_list + } + ## Now, sort through them to find our best candidate. + ordered_in_list = { + list = possible_watch_partner_1_list + order_by = { + value = "opinion(root)" + # If we're already friends/lovers, lower the score, as this should be for making new ones. + if = { + limit = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + } + multiply = 0.5 + } + } + save_scope_as = watch_partner_1 + } + # Flag a potential friend or friend to watch it with. + ## Potential friends. + every_relation = { + type = potential_friend + limit = { ep3_laamp_flavour_ewan_0002_watch_partner_trigger = yes } + add_to_list = possible_watch_partner_2_list + } + ## Friends & best friends. + every_relation = { + type = friend + limit = { ep3_laamp_flavour_ewan_0002_watch_partner_trigger = yes } + add_to_list = possible_watch_partner_2_list + } + ## Now, sort through them to find our best candidate. + ordered_in_list = { + list = possible_watch_partner_2_list + order_by = "opinion(root)" + save_scope_as = watch_partner_2 + } + } + + # Appreciate the solitude. + option = { + name = ep3_laamp_flavour_ewan.0001.a + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0001_the_little_things_modifier + years = 10 + } + + stress_impact = { + base = medium_stress_loss + shy = medium_stress_impact_loss + gregarious = miniscule_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } + + # Call up consort or child. + option = { + name = ep3_laamp_flavour_ewan.0001.b + trigger = { exists = scope:watch_partner_1 } + + progress_towards_friend_effect = { + REASON = friend_adventurer_watched_sunset + CHARACTER = scope:watch_partner_1 + OPINION = 30 + } + + stress_impact = { gregarious = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + opinion_modifier = { opinion_target = scope:watch_partner_1 } + } + } + + # Call up friend/potential friend. + option = { + name = ep3_laamp_flavour_ewan.0001.c + trigger = { exists = scope:watch_partner_2 } + + progress_towards_friend_effect = { + REASON = friend_adventurer_watched_sunset + CHARACTER = scope:watch_partner_2 + OPINION = 40 + } + + stress_impact = { gregarious = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + opinion_modifier = { opinion_target = scope:watch_partner_2 } + } + } + + # Get on with the evening/morning's work. + option = { + name = ep3_laamp_flavour_ewan.0001.d + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0001_all_business_modifier + years = 10 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 2 } + } + } +} + +################################################## +# Fire & Friends +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0011_mocker_trigger = { + has_trait = gregarious + ep3_laamp_flavour_ewan_available_courtier_trigger = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_0011_mockee_trigger = { + NOT = { has_trait = gregarious } + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + # Filter out anyone that most folks'd be _reluctant_ to criticise. + NOR = { + is_close_or_extended_family_of = root + is_consort_of = root + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + } +} + +# Larks at the campfire. +ep3_laamp_flavour_ewan.0011 = { + type = character_event + title = ep3_laamp_flavour_ewan.0011.t + desc = { + desc = ep3_laamp_flavour_ewan.0011.desc.intro + random_valid = { + triggered_desc = { + trigger = { + scope:mockee = { has_trait = lustful } + } + desc = ep3_laamp_flavour_ewan.0011.desc.lustful + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = chaste } + } + desc = ep3_laamp_flavour_ewan.0011.desc.chaste + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = gluttonous } + } + desc = ep3_laamp_flavour_ewan.0011.desc.gluttonous + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = temperate } + } + desc = ep3_laamp_flavour_ewan.0011.desc.temperate + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = greedy } + } + desc = ep3_laamp_flavour_ewan.0011.desc.greedy + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = generous } + } + desc = ep3_laamp_flavour_ewan.0011.desc.generous + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = lazy } + } + desc = ep3_laamp_flavour_ewan.0011.desc.lazy + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = diligent } + } + desc = ep3_laamp_flavour_ewan.0011.desc.diligent + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = wrathful } + } + desc = ep3_laamp_flavour_ewan.0011.desc.wrathful + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = calm } + } + desc = ep3_laamp_flavour_ewan.0011.desc.calm + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = patient } + } + desc = ep3_laamp_flavour_ewan.0011.desc.patient + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = impatient } + } + desc = ep3_laamp_flavour_ewan.0011.desc.impatient + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = arrogant } + } + desc = ep3_laamp_flavour_ewan.0011.desc.arrogant + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = humble } + } + desc = ep3_laamp_flavour_ewan.0011.desc.humble + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = deceitful } + } + desc = ep3_laamp_flavour_ewan.0011.desc.deceitful + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = honest } + } + desc = ep3_laamp_flavour_ewan.0011.desc.honest + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = craven } + } + desc = ep3_laamp_flavour_ewan.0011.desc.craven + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = brave } + } + desc = ep3_laamp_flavour_ewan.0011.desc.brave + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = shy } + } + desc = ep3_laamp_flavour_ewan.0011.desc.shy + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = gregarious } + } + desc = ep3_laamp_flavour_ewan.0011.desc.gregarious + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = ambitious } + } + desc = ep3_laamp_flavour_ewan.0011.desc.ambitious + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = content } + } + desc = ep3_laamp_flavour_ewan.0011.desc.content + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = arbitrary } + } + desc = ep3_laamp_flavour_ewan.0011.desc.arbitrary + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = just } + } + desc = ep3_laamp_flavour_ewan.0011.desc.just + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = cynical } + } + desc = ep3_laamp_flavour_ewan.0011.desc.cynical + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = zealous } + } + desc = ep3_laamp_flavour_ewan.0011.desc.zealous + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = paranoid } + } + desc = ep3_laamp_flavour_ewan.0011.desc.paranoid + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = trusting } + } + desc = ep3_laamp_flavour_ewan.0011.desc.trusting + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = compassionate } + } + desc = ep3_laamp_flavour_ewan.0011.desc.compassionate + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = callous } + } + desc = ep3_laamp_flavour_ewan.0011.desc.callous + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = sadistic } + } + desc = ep3_laamp_flavour_ewan.0011.desc.sadistic + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = stubborn } + } + desc = ep3_laamp_flavour_ewan.0011.desc.stubborn + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = fickle } + } + desc = ep3_laamp_flavour_ewan.0011.desc.fickle + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = vengeful } + } + desc = ep3_laamp_flavour_ewan.0011.desc.vengeful + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = forgiving } + } + desc = ep3_laamp_flavour_ewan.0011.desc.forgiving + } + triggered_desc = { + trigger = { + scope:mockee = { has_trait = eccentric } + } + desc = ep3_laamp_flavour_ewan.0011.desc.eccentric + } + } + desc = ep3_laamp_flavour_ewan.0011.desc.outro + } + theme = laamp + left_portrait = { + character = scope:mocker + animation = laugh + } + right_portrait = { + character = scope:mockee + animation = disapproval + } + override_background = { reference = ep3_campfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0011 } + } + # Make sure we've got at least one mocker & one mockee. + any_courtier = { ep3_laamp_flavour_ewan_0011_mocker_trigger = yes } + any_courtier = { ep3_laamp_flavour_ewan_0011_mockee_trigger = yes } + } + + weight_multiplier = { + modifier = { + add = -0.5 + has_trait = shy + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0011 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0011 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab our courtiers. + random_courtier = { + limit = { ep3_laamp_flavour_ewan_0011_mocker_trigger = yes } + save_scope_as = mocker + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_0011_mockee_trigger = yes } + save_scope_as = mockee + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Join in the ribbing of scope:mockee. + option = { + name = ep3_laamp_flavour_ewan.0011.a + + duel = { + skill = diplomacy + target = scope:mockee + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.a.tt.success + left_icon = scope:mockee + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = proper_jokes_opinion + opinion = 20 + } + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.a.tt.failure + left_icon = scope:mockee + scope:mockee = { + add_opinion = { + target = root + modifier = humiliated_opinion + opinion = -30 + } + } + } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -0.25 } + opinion_modifier = { + opinion_target = scope:mockee + multiplier = -1 + } + } + } + + # Turn the tables on scope:mocker. + option = { + name = ep3_laamp_flavour_ewan.0011.b + + duel = { + skill = diplomacy + target = scope:mocker + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.b.tt.success + left_icon = scope:mocker + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = proper_jokes_opinion + opinion = 20 + } + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.b.tt.failure + left_icon = scope:mocker + scope:mocker = { + add_opinion = { + target = root + modifier = humiliated_opinion + opinion = -30 + } + } + } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 0.5 } + opinion_modifier = { opinion_target = scope:mocker } + } + } + + # Tell a joke of your own. + option = { + name = ep3_laamp_flavour_ewan.0011.c + + duel = { + skill = diplomacy + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.c.tt.success + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = proper_jokes_opinion + opinion = 20 + } + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0011.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0011.c.tt.failure + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 0.5 } + } + } + + # Soak it all in. + option = { + name = ep3_laamp_flavour_ewan.0011.d + + # Main effect is stress loss. + stress_impact = { + base = medium_stress_loss + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } +} + +################################################## +# A Little Follower +# by Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +# Happy cat or dog follows you. +ep3_laamp_flavour_ewan.0021 = { + type = character_event + title = ep3_laamp_flavour_ewan.0021.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.intro.cat + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.intro.dog + } + } + random_valid = { + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.cat.1 + } + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.cat.2 + } + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.cat.3 + } + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.cat.4 + } + triggered_desc = { + trigger = { scope:animal_type = flag:cat } + desc = ep3_laamp_flavour_ewan.0021.desc.cat.5 + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.dog.1 + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.dog.2 + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.dog.3 + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.dog.4 + } + triggered_desc = { + trigger = { scope:animal_type = flag:dog } + desc = ep3_laamp_flavour_ewan.0021.desc.dog.5 + } + } + desc = ep3_laamp_flavour_ewan.0021.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = admiration + } + override_background = { reference = corridor_day } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0021 } + } + # This one won't make sense if you could just get a dog at any point, so rule that out. + NOT = { + domicile = { has_domicile_building = baggage_train_kennel } + } + # Plus make sure that we don't _already_ have both dog & cat. + OR = { + ep3_laamp_flavour_ewan_no_dog_trigger = no + ep3_laamp_flavour_ewan_no_cat_trigger = no + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0021 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0021 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Pick whether this'll be a cat or a dog. + random_list = { + # Prefer cats over dogs because: + # A) You can get dogs via the kennels. + # B) They are innately superior. + 50 = { + trigger = { ep3_laamp_flavour_ewan_no_dog_trigger = yes } + save_scope_value_as = { + name = animal_type + value = flag:dog + } + } + 150 = { + trigger = { ep3_laamp_flavour_ewan_no_cat_trigger = yes } + save_scope_value_as = { + name = animal_type + value = flag:cat + } + } + } + } + + # Adopt the animal. + option = { + name = ep3_laamp_flavour_ewan.0021.a + + if = { + limit = { scope:animal_type = flag:cat } + start_cat_story_cycle_effect = yes + } + else = { start_dog_story_cycle_effect = yes } + + # Everyone likes a pet. + add_stress = medium_stress_impact_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Low on provisions: that's... a meal... + option = { + name = ep3_laamp_flavour_ewan.0021.b + trigger = { domicile.provisions <= provisions_privation_threshold_start } + + domicile = { change_provisions = microscopic_provisions_gain } + + stress_impact = { + gluttonous = minor_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = miniscule_stress_impact_gain + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # Sadistic: kick the animal. + option = { + name = ep3_laamp_flavour_ewan.0021.c + trigger = { has_trait = sadistic } + trait = sadistic + + # Remember that time + random = { + chance = 1 + increase_wounds_effect = { REASON = wild_animal } + } + + # Main effect is the stress loss. + stress_impact = { sadistic = major_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -3 } + } + } + + # It's just a fellow traveller, leave it be. + option = { + name = ep3_laamp_flavour_ewan.0021.d + + if = { + limit = { scope:animal_type = flag:cat } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0021_respected_cat_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0021_respected_dog_modifier + years = 10 + } + } + + stress_impact = { shy = minor_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } +} + +################################################## +# Tumbling Down +# by Ewan Cowhig Croft +# 0031 - 0040 +################################################## + +# Stooge falls down hill. +ep3_laamp_flavour_ewan.0031 = { + type = character_event + title = ep3_laamp_flavour_ewan.0031.t + desc = { + desc = ep3_laamp_flavour_ewan.0031.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:terrain_type = flag:plains } + desc = ep3_laamp_flavour_ewan.0031.desc.plains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:farmlands } + desc = ep3_laamp_flavour_ewan.0031.desc.farmlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:hills } + desc = ep3_laamp_flavour_ewan.0031.desc.hills + } + triggered_desc = { + trigger = { scope:terrain_type = flag:mountains } + desc = ep3_laamp_flavour_ewan.0031.desc.mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert } + desc = ep3_laamp_flavour_ewan.0031.desc.desert + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert_mountains } + desc = ep3_laamp_flavour_ewan.0031.desc.desert_mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:oasis } + desc = ep3_laamp_flavour_ewan.0031.desc.oasis + } + triggered_desc = { + trigger = { scope:terrain_type = flag:jungle } + desc = ep3_laamp_flavour_ewan.0031.desc.jungle + } + triggered_desc = { + trigger = { scope:terrain_type = flag:forest } + desc = ep3_laamp_flavour_ewan.0031.desc.forest + } + triggered_desc = { + trigger = { scope:terrain_type = flag:taiga } + desc = ep3_laamp_flavour_ewan.0031.desc.taiga + } + triggered_desc = { + trigger = { scope:terrain_type = flag:wetlands } + desc = ep3_laamp_flavour_ewan.0031.desc.wetlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:steppe } + desc = ep3_laamp_flavour_ewan.0031.desc.steppe + } + triggered_desc = { + trigger = { scope:terrain_type = flag:floodplains } + desc = ep3_laamp_flavour_ewan.0031.desc.floodplains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:drylands } + desc = ep3_laamp_flavour_ewan.0031.desc.drylands + } + } + desc = ep3_laamp_flavour_ewan.0031.desc.midtro + first_valid = { + triggered_desc = { + trigger = { + scope:stooge = { is_alive = no } + } + desc = ep3_laamp_flavour_ewan.0031.desc.outro.dead + } + desc = ep3_laamp_flavour_ewan.0031.desc.outro.fallback + } + } + theme = laamp + left_portrait = { + character = root + animation = schadenfreude + } + right_portrait = { + character = scope:stooge + animation = fear + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0031 } + } + # This event'll be pointless if we don't have some stress, so make sure we're a little tense. + stress >= 25 + # Make sure we've got a stooge. + court_position:stooge_camp_officer ?= { is_available_allow_travelling = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0031 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0031 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Grab our stooge. + court_position:stooge_camp_officer = { save_scope_as = stooge } + # Grab our terrain. + ep3_laamp_flavour_ewan_register_terrain_effect = yes + ## Plus, this means injury. + scope:stooge = { + increase_wounds_effect = { REASON = fell_wilderness } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Laugh. + option = { + name = ep3_laamp_flavour_ewan.0031.a + + scope:stooge = { + if = { + limit = { is_alive = yes } + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -40 + } + } + # Acknowledge that this is a wee bit ghoulish if they've died. + else = { + root = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0031_grisly_modifier + years = 5 + } + } + } + } + + # Main effect comes from stress loss. + stress_impact = { + base = major_stress_loss + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + # Snicker, but leave it at that. + option = { + name = ep3_laamp_flavour_ewan.0031.b + + scope:stooge = { + if = { + limit = { is_alive = yes } + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -20 + } + } + # Acknowledge that this is a wee bit ghoulish if they've died. + else = { + root = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0031_macabre_modifier + years = 5 + } + } + } + } + + # Main effect comes from stress loss. + stress_impact = { + base = medium_stress_loss + sadistic = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_compassion = -0.5 + ai_sociability = 0.5 + } + } + } + + # Move on, this is beneath you. + option = { + name = ep3_laamp_flavour_ewan.0031.c + + add_prestige = miniscule_prestige_gain + + stress_impact = { arrogant = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } +} + +################################################## +# Travails of a Cook +# by Ewan Cowhig Croft +# 0041 - 0050 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = { + domicile.provisions >= domicile.max_provisions + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no +} + +scripted_trigger ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = { + domicile.provisions < domicile.max_provisions + domicile.provisions > provisions_privation_threshold_start + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no +} + +scripted_trigger ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = { + domicile.provisions <= provisions_privation_threshold_start + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = no +} + +scripted_trigger ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = { + location = { + geographical_region = custom_sahara_proper + # If we're in an oasis, we should act like it. + NOT = { terrain = oasis } + } +} + +# Recipes on the road. +ep3_laamp_flavour_ewan.0041 = { + type = character_event + title = ep3_laamp_flavour_ewan.0041.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:camp_cook } + desc = ep3_laamp_flavour_ewan.0041.desc.has_cook + } + desc = ep3_laamp_flavour_ewan.0041.desc.nameless_cook + } + first_valid = { + triggered_desc = { + trigger = { scope:terrain_type = flag:plains } + desc = ep3_laamp_flavour_ewan.0041.desc.plains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:farmlands } + desc = ep3_laamp_flavour_ewan.0041.desc.farmlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:hills } + desc = ep3_laamp_flavour_ewan.0041.desc.hills + } + triggered_desc = { + trigger = { scope:terrain_type = flag:mountains } + desc = ep3_laamp_flavour_ewan.0041.desc.mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert } + desc = ep3_laamp_flavour_ewan.0041.desc.desert + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert_mountains } + desc = ep3_laamp_flavour_ewan.0041.desc.desert_mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:oasis } + desc = ep3_laamp_flavour_ewan.0041.desc.oasis + } + triggered_desc = { + trigger = { scope:terrain_type = flag:jungle } + desc = ep3_laamp_flavour_ewan.0041.desc.jungle + } + triggered_desc = { + trigger = { scope:terrain_type = flag:forest } + desc = ep3_laamp_flavour_ewan.0041.desc.forest + } + triggered_desc = { + trigger = { scope:terrain_type = flag:taiga } + desc = ep3_laamp_flavour_ewan.0041.desc.taiga + } + triggered_desc = { + trigger = { scope:terrain_type = flag:wetlands } + desc = ep3_laamp_flavour_ewan.0041.desc.wetlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:steppe } + desc = ep3_laamp_flavour_ewan.0041.desc.steppe + } + triggered_desc = { + trigger = { scope:terrain_type = flag:floodplains } + desc = ep3_laamp_flavour_ewan.0041.desc.floodplains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:drylands } + desc = ep3_laamp_flavour_ewan.0041.desc.drylands + } + } + desc = ep3_laamp_flavour_ewan.0041.desc.outro + first_valid = { + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } + desc = ep3_laamp_flavour_ewan.0041.desc.provisions.high + } + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } + desc = ep3_laamp_flavour_ewan.0041.desc.provisions.medium + } + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } + desc = ep3_laamp_flavour_ewan.0041.desc.provisions.low + } + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } + desc = ep3_laamp_flavour_ewan.0041.desc.provisions.sahara + } + } + } + theme = laamp + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:camp_cook + animation = anger + } + override_background = { reference = corridor_day } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0041 } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0041 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0041 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab our terrain. + ep3_laamp_flavour_ewan_register_terrain_effect = yes + # If we've got a camp cook, nab them. + court_position:camp_cook_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + save_scope_as = camp_cook + } + } + } + + # High prov: what're you even complaining about? + option = { + name = ep3_laamp_flavour_ewan.0041.a + trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } + + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = piqued_opinion + opinion = -25 + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0041_well_provided_camp_modifier + years = 10 + } + + stress_impact = { + temperate = minor_stress_impact_loss + gluttonous = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # High prov: fine, we can restock. + option = { + name = ep3_laamp_flavour_ewan.0041.b + trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } + + duel = { + skill = stewardship + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.b.tt.success + left_icon = scope:camp_cook + remove_short_term_gold = minor_gold_laamps_value + domicile = { change_provisions = medium_provisions_gain } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.b.tt.failure + left_icon = scope:camp_cook + remove_short_term_gold = minor_gold_laamps_value + domicile = { change_provisions = miniscule_provisions_gain } + } + } + } + if = { + limit = { exists = scope:camp_cook } + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } + } + + stress_impact = { + gluttonous = minor_stress_impact_loss + temperate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + modifier = { + factor = 0 + gold <= major_gold_laamps_value + } + } + } + + # High prov: absolutely not, work with what you've got. + option = { + name = ep3_laamp_flavour_ewan.0041.c + trigger = { ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes } + + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = frustrated_opinion + opinion = -40 + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0041_stern_camp_modifier + years = 10 + } + + stress_impact = { + temperate = minor_stress_impact_loss + gluttonous = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = -1 } + } + } + + # mess_tent_cooks: I'm sure you can come up with something between you. + option = { + name = ep3_laamp_flavour_ewan.0041.d + trigger = { + ep3_laamp_flavour_ewan_0041_access_high_provision_options_trigger = yes + domicile = { has_domicile_building = mess_tent_cooks } + } + reason = has_building_mess_tent_cooks + + if = { + limit = { exists = scope:camp_cook } + reverse_add_opinion = { + target = scope:camp_cook + modifier = flattered_opinion + opinion = 30 + } + } + add_prestige = medium_prestige_gain + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Med prov: we can probably find something. + option = { + name = ep3_laamp_flavour_ewan.0041.e + trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } + + duel = { + skill = learning + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.e.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.e.tt.success + left_icon = scope:camp_cook + domicile = { change_provisions = medium_provisions_gain } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.e.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.e.tt.failure + left_icon = scope:camp_cook + domicile = { change_provisions = miniscule_provisions_gain } + } + } + } + + stress_impact = { + gluttonous = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Med prov: restocking would be a good idea anyway, let's make some deals. + option = { + name = ep3_laamp_flavour_ewan.0041.f + trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } + + duel = { + skill = stewardship + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.f.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.f.tt.success + left_icon = scope:camp_cook + remove_short_term_gold = medium_gold_laamps_value + domicile = { change_provisions = major_provisions_gain } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.f.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.f.tt.failure + left_icon = scope:camp_cook + remove_short_term_gold = medium_gold_laamps_value + domicile = { change_provisions = medium_provisions_gain } + } + } + } + if = { + limit = { exists = scope:camp_cook } + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + modifier = { + factor = 0 + gold <= massive_gold_laamps_value + } + } + } + + # Med prov: it's not in the budget. + option = { + name = ep3_laamp_flavour_ewan.0041.g + trigger = { ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes } + + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = frustrated_opinion + opinion = -40 + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0041_quite_stern_camp_modifier + years = 10 + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + generous = minor_stress_impact_gain + gluttonous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + } + } + + # mess_tent_brewers: just double the beer rations and call it a day. + option = { + name = ep3_laamp_flavour_ewan.0041.h + trigger = { + ep3_laamp_flavour_ewan_0041_access_medium_provision_options_trigger = yes + domicile = { has_domicile_building = mess_tent_brewers } + } + reason = has_building_mess_tent_brewers + + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = piqued_opinion + opinion = -20 + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0041_doubled_beer_rations_camp_modifier + years = 10 + } + + stress_impact = { + gluttonous = minor_stress_impact_loss + gregarious = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Low prov: we can stop to forage. + option = { + name = ep3_laamp_flavour_ewan.0041.i + trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } + + current_travel_plan = { + delay_travel_plan = { months = 1 } + } + duel = { + skill = learning + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.i.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.i.tt.success + left_icon = scope:camp_cook + domicile = { change_provisions = major_provisions_gain } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.i.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.i.tt.failure + left_icon = scope:camp_cook + domicile = { change_provisions = medium_provisions_gain } + } + } + } + + # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Low prov: we'll buy what extra provisions we can... + option = { + name = ep3_laamp_flavour_ewan.0041.j + trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } + + duel = { + skill = stewardship + value = extremely_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.j.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.j.tt.success + left_icon = scope:camp_cook + remove_short_term_gold = medium_gold_laamps_value + domicile = { change_provisions = major_provisions_gain } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.0041.j.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.0041.j.tt.failure + left_icon = scope:camp_cook + remove_short_term_gold = medium_gold_laamps_value + domicile = { change_provisions = medium_provisions_gain } + } + } + } + if = { + limit = { exists = scope:camp_cook } + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + add_favour_hook_if_possible_simple_effect = { TARGET = scope:camp_cook } + } + + # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + modifier = { + factor = 0 + gold <= massive_gold_laamps_value + } + } + } + + # Low prov: we _have_ to push on. + option = { + name = ep3_laamp_flavour_ewan.0041.k + trigger = { ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes } + + scope:camp_cook ?= { + add_opinion = { + target = root + modifier = frustrated_opinion + opinion = -40 + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0041_very_stern_camp_modifier + years = 10 + } + + # No stress — regardless of your opinions on food, you're at a stage where you recognise what's necessary. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # supply_tent_reserve_provisions: hmm, we might have _something_ reserved. + option = { + name = ep3_laamp_flavour_ewan.0041.l + trigger = { + ep3_laamp_flavour_ewan_0041_access_low_provision_options_trigger = yes + domicile = { has_domicile_building = supply_tent_reserve_provisions } + } + reason = has_building_supply_tent_reserve_provisions + + if = { + limit = { exists = scope:camp_cook } + reverse_add_opinion = { + target = scope:camp_cook + modifier = grateful_opinion + opinion = 20 + } + } + add_prestige = medium_prestige_gain + + stress_impact = { gluttonous = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = -1 } + } + } + + # Sahara: do you _see_ anywhere to buy provisions you idiot? + option = { + name = ep3_laamp_flavour_ewan.0041.m + trigger = { ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes } + + if = { + limit = { exists = scope:camp_cook } + reverse_add_opinion = { + target = scope:camp_cook + modifier = frustrated_opinion + opinion = -40 + } + } + else = { add_prestige = minor_prestige_loss } + + stress_impact = { + base = medium_stress_gain + temperate = minor_stress_impact_loss + gluttonous = medium_stress_impact_gain + } + ai_chance = { + # This'll generally be your only option, so we don't care about modifiers. + base = 1 + } + } + + # Sahara + supply_tent_reserve_water: I don't care if we're eating gruel till we're through this. + option = { + name = ep3_laamp_flavour_ewan.0041.n + trigger = { + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes + domicile = { has_domicile_building = supply_tent_reserve_water } + } + reason = has_building_supply_tent_reserve_water + + if = { + limit = { exists = scope:camp_cook } + reverse_add_opinion = { + target = scope:camp_cook + modifier = frustrated_opinion + opinion = -20 + } + } + add_prestige = medium_prestige_gain + + # No stress gain here — narratively appropriate but we don't want you to feel like you're punished for planning ahead. + ai_chance = { + # If you've got this, take it. + base = 1000 + } + } +} + +################################################## +# A Friendly Clamour +# by Ewan Cowhig Croft +# 0051 - 0060 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = { + provisions >= max_provisions +} + +scripted_effect ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = { + random_list = { + # Supply Tent + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = supply_tent_01 } + NOT = { exists = scope:supply_tent } + } + save_scope_value_as = { + name = supply_tent + value = yes + } + } + # Barber Tent + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = barber_tent_01 } + NOT = { exists = scope:barber_tent } + } + save_scope_value_as = { + name = barber_tent + value = yes + } + } + # Baggage Train + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = baggage_train_01 } + NOT = { exists = scope:baggage_train } + } + save_scope_value_as = { + name = baggage_train + value = yes + } + } + # Mess Tent + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = mess_tent_01 } + NOT = { exists = scope:mess_tent } + } + save_scope_value_as = { + name = mess_tent + value = yes + } + } + # Camp Fire + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = camp_fire_01 } + NOT = { exists = scope:camp_fire } + } + save_scope_value_as = { + name = camp_fire + value = yes + } + } + # Proving Grounds + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = proving_grounds_01 } + NOT = { exists = scope:proving_grounds } + } + save_scope_value_as = { + name = proving_grounds + value = yes + } + } + # Camp Perimeter + 100 = { + trigger = { + domicile = { has_domicile_building_or_higher = camp_perimeter_01 } + NOT = { exists = scope:camp_perimeter } + } + save_scope_value_as = { + name = camp_perimeter + value = yes + } + } + } +} + +# A pleasant evening buzz as the camp settles down. +ep3_laamp_flavour_ewan.0051 = { + type = character_event + title = ep3_laamp_flavour_ewan.0051.t + desc = { + desc = ep3_laamp_flavour_ewan.0051.desc.intro + # Purpose. + random_valid = { + triggered_desc = { + trigger = { has_realm_law = camp_purpose_wanderers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_wanderers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_wanderers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.wanderers.3 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_mercenaries } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_mercenaries } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_mercenaries } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.mercenaries.3 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_scholars } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_scholars } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_scholars } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.scholars.3 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_explorers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_explorers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_explorers } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.explorers.3 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_brigands } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_brigands } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_brigands } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.brigands.3 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_legitimists } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.1 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_legitimists } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.2 + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_legitimists } + desc = ep3_laamp_flavour_ewan.0051.desc.purpose.legitimists.3 + } + } + # Buildings. + random_valid = { + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = supply_tent_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = supply_tent_sutler } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_sutler + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = supply_tent_smithy } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_smithy + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = supply_tent_arsenal } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.supply_tent_arsenal + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = barber_tent_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = barber_tent_surgeons_tools } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_surgeons_tools + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = barber_tent_dentists_tools } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_dentists_tools + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = barber_tent_torturers_tools } + any_prisoner = { } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.barber_tent_torturers_tools + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = baggage_train_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_ample_steeds } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_ample_steeds + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_porters } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_porters + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_trackers } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_trackers + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_kennel } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_kennel + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_siege_engineers } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_siege_engineers + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_shrine } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_shrine + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_scribes } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_scribes + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_bartering_grounds } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_bartering_grounds + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_ransom_cages } + any_prisoner = { } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_ransom_cages + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_pleasure_tents } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.baggage_train_pleasure_tents + } + triggered_desc = { + trigger = { + domicile = { + has_domicile_building_or_higher = mess_tent_01 + ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_01 + } + triggered_desc = { + trigger = { + domicile = { + has_domicile_building = mess_tent_herbalists + ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_herbalists + } + triggered_desc = { + trigger = { + domicile = { + has_domicile_building = mess_tent_brewers + ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_brewers + } + triggered_desc = { + trigger = { + domicile = { + has_domicile_building = mess_tent_bakers + ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_bakers + } + triggered_desc = { + trigger = { + domicile = { + has_domicile_building = mess_tent_cooks + ep3_laamp_flavour_ewan_0051_camp_has_food_to_burn_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.mess_tent_cooks + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = camp_fire_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_fire_trailing_musicians } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_trailing_musicians + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_fire_wandering_poets } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_wandering_poets + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_fire_capering_fools } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_capering_fools + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_fire_local_hangers_on } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_local_hangers_on + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_fire_juicy_rumors } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_fire_juicy_rumors + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = proving_grounds_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_horse_run } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_horse_run + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_camel_run } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_camel_run + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_elephantry_reserve } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_elephantry_reserve + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_nightly_barding_drills } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_nightly_barding_drills + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_the_stump } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_the_stump + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_personal_bouts } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_personal_bouts + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_training_circle } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_training_circle + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_mock_battle_drills } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_mock_battle_drills + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_the_stick_game } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_the_stick_game + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = proving_grounds_bodyguard_drills } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.proving_grounds_bodyguard_drills + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building_or_higher = camp_perimeter_01 } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_01 + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_perimeter_fixed_layout } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_fixed_layout + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_perimeter_palisade } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_palisade + } + triggered_desc = { + trigger = { + domicile = { has_domicile_building = camp_perimeter_ditch } + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.camp_perimeter_ditch + } + desc = ep3_laamp_flavour_ewan.0051.desc.buildings.fallback + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.connector + # Courtiers. + random_valid = { + # Their relations. + triggered_desc = { + trigger = { + OR = { + exists = scope:courtier_friend_1 + exists = scope:courtier_best_friend_1 + exists = scope:courtier_rival_1 + exists = scope:courtier_nemesis_1 + exists = scope:courtier_lover_1 + exists = scope:courtier_soulmate_1 + } + } + desc = { + random_valid = { + triggered_desc = { + trigger = { exists = scope:courtier_friend_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.friends + } + triggered_desc = { + trigger = { exists = scope:courtier_best_friend_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.best_friends + } + triggered_desc = { + trigger = { exists = scope:courtier_rival_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.rivals + } + triggered_desc = { + trigger = { exists = scope:courtier_nemesis_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.nemeses + } + triggered_desc = { + trigger = { exists = scope:courtier_lover_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.lovers + } + triggered_desc = { + trigger = { exists = scope:courtier_soulmate_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_relations.soulmates + } + } + } + } + # How many you have of different kinds. + triggered_desc = { + trigger = { + OR = { + exists = scope:leading_child + exists = scope:leading_knight + exists = scope:culture_1 + exists = scope:faith_1 + } + } + desc = { + random_valid = { + triggered_desc = { + trigger = { exists = scope:leading_child } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_children + } + triggered_desc = { + trigger = { exists = scope:leading_knight } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_knights + } + triggered_desc = { + trigger = { exists = scope:culture_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_languages + } + triggered_desc = { + trigger = { exists = scope:faith_1 } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.courtier_count.many_faiths + } + } + } + } + # Notable characters. + triggered_desc = { + trigger = { exists = scope:notable_char } + desc = { + random_valid = { + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = lustful } + # Rule this out if it might be narratively upsetting, as we don't want to deal with that headache. + OR = { + NOR = { + is_consort_of = root + has_relation_lover = root + } + accepts_adultery_without_penalty_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.lustful + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = gluttonous } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.gluttonous + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = temperate } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.temperate + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = greedy } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.greedy + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = generous } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.generous + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = lazy } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.lazy + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = diligent } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.diligent + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = wrathful } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.wrathful + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = calm } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.calm + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = patient } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.patient + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = impatient } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.impatient + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = arrogant } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.arrogant + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = humble } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.humble + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = deceitful } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.deceitful + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = honest } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.honest + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = gregarious } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.gregarious + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = arbitrary } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.arbitrary + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = just } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.just + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = cynical } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.cynical + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = zealous } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.zealous + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = paranoid } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.paranoid + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = trusting } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.trusting + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = compassionate } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.compassionate + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = callous } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.callous + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = sadistic } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.sadistic + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = stubborn } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.stubborn + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = fickle } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.fickle + } + triggered_desc = { + trigger = { + scope:notable_char = { has_trait = vengeful } + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.vengeful + } + desc = ep3_laamp_flavour_ewan.0051.desc.followers.notable_char.fallback + } + } + } + # Fallbacks. + ## Wrap these up so that their weighting doesn't get all weird. + desc = { + random_valid = { + desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.1 + desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.2 + desc = ep3_laamp_flavour_ewan.0051.desc.followers.fallback.3 + } + } + } + desc = ep3_laamp_flavour_ewan.0051.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = happiness + } + override_background = { reference = corridor_night } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0051 } + } + # Make sure that we've got at least one mainline building built outside of our pavillion, so that our options aren't totally boring. + domicile = { + OR = { + has_domicile_building_or_higher = supply_tent_01 + has_domicile_building_or_higher = barber_tent_01 + has_domicile_building_or_higher = baggage_train_01 + has_domicile_building_or_higher = mess_tent_01 + has_domicile_building_or_higher = camp_fire_01 + has_domicile_building_or_higher = proving_grounds_01 + has_domicile_building_or_higher = camp_perimeter_01 + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0051 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0051 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Roll which camp options we want to show. + ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes + ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes + ep3_laamp_flavour_ewan_0051_roll_camp_visit_locations_effect = yes + # If we're a player, grab our courtier desc. + ## Camp relations. + ### Friends. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = friend + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_best_friend = prev } + } + } + save_scope_as = courtier_friend_1 + random_relation = { + type = friend + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_best_friend = prev } + } + save_scope_as = courtier_friend_2 + } + } + ### Best friends. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = best_friend + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + } + } + save_scope_as = courtier_best_friend_1 + random_relation = { + type = best_friend + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + save_scope_as = courtier_best_friend_2 + } + } + ### Rivals. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = rival + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_nemesis = prev } + } + } + save_scope_as = courtier_rival_1 + random_relation = { + type = rival + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_nemesis = prev } + } + save_scope_as = courtier_rival_2 + } + } + ### Nemeses. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = nemesis + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + } + } + save_scope_as = courtier_nemesis_1 + random_relation = { + type = nemesis + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + save_scope_as = courtier_nemesis_2 + } + } + ### Lovers. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = lover + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_soulmate = prev } + } + } + save_scope_as = courtier_lover_1 + random_relation = { + type = lover + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_relation_soulmate = prev } + } + save_scope_as = courtier_lover_2 + } + } + ### Soulmates. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + any_relation = { + type = soulmate + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + } + } + save_scope_as = courtier_soulmate_1 + random_relation = { + type = soulmate + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + save_scope_as = courtier_soulmate_2 + } + } + ## Follower states. + ### Lots of children. + if = { + limit = { + any_courtier = { + count >= 8 + ep3_laamp_flavour_ewan_available_child_trigger = yes + } + } + # Nab a suitable child to be leading play. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + order_by = { + value = age + if = { + limit = { has_trait = rowdy } + add = 3 + } + if = { + limit = { has_trait = charming } + add = 2 + } + if = { + limit = { has_trait = pensive } + add = -5 + } + if = { + limit = { has_trait = bossy } + add = 5 + } + } + save_scope_as = leading_child + } + } + ### Lots of knights. + if = { + limit = { + any_knight = { + count >= 10 + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + } + } + ordered_knight = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + order_by = prowess + save_scope_as = leading_knight + } + } + ### Lots of different languages being spoken. + #### First, assemble our list. + culture = { add_to_list = cultures_with_unique_languages_list } + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } + culture = { + save_scope_as = culture_temp + if = { + limit = { + NOT = { + any_in_list = { + list = cultures_with_unique_languages_list + has_same_culture_language = scope:culture_temp + } + } + } + add_to_list = cultures_with_unique_languages_list + } + } + } + #### Then, check how long it is. + if = { + limit = { "list_size(cultures_with_unique_languages_list)" >= 8 } + random_in_list = { + list = cultures_with_unique_languages_list + limit = { + this != root.culture + } + save_scope_as = culture_1 + } + random_in_list = { + list = cultures_with_unique_languages_list + limit = { + NOR = { + this = root.culture + this = scope:culture_1 + } + } + save_scope_as = culture_2 + } + random_in_list = { + list = cultures_with_unique_languages_list + limit = { + NOR = { + this = root.culture + this = scope:culture_1 + this = scope:culture_2 + } + } + save_scope_as = culture_3 + } + } + ### Lots of different faiths around. + #### First, assemble our list. + faith = { add_to_list = unique_faiths_list } + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } + faith = { add_to_list = unique_faiths_list } + } + #### Then, check how long it is. + if = { + limit = { "list_size(unique_faiths_list)" >= 5 } + random_in_list = { + list = unique_faiths_list + limit = { + this != root.faith + } + save_scope_as = faith_1 + } + random_in_list = { + list = unique_faiths_list + limit = { + NOR = { + this = root.faith + this = scope:faith_1 + } + } + save_scope_as = faith_2 + } + random_in_list = { + list = unique_faiths_list + limit = { + NOR = { + this = root.faith + this = scope:faith_1 + this = scope:faith_2 + } + } + save_scope_as = faith_3 + } + } + ## Notable character traits. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + OR = { + is_close_family_of = root + is_consort_of = root + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + has_any_court_position = yes + } + } + save_scope_as = notable_char + } + } + + # camp_main_01: retire to my own tent. + option = { + name = ep3_laamp_flavour_ewan.0051.a + + # Consolation prestige. + add_prestige = minor_prestige_gain + + stress_impact = { + base = medium_stress_loss + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } + + # supply_tent_01: visit the supply tent, check the stores. + option = { + name = ep3_laamp_flavour_ewan.0051.b + trigger = { exists = scope:supply_tent } + reason = has_building_supply_tent_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_supply_tent_modifier + years = 10 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + } + } + + # barber_tent_01: go for a check-up and a shave/trim at the barbers + option = { + name = { + text = { + first_valid = { + # Bald woman. + triggered_desc = { + trigger = { + is_female = yes + is_bald_trigger = yes + } + desc = ep3_laamp_flavour_ewan.0051.c.bald.female + } + # Bald man. + triggered_desc = { + trigger = { + is_male = yes + is_bald_trigger = yes + } + desc = ep3_laamp_flavour_ewan.0051.c.bald.male + } + # Non-bald man. + triggered_desc = { + trigger = { is_male = yes } + desc = ep3_laamp_flavour_ewan.0051.c.hairy.male + } + # Non-bald woman. + desc = ep3_laamp_flavour_ewan.0051.c.fallback + } + } + } + trigger = { exists = scope:barber_tent } + reason = has_building_barber_tent_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_barber_tent_modifier + years = 10 + } + + stress_impact = { arrogant = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # baggage_train_01: organise the chaos of the baggage train. + option = { + name = ep3_laamp_flavour_ewan.0051.d + trigger = { exists = scope:baggage_train } + reason = has_building_baggage_train_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_baggage_train_modifier + years = 10 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # mess_tent_01: get some grub before a line forms. + option = { + name = ep3_laamp_flavour_ewan.0051.e + trigger = { exists = scope:mess_tent } + reason = has_building_mess_tent_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_mess_tent_modifier + years = 10 + } + + stress_impact = { + gluttonous = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + # Anyone who's ever worked in a field knows that this is the only logical thing to do AQAP. + ai_value_modifier = { ai_rationality = 5 } + } + } + + # camp_fire_01: nab a good seat at the fire. + option = { + name = ep3_laamp_flavour_ewan.0051.f + trigger = { exists = scope:camp_fire } + reason = has_building_camp_fire_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_camp_fire_modifier + years = 10 + } + + stress_impact = { + lazy = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + # Don't bully the shies here, they can enjoy a nice fire too. + diligent = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = -0.5 + } + } + } + + # proving_grounds_01: check the soldiery are being diligent. + option = { + name = ep3_laamp_flavour_ewan.0051.g + trigger = { exists = scope:proving_grounds } + reason = has_building_proving_grounds_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_proving_grounds_modifier + years = 10 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # camp_perimeter_01: walk the perimeter, check we're being vigilant. + option = { + name = ep3_laamp_flavour_ewan.0051.h + trigger = { exists = scope:camp_perimeter } + reason = has_building_camp_perimeter_01_or_higher + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_0051_check_building_camp_perimeter_modifier + years = 10 + } + + stress_impact = { + paranoid = miniscule_stress_impact_loss + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } +} + +################################################## +# An Unexpected Faire +# by Ewan Cowhig Croft +# 0061 - 0070 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0061_sahara_trigger = { + geographical_region = custom_sahara_proper + # If we're in an oasis, we should act like it. + NOT = { terrain = oasis } +} + +scripted_trigger ep3_laamp_flavour_ewan_0061_steppe_trigger = { + geographical_region = world_steppe + # We only lack cities on the steppe _proper_. + terrain = steppe +} + +# Locals react with impromptu faire. +ep3_laamp_flavour_ewan.0061 = { + type = character_event + title = ep3_laamp_flavour_ewan.0061.t + desc = ep3_laamp_flavour_ewan.0061.desc + theme = laamp + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:local_merchant + animation = admiration + } + override_background = { reference = market_scope } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0061 } + } + # No one likes brigands. + NOT = { has_realm_law = camp_purpose_brigands } + # Make sure the location is suitable for there to be a fair. + location = { + # Gotta have somewhere hosting us. + has_holding = yes + # And some infrastructure. + county = { + # We should have some level of urbanisation. + development_level >= 20 + # And be fully secure. + county_control >= 100 + } + # Plus no plagues. + any_province_epidemic = { count <= 0 } + # Finally, no major regional blockers. + ep3_laamp_flavour_ewan_0061_sahara_trigger = no + ep3_laamp_flavour_ewan_0061_steppe_trigger = no + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0061 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0061 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Everyone's a little happier whatever we do. + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_anybody_trigger = yes } + custom = ep3_laamp_flavour_ewan.0061.tt.everyone_loves_faires + add_opinion = { + target = root + modifier = spirits_lifted_opinion + opinion = 20 + } + add_stress = massive_stress_loss + } + # Generate our local dude. + create_character = { + template = merchant_template + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = local_merchant + } + ## Plus give 'em a nickname. + hidden_effect = { + scope:local_merchant = { assign_random_nickname_effect = yes } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + # And our location for our background. + location = { save_scope_as = background_market_scope } + } + + # What a welcome surprise! + option = { + name = ep3_laamp_flavour_ewan.0061.a + + add_prestige = medium_prestige_gain + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Enroll a talented local. + option = { + name = ep3_laamp_flavour_ewan.0061.b + + add_courtier = scope:local_merchant + reverse_add_opinion = { + target = scope:local_merchant + modifier = grateful_opinion + opinion = 80 + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # Pick up some provisions. + option = { + name = ep3_laamp_flavour_ewan.0061.c + + remove_short_term_gold = minor_gold_laamps_value + domicile = { change_provisions = medium_provisions_gain } + + stress_impact = { + gluttonous = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + modifier = { + factor = 0 + gold <= medium_gold_laamps_value + } + } + } + + # Stay at camp. + option = { + name = ep3_laamp_flavour_ewan.0061.d + + # Mostly just stress loss. + stress_impact = { + base = medium_stress_loss + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } + + after = { + # Clean up our local if we're not a player. + if = { + limit = { + is_ai = yes + this != scope:local_merchant.liege + } + scope:local_merchant = { + death = { death_reason = death_vanished } + } + } + } +} + +################################################## +# Pounding Hooves +# by Ewan Cowhig Croft +# 0071 - 0080 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + drinks_alcohol_trigger = yes + NOR = { + has_trait = temperate + has_trait = shy + } +} + +# Riding with a hangover-stricken friend. +ep3_laamp_flavour_ewan.0071 = { + type = character_event + title = ep3_laamp_flavour_ewan.0071.t + desc = ep3_laamp_flavour_ewan.0071.desc + theme = laamp + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:hanger + animation = stress + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_0071 } + } + # And we've got a suitable follower. + any_courtier = { ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_0071 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_0071 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Try to nab our most party-prone follower. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_0071_drinking_follower_trigger = yes } + order_by = { + value = diplomacy + if = { + limit = { has_trait = drunkard } + add = 50 + } + if = { + limit = { has_trait = gluttonous } + add = 20 + } + if = { + limit = { has_trait = gregarious } + add = 10 + } + } + save_scope_as = hanger + add_character_modifier = { + modifier = legend_hangover_modifier + months = 3 + } + } + } + + # Slow down for herhim. + option = { + name = ep3_laamp_flavour_ewan.0071.a + + reverse_add_opinion = { + target = scope:hanger + modifier = grateful_opinion + opinion = 30 + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 2 } + } + } + + # Laugh at herhis predicament. + option = { + name = ep3_laamp_flavour_ewan.0071.b + + reverse_add_opinion = { + target = scope:hanger + modifier = annoyed_opinion + opinion = -15 + } + + # Plus stress loss. + stress_impact = { + base = medium_stress_loss + sadistic = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + # Kick herhis horse into gear. + option = { + name = ep3_laamp_flavour_ewan.0071.c + + reverse_add_opinion = { + target = scope:hanger + modifier = angry_opinion + opinion = -30 + } + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + this != scope:hanger + } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = proper_jokes_opinion + opinion = 20 + } + } + + stress_impact = { + sadistic = major_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_compassion = -0.5 + ai_vengefulness = -0.5 + } + } + } + + # Speed up and leave herhim to his misery. + option = { + name = ep3_laamp_flavour_ewan.0071.d + + reverse_add_opinion = { + target = scope:hanger + modifier = hurt_opinion + opinion = -10 + } + + stress_impact = { + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } +} + + + + + + + + + + + + +################################################## +# CHILDREARING + +################################################## +# Friends in Low Places +# by Ewan Cowhig Croft +# 1001 - 1010 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = { + age >= scope:lower_age_bound_temp + age <= scope:upper_age_bound_temp + ep3_laamp_flavour_ewan_available_child_trigger = yes + OR = { + is_lowborn = yes + dynasty.dynasty_prestige_level < @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level + } + NOR = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + num_of_relation_friend <= 1 + # Your child must also be suitably posh (since bastards'n'diff-house children exist). + dynasty ?= { dynasty_prestige_level >= @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level } + save_temporary_scope_as = char_temp + save_temporary_scope_value_as = { + name = lower_age_bound_temp + value = { + add = age + add = -3 + } + } + save_temporary_scope_value_as = { + name = upper_age_bound_temp + value = { + add = age + add = 3 + } + } + root = { + any_courtier = { ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = yes } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = { + liege = root + OR = { + has_any_court_position = yes + has_important_relationship_with_character_trigger = { CHARACTER = root } + } +} + +# Highborn befriends a lowborn. +ep3_laamp_flavour_ewan.1001 = { + type = character_event + title = ep3_laamp_flavour_ewan.1001.t + desc = ep3_laamp_flavour_ewan.1001.desc + theme = laamp + left_portrait = { + character = scope:own_child + animation = admiration + } + right_portrait = { + character = scope:other_child + animation = happiness + } + override_background = { reference = corridor_day } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1001 } + } + # You've gotta be suitably posh. + dynasty ?= { dynasty_prestige_level >= @ep3_laamp_flavour_ewan_1001_dynasty_prestige_level } + # You have at least one valid child. + ## This includes checking for a partner child. + any_child = { ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1001 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1001 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab a random child of ours who fits the criteria. + random_child = { + limit = { ep3_laamp_flavour_ewan_1001_valid_own_child_trigger = yes } + save_scope_as = own_child + } + # Ok, now let's sort a partner child. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_1001_valid_other_child_trigger = yes } + order_by = { + value = diplomacy + # Boost lowborns. + if = { + limit = { is_lowborn = yes } + add = 1000 + } + # And anyone who isn't the spawn of someone important. + if = { + limit = { + NOR = { + mother ?= { ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = yes } + father ?= { ep3_laamp_flavour_ewan_1001_parent_is_important_at_camp_trigger = yes } + } + } + add = 100 + } + } + save_scope_as = other_child + } + } + + # Run along then, you two. + option = { + name = ep3_laamp_flavour_ewan.1001.a + + random_list = { + 50 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1001.set_friendship + left_icon = scope:own_child + right_icon = scope:other_child + scope:own_child = { + set_relation_friend = { + reason = friend_children_grew_up_in_same_camp + target = scope:other_child + } + add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + reverse_add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + } + } + } + 50 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1001.set_hidden_potential_friendship + left_icon = scope:own_child + right_icon = scope:other_child + scope:own_child = { + add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 25 + } + reverse_add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 25 + } + hidden_effect = { set_relation_potential_friend = scope:other_child } + } + } + } + } + + stress_impact = { + humble = miniscule_stress_impact_loss + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # I think you've made a friend for life there, my DaughterSon. + option = { + name = ep3_laamp_flavour_ewan.1001.b + trigger = { + scope:own_child = { num_of_relation_best_friend <= 0 } + } + + random_list = { + 70 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1001.set_best_friendship + left_icon = scope:own_child + right_icon = scope:other_child + scope:own_child = { + set_relation_best_friend = { + reason = friend_children_grew_up_in_same_camp + target = scope:other_child + } + add_mutual_gendered_blood_sibling_hook_effect = { TARGET = scope:other_child } + } + } + scope:own_child = { + add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + reverse_add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + } + } + 20 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1001.set_friendship + left_icon = scope:own_child + right_icon = scope:other_child + scope:own_child = { + set_relation_friend = { + reason = friend_children_grew_up_in_same_camp + target = scope:other_child + } + add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + reverse_add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 50 + } + } + } + } + 10 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1001.friendship_fizzles + left_icon = scope:own_child + right_icon = scope:other_child + scope:own_child = { + add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 10 + } + reverse_add_opinion = { + target = scope:other_child + modifier = friendliness_opinion + opinion = 10 + } + } + } + } + } + + stress_impact = { + humble = miniscule_stress_impact_loss + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Child.GetFirstName, GetSheHe's beneath you. + option = { + name = ep3_laamp_flavour_ewan.1001.c + + scope:own_child = { + add_opinion = { + target = scope:other_child + modifier = estranged_opinion + opinion = -25 + } + reverse_add_opinion = { + target = scope:other_child + modifier = hurt_opinion + opinion = -50 + } + hidden_effect = { set_relation_potential_rival = scope:other_child } + } + hidden_effect = { + # Scope:other_child will remember this. + reverse_add_opinion = { + target = scope:other_child + modifier = respect_opinion + opinion = -50 + } + } + + stress_impact = { + arrogant = medium_stress_impact_loss + humble = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } +} + +################################################## +# Learning from Example +# by Ewan Cowhig Croft +# 1011 - 1020 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + # This'll give us a range of 1:2:3 for 1-2:3-4:5 aptitudes. + $OFFICER_CHAR$ = { + save_scope_value_as = { + name = aptitude_gain + value = { + if = { + limit = { has_court_position = second_camp_officer } + add = "aptitude(second_camp_officer)" + } + else_if = { + limit = { has_court_position = quartermaster_camp_officer } + add = "aptitude(quartermaster_camp_officer)" + } + else_if = { + limit = { has_court_position = armorer_camp_officer } + add = "aptitude(armorer_camp_officer)" + } + else_if = { + limit = { has_court_position = chief_forager_camp_officer } + add = "aptitude(chief_forager_camp_officer)" + } + else_if = { + limit = { has_court_position = master_thief_camp_officer } + add = "aptitude(master_thief_camp_officer)" + } + else_if = { + limit = { has_court_position = head_porter_camp_officer } + add = "aptitude(head_porter_camp_officer)" + } + else_if = { + limit = { has_court_position = head_groom_camp_officer } + add = "aptitude(head_groom_camp_officer)" + } + else_if = { + limit = { has_court_position = huntperson_camp_officer } + add = "aptitude(huntperson_camp_officer)" + } + else_if = { + limit = { has_court_position = kennelperson_camp_officer } + add = "aptitude(kennelperson_camp_officer)" + } + else_if = { + limit = { has_court_position = chief_engineer_camp_officer } + add = "aptitude(chief_engineer_camp_officer)" + } + else_if = { + limit = { has_court_position = witness_camp_officer } + add = "aptitude(witness_camp_officer)" + } + else_if = { + limit = { has_court_position = person_haggler_camp_officer } + add = "aptitude(person_haggler_camp_officer)" + } + else_if = { + limit = { has_court_position = camp_cook_camp_officer } + add = "aptitude(camp_cook_camp_officer)" + } + else_if = { + limit = { has_court_position = master_bard_camp_officer } + add = "aptitude(master_bard_camp_officer)" + } + else_if = { + limit = { has_court_position = master_of_arms_camp_officer } + add = "aptitude(master_of_arms_camp_officer)" + } + multiply = 0.5 + ceiling = yes + min = 1 + } + } + } + # Log which skills we want to adjust. + save_scope_value_as = { + name = add_diplomacy + value = $DIPLOMACY$ + } + save_scope_value_as = { + name = add_martial + value = $MARTIAL$ + } + save_scope_value_as = { + name = add_stewardship + value = $STEWARDSHIP$ + } + save_scope_value_as = { + name = add_intrigue + value = $INTRIGUE$ + } + save_scope_value_as = { + name = add_learning + value = $LEARNING$ + } + save_scope_value_as = { + name = add_prowess + value = $PROWESS$ + } + # Finally, increment the appropriate skills. + scope:child = { + if = { + limit = { scope:add_diplomacy = yes } + add_diplomacy_skill = scope:aptitude_gain + } + if = { + limit = { scope:add_martial = yes } + add_martial_skill = scope:aptitude_gain + } + if = { + limit = { scope:add_stewardship = yes } + add_stewardship_skill = scope:aptitude_gain + } + if = { + limit = { scope:add_intrigue = yes } + add_intrigue_skill = scope:aptitude_gain + } + if = { + limit = { scope:add_learning = yes } + add_learning_skill = scope:aptitude_gain + } + if = { + limit = { scope:add_prowess = yes } + add_prowess_skill = scope:aptitude_gain + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { + court_position:$POSITION$_camp_officer ?= { + if = { + limit = { is_available_allow_travelling = yes } + save_scope_as = $POSITION$ + add_to_list = prospective_positions_list + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = { + add_opinion = { + target = scope:child + modifier = little_helper_opinion + opinion = 50 + } + reverse_add_opinion = { + target = scope:child + modifier = respect_opinion + opinion = 30 + } +} + +# Learning from officer. +ep3_laamp_flavour_ewan.1011 = { + type = character_event + title = ep3_laamp_flavour_ewan.1011.t + desc = ep3_laamp_flavour_ewan.1011.desc + theme = laamp + left_portrait = { + character = scope:child + animation = admiration + } + lower_left_portrait = scope:portrait_1 + lower_center_portrait = scope:portrait_2 + lower_right_portrait = scope:portrait_3 + override_background = { reference = army_camp } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1011 } + } + any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + OR = { + court_position:second_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:quartermaster_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:armorer_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:chief_forager_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:master_thief_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:head_porter_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:head_groom_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:huntperson_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:kennelperson_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:chief_engineer_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:witness_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:person_haggler_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:camp_cook_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:master_bard_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + court_position:master_of_arms_camp_officer ?= { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1011 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1011 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Pick a suitable child. + ordered_child = { + limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + order_by = age + save_scope_as = child + } + # Now process our available court positions. + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = second } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = quartermaster } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = armorer } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = chief_forager } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_thief } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = head_porter } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = head_groom } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = huntperson } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = kennelperson } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = chief_engineer } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = witness } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = person_haggler } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = camp_cook } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_bard } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_of_arms } + ep3_laamp_flavour_ewan_1011_nab_court_position_effect = { POSITION = master_of_spoils } + ## Ok, now that we've got them, go over the list and check who's best at their job. + ordered_in_list = { + list = prospective_positions_list + order_by = { + if = { + limit = { has_court_position = second_camp_officer } + add = "aptitude(second_camp_officer)" + } + else_if = { + limit = { has_court_position = quartermaster_camp_officer } + add = "aptitude(quartermaster_camp_officer)" + } + else_if = { + limit = { has_court_position = armorer_camp_officer } + add = "aptitude(armorer_camp_officer)" + } + else_if = { + limit = { has_court_position = chief_forager_camp_officer } + add = "aptitude(chief_forager_camp_officer)" + } + else_if = { + limit = { has_court_position = master_thief_camp_officer } + add = "aptitude(master_thief_camp_officer)" + } + else_if = { + limit = { has_court_position = head_porter_camp_officer } + add = "aptitude(head_porter_camp_officer)" + } + else_if = { + limit = { has_court_position = head_groom_camp_officer } + add = "aptitude(head_groom_camp_officer)" + } + else_if = { + limit = { has_court_position = huntperson_camp_officer } + add = "aptitude(huntperson_camp_officer)" + } + else_if = { + limit = { has_court_position = kennelperson_camp_officer } + add = "aptitude(kennelperson_camp_officer)" + } + else_if = { + limit = { has_court_position = chief_engineer_camp_officer } + add = "aptitude(chief_engineer_camp_officer)" + } + else_if = { + limit = { has_court_position = witness_camp_officer } + add = "aptitude(witness_camp_officer)" + } + else_if = { + limit = { has_court_position = person_haggler_camp_officer } + add = "aptitude(person_haggler_camp_officer)" + } + else_if = { + limit = { has_court_position = camp_cook_camp_officer } + add = "aptitude(camp_cook_camp_officer)" + } + else_if = { + limit = { has_court_position = master_bard_camp_officer } + add = "aptitude(master_bard_camp_officer)" + } + else_if = { + limit = { has_court_position = master_of_arms_camp_officer } + add = "aptitude(master_of_arms_camp_officer)" + } + else_if = { + limit = { has_court_position = master_of_spoils_camp_officer } + add = "aptitude(master_of_spoils_camp_officer)" + } + } + max = 3 + check_range_bounds = no + if = { + limit = { + NOT = { is_in_list = best_positions_list } + } + add_to_list = best_positions_list + } + } + # Plus sort our portraits. + random_in_list = { + list = best_positions_list + save_scope_as = portrait_1 + } + random_in_list = { + list = best_positions_list + limit = { + this != scope:portrait_1 + } + save_scope_as = portrait_2 + } + random_in_list = { + list = best_positions_list + limit = { + NOR = { + this = scope:portrait_1 + this = scope:portrait_2 + } + } + save_scope_as = portrait_3 + } + } + + # second: picks up diplo + a little of everything. + option = { + name = ep3_laamp_flavour_ewan.1011.a + trigger = { + scope:second ?= { is_in_list = best_positions_list } + } + reason = have_second + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:second + DIPLOMACY = yes + MARTIAL = yes + STEWARDSHIP = no + INTRIGUE = no + LEARNING = no + PROWESS = no + } + scope:second = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # quartermaster: picks up stewardship. + option = { + name = ep3_laamp_flavour_ewan.1011.b + trigger = { + scope:quartermaster ?= { is_in_list = best_positions_list } + } + reason = have_quartermaster + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:quartermaster + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = yes + INTRIGUE = no + LEARNING = no + PROWESS = no + } + scope:quartermaster = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # armorer: picks up stewardship & learning. + option = { + name = ep3_laamp_flavour_ewan.1011.c + trigger = { + scope:armorer ?= { is_in_list = best_positions_list } + } + reason = have_armorer + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:armorer + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = yes + INTRIGUE = no + LEARNING = yes + PROWESS = no + } + scope:armorer = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # chief_forager: picks up prowess & learning. + option = { + name = ep3_laamp_flavour_ewan.1011.d + trigger = { + scope:chief_forager ?= { is_in_list = best_positions_list } + } + reason = have_chief_forager + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:chief_forager + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = no + LEARNING = yes + PROWESS = yes + } + scope:chief_forager = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # master_thief: picks up intrigue & prowess. + option = { + name = ep3_laamp_flavour_ewan.1011.e + trigger = { + scope:master_thief ?= { is_in_list = best_positions_list } + } + reason = have_master_thief + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:master_thief + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = yes + LEARNING = no + PROWESS = yes + } + scope:master_thief = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # head_porter: picks up martial & stewardship. + option = { + name = ep3_laamp_flavour_ewan.1011.f + trigger = { + scope:head_porter ?= { is_in_list = best_positions_list } + } + reason = have_head_porter + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:head_porter + DIPLOMACY = no + MARTIAL = yes + STEWARDSHIP = yes + INTRIGUE = no + LEARNING = no + PROWESS = no + } + scope:head_porter = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # head_groom: picks up learning & stewardship. + option = { + name = ep3_laamp_flavour_ewan.1011.g + trigger = { + scope:head_groom ?= { is_in_list = best_positions_list } + } + reason = have_head_groom + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:head_groom + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = yes + INTRIGUE = no + LEARNING = yes + PROWESS = no + } + scope:head_groom = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # huntperson: picks up prowess & learning. + option = { + name = ep3_laamp_flavour_ewan.1011.h + trigger = { + scope:huntperson ?= { is_in_list = best_positions_list } + } + reason = have_huntperson + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:huntperson + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = no + LEARNING = yes + PROWESS = yes + } + scope:huntperson = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # kennelperson: picks up martial & prowess. + option = { + name = ep3_laamp_flavour_ewan.1011.i + trigger = { + scope:kennelperson ?= { is_in_list = best_positions_list } + } + reason = have_kennelperson + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:kennelperson + DIPLOMACY = no + MARTIAL = yes + STEWARDSHIP = no + INTRIGUE = no + LEARNING = no + PROWESS = yes + } + scope:kennelperson = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # chief_engineer: picks up learning & martial. + option = { + name = ep3_laamp_flavour_ewan.1011.j + trigger = { + scope:chief_engineer ?= { is_in_list = best_positions_list } + } + reason = have_chief_engineer + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:chief_engineer + DIPLOMACY = no + MARTIAL = yes + STEWARDSHIP = no + INTRIGUE = no + LEARNING = yes + PROWESS = no + } + scope:chief_engineer = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # witness: picks up diplomacy. + option = { + name = ep3_laamp_flavour_ewan.1011.k + trigger = { + scope:witness ?= { is_in_list = best_positions_list } + } + reason = have_witness + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:witness + DIPLOMACY = yes + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = no + LEARNING = no + PROWESS = no + } + scope:witness = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # person_haggler: picks up diplomacy, plus a little intrigue + stewardship. + option = { + name = ep3_laamp_flavour_ewan.1011.l + trigger = { + scope:person_haggler ?= { is_in_list = best_positions_list } + } + reason = have_person_haggler + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:person_haggler + DIPLOMACY = yes + MARTIAL = no + STEWARDSHIP = yes + INTRIGUE = yes + LEARNING = no + PROWESS = no + } + scope:person_haggler = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # camp_cook: picks up intrigue. + option = { + name = ep3_laamp_flavour_ewan.1011.m + trigger = { + scope:camp_cook ?= { is_in_list = best_positions_list } + } + reason = have_camp_cook + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:camp_cook + DIPLOMACY = no + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = yes + LEARNING = no + PROWESS = no + } + scope:camp_cook = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # master_bard: picks up diplomacy + learning. + option = { + name = ep3_laamp_flavour_ewan.1011.n + trigger = { + scope:master_bard ?= { is_in_list = best_positions_list } + } + reason = have_master_bard + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:master_bard + DIPLOMACY = yes + MARTIAL = no + STEWARDSHIP = no + INTRIGUE = no + LEARNING = yes + PROWESS = no + } + scope:master_bard = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # master_of_arms: picks up martial + prowess. + option = { + name = ep3_laamp_flavour_ewan.1011.o + trigger = { + scope:master_of_arms ?= { is_in_list = best_positions_list } + } + reason = have_master_of_arms + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:master_of_arms + DIPLOMACY = no + MARTIAL = yes + STEWARDSHIP = no + INTRIGUE = no + LEARNING = no + PROWESS = yes + } + scope:master_of_arms = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } + + # master_of_spoils: picks up martial + prowess. + option = { + name = ep3_laamp_flavour_ewan.1011.o + trigger = { + scope:master_of_spoils ?= { is_in_list = best_positions_list } + } + reason = have_master_of_spoils + + ep3_laamp_flavour_ewan_1011_random_skill_gain_effect = { + OFFICER_CHAR = scope:master_of_spoils + DIPLOMACY = no + MARTIAL = yes + STEWARDSHIP = yes + INTRIGUE = no + LEARNING = no + PROWESS = yes + } + scope:master_of_spoils = { ep3_laamp_flavour_ewan_1011_apply_little_helper_opinion_effect = yes } + + # No stress here. + ai_chance = { + # Pick an option at random, they're all good. + base = 1 + } + } +} + +################################################## +# Love at First Camp +# by Ewan Cowhig Croft +# 1021 - 1030 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1021_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + num_of_relation_crush <= 0 + NOR = { + has_sexuality = none + # Not that you can't have a crush as a young asexual, we're just not really equipped to deal well with that complexity here. + has_sexuality = asexual + } +} + +# Crush on a local girl/boy. +ep3_laamp_flavour_ewan.1021 = { + type = character_event + title = ep3_laamp_flavour_ewan.1021.t + desc = ep3_laamp_flavour_ewan.1021.desc + theme = laamp + left_portrait = { + character = scope:child + animation = flirtation_left + } + right_portrait = { + character = scope:crush_child + animation = admiration + } + lower_center_portrait = scope:crush_mother + lower_right_portrait = scope:crush_father + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1021 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Make sure we have suitable children. + any_child = { ep3_laamp_flavour_ewan_1021_valid_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1021 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1021 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longer + } + } + # Now let's grab a suitable child. + ordered_child = { + limit = { ep3_laamp_flavour_ewan_1021_valid_child_trigger = yes } + order_by = { + value = age + if = { + limit = { has_trait = lustful } + add = 10 + } + else_if = { + limit = { has_trait = chaste } + add = -10 + } + } + save_scope_as = child + # For determining crush gender. + save_scope_as = attraction_check + } + # And create a suitable local family. + ## Mother. + create_character = { + template = generic_peasant_character + age = 35 + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 100 + save_scope_as = crush_mother + after_creation = { + save_scope_value_as = { + name = crush_parents_age_diff + value = { + value = age + add = { + integer_range = { + min = -5 + max = 5 + } + } + } + } + } + } + ## Father. + create_character = { + template = generic_peasant_character + age = scope:crush_parents_age_diff + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 0 + save_scope_as = crush_father + } + ## Marry these two up — we can't be having children out of wedlock, after all. The very idea! + hidden_effect = { + scope:crush_mother = { + if = { + limit = { + faith = { has_doctrine = doctrine_gender_female_dominated } + } + marry_matrilineal = scope:crush_father + } + else = { marry = scope:crush_father } + } + } + ## Child. + create_character = { + location = root.location + age = { + value = scope:child.age + add = 1 + } + culture = root.location.culture + faith = root.location.faith + gender_female_chance = scope_attraction_based_female_chance + mother = scope:crush_mother + father = scope:crush_father + dynasty = none + # Try to duplicate scope:child's personality. + random_traits_list = { + count = 3 + lustful = { + trigger = { + scope:child = { has_trait = lustful } + } + } + chaste = { + trigger = { + scope:child = { has_trait = chaste } + } + } + gluttonous = { + trigger = { + scope:child = { has_trait = gluttonous } + } + } + temperate = { + trigger = { + scope:child = { has_trait = temperate } + } + } + greedy = { + trigger = { + scope:child = { has_trait = greedy } + } + } + generous = { + trigger = { + scope:child = { has_trait = generous } + } + } + lazy = { + trigger = { + scope:child = { has_trait = lazy } + } + } + diligent = { + trigger = { + scope:child = { has_trait = diligent } + } + } + wrathful = { + trigger = { + scope:child = { has_trait = wrathful } + } + } + calm = { + trigger = { + scope:child = { has_trait = calm } + } + } + patient = { + trigger = { + scope:child = { has_trait = patient } + } + } + impatient = { + trigger = { + scope:child = { has_trait = impatient } + } + } + arrogant = { + trigger = { + scope:child = { has_trait = arrogant } + } + } + humble = { + trigger = { + scope:child = { has_trait = humble } + } + } + deceitful = { + trigger = { + scope:child = { has_trait = deceitful } + } + } + honest = { + trigger = { + scope:child = { has_trait = honest } + } + } + craven = { + trigger = { + scope:child = { has_trait = craven } + } + } + brave = { + trigger = { + scope:child = { has_trait = brave } + } + } + shy = { + trigger = { + scope:child = { has_trait = shy } + } + } + gregarious = { + trigger = { + scope:child = { has_trait = gregarious } + } + } + ambitious = { + trigger = { + scope:child = { has_trait = ambitious } + } + } + content = { + trigger = { + scope:child = { has_trait = content } + } + } + arbitrary = { + trigger = { + scope:child = { has_trait = arbitrary } + } + } + just = { + trigger = { + scope:child = { has_trait = just } + } + } + cynical = { + trigger = { + scope:child = { has_trait = cynical } + } + } + zealous = { + trigger = { + scope:child = { has_trait = zealous } + } + } + paranoid = { + trigger = { + scope:child = { has_trait = paranoid } + } + } + trusting = { + trigger = { + scope:child = { has_trait = trusting } + } + } + compassionate = { + trigger = { + scope:child = { has_trait = compassionate } + } + } + callous = { + trigger = { + scope:child = { has_trait = callous } + } + } + sadistic = { + trigger = { + scope:child = { has_trait = sadistic } + } + } + stubborn = { + trigger = { + scope:child = { has_trait = stubborn } + } + } + fickle = { + trigger = { + scope:child = { has_trait = fickle } + } + } + vengeful = { + trigger = { + scope:child = { has_trait = vengeful } + } + } + forgiving = { + trigger = { + scope:child = { has_trait = forgiving } + } + } + eccentric = { + trigger = { + scope:child = { has_trait = eccentric } + } + } + } + # Including childhood traits, if necessary. + random_traits_list = { + count = 1 + rowdy = { + trigger = { + number_of_personality_traits < 3 + scope:child = { has_trait = rowdy } + } + } + charming = { + trigger = { + number_of_personality_traits < 3 + scope:child = { has_trait = charming } + } + } + curious = { + trigger = { + number_of_personality_traits < 3 + scope:child = { has_trait = curious } + } + } + pensive = { + trigger = { + number_of_personality_traits < 3 + scope:child = { has_trait = pensive } + } + } + bossy = { + trigger = { + number_of_personality_traits < 3 + scope:child = { has_trait = bossy } + } + } + } + # And then, for good measure, we apply a fallback. + random_traits = yes + martial = { + min_template_medium_skill + max_template_medium_skill + } + stewardship = { + min_template_medium_skill + max_template_medium_skill + } + diplomacy = { + min_template_medium_skill + max_template_medium_skill + } + intrigue = { + min_template_medium_skill + max_template_medium_skill + } + learning = { + min_template_medium_skill + max_template_medium_skill + } + prowess = { + min_template_medium_skill + max_template_medium_skill + } + save_scope_as = crush_child + 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 } + } + add_character_flag = peasant_outfit + } + } + # Tooltips are borked and can't be fixed without loc (even if we launder the event's immediate so that the spawned chars don't screw things up, it looks dodgy), so we hide the actual crush effect. + hidden_effect = { + scope:child = { + set_relation_crush = scope:crush_child + add_relation_flag = { + relation = crush + target = scope:crush_child + flag = auto_progress_to_lover + } + } + scope:crush_child = { + if = { + limit = { is_adult = no } + set_relation_crush = scope:child + } + else = { + add_opinion = { + target = scope:child + modifier = compliment_opinion + opinion = 20 + } + } + } + } + } + + # I suppose we could accommodate another family. + option = { + name = ep3_laamp_flavour_ewan.1021.a + + domicile = { change_provisions = major_provisions_loss } + + scope:child = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 50 + } + add_opinion = { + target = scope:crush_child + modifier = childhood_crush + opinion = 100 + } + reverse_add_opinion = { + target = scope:crush_child + modifier = childhood_crush + opinion = 100 + } + } + add_courtier = scope:crush_child + add_courtier = scope:crush_mother + reverse_add_opinion = { + target = scope:crush_mother + modifier = grateful_opinion + opinion = 20 + } + add_courtier = scope:crush_father + reverse_add_opinion = { + target = scope:crush_father + modifier = grateful_opinion + opinion = 20 + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # You will stop seeing them this instant! + option = { + name = ep3_laamp_flavour_ewan.1021.b + + scope:child = { + remove_relation_crush = scope:crush_child + add_opinion = { + target = root + modifier = overreaction_opinion + opinion = -40 + } + } + + stress_impact = { + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + # Surely just a GetSeason fling. + option = { + name = ep3_laamp_flavour_ewan.1021.c + + random_list = { + 100 = { + desc = ep3_laamp_flavour_ewan.1021.c.crush_endures + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1021.c.crush_endures + left_icon = scope:child + right_icon = scope:crush_child + scope:child = { + add_opinion = { + target = scope:crush_child + modifier = childhood_crush + opinion = 50 + } + reverse_add_opinion = { + target = scope:crush_child + modifier = childhood_crush + opinion = 50 + } + } + } + } + 100 = { + desc = ep3_laamp_flavour_ewan.1021.c.crush_fades + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1021.c.crush_fades + left_icon = scope:child + right_icon = scope:crush_child + scope:child = { remove_relation_crush = scope:crush_child } + } + } + } + + # No stress here, you just don't involve yourself. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } + + after = { + # If we've no connexion left, dispose of our peasants. + if = { + limit = { + scope:child = { + NOT = { has_relation_crush = scope:crush_child } + } + } + scope:crush_mother = { + death = { death_reason = death_vanished } + } + scope:crush_father = { + death = { death_reason = death_vanished } + } + scope:crush_child = { + death = { death_reason = death_vanished } + } + } + } +} + +################################################## +# Nurture +# by Ewan Cowhig Croft +# 1031 - 1040 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + # Gain a certain childhood personality trait. + scope:child = { + if = { + limit = { + number_of_personality_traits < 3 + NOR = { + has_trait = rowdy + has_trait = charming + has_trait = curious + has_trait = pensive + has_trait = bossy + } + } + add_trait = $CHILDHOOD_TRAIT$ + } + # Else, gain a certain trait. + else_if = { + limit = { + number_of_personality_traits < 3 + NOR = { + has_trait = $TRAIT_1$ + has_trait = $TRAIT_2$ + has_trait = $TRAIT_3$ + has_trait = $TRAIT_4$ + has_trait = $TRAIT_5$ + } + } + random_list = { + 100 = { + trigger = { + NOT = { has_trait = $TRAIT_1$ } + } + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted + left_icon = scope:child + scope:child = { add_trait = $TRAIT_1$ } + } + } + } + 100 = { + trigger = { + NOT = { has_trait = $TRAIT_2$ } + } + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted + left_icon = scope:child + scope:child = { add_trait = $TRAIT_2$ } + } + } + } + 100 = { + trigger = { + NOT = { has_trait = $TRAIT_3$ } + } + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted + left_icon = scope:child + scope:child = { add_trait = $TRAIT_3$ } + } + } + } + 100 = { + trigger = { + NOT = { has_trait = $TRAIT_4$ } + } + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted + left_icon = scope:child + scope:child = { add_trait = $TRAIT_4$ } + } + } + } + 100 = { + trigger = { + NOT = { has_trait = $TRAIT_5$ } + } + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.trait_adopted + left_icon = scope:child + scope:child = { add_trait = $TRAIT_5$ } + } + } + } + } + # Clean up our childhood traits if we've just capped out. + hidden_effect = { ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = yes } + } + # Else, gain skill points. + else = { + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.tt.skill_gain + left_icon = scope:child + scope:child = { add_$SKILL$_skill = scope:fallback_skill_gain } + } + } + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_1031_roll_duel_effect = { + duel = { + skill = $EDUCATION$ + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1031.g.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.g.tt.success + left_icon = scope:child + scope:child = { add_$EDUCATION$_skill = 2 } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1031.g.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1031.g.tt.failure + left_icon = scope:child + scope:child = { add_$EDUCATION$_skill = -1 } + } + } + } +} + +# Taking after camp purpose. +ep3_laamp_flavour_ewan.1031 = { + type = character_event + title = ep3_laamp_flavour_ewan.1031.t + desc = { + desc = ep3_laamp_flavour_ewan.1031.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_realm_law = camp_purpose_wanderers } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.wanderers + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_mercenaries } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.mercenaries + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_scholars } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.scholars + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_explorers } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.explorers + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_brigands } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.brigands + } + triggered_desc = { + trigger = { has_realm_law = camp_purpose_legitimists } + desc = ep3_laamp_flavour_ewan.1031.desc.purpose.legitimists + } + } + desc = ep3_laamp_flavour_ewan.1031.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + root = { + OR = { + has_realm_law = camp_purpose_mercenaries + has_realm_law = camp_purpose_brigands + } + } + } + animation = marshal_wooden_sword + } + animation = personality_bold + } + override_background = { reference = army_camp } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1031 } + } + # Must have a suitable child. + any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1031 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1031 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + random_child = { + limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + weight = { + modifier = { + add = age + always = yes + } + modifier = { + add = 10 + has_trait = diligent + } + modifier = { + add = -10 + has_trait = lazy + } + } + save_scope_as = child + } + # Roll our fallback skill gain, so that it's set for the final tooltip. + save_scope_value_as = { + name = fallback_skill_gain + value = { + integer_range = { + min = 1 + max = 3 + } + } + } + } + + # Wanderers: Ahhh, the wanderlust has got 'er'im. + option = { + name = ep3_laamp_flavour_ewan.1031.a + trigger = { has_realm_law = camp_purpose_wanderers } + reason = purpose_wanderers + + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = curious + TRAIT_1 = diligent + TRAIT_2 = calm + TRAIT_3 = humble + TRAIT_4 = brave + TRAIT_5 = eccentric + SKILL = diplomacy + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Mercenaries: SheHe'll be a warrior some day. + option = { + name = ep3_laamp_flavour_ewan.1031.b + trigger = { has_realm_law = camp_purpose_mercenaries } + reason = purpose_mercenaries + + if = { + limit = { has_trait = education_martial } + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = rowdy + TRAIT_1 = brave + TRAIT_2 = wrathful + TRAIT_3 = content + TRAIT_4 = callous + TRAIT_5 = gregarious + SKILL = prowess + } + } + else = { + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = rowdy + TRAIT_1 = brave + TRAIT_2 = wrathful + TRAIT_3 = content + TRAIT_4 = callous + TRAIT_5 = gregarious + SKILL = martial + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Scholars: such enthusiasm in one so young! + option = { + name = ep3_laamp_flavour_ewan.1031.c + trigger = { has_realm_law = camp_purpose_scholars } + reason = purpose_scholars + + if = { + limit = { has_trait = education_learning } + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = pensive + TRAIT_1 = temperate + TRAIT_2 = patient + TRAIT_3 = calm + TRAIT_4 = shy + TRAIT_5 = stubborn + SKILL = diplomacy + } + } + else = { + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = pensive + TRAIT_1 = temperate + TRAIT_2 = patient + TRAIT_3 = calm + TRAIT_4 = shy + TRAIT_5 = stubborn + SKILL = learning + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Explorers: I wonder what sights SheHe'll see... + option = { + name = ep3_laamp_flavour_ewan.1031.d + trigger = { has_realm_law = camp_purpose_explorers } + reason = purpose_explorers + + if = { + limit = { has_trait = education_diplomacy } + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = charming + TRAIT_1 = gregarious + TRAIT_2 = brave + TRAIT_3 = ambitious + TRAIT_4 = fickle + TRAIT_5 = eccentric + SKILL = stewardship + } + } + else = { + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = charming + TRAIT_1 = gregarious + TRAIT_2 = brave + TRAIT_3 = ambitious + TRAIT_4 = fickle + TRAIT_5 = eccentric + SKILL = diplomacy + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Brigands: it'll serve HerHim well. + option = { + name = ep3_laamp_flavour_ewan.1031.e + trigger = { has_realm_law = camp_purpose_brigands } + reason = purpose_brigands + + if = { + limit = { has_trait = education_intrigue } + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = rowdy + TRAIT_1 = deceitful + TRAIT_2 = arbitrary + TRAIT_3 = callous + TRAIT_4 = sadistic + TRAIT_5 = paranoid + SKILL = prowess + } + } + else = { + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = rowdy + TRAIT_1 = deceitful + TRAIT_2 = arbitrary + TRAIT_3 = callous + TRAIT_4 = sadistic + TRAIT_5 = paranoid + SKILL = intrigue + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Legitimists: such ambition is only natural. + option = { + name = ep3_laamp_flavour_ewan.1031.f + trigger = { has_realm_law = camp_purpose_legitimists } + reason = purpose_legitimists + + if = { + limit = { has_trait = education_diplomacy } + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = bossy + TRAIT_1 = ambitious + TRAIT_2 = arrogant + TRAIT_3 = diligent + TRAIT_4 = patient + TRAIT_5 = vengeful + SKILL = prowess + } + } + else = { + ep3_laamp_flavour_ewan_1031_apply_changes_effect = { + CHILDHOOD_TRAIT = bossy + TRAIT_1 = ambitious + TRAIT_2 = arrogant + TRAIT_3 = diligent + TRAIT_4 = patient + TRAIT_5 = vengeful + SKILL = diplomacy + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Perhaps we could consider another path? + option = { + name = ep3_laamp_flavour_ewan.1031.g + trait = education_diplomacy_1 + trait = education_diplomacy_2 + trait = education_diplomacy_3 + trait = education_diplomacy_4 + trait = education_diplomacy_5 + trait = education_martial_1 + trait = education_martial_2 + trait = education_martial_3 + trait = education_martial_4 + trait = education_martial_5 + trait = education_stewardship_1 + trait = education_stewardship_2 + trait = education_stewardship_3 + trait = education_stewardship_4 + trait = education_stewardship_5 + trait = education_intrigue_1 + trait = education_intrigue_2 + trait = education_intrigue_3 + trait = education_intrigue_4 + trait = education_intrigue_5 + trait = education_learning_1 + trait = education_learning_2 + trait = education_learning_3 + trait = education_learning_4 + trait = education_learning_5 + + # Roll a different duel depending on our education. + switch = { + trigger = has_trait + education_diplomacy = { + ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = diplomacy } + } + education_martial = { + ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = martial } + } + education_stewardship = { + ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = stewardship } + } + education_intrigue = { + ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = intrigue } + } + education_learning = { + ep3_laamp_flavour_ewan_1031_roll_duel_effect = { EDUCATION = learning } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 2 } + } + } + + # *sigh* Stop that, GirlBoy. + option = { + name = ep3_laamp_flavour_ewan.1031.h + + scope:child = { add_stress = medium_stress_gain } + add_prestige = minor_prestige_gain + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -0.5 } + } + } +} + +################################################## +# The Old Country +# by Ewan Cowhig Croft +# 1041 - 1050 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { + has_memory_type = became_landless_adventurer_memory + memory_age_years >= { + value = @ep3_laamp_flavour_ewan_1041_years_since_rule + add = $CHILD$.age + } +} + +# Child too young to remember asks what old home was like. +ep3_laamp_flavour_ewan.1041 = { + type = character_event + title = ep3_laamp_flavour_ewan.1041.t + desc = ep3_laamp_flavour_ewan.1041.desc + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:child + animation = admiration + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1041 } + } + # We must've actually ruled somewhere — if we're a player. The AI won't care for this verisimilitude. + trigger_if = { + limit = { is_ai = no } + any_claim = { + any_past_holder_reversed = { this = root } + } + } + # And have a suitable child available. + ## This _should_ go in order of available children by the trigger, so it _should_ be ordered by age already. + any_child = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + save_temporary_scope_as = child_temp + } + # Finally, check that enough time has passed that the child might not remember the Old Country. + any_memory = { + ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { CHILD = scope:child_temp } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1041 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1041 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab our child. + ordered_child = { + limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + order_by = age + save_scope_as = child + } + # Grab our memory. + random_memory = { + limit = { + ep3_laamp_flavour_ewan_1041_valid_memory_trigger = { CHILD = scope:child } + } + save_scope_as = memory + } + } + + # It was beautiful, little one. + option = { + name = ep3_laamp_flavour_ewan.1041.a + + random_list = { + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1041.a.tt.diplomacy + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_diplomacy_modifier + years = 10 + } + } + } + } + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1041.a.tt.stewardship + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_stewardship_modifier + years = 10 + } + } + } + } + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1041.a.tt.learning + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_beautiful_home_learning_modifier + years = 10 + } + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 2 } + } + } + + # A horrid place that spurned us. + option = { + name = ep3_laamp_flavour_ewan.1041.b + + random_list = { + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1041.b.tt.martial + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_horrible_home_martial_modifier + years = 10 + } + } + } + } + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1041.b.tt.intrigue + left_icon = scope:child + scope:child = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_horrible_home_intrigue_modifier + years = 10 + } + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # legitimists: some day, you'll know it for yourself. + option = { + name = ep3_laamp_flavour_ewan.1041.c + trigger = { has_realm_law = camp_purpose_legitimists } + reason = purpose_legitimists + + scope:child = { + # Try to give them the ambitious trait. + if = { + limit = { + number_of_personality_traits <= 3 + NOT = { has_trait = ambitious } + } + add_trait = ambitious + hidden_effect = { ep3_laamp_flavour_ewan_clean_up_excess_childhood_traits_effect = yes } + } + # Else, give them a nice modifier. + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1041_rightful_home_modifier + years = 10 + } + } + add_opinion = { + target = root + modifier = stories_of_righteous_return_opinion + opinion = 30 + } + } + + stress_impact = { + base = minor_stress_loss + ambitious = medium_stress_impact_loss + arrogant = minor_stress_impact_loss + humble = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # not legitimists: maybe we'll return some day. Ask me then. + option = { + name = ep3_laamp_flavour_ewan.1041.d + trigger = { + NOT = { has_realm_law = camp_purpose_legitimists } + } + + reverse_add_opinion = { + target = scope:child + modifier = stories_of_righteous_return_opinion + opinion = 30 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # I won't speak of it. + option = { + name = ep3_laamp_flavour_ewan.1041.e + + reverse_add_opinion = { + target = scope:child + modifier = disappointed_opinion + opinion = -10 + } + + # Most of the effect here is in the stress loss. + stress_impact = { + base = medium_stress_loss + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -2 } + } + } +} + +################################################## +# It Isn't Fair +# by Ewan Cowhig Croft +# 1051 - 1060 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1051_valid_memory_trigger = { + has_memory_type = became_landless_adventurer_memory + memory_age_years >= 5 +} + +scripted_trigger ep3_laamp_flavour_ewan_1051_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + NOR = { + has_trait = humble + has_trait = content + } +} + +scripted_effect ep3_laamp_flavour_ewan_1051_roll_duel_effect = { + save_scope_value_as = { + name = duel_diff + value = { + value = scope:child.$SKILL$ + add = 7 + max = very_high_skill_rating + } + } + duel = { + skill = $SKILL$ + value = scope:duel_diff + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1051.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1051.tt.success + left_icon = scope:child + scope:child = { + add_$SKILL$_lifestyle_perk_points = 1 + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + add_stress = major_stress_loss + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1051.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1051.tt.failure + left_icon = scope:child + reverse_add_opinion = { + target = scope:child + modifier = hate_opinion + opinion = -30 + } + random = { + chance = 35 + add_trait = depressed_1 + } + } + } + } +} + +# Child unhappy with life on the road. +ep3_laamp_flavour_ewan.1051 = { + type = character_event + title = ep3_laamp_flavour_ewan.1051.t + desc = ep3_laamp_flavour_ewan.1051.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:child + animation = rage + } + override_background = { reference = corridor_night } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1051 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Valid child. + any_child = { ep3_laamp_flavour_ewan_1051_valid_child_trigger = yes } + # Valid memory. + any_memory = { ep3_laamp_flavour_ewan_1051_valid_memory_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1051 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1051 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab our best child. + random_child = { + limit = { ep3_laamp_flavour_ewan_1051_valid_child_trigger = yes } + weight = { + modifier = { + add = 10 + has_trait = arrogant + } + modifier = { + add = 10 + has_trait = ambitious + } + modifier = { + add = 10 + has_trait = lazy + } + modifier = { + add = 10 + has_trait = impatient + } + modifier = { + add = 10 + has_trait = wrathful + } + modifier = { + add = -10 + has_trait = diligent + } + modifier = { + add = -10 + has_trait = patient + } + modifier = { + add = -10 + has_trait = calm + } + } + save_scope_as = child + add_stress = major_stress_gain + } + # And our memory. + random_memory = { + limit = { ep3_laamp_flavour_ewan_1051_valid_memory_trigger = yes } + save_scope_as = memory + } + } + + # Come here, my GirlBoy. + option = { + name = ep3_laamp_flavour_ewan.1051.a + + ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = diplomacy } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 2 } + } + } + + # Fair? You're a House.GetName! Stand up straight! + option = { + name = ep3_laamp_flavour_ewan.1051.b + + ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = martial } + + stress_impact = { + arrogant = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 1 + } + } + } + + # I know, but it is what it is. + option = { + name = ep3_laamp_flavour_ewan.1051.c + + ep3_laamp_flavour_ewan_1051_roll_duel_effect = { SKILL = learning } + + stress_impact = { + content = minor_stress_impact_loss + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } + + # Leave HerHim to tantrum. + option = { + name = ep3_laamp_flavour_ewan.1051.d + + random_list = { + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1051.d.tt.annoyance_fades + left_icon = scope:child + scope:child = { add_stress = major_stress_loss } + } + } + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1051.d.tt.grudge_held + left_icon = scope:child + reverse_add_opinion = { + target = scope:child + modifier = grudge_opinion + opinion = -35 + } + random = { + chance = 50 + add_trait = depressed_1 + } + } + } + } + + stress_impact = { + callous = minor_stress_impact_loss + lazy = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + opinion_modifier = { + opinion_target = scope:child + multiplier = -1 + } + } + } +} + +################################################## +# Quick Study +# by Ewan Cowhig Croft +# 1061 - 1070 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1061_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + NOT = { knows_language_of_culture = root.location.culture } + current_extra_languages < language_soft_cap +} + +# Child picks up local language quickly. +ep3_laamp_flavour_ewan.1061 = { + type = character_event + title = ep3_laamp_flavour_ewan.1061.t + desc = ep3_laamp_flavour_ewan.1061.desc + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:child + animation = personality_bold + } + override_background = { reference = ep3_campfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1061 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Must have a suitable child. + any_child = { ep3_laamp_flavour_ewan_1061_valid_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1061 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1061 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Grab a suitable child. + random_child = { + limit = { ep3_laamp_flavour_ewan_1061_valid_child_trigger = yes } + weight = { + modifier = { + add = learning + always = yes + } + } + save_scope_as = child + } + # Teach them the language. + scope:child = { learn_language_of_culture = root.location.culture } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Hmm, smart GirlBoy. + option = { + name = ep3_laamp_flavour_ewan.1061.a + + add_prestige = minor_prestige_gain + scope:child = { add_prestige = medium_prestige_gain } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } + + # Maybe they could teach me... + option = { + name = ep3_laamp_flavour_ewan.1061.b + trigger = { + NOT = { knows_language_of_culture = root.location.culture } + current_extra_languages < language_soft_cap + } + + duel = { + skill = learning + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1061.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1061.b.tt.success + left_icon = scope:child + learn_language_of_culture = root.location.culture + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1061.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1061.b.tt.failure + left_icon = scope:child + add_stress = medium_stress_gain + } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # Get that foreign muck out of your mouth! + option = { + name = ep3_laamp_flavour_ewan.1061.c + trigger = { + NOT = { + root.culture = { has_same_culture_language = root.location.culture } + } + } + + scope:child = { + unlearn_language_of_culture = root.location.culture + add_opinion = { + target = root + modifier = kindness_opinion + opinion = -10 + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + humble = medium_stress_impact_gain + } + ai_chance = { + base = 1 + modifier = { + add = { + value = "culture.cultural_acceptance(root.location.culture)" + multiply = -2 + } + always = yes + } + } + } +} + +################################################## +# At the Edge of Camp +# by Ewan Cowhig Croft +# 1071 - 1080 +################################################## + +# Children playing in local terrain. +ep3_laamp_flavour_ewan.1071 = { + type = character_event + title = ep3_laamp_flavour_ewan.1071.t + desc = { + desc = ep3_laamp_flavour_ewan.1071.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:terrain_type = flag:plains } + desc = ep3_laamp_flavour_ewan.1071.desc.plains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:farmlands } + desc = ep3_laamp_flavour_ewan.1071.desc.farmlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:hills } + desc = ep3_laamp_flavour_ewan.1071.desc.hills + } + triggered_desc = { + trigger = { scope:terrain_type = flag:mountains } + desc = ep3_laamp_flavour_ewan.1071.desc.mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert } + desc = ep3_laamp_flavour_ewan.1071.desc.desert + } + triggered_desc = { + trigger = { scope:terrain_type = flag:desert_mountains } + desc = ep3_laamp_flavour_ewan.1071.desc.desert_mountains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:oasis } + desc = ep3_laamp_flavour_ewan.1071.desc.oasis + } + triggered_desc = { + trigger = { scope:terrain_type = flag:jungle } + desc = ep3_laamp_flavour_ewan.1071.desc.jungle + } + triggered_desc = { + trigger = { scope:terrain_type = flag:forest } + desc = ep3_laamp_flavour_ewan.1071.desc.forest + } + triggered_desc = { + trigger = { scope:terrain_type = flag:taiga } + desc = ep3_laamp_flavour_ewan.1071.desc.taiga + } + triggered_desc = { + trigger = { scope:terrain_type = flag:wetlands } + desc = ep3_laamp_flavour_ewan.1071.desc.wetlands + } + triggered_desc = { + trigger = { scope:terrain_type = flag:steppe } + desc = ep3_laamp_flavour_ewan.1071.desc.steppe + } + triggered_desc = { + trigger = { scope:terrain_type = flag:floodplains } + desc = ep3_laamp_flavour_ewan.1071.desc.floodplains + } + triggered_desc = { + trigger = { scope:terrain_type = flag:drylands } + desc = ep3_laamp_flavour_ewan.1071.desc.drylands + } + } + desc = ep3_laamp_flavour_ewan.1071.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:own_child + animation = happiness + } + lower_left_portrait = scope:extra_child_3 + lower_center_portrait = scope:extra_child_2 + lower_right_portrait = scope:extra_child_1 + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1071 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Don't let the children out to play during a plague. + location = { + any_province_epidemic = { count <= 0 } + } + # And have a suitable named child of our own. + any_child = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1071 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1071 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab our terrain. + ep3_laamp_flavour_ewan_register_terrain_effect = yes + # Sort our child scopes. + random_child = { + limit = { ep3_laamp_flavour_ewan_available_child_trigger = yes } + save_scope_as = own_child + add_to_list = playing_children_list + add_stress = major_stress_loss + } + ordered_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + this != scope:own_child + } + # Grab the children closest in age to our chosen child. + order_by = { + value = 100 + if = { + limit = { age > scope:own_child.age } + add = { + value = scope:own_child.age + subtract = age + } + } + else_if = { + limit = { age < scope:own_child.age } + add = { + value = scope:own_child.age + subtract = age + multiply = -1 + } + } + } + max = 3 + check_range_bounds = no + if = { + limit = { + NOT = { exists = scope:extra_child_1 } + } + save_scope_as = extra_child_1 + add_to_list = playing_children_list + add_stress = major_stress_loss + } + else_if = { + limit = { + NOT = { + this = scope:extra_child_1 + exists = scope:extra_child_2 + } + } + save_scope_as = extra_child_2 + add_to_list = playing_children_list + add_stress = major_stress_loss + } + else_if = { + limit = { + NOT = { + this = scope:extra_child_1 + this = scope:extra_child_2 + exists = scope:extra_child_3 + } + } + save_scope_as = extra_child_3 + add_to_list = playing_children_list + add_stress = major_stress_loss + } + # Set up future friendships. + hidden_effect = { + every_in_list = { + list = playing_children_list + save_scope_as = char_temp + every_in_list = { + list = playing_children_list + if = { + limit = { + this != scope:char_temp + can_set_relation_potential_friend_trigger = { CHARACTER = scope:char_temp } + } + set_relation_potential_friend = scope:char_temp + } + } + } + } + } + } + + # Stay within sight! + option = { + name = ep3_laamp_flavour_ewan.1071.a + + random_list = { + 100 = { + every_in_list = { + list = playing_children_list + custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child + add_diplomacy_lifestyle_perk_points = 1 + } + } + 100 = { + every_in_list = { + list = playing_children_list + custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child + add_stewardship_lifestyle_perk_points = 1 + } + } + 100 = { + every_in_list = { + list = playing_children_list + custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child + add_intrigue_lifestyle_perk_points = 1 + } + } + } + + stress_impact = { + paranoid = medium_stress_impact_loss + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Go on, explore. + option = { + name = ep3_laamp_flavour_ewan.1071.b + + random_list = { + 100 = { + every_in_list = { + list = playing_children_list + custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child + add_martial_lifestyle_perk_points = 1 + } + } + 100 = { + every_in_list = { + list = playing_children_list + custom = ep3_laamp_flavour_ewan.1071.tt.every_playing_child + add_learning_lifestyle_perk_points = 1 + } + } + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Children, excited for the simplest things... + option = { + name = ep3_laamp_flavour_ewan.1071.c + + # Major effect is stress loss. + add_stress = major_stress_loss + + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -0.5 } + } + } +} + +################################################## +# Growing Up +# by Ewan Cowhig Croft +# 1081 - 1090 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1081_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + age <= 12 + NOT = { has_character_flag = demanded_own_tent } + OR = { + has_trait = bossy + has_trait = rowdy + has_trait = greedy + has_trait = diligent + has_trait = impatient + has_trait = arrogant + has_trait = shy + has_trait = ambitious + has_trait = paranoid + has_trait = stubborn + has_trait = eccentric + } +} + +scripted_effect ep3_laamp_flavour_ewan_1081_roll_duel_effect = { + scope:child = { + duel = { + skill = $EDUCATION$ + value = medium_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1081.b.tt.success + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1081.b.tt.success + left_icon = scope:child + scope:child = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 40 + } + add_prestige = medium_prestige_gain + } + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1081.b.tt.failure + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1081.b.tt.failure + left_icon = scope:child + scope:child = { + add_opinion = { + target = root + modifier = frustrated_opinion + opinion = -40 + } + add_stress = major_stress_gain + } + } + } + } + } + } +} + +# Child demands own tent. +ep3_laamp_flavour_ewan.1081 = { + type = character_event + title = ep3_laamp_flavour_ewan.1081.t + desc = ep3_laamp_flavour_ewan.1081.desc + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:child + animation = anger + } + override_background = { reference = corridor_night } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1081 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # And that we've got a suitable child. + any_child = { ep3_laamp_flavour_ewan_1081_valid_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1081 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1081 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab a suitable child. + ordered_child = { + limit = { ep3_laamp_flavour_ewan_1081_valid_child_trigger = yes } + order_by = age + save_scope_as = child + add_character_flag = { + flag = demanded_own_tent + # Let the flag clean itself up some time after we become an adult, as it'll no longer be relevant. + years = 16 + } + } + } + + # Hmm, okay. You're a WomanMan now. + option = { + name = ep3_laamp_flavour_ewan.1081.a + + add_prestige = minor_prestige_loss + scope:child = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 25 + } + add_prestige = minor_prestige_gain + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = -2 } + } + } + + # You want it? Earn it. + option = { + name = ep3_laamp_flavour_ewan.1081.b + flavor = ep3_laamp_flavour_ewan.1081.b.f + trait = education_diplomacy_1 + trait = education_diplomacy_2 + trait = education_diplomacy_3 + trait = education_diplomacy_4 + trait = education_diplomacy_5 + trait = education_martial_1 + trait = education_martial_2 + trait = education_martial_3 + trait = education_martial_4 + trait = education_martial_5 + trait = education_stewardship_1 + trait = education_stewardship_2 + trait = education_stewardship_3 + trait = education_stewardship_4 + trait = education_stewardship_5 + trait = education_intrigue_1 + trait = education_intrigue_2 + trait = education_intrigue_3 + trait = education_intrigue_4 + trait = education_intrigue_5 + trait = education_learning_1 + trait = education_learning_2 + trait = education_learning_3 + trait = education_learning_4 + trait = education_learning_5 + + # Roll a different duel depending on our education. + switch = { + trigger = has_trait + education_diplomacy = { + ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = diplomacy } + } + education_martial = { + ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = martial } + } + education_stewardship = { + ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = stewardship } + } + education_intrigue = { + ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = intrigue } + } + education_learning = { + ep3_laamp_flavour_ewan_1081_roll_duel_effect = { EDUCATION = learning } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Bah, you're a child till I say otherwise. + option = { + name = ep3_laamp_flavour_ewan.1081.c + + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:child + modifier = frustrated_opinion + opinion = -20 + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -0.5 } + } + } +} + +################################################## +# Every Parent's Duty +# by Ewan Cowhig Croft +# 1091 - 1100 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1091_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + NOT = { has_character_flag = taught_to_ride } + # If you have Horse Lords, this _has_ to be taught much earlier. + trigger_if = { + limit = { + root = { + OR = { + culture = { culture_has_archer_cavalry_maa = yes } + mpo_can_recruit_nomad_maa_trigger = yes + } + } + } + age <= 8 + } +} + +scripted_effect ep3_laamp_flavour_ewan_1091_roll_duel_effect = { + duel = { + skill = $SKILL$ + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1091.tt.success + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1091.tt.success + left_icon = scope:child + scope:child = { + add_opinion = { + target = root + modifier = amazed_opinion + opinion = 40 + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1091_confidence_gained_modifier + years = 10 + } + } + } + } + } + # Defeat! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.1091.tt.failure + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1091.tt.failure + left_icon = scope:child + scope:child = { + increase_wounds_no_death_effect = { REASON = horse_riding_accident } + add_opinion = { + target = root + modifier = let_me_down_opinion + opinion = -20 + } + } + } + } + } + } +} + +# Teaching a youngling how to ride. +ep3_laamp_flavour_ewan.1091 = { + type = character_event + title = ep3_laamp_flavour_ewan.1091.t + desc = ep3_laamp_flavour_ewan.1091.desc + theme = laamp + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:child + animation = worry + } + override_background = { reference = army_camp } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1091 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # And have a suitable child + any_child = { ep3_laamp_flavour_ewan_1091_valid_child_trigger = yes } + } + + weight_multiplier = { + # Weight up for Horse Lords, for whom this is especially vital (yes, over and above western knights). + modifier = { + add = 2 + culture = { culture_has_archer_cavalry_maa = yes } + } + + modifier = { + add = 2 + has_trait = nomadic_philosophy + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1091 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1091 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Grab a suitable child. + ordered_child = { + limit = { ep3_laamp_flavour_ewan_1091_valid_child_trigger = yes } + order_by = age + save_scope_as = child + add_character_flag = { + flag = taught_to_ride + # Let the flag clean itself up some time after we become an adult, as it'll no longer be relevant. + years = 16 + } + } + } + + # Diplo duel: remember, be firm, but respectful. + option = { + name = ep3_laamp_flavour_ewan.1091.a + + ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = diplomacy } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Martial duel: don't be afraid to crack the whip! + option = { + name = ep3_laamp_flavour_ewan.1091.b + + ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = martial } + + stress_impact = { + wrathful = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + patient = minor_stress_impact_gain + calm = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Prowess duel: master the horse or it'll toss you. + option = { + name = ep3_laamp_flavour_ewan.1091.c + + ep3_laamp_flavour_ewan_1091_roll_duel_effect = { SKILL = prowess } + + stress_impact = { + calm = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_vengefulness = 1 } + } + } + + # Say nothing. + option = { + name = ep3_laamp_flavour_ewan.1091.d + + random_list = { + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1091.d.tt.success + left_icon = scope:child + scope:child = { + add_opinion = { + target = root + modifier = amazed_opinion + opinion = 20 + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_1091_confidence_gained_modifier + years = 10 + } + } + } + } + 100 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.1091.d.tt.failure + left_icon = scope:child + scope:child = { + increase_wounds_no_death_effect = { REASON = horse_riding_accident } + add_opinion = { + target = root + modifier = let_me_down_opinion + opinion = -10 + } + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -0.5 } + } + } +} + +################################################## +# Helping Out +# by Ewan Cowhig Croft +# 1101 - 1110 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = { + child_is_infant_trigger = yes + is_courtier_of = root + location = root.location + is_available_allow_travelling = yes +} + +scripted_effect ep3_laamp_flavour_ewan_1101_increment_affection_effect = { + reverse_add_opinion = { + target = scope:child + modifier = love_opinion + opinion = 20 + } + hidden_effect = { + add_opinion = { + target = scope:child + modifier = love_opinion + opinion = 20 + } + } +} + +# Child helps with packing. +ep3_laamp_flavour_ewan.1101 = { + type = character_event + title = ep3_laamp_flavour_ewan.1101.t + desc = ep3_laamp_flavour_ewan.1101.desc + theme = laamp + left_portrait = { + character = root + animation = boredom + } + right_portrait = { + character = scope:child + animation = admiration + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1101 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1101 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longest + } + } + # Nab a suitable child. + random_child = { + limit = { ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = yes } + save_scope_as = child + } + } + + # What're you doing there, little LassLad? + option = { + name = ep3_laamp_flavour_ewan.1101.a + + ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes + # Set us up for our future events. + set_variable = { + name = packing_assistant + value = scope:child + } + # Account for how many times we've helped. + increment_variable_effect = { + VAR = helped_packing + VAL = 1 + } + + stress_impact = { + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Shoo, you menace! + option = { + name = ep3_laamp_flavour_ewan.1101.b + + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:child + modifier = hurt_opinion + opinion = -10 + } + + stress_impact = { + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } +} + +# Pre-filter event, so that we can keep the spamminess down. +ep3_laamp_flavour_ewan.1102 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Only valid for Laamps + has_government = landless_adventurer_government + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1101 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Plus that we haven't started this chain once already. + NOT = { has_variable = packing_assistant } + # And that we have a suitable child. + any_child = { ep3_laamp_flavour_ewan_1101_valid_starting_child_trigger = yes } + } + + immediate = { + # We keep this _quite_ low, as it's otherwise able to trigger any time you start a travel. + random = { + chance = 1 + random = { + chance = 75 + trigger_event = ep3_laamp_flavour_ewan.1101 + } + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1103_child_younger_trigger = { + age <= @ep3_laamp_flavour_ewan_1103_age_threshold_young + root = { + NOT = { has_character_flag = had_packing_assistant_chain_stage_younger } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1103_child_older_trigger = { + age > @ep3_laamp_flavour_ewan_1103_age_threshold_young + age <= @ep3_laamp_flavour_ewan_1103_age_threshold_older + root = { + NOT = { has_character_flag = had_packing_assistant_chain_stage_older } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1103_child_teen_trigger = { + age > @ep3_laamp_flavour_ewan_1103_age_threshold_older + is_adult = no + root = { + NOT = { has_character_flag = had_packing_assistant_chain_stage_teen } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1103_child_adult_trigger = { + is_adult = yes + root = { + NOT = { has_character_flag = had_packing_assistant_chain_stage_adult } + # And they have to done it several times. + var:helped_packing >= 3 + } +} + +scripted_trigger ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = { + OR = { + is_alive = no + has_relation_rival = root + opinion = { + target = root + value <= -75 + } + } +} + +# Child helps with packing. +ep3_laamp_flavour_ewan.1103 = { + type = character_event + title = ep3_laamp_flavour_ewan.1103.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + var:packing_assistant = { + ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.1103.desc.child_younger + } + triggered_desc = { + trigger = { + var:packing_assistant = { + ep3_laamp_flavour_ewan_1103_child_older_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.1103.desc.child_older + } + triggered_desc = { + trigger = { + var:packing_assistant = { + ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.1103.desc.child_teen + } + triggered_desc = { + trigger = { + var:packing_assistant = { + ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes + } + } + desc = ep3_laamp_flavour_ewan.1103.desc.child_adult + } + } + } + theme = laamp + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:child + animation = admiration + } + + trigger = { + has_variable = packing_assistant + NOR = { + has_character_flag = aborted_packing_chain + has_variable = had_ep3_laamp_flavour_ewan_1104 + } + is_available_allow_travelling = yes + var:packing_assistant = { + is_courtier_of = root + location = root.location + is_available_allow_travelling = yes + OR = { + ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes + ep3_laamp_flavour_ewan_1103_child_older_trigger = yes + ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes + ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes + } + ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = no + } + } + + on_trigger_fail = { trigger_event = ep3_laamp_flavour_ewan.1104 } + + immediate = { + # Nab our assistant for ease of reference. + var:packing_assistant = { save_scope_as = child } + } + + # Very young child helps a little. + option = { + name = ep3_laamp_flavour_ewan.1103.a + trigger = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes } + } + + ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes + # Account for how many times we've helped. + increment_variable_effect = { + VAR = helped_packing + VAL = 1 + } + + add_stress = miniscule_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 3 } + } + } + + # Older child is quite helpful. + option = { + name = ep3_laamp_flavour_ewan.1103.b + trigger = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_older_trigger = yes } + } + + ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes + # Account for how many times we've helped. + increment_variable_effect = { + VAR = helped_packing + VAL = 1 + } + + add_stress = minor_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 3 } + } + } + + # Teen is very helpful. + option = { + name = ep3_laamp_flavour_ewan.1103.c + trigger = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes } + } + + ep3_laamp_flavour_ewan_1101_increment_affection_effect = yes + # Account for how many times we've helped. + increment_variable_effect = { + VAR = helped_packing + VAL = 1 + } + + add_stress = medium_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 3 } + } + } + + # Adult might become your best friend over this simple activity. + option = { + name = ep3_laamp_flavour_ewan.1103.d + trigger = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } + } + + # Best friends, if possible. + if = { + limit = { + can_set_relation_best_friend_trigger = { CHARACTER = scope:child } + } + set_relation_best_friend = { + reason = best_friend_childhood_ritual + target = scope:child + } + } + # Loyalty hook, if possible. + if = { + limit = { + can_add_hook = { + target = scope:child + type = loyalty_hook + } + } + add_hook = { + target = scope:child + type = loyalty_hook + } + } + # Oodles of opinion. + reverse_add_opinion = { + target = scope:child + modifier = love_opinion + opinion = 50 + } + + add_stress = major_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 3 } + } + } + + # I can do it myself, scope:child. + option = { + name = ep3_laamp_flavour_ewan.1103.e + + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:child + modifier = hurt_opinion + opinion = { + value = -10 + multiply = var:helped_packing + } + } + add_character_flag = aborted_packing_chain + + stress_impact = { + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + after = { + if = { + limit = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_younger_trigger = yes } + } + add_character_flag = had_packing_assistant_chain_stage_younger + } + if = { + limit = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_older_trigger = yes } + } + add_character_flag = had_packing_assistant_chain_stage_older + } + if = { + limit = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_teen_trigger = yes } + } + add_character_flag = had_packing_assistant_chain_stage_teen + } + if = { + limit = { + scope:child = { ep3_laamp_flavour_ewan_1103_child_adult_trigger = yes } + } + add_character_flag = had_packing_assistant_chain_stage_adult + } + } +} + +# Child will no longer help with packing — for one reason or another. +ep3_laamp_flavour_ewan.1104 = { + type = character_event + title = ep3_laamp_flavour_ewan.1104.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:child = { is_alive = no } + } + desc = ep3_laamp_flavour_ewan.1104.desc.child_dead + } + desc = ep3_laamp_flavour_ewan.1104.desc.child_rival + } + } + theme = laamp + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:child + triggered_animation = { + animation = map_fear + trigger = { + scope:child = { is_alive = no } + } + } + triggered_animation = { + animation = dismissal + trigger = { + scope:child = { is_alive = yes } + } + } + } + + trigger = { + has_variable = packing_assistant + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1104 } + # Must've had at least one instance of the follow-up event, so that there's a pattern. + var:helped_packing >= 2 + # Aaaand make sure we should actually be firing _this_ event. + var:packing_assistant = { ep3_laamp_flavour_ewan_1103_proceed_to_failure_event_trigger = yes } + } + + immediate = { + # Limit this event to firing once. + set_variable = { + name = had_ep3_laamp_flavour_ewan_1104 + value = yes + } + # Nab our (former) assistant for ease of reference. + var:packing_assistant = { save_scope_as = child } + } + + # Dead: you killed them. + option = { + name = ep3_laamp_flavour_ewan.1104.a + trigger = { scope:child.killer ?= root } + + # Most of the effect is in the stress impact. + stress_impact = { + base = major_stress_gain + compassionate = minor_stress_impact_gain + # We don't account for callous here, because they get a special option. + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Dead: you do know who killed them and it wasn't you. + option = { + name = ep3_laamp_flavour_ewan.1104.b + trigger = { + scope:child = { + killer ?= { + is_alive = yes + this != root + } + } + } + + progress_towards_rival_effect = { + REASON = rival_killed_heir + CHARACTER = scope:child.killer + OPINION = default_rival_opinion + } + + stress_impact = { + vengeful = major_stress_impact_loss + forgiving = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Callous: _eh_. + option = { + name = ep3_laamp_flavour_ewan.1104.c + trigger = { has_trait = callous } + trait = callous + + # Entire effect is in the stress impact. + stress_impact = { callous = massive_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + } + } + + # Try to move on. + option = { + name = ep3_laamp_flavour_ewan.1104.d + trigger = { + NOT = { exists = scope:child.killer } + } + + # Most of the effect is in the stress impact. + stress_impact = { + base = major_stress_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } +} + +################################################## +# A Nose for Trouble +# by Ewan Cowhig Croft +# 1111 - 1120 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_1111_valid_child_trigger = { + ep3_laamp_flavour_ewan_available_child_trigger = yes + ep3_laamp_flavour_ewan_no_dog_trigger = yes +} + +# Child adopts puppy. +ep3_laamp_flavour_ewan.1111 = { + type = character_event + title = ep3_laamp_flavour_ewan.1111.t + desc = { + desc = ep3_laamp_flavour_ewan.1111.desc.intro + first_valid = { + triggered_desc = { + trigger = { + domicile = { has_domicile_building = baggage_train_kennel } + } + desc = ep3_laamp_flavour_ewan.1111.desc.has_kennels + } + desc = ep3_laamp_flavour_ewan.1111.desc.no_kennels + } + desc = ep3_laamp_flavour_ewan.1111.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = laugh + } + right_portrait = { + character = scope:child + animation = happiness + } + override_background = { reference = corridor_day } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_1111 } + } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # And have a suitable child. + any_child = { ep3_laamp_flavour_ewan_1111_valid_child_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_1111 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_1111 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + random_child = { + limit = { ep3_laamp_flavour_ewan_1111_valid_child_trigger = yes } + save_scope_as = child + } + } + + # A GirlBoy and HerHis dog. + option = { + name = ep3_laamp_flavour_ewan.1111.a + + scope:child = { + start_dog_story_cycle_effect = yes + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 50 + } + add_stress = massive_stress_loss + } + + # Everyone loves pets! + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Sadistic: drown the dog. + option = { + name = ep3_laamp_flavour_ewan.1111.b + trigger = { has_trait = sadistic } + trait = sadistic + + scope:child = { + set_relation_rival = { + reason = rival_drowned_dog + target = root + } + } + + # Mostly stress loss for the positives here. + stress_impact = { sadistic = 200 } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -3 } + } + } + + # Low on provisions: My, what a fat hound. Good find, LassLad! + option = { + name = ep3_laamp_flavour_ewan.1111.c + trigger = { domicile.provisions <= provisions_privation_threshold_start } + + domicile = { change_provisions = microscopic_provisions_gain } + scope:child = { + progress_towards_rival_effect = { + REASON = rival_ate_dog + CHARACTER = root + OPINION = default_rival_opinion + } + } + + stress_impact = { + callous = miniscule_stress_impact_loss + gluttonous = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # Scope:child! Stop playing with that filthy mutt! + option = { + name = ep3_laamp_flavour_ewan.1111.d + + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:child + modifier = hurt_opinion + opinion = -25 + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + opinion_modifier = { + opinion_target = scope:child + multiplier = -1 + } + } + } +} + + + + + + + + + + + +################################################## +# PERSONAL TENSIONS + +################################################## +# Plenty in Common +# by Ewan Cowhig Croft +# # 2001 - 2010 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2001_courtier_1_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { this = $TARGET$ } + OR = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + AND = { + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + opinion = { + target = $TARGET$ + value >= 1 + } + } + } + number_of_opposing_personality_traits = { + target = $TARGET$ + value <= 0 + } + opinion = { + target = $TARGET$ + value >= -40 + } + NOR = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } + can_set_relation_friend_trigger = { CHARACTER = $TARGET$ } +} + +scripted_effect ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = { + scope:follower_1 = { + # If the stars align, become best friends. + if = { + limit = { + can_set_relation_best_friend_trigger = { CHARACTER = scope:follower_2 } + opinion = { + target = scope:follower_2 + value >= 100 + } + reverse_opinion = { + target = scope:follower_2 + value >= 100 + } + } + set_relation_best_friend = { + reason = friend_mutual_traits + target = scope:follower_2 + } + } + # Otherwise, regular friends will do. + else = { + set_relation_friend = { + reason = friend_mutual_traits + target = scope:follower_2 + } + } + } +} + +# Friendship blooms over shared traits. +ep3_laamp_flavour_ewan.2001 = { + type = character_event + title = ep3_laamp_flavour_ewan.2001.t + desc = { + desc = ep3_laamp_flavour_ewan.2001.desc.intro + random_valid = { + # Lustful + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = lustful } + scope:follower_2 = { has_trait = lustful } + } + desc = ep3_laamp_flavour_ewan.2001.desc.lustful + } + # Chaste + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = chaste } + scope:follower_2 = { has_trait = chaste } + } + desc = ep3_laamp_flavour_ewan.2001.desc.chaste + } + # Gluttonous + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = gluttonous } + scope:follower_2 = { has_trait = gluttonous } + } + desc = ep3_laamp_flavour_ewan.2001.desc.gluttonous + } + # Temperate + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = temperate } + scope:follower_2 = { has_trait = temperate } + } + desc = ep3_laamp_flavour_ewan.2001.desc.temperate + } + # Greedy + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = greedy } + scope:follower_2 = { has_trait = greedy } + } + desc = ep3_laamp_flavour_ewan.2001.desc.greedy + } + # Generous + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = generous } + scope:follower_2 = { has_trait = generous } + } + desc = ep3_laamp_flavour_ewan.2001.desc.generous + } + # Lazy + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = lazy } + scope:follower_2 = { has_trait = lazy } + } + desc = ep3_laamp_flavour_ewan.2001.desc.lazy + } + # Diligent + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = diligent } + scope:follower_2 = { has_trait = diligent } + } + desc = ep3_laamp_flavour_ewan.2001.desc.diligent + } + # Wrathful + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = wrathful } + scope:follower_2 = { has_trait = wrathful } + } + desc = ep3_laamp_flavour_ewan.2001.desc.wrathful + } + # Calm + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = calm } + scope:follower_2 = { has_trait = calm } + } + desc = ep3_laamp_flavour_ewan.2001.desc.calm + } + # Patient + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = patient } + scope:follower_2 = { has_trait = patient } + } + desc = ep3_laamp_flavour_ewan.2001.desc.patient + } + # Impatient + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = impatient } + scope:follower_2 = { has_trait = impatient } + } + desc = ep3_laamp_flavour_ewan.2001.desc.impatient + } + # Arrogant + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = arrogant } + scope:follower_2 = { has_trait = arrogant } + } + desc = ep3_laamp_flavour_ewan.2001.desc.arrogant + } + # Humble + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = humble } + scope:follower_2 = { has_trait = humble } + } + desc = ep3_laamp_flavour_ewan.2001.desc.humble + } + # Deceitful + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = deceitful } + scope:follower_2 = { has_trait = deceitful } + } + desc = ep3_laamp_flavour_ewan.2001.desc.deceitful + } + # Honest + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = honest } + scope:follower_2 = { has_trait = honest } + } + desc = ep3_laamp_flavour_ewan.2001.desc.honest + } + # Craven + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = craven } + scope:follower_2 = { has_trait = craven } + } + desc = ep3_laamp_flavour_ewan.2001.desc.craven + } + # Brave + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = brave } + scope:follower_2 = { has_trait = brave } + } + desc = ep3_laamp_flavour_ewan.2001.desc.brave + } + # Shy + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = shy } + scope:follower_2 = { has_trait = shy } + } + desc = ep3_laamp_flavour_ewan.2001.desc.shy + } + # Gregarious + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = gregarious } + scope:follower_2 = { has_trait = gregarious } + } + desc = ep3_laamp_flavour_ewan.2001.desc.gregarious + } + # Ambitious + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = ambitious } + scope:follower_2 = { has_trait = ambitious } + } + desc = ep3_laamp_flavour_ewan.2001.desc.ambitious + } + # Content + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = content } + scope:follower_2 = { has_trait = content } + } + desc = ep3_laamp_flavour_ewan.2001.desc.content + } + # Arbitrary + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = arbitrary } + scope:follower_2 = { has_trait = arbitrary } + } + desc = ep3_laamp_flavour_ewan.2001.desc.arbitrary + } + # Just + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = just } + scope:follower_2 = { has_trait = just } + } + desc = ep3_laamp_flavour_ewan.2001.desc.just + } + # Cynical + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = cynical } + scope:follower_2 = { has_trait = cynical } + } + desc = ep3_laamp_flavour_ewan.2001.desc.cynical + } + # Zealous + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = zealous } + scope:follower_2 = { has_trait = zealous } + # Just for ease of loc. + scope:follower_1.faith = scope:follower_2.faith + } + desc = ep3_laamp_flavour_ewan.2001.desc.zealous + } + # Paranoid + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = paranoid } + scope:follower_2 = { has_trait = paranoid } + } + desc = ep3_laamp_flavour_ewan.2001.desc.paranoid + } + # Trusting + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = trusting } + scope:follower_2 = { has_trait = trusting } + } + desc = ep3_laamp_flavour_ewan.2001.desc.trusting + } + # Compassionate + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = compassionate } + scope:follower_2 = { has_trait = compassionate } + } + desc = ep3_laamp_flavour_ewan.2001.desc.compassionate + } + # Callous + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = callous } + scope:follower_2 = { has_trait = callous } + } + desc = ep3_laamp_flavour_ewan.2001.desc.callous + } + # Sadistic + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = sadistic } + scope:follower_2 = { has_trait = sadistic } + } + desc = ep3_laamp_flavour_ewan.2001.desc.sadistic + } + # Stubborn + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = stubborn } + scope:follower_2 = { has_trait = stubborn } + } + desc = ep3_laamp_flavour_ewan.2001.desc.stubborn + } + # Fickle + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = fickle } + scope:follower_2 = { has_trait = fickle } + } + desc = ep3_laamp_flavour_ewan.2001.desc.fickle + } + # Vengeful + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = vengeful } + scope:follower_2 = { has_trait = vengeful } + } + desc = ep3_laamp_flavour_ewan.2001.desc.vengeful + } + # Forgiving + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = forgiving } + scope:follower_2 = { has_trait = forgiving } + } + desc = ep3_laamp_flavour_ewan.2001.desc.forgiving + } + # Eccentric + triggered_desc = { + trigger = { + scope:follower_1 = { has_trait = eccentric } + scope:follower_2 = { has_trait = eccentric } + } + desc = ep3_laamp_flavour_ewan.2001.desc.eccentric + } + } + desc = ep3_laamp_flavour_ewan.2001.desc.outro + } + theme = laamp + left_portrait = { + character = scope:follower_1 + animation = admiration + } + right_portrait = { + character = scope:follower_2 + animation = happiness + } + override_background = { reference = ep3_campfire } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2001 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2001 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Now, let's make them like each other a bit more. + scope:follower_1 = { + add_opinion = { + target = scope:follower_2 + modifier = friendliness_opinion + opinion = 80 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = friendliness_opinion + opinion = 80 + } + } + } + + # Encourage the friendship. + option = { + name = ep3_laamp_flavour_ewan.2001.a + + ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes + duel = { + skill = diplomacy + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2001.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2001.a.tt.success + left_icon = scope:follower_1 + right_icon = scope:follower_2 + reverse_add_opinion = { + target = scope:follower_1 + modifier = respect_opinion + opinion = 40 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = respect_opinion + opinion = 40 + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2001.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2001.a.tt.failure + left_icon = scope:follower_1 + right_icon = scope:follower_2 + reverse_add_opinion = { + target = scope:follower_1 + modifier = annoyed_opinion + opinion = -20 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = annoyed_opinion + opinion = -20 + } + } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Try to break up that friendship. + option = { + name = ep3_laamp_flavour_ewan.2001.b + + duel = { + skill = diplomacy + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2001.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2001.b.tt.success + left_icon = scope:follower_1 + right_icon = scope:follower_2 + reverse_add_opinion = { + target = scope:follower_1 + modifier = respect_opinion + opinion = 20 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = respect_opinion + opinion = 20 + } + } + scope:follower_1 = { + remove_opinion = { + target = scope:follower_2 + modifier = friendliness_opinion + } + } + scope:follower_2 = { + remove_opinion = { + target = scope:follower_1 + modifier = friendliness_opinion + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2001.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2001.b.tt.failure + left_icon = scope:follower_1 + right_icon = scope:follower_2 + ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes + reverse_add_opinion = { + target = scope:follower_1 + modifier = annoyed_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = annoyed_opinion + opinion = -30 + } + } + } + } + + stress_impact = { + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + # Good for them. + option = { + name = ep3_laamp_flavour_ewan.2001.c + + ep3_laamp_flavour_ewan_2001_make_friends_or_best_friends_effect = yes + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } +} + +# Pre-filtering event to set up scopes. +ep3_laamp_flavour_ewan.2002 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2001 } + } + # Make sure we have suitable courtiers. + any_courtier = { + ep3_laamp_flavour_ewan_2001_courtier_1_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { TARGET = scope:char_temp } + } + } + } + } + + immediate = { + # Sort our courtiers. + ## First, get our scope:follower_1 candidate. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2001_courtier_1_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { TARGET = scope:char_temp } + } + } + } + save_scope_as = follower_1 + } + ## Now, find a scope:follower_2 from their opinion of the scope:follower_1 candidates. + ordered_courtier = { + limit = { + ep3_laamp_flavour_ewan_2001_courtier_2_trigger = { TARGET = scope:follower_1 } + } + order_by = "opinion(scope:follower_1)" + save_scope_as = follower_2 + } + trigger_event = ep3_laamp_flavour_ewan.2001 + } +} + +################################################## +# Camp Gossip +# by Ewan Cowhig Croft +# # 2011 - 2020 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + # Filter out anyone who matters to us, we want petty people. + ## This is partially for tone, partially so we can be less rigorous with checks'n'effects. + NOR = { + is_consort_of = root + is_close_family_of = root + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = { + is_married = yes + NOT = { + trait_is_shunned_or_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:adulterer + GENDER_CHARACTER = root + } + } + accepts_adultery_without_penalty_trigger = no +} + +scripted_trigger ep3_laamp_flavour_ewan_2011_might_steal_trigger = { + OR = { + has_trait = greedy + has_trait = arbitrary + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 50 + } + calc_true_if = { + amount >= 2 + has_trait = eccentric + has_trait = cynical + has_trait = impatient + } + } + NOR = { + has_trait = generous + has_trait = just + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2011_might_prank_trigger = { + OR = { + has_trait = gregarious + has_trait = arbitrary + has_trait = deceitful + has_trait = eccentric + } + NOR = { + has_trait = honest + has_trait = just + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = { + OR = { + has_trait = gregarious + has_trait = arbitrary + has_trait = deceitful + has_trait = eccentric + } + NOR = { + has_trait = honest + has_trait = shy + has_trait = just + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2011_might_feud_trigger = { + OR = { + has_trait = wrathful + has_trait = vengeful + has_trait = diligent + calc_true_if = { + amount >= 2 + has_trait = patient + has_trait = arrogant + has_trait = ambitious + } + } + NOR = { + has_trait = forgiving + has_trait = lazy + } +} + +# It's only one line, but these are held in different events hundreds of lines of script apart, so good hygiene demands it. +scripted_effect ep3_laamp_flavour_ewan_2011_duel_loss_effect = { + add_prestige = minor_prestige_loss +} + +# Someone shagged someone else's spouse/petty theft/series of cruel pranks/nasty rumours spread. +ep3_laamp_flavour_ewan.2011 = { + type = character_event + title = ep3_laamp_flavour_ewan.2011.t + desc = { + desc = ep3_laamp_flavour_ewan.2011.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:gossip_type = flag:affair } + desc = ep3_laamp_flavour_ewan.2011.desc.affair + } + triggered_desc = { + trigger = { scope:gossip_type = flag:petty_theft } + desc = ep3_laamp_flavour_ewan.2011.desc.petty_theft + } + triggered_desc = { + trigger = { scope:gossip_type = flag:cruel_pranks } + desc = ep3_laamp_flavour_ewan.2011.desc.cruel_pranks + } + triggered_desc = { + trigger = { scope:gossip_type = flag:nasty_rumours } + desc = ep3_laamp_flavour_ewan.2011.desc.nasty_rumours + } + triggered_desc = { + trigger = { scope:gossip_type = flag:hidden_feud } + desc = ep3_laamp_flavour_ewan.2011.desc.hidden_feud + } + } + desc = ep3_laamp_flavour_ewan.2011.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:victim + animation = stress + } + override_background = { reference = ep3_campfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2011 } + } + # Must have enough courtiers for this to be a possibility. + any_courtier = { + count >= 5 + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + OR = { + ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes + ep3_laamp_flavour_ewan_2011_might_steal_trigger = yes + ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes + ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes + ep3_laamp_flavour_ewan_2011_might_feud_trigger = yes + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2011 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2011 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Alright, which gossip will we be going with? + random_list = { + # Affair. + 100 = { + # Register our result. + save_scope_value_as = { + name = gossip_type + value = flag:affair + } + # Try to find a suitable candidate to make this true. + ## First by sorting everyone for whom it'd be shocking to have an affair into a list. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes + } + add_to_list = possible_affair_candidates_list + } + ## Then nabbing any valid pair. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_affair_candidates_list + this != scope:char_temp + has_secret_relation_lover = scope:char_temp + save_temporary_scope_as = root_secret_check_temp + root = { + NOR = { + any_known_secret = { + secret_type = secret_lover + secret_owner = scope:root_secret_check_temp + secret_target = scope:char_temp + } + any_known_secret = { + secret_type = secret_lover + secret_owner = scope:char_temp + secret_target = scope:root_secret_check_temp + } + } + } + save_temporary_scope_as = lover_temp + } + } + # Grab our scopes. + save_scope_as = lover_1 + scope:lover_temp = { save_scope_as = lover_2 } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + # If we don't have any lovers yet, see if we've got anyone we could nudge. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_secret_lover_would_be_affair_trigger = yes + might_cheat_on_every_partner_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_affair_candidates_list + this != scope:char_temp + has_relation_potential_lover = scope:char_temp + opinion = { + target = scope:char_temp + value >= 60 + } + reverse_opinion = { + target = scope:char_temp + value >= 60 + } + might_cheat_on_every_partner_trigger = yes + can_set_relation_lover_trigger = { CHARACTER = scope:char_temp } + save_temporary_scope_as = lover_temp + } + } + # Grab our scopes. + save_scope_as = lover_1 + scope:lover_temp = { save_scope_as = lover_2 } + # Now, randomise whether the story was true or false. + random = { + chance = 50 + # Ok, exacerbate our love story. + hidden_effect = { + scope:lover_1 = { + add_secret = { + target = scope:lover_2 + type = secret_lover + } + } + } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + } + # Otherwise, we register it as false. + if = { + limit = { + NOT = { exists = scope:gossip_veracity } + } + save_scope_value_as = { + name = gossip_veracity + value = flag:false + } + } + } + # Petty theft. + 100 = { + # Register our result. + save_scope_value_as = { + name = gossip_type + value = flag:petty_theft + } + # Try to find a suitable candidate to make this true. + ## First, grab anyone/everyone who'd steal. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_steal_trigger = yes + } + add_to_list = possible_thieves_list + } + ## Then try to find anyone they'd steal from. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_thieves_list + this != scope:char_temp + opinion = { + target = scope:char_temp + value <= -50 + } + save_temporary_scope_as = thief_temp + } + } + # Grab our scopes. + save_scope_as = victim + scope:thief_temp = { save_scope_as = thief } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + # Otherwise, we register it as false. + if = { + limit = { + NOT = { exists = scope:gossip_veracity } + } + save_scope_value_as = { + name = gossip_veracity + value = flag:false + } + } + } + # Series of cruel pranks. + 100 = { + trigger = { + any_courtier = { + count >= 2 + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes + } + } + # Register our result. + save_scope_value_as = { + name = gossip_type + value = flag:cruel_pranks + } + # Try to find a suitable candidate to make this true. + ## First, grab anyone/everyone who'd play harsh jokes. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_prank_trigger = yes + } + add_to_list = possible_pranksters_list + } + ## Then try to find anyone they'd be cruel to. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_pranksters_list + this != scope:char_temp + opinion = { + target = scope:char_temp + value <= -50 + } + save_temporary_scope_as = prankster_temp + } + } + # Grab our scopes. + save_scope_as = victim + scope:prankster_temp = { save_scope_as = prankster } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + # Otherwise, we register it as false. + if = { + limit = { + NOT = { exists = scope:gossip_veracity } + } + save_scope_value_as = { + name = gossip_veracity + value = flag:false + } + # If we don't have a scope:victim by now, create one. + random_courtier = { + limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes } + save_scope_as = victim + } + } + # Plus stress out our victim a little. + scope:victim = { add_stress = medium_stress_gain } + } + # Nasty rumours. + 100 = { + trigger = { + any_courtier = { + count >= 2 + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes + } + } + # Register our result. + save_scope_value_as = { + name = gossip_type + value = flag:nasty_rumours + } + # Try to find a suitable candidate to make this true. + ## First, grab anyone/everyone who'd spread evil rumours. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_rumourmonger_trigger = yes + } + add_to_list = possible_rumourmongers_list + } + ## Then try to find anyone they'd lie about. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_rumourmongers_list + this != scope:char_temp + opinion = { + target = scope:char_temp + value <= -50 + } + save_temporary_scope_as = rumourmonger_temp + } + } + # Grab our scopes. + save_scope_as = victim + scope:rumourmonger_temp = { save_scope_as = rumourmonger } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + # Otherwise, we register it as false. + if = { + limit = { + NOT = { exists = scope:gossip_veracity } + } + save_scope_value_as = { + name = gossip_veracity + value = flag:false + } + # If we don't have a scope:victim by now, create one. + random_courtier = { + limit = { ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes } + save_scope_as = victim + } + } + # Plus stress out our victim a little. + scope:victim = { add_stress = medium_stress_gain } + } + # Hidden feud. + 100 = { + # Register our result. + save_scope_value_as = { + name = gossip_type + value = flag:hidden_feud + } + # Try to find a suitable candidate to make this true. + ## First, grab anyone/everyone who'd start shit over nothing. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + ep3_laamp_flavour_ewan_2011_might_feud_trigger = yes + } + add_to_list = possible_feuds_list + } + ## Then try to find anyone they'd steal from. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2011_valid_courtier_for_gossip_trigger = yes + save_temporary_scope_as = char_temp + any_in_list = { + list = possible_feuds_list + this != scope:char_temp + has_relation_potential_rival = scope:char_temp + opinion = { + target = scope:char_temp + value <= -25 + } + save_temporary_scope_as = rival_temp + } + } + # Grab our scopes. + save_scope_as = rival_1 + scope:rival_temp = { save_scope_as = rival_2 } + # Now, randomise whether the story was true or false. + random = { + chance = 50 + # Ok, exacerbate our rivalry. + hidden_effect = { + scope:rival_1 = { + add_opinion = { + target = scope:rival_2 + modifier = irritated_opinion + opinion = -50 + } + reverse_add_opinion = { + target = scope:rival_2 + modifier = irritated_opinion + opinion = -50 + } + } + } + # And note that the story was true. + save_scope_value_as = { + name = gossip_veracity + value = flag:true + } + } + } + # Otherwise, we register it as false. + if = { + limit = { + NOT = { exists = scope:gossip_veracity } + } + save_scope_value_as = { + name = gossip_veracity + value = flag:false + } + } + } + } + # Error suppression. + if = { + limit = { scope:gossip_veracity = flag:false } + } + } + + # Investigate the truth of the matter. + option = { + name = ep3_laamp_flavour_ewan.2011.a + + custom_tooltip = ep3_laamp_flavour_ewan.2011.a.tt.explanation + duel = { + skill = intrigue + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2011.a.tt.success + # Alright, what event do we want to see? + ## Affair actually happening. + if = { + limit = { + scope:gossip_type = flag:affair + scope:gossip_veracity = flag:true + } + trigger_event = ep3_laamp_flavour_ewan.2012 + } + ## Petty theft actually happened. + else_if = { + limit = { + scope:gossip_type = flag:petty_theft + scope:gossip_veracity = flag:true + } + trigger_event = ep3_laamp_flavour_ewan.2013 + } + ## Cruel pranks actually happening. + else_if = { + limit = { + scope:gossip_type = flag:cruel_pranks + scope:gossip_veracity = flag:true + } + trigger_event = ep3_laamp_flavour_ewan.2014 + } + ## Nasty rumours actually happening. + else_if = { + limit = { + scope:gossip_type = flag:nasty_rumours + scope:gossip_veracity = flag:true + } + trigger_event = ep3_laamp_flavour_ewan.2015 + } + ## Hidden feud actually on-going. + else_if = { + limit = { + scope:gossip_type = flag:hidden_feud + scope:gossip_veracity = flag:true + } + trigger_event = ep3_laamp_flavour_ewan.2016 + } + ## Otherwise, nothing was really happening. + else = { + # Which means we won the duel but there was nothing to see. + save_scope_value_as = { + name = duel_result + value = flag:won + } + trigger_event = ep3_laamp_flavour_ewan.2017 + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2011.a.tt.failure + # Flag that we failed the skill check & proceed to part 2. + save_scope_value_as = { + name = duel_result + value = flag:lost + } + trigger_event = ep3_laamp_flavour_ewan.2017 + show_as_tooltip = { ep3_laamp_flavour_ewan_2011_duel_loss_effect = yes } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 2 } + } + } + + # Agree with the accusations baselessly. + option = { + name = ep3_laamp_flavour_ewan.2011.b + + # Give us a minor modifier. + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_source_of_truth_modifier + years = 3 + } + # At the cost of annoying scope:victim, if they exist. + scope:victim ?= { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -30 + } + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_sociability = 1 + ai_honor = -1 + } + } + } + + # Leave well enough alone. + option = { + name = ep3_laamp_flavour_ewan.2011.c + + # Consolation prestige for staying aloof. + add_prestige = minor_prestige_gain + + stress_impact = { + shy = minor_stress_impact_loss + honest = miniscule_stress_impact_loss + deceitful = minor_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } +} + +# Discovered affair. +ep3_laamp_flavour_ewan.2012 = { + type = character_event + title = ep3_laamp_flavour_ewan.2012.t + desc = ep3_laamp_flavour_ewan.2012.desc + theme = laamp + left_portrait = { + character = scope:lover_1 + animation = shock + } + right_portrait = { + character = scope:lover_2 + animation = worry + } + override_background = { reference = ep3_campfire } + + immediate = { + # Nab our secret lover relationship. + scope:lover_1 = { + random_secret = { + type = secret_lover + limit = { + OR = { + AND = { + secret_owner = scope:lover_1 + secret_target = scope:lover_2 + } + AND = { + secret_owner = scope:lover_2 + secret_target = scope:lover_1 + } + } + } + save_scope_as = secret + } + } + # And reveal it to root. + scope:secret = { reveal_to = root } + } + + # Reveal it immediately for bonuses. + option = { + name = ep3_laamp_flavour_ewan.2012.a + + scope:secret = { expose_secret = root } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + reverse_add_opinion = { + target = scope:lover_1 + modifier = cruelty_opinion + opinion = -40 + } + reverse_add_opinion = { + target = scope:lover_2 + modifier = cruelty_opinion + opinion = -40 + } + + stress_impact = { + honest = minor_stress_impact_loss + deceitful = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + } + } + + # Keep it — for now. + option = { + name = ep3_laamp_flavour_ewan.2012.b + + reverse_add_opinion = { + target = scope:lover_1 + modifier = grateful_opinion + opinion = 50 + } + reverse_add_opinion = { + target = scope:lover_2 + modifier = grateful_opinion + opinion = 50 + } + + stress_impact = { + deceitful = minor_stress_impact_loss + honest = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } +} + +# Discovered theft. +ep3_laamp_flavour_ewan.2013 = { + type = character_event + title = ep3_laamp_flavour_ewan.2013.t + desc = ep3_laamp_flavour_ewan.2013.desc + theme = laamp + left_portrait = { + character = scope:victim + animation = anger + } + right_portrait = { + character = scope:thief + animation = disbelief + } + override_background = { reference = ep3_campfire } + + immediate = { + scope:victim = { + pay_short_term_gold = { + target = scope:thief + gold = minor_gold_laamps_value + } + } + } + + # Punish scope:thief. + option = { + name = ep3_laamp_flavour_ewan.2013.a + + # Scope:victim is happy. + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + scope:victim = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 40 + } + progress_towards_rival_effect = { + REASON = rival_stole_petty_sum + CHARACTER = scope:thief + OPINION = default_rival_opinion + } + } + # Apply consequences. + scope:thief = { + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -30 + } + # Plus some stress. + add_stress = major_stress_gain + # Apply some gallowsbait XP for scope:thief. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + + stress_impact = { + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + } + } + + # Cover for scope:thief. + option = { + name = ep3_laamp_flavour_ewan.2013.b + + # Scope:thief is happy. + add_favour_hook_if_possible_simple_effect = { TARGET = scope:thief } + reverse_add_opinion = { + target = scope:thief + modifier = grateful_opinion + opinion = 40 + } + # Apply consequences. + scope:victim = { + add_opinion = { + target = root + modifier = failure_opinion + opinion = -20 + } + # Plus some stress. + add_stress = major_stress_gain + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -11 } + } + } + + # Let it be known, but leave it at that. + option = { + name = ep3_laamp_flavour_ewan.2013.c + + # Neither party is too happy. + scope:victim = { + add_opinion = { + target = root + modifier = upset_opinion + opinion = -10 + } + progress_towards_rival_effect = { + REASON = rival_stole_petty_sum + CHARACTER = scope:thief + OPINION = default_rival_opinion + } + } + scope:thief = { + add_opinion = { + target = root + modifier = upset_opinion + opinion = -10 + } + # Apply some gallowsbait XP for scope:thief. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = thief + XP_MAX = gallowsbait_xp_minor_gain + XP_MIN = gallowsbait_xp_minor_gain + } + } + # But you do seem quite impartial. + add_prestige = medium_prestige_gain + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } +} + +# Discovered cruel pranks. +ep3_laamp_flavour_ewan.2014 = { + type = character_event + title = ep3_laamp_flavour_ewan.2014.t + desc = ep3_laamp_flavour_ewan.2014.desc + theme = laamp + left_portrait = { + character = scope:victim + animation = anger + } + right_portrait = { + character = scope:prankster + animation = disbelief + } + override_background = { reference = ep3_campfire } + + # Punish scope:prankster. + option = { + name = ep3_laamp_flavour_ewan.2014.a + + # Scope:victim is happy. + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + scope:victim = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + progress_towards_rival_effect = { + REASON = rival_played_cruel_pranks + CHARACTER = scope:prankster + OPINION = default_rival_opinion + } + } + # Apply consequences. + scope:prankster = { + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -20 + } + # Plus some stress. + add_stress = medium_stress_gain + } + + stress_impact = { + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + } + } + + # Cover for scope:prankster. + option = { + name = ep3_laamp_flavour_ewan.2014.b + + # Scope:prankster is happy. + add_favour_hook_if_possible_simple_effect = { TARGET = scope:prankster } + reverse_add_opinion = { + target = scope:prankster + modifier = grateful_opinion + opinion = 30 + } + # Apply consequences. + scope:victim = { + add_opinion = { + target = root + modifier = failure_opinion + opinion = -20 + } + # Plus some stress. + add_stress = medium_stress_gain + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -11 } + } + } + + # Let it be known, but leave it at that. + option = { + name = ep3_laamp_flavour_ewan.2014.c + + # Neither party is too happy. + scope:victim = { + add_opinion = { + target = root + modifier = upset_opinion + opinion = -10 + } + progress_towards_rival_effect = { + REASON = rival_played_cruel_pranks + CHARACTER = scope:prankster + OPINION = default_rival_opinion + } + } + reverse_add_opinion = { + target = scope:prankster + modifier = upset_opinion + opinion = -10 + } + # But you do seem quite impartial. + add_prestige = minor_prestige_gain + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } +} + +# Discovered source of rumours. +ep3_laamp_flavour_ewan.2015 = { + type = character_event + title = ep3_laamp_flavour_ewan.2015.t + desc = ep3_laamp_flavour_ewan.2015.desc + theme = laamp + left_portrait = { + character = scope:victim + animation = anger + } + right_portrait = { + character = scope:rumourmonger + animation = disbelief + } + override_background = { reference = ep3_campfire } + + # Punish scope:rumourmonger. + option = { + name = ep3_laamp_flavour_ewan.2015.a + + # Scope:victim is happy. + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + scope:victim = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + progress_towards_rival_effect = { + REASON = rival_spread_rumours + CHARACTER = scope:rumourmonger + OPINION = default_rival_opinion + } + } + # Apply consequences. + scope:rumourmonger = { + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -20 + } + # Plus some stress. + add_stress = medium_stress_gain + } + + stress_impact = { + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + } + } + + # Cover for scope:rumourmonger. + option = { + name = ep3_laamp_flavour_ewan.2015.b + + # Scope:rumourmonger is happy. + add_favour_hook_if_possible_simple_effect = { TARGET = scope:rumourmonger } + reverse_add_opinion = { + target = scope:rumourmonger + modifier = grateful_opinion + opinion = 30 + } + # Apply consequences. + scope:victim = { + add_opinion = { + target = root + modifier = failure_opinion + opinion = -20 + } + # Plus some stress. + add_stress = medium_stress_gain + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -11 } + } + } + + # Let it be known, but leave it at that. + option = { + name = ep3_laamp_flavour_ewan.2015.c + + # Neither party is too happy. + scope:victim = { + add_opinion = { + target = root + modifier = upset_opinion + opinion = -10 + } + progress_towards_rival_effect = { + REASON = rival_spread_rumours + CHARACTER = scope:rumourmonger + OPINION = default_rival_opinion + } + } + reverse_add_opinion = { + target = scope:rumourmonger + modifier = upset_opinion + opinion = -10 + } + # But you do seem quite impartial. + add_prestige = minor_prestige_gain + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } +} + +# Discovered hidden feud. +ep3_laamp_flavour_ewan.2016 = { + type = character_event + title = ep3_laamp_flavour_ewan.2016.t + desc = ep3_laamp_flavour_ewan.2016.desc + theme = laamp + left_portrait = { + character = scope:rival_1 + animation = anger + } + right_portrait = { + character = scope:rival_2 + animation = dismissal + } + override_background = { reference = ep3_campfire } + + immediate = { + scope:rival_1 = { + set_random_rivalry_reason = { + TARGET = scope:rival_2 + RELATION = rival + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2011_truth_hound_modifier + years = 10 + } + add_prestige = minor_prestige_gain + } + + # Try to reconcile them. + option = { + name = ep3_laamp_flavour_ewan.2016.a + + # Nab whichever rival has the higher diplomacy to be the duel target. + if = { + limit = { scope:rival_1.diplomacy >= scope:rival_2.diplomacy } + scope:rival_1 = { save_scope_as = duel_target } + } + else = { + scope:rival_2 = { save_scope_as = duel_target } + } + # Then roll the duel. + duel = { + skill = diplomacy + target = scope:duel_target + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2016.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2016.a.tt.success + left_icon = scope:rival_1 + right_icon = scope:rival_2 + scope:rival_1 = { remove_relation_rival = scope:rival_2 } + add_favour_hook_if_possible_simple_effect = { TARGET = scope:rival_1 } + add_favour_hook_if_possible_simple_effect = { TARGET = scope:rival_2 } + } + reverse_add_opinion = { + target = scope:rival_1 + modifier = respect_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:rival_2 + modifier = respect_opinion + opinion = 30 + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2016.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2016.a.tt.failure + left_icon = scope:rival_1 + right_icon = scope:rival_2 + reverse_add_opinion = { + target = scope:rival_1 + modifier = respect_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:rival_2 + modifier = respect_opinion + opinion = -30 + } + } + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 2 } + } + } + + # Instruct them that they will not allow their rivalry to hurt the camp. + option = { + name = ep3_laamp_flavour_ewan.2016.b + + reverse_add_opinion = { + target = scope:rival_1 + modifier = respect_opinion + opinion = 20 + } + reverse_add_opinion = { + target = scope:rival_2 + modifier = respect_opinion + opinion = 20 + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } +} + +# No discovery. +ep3_laamp_flavour_ewan.2017 = { + type = character_event + title = ep3_laamp_flavour_ewan.2017.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:gossip_type = flag:affair } + desc = ep3_laamp_flavour_ewan.2017.desc.affair + } + triggered_desc = { + trigger = { scope:gossip_type = flag:petty_theft } + desc = ep3_laamp_flavour_ewan.2017.desc.petty_theft + } + triggered_desc = { + trigger = { scope:gossip_type = flag:cruel_pranks } + desc = ep3_laamp_flavour_ewan.2017.desc.cruel_pranks + } + triggered_desc = { + trigger = { scope:gossip_type = flag:nasty_rumours } + desc = ep3_laamp_flavour_ewan.2017.desc.nasty_rumours + } + triggered_desc = { + trigger = { scope:gossip_type = flag:hidden_feud } + desc = ep3_laamp_flavour_ewan.2017.desc.hidden_feud + } + } + first_valid = { + triggered_desc = { + trigger = { scope:duel_result = flag:won } + desc = ep3_laamp_flavour_ewan.2017.desc.duel.won + } + desc = ep3_laamp_flavour_ewan.2017.desc.duel.lost + } + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + animation = boredom + trigger = { scope:duel_result = flag:won } + } + triggered_animation = { + animation = shame + trigger = { scope:duel_result = flag:lost } + } + } + right_portrait = { + character = scope:victim + animation = paranoia + } + override_background = { reference = ep3_campfire } + + immediate = { + # If we have a victim, they're none too happy. + scope:victim ?= { add_stress = major_stress_gain } + } + + # Duel won. + option = { + name = ep3_laamp_flavour_ewan.2017.a + trigger = { scope:duel_result = flag:won } + + add_prestige = minor_prestige_gain + + stress_impact = { diligent = minor_stress_impact_loss } + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } + + # Duel lost. + option = { + name = ep3_laamp_flavour_ewan.2017.b + trigger = { scope:duel_result = flag:lost } + + ep3_laamp_flavour_ewan_2011_duel_loss_effect = yes + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } +} + +################################################## +# Bound Together +# by Ewan Cowhig Croft +# # 2021 - 2030 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = { + NOT = { has_character_flag = marriage_request_turned_down } + NOT = { has_trait = celibate } + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + # Make sure they either don't have complex relationships already, or else don't care about them. + any_consort = { count <= 0 } + might_cheat_on_every_partner_trigger = yes + # Filter out anyone who matters to us (excepting friends, who it's nice to approve, and rivals, who it's nice to turn down), we want mostly petty people. + NOR = { + is_close_family_of = root + has_relation_lover = root + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes + NOT = { this = $TARGET$ } + # Must have matching sexualities & the right legalities in place. + is_attracted_to_gender_of = $TARGET$ + $TARGET$ = { is_attracted_to_gender_of = prev } + could_marry_character_trigger = { CHARACTER = $TARGET$ } + # Ensure our ages aren't too far apart — not that this couldn't happen, but huge age gaps are a big verisimilitude problem for many players. + age >= { + value = $TARGET$.age + add = -15 + } + age <= { + value = $TARGET$.age + add = 15 + } + # Try to see how well they get along. + OR = { + AND = { + # Something in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + # Mutual positive opinions. + opinion = { + target = $TARGET$ + value >= 1 + } + reverse_opinion = { + target = $TARGET$ + value >= 1 + } + } + AND = { + # Lots in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + # They don't hate each other completely. + opinion = { + target = $TARGET$ + value >= -30 + } + reverse_opinion = { + target = $TARGET$ + value >= -30 + } + } + # Everything in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + } + # Make sure we're not already lovers. + NOT = { has_relation_lover = $TARGET$ } + # Filter out any rivals that somehow made it this far. + NOT = { + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } +} + +# Marriage/concubinage at camp. +ep3_laamp_flavour_ewan.2021 = { + type = character_event + title = ep3_laamp_flavour_ewan.2021.t + desc = ep3_laamp_flavour_ewan.2021.desc + theme = laamp + left_portrait = { + character = scope:follower_1 + animation = flirtation_left + } + right_portrait = { + character = scope:follower_2 + animation = admiration + } + override_background = { reference = ep3_campfire } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2021 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2021 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Make sure they like each other. + scope:follower_1 = { + add_opinion = { + target = scope:follower_2 + modifier = love_opinion + opinion = 100 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = love_opinion + opinion = 100 + } + } + # Plus, check if we should be matrilineal or patrilineal. + random_list = { + 100 = { + trigger = { + scope:follower_1 = { + faith = { + OR = { + has_doctrine = doctrine_gender_female_dominated + has_doctrine = doctrine_gender_equal + } + } + is_female = yes + } + } + save_scope_value_as = { + name = dominant_partner + value = flag:matrilineal + } + } + 100 = { + trigger = { + scope:follower_1 = { + faith = { + OR = { + has_doctrine = doctrine_gender_male_dominated + has_doctrine = doctrine_gender_equal + } + } + is_male = yes + } + } + save_scope_value_as = { + name = dominant_partner + value = flag:patrilineal + } + } + 100 = { + trigger = { + scope:follower_2 = { + faith = { + OR = { + has_doctrine = doctrine_gender_female_dominated + has_doctrine = doctrine_gender_equal + } + } + is_female = yes + } + } + save_scope_value_as = { + name = dominant_partner + value = flag:matrilineal + } + } + 100 = { + trigger = { + scope:follower_2 = { + faith = { + OR = { + has_doctrine = doctrine_gender_male_dominated + has_doctrine = doctrine_gender_equal + } + } + is_male = yes + } + } + save_scope_value_as = { + name = dominant_partner + value = flag:patrilineal + } + } + } + } + + # Permit the union. + option = { + name = ep3_laamp_flavour_ewan.2021.a + + if = { + limit = { + scope:dominant_partner = flag:matrilineal + scope:follower_1 = { is_female = yes } + } + scope:follower_1 = { marry_matrilineal = scope:follower_2 } + } + else = { + scope:follower_2 = { marry = scope:follower_1 } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Allow, but require only concubinage. + option = { + name = ep3_laamp_flavour_ewan.2021.b + trigger = { + OR = { + AND = { + scope:dominant_partner = flag:matrilineal + OR = { + scope:follower_1 = { + is_female = yes + faith = { has_doctrine = doctrine_concubines } + } + scope:follower_2 = { + is_female = yes + faith = { has_doctrine = doctrine_concubines } + } + } + } + AND = { + scope:dominant_partner = flag:patrilineal + OR = { + scope:follower_1 = { + is_male = yes + faith = { has_doctrine = doctrine_concubines } + } + scope:follower_2 = { + is_male = yes + faith = { has_doctrine = doctrine_concubines } + } + } + } + } + } + + # Apply the concubinage. + if = { + limit = { + scope:dominant_partner = flag:matrilineal + scope:follower_1 = { is_female = yes } + } + scope:follower_1 = { make_concubine = scope:follower_2 } + } + else = { + scope:follower_2 = { make_concubine = scope:follower_1 } + } + # If your faith doesn't allow concubinage, pay piety for this. + if = { + limit = { + NOT = { + faith = { has_doctrine = doctrine_concubines } + } + } + add_piety = major_piety_loss + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_vengefulness = 0.25 } + } + } + + # Forbid them. + option = { + name = ep3_laamp_flavour_ewan.2021.c + + custom_tooltip = ep3_laamp_flavour_ewan.2021.c.tt + reverse_add_opinion = { + target = scope:follower_1 + modifier = angry_opinion + opinion = -50 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = angry_opinion + opinion = -50 + } + # Decent chance this won't stop 'em. + hidden_effect = { + random = { + chance = 25 + scope:follower_1 = { + add_secret = { + target = scope:follower_2 + type = secret_lover + } + } + } + } + # Stop either of them from asking again for a _while_. + scope:follower_1 = { + add_character_flag = { + flag = marriage_request_turned_down + years = 30 + } + } + scope:follower_2 = { + add_character_flag = { + flag = marriage_request_turned_down + years = 30 + } + } + + stress_impact = { + sadistic = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } +} + +# Pre-filtering event to set up scopes. +ep3_laamp_flavour_ewan.2022 = { + hidden = yes + + trigger = { + trigger_if = { + limit = { + is_ai = yes + } + static_group_filter = { + group = ep3_laamp_flavour_ewan.2022 + match = 0.2 + } + } + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2021 } + } + # Must have suitable courtiers around and about. + any_courtier = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:char_temp } + } + } + } + } + + immediate = { + # Alright, let's select our lovebirds. + ## First, pick a scope:follower_1 candidate. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:char_temp } + } + } + } + save_scope_as = follower_1 + } + ## Now, nab a suitable pair. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:follower_1 } + } + weight = { + opinion_modifier = { + opinion_target = scope:follower_1 + multiplier = 0.5 + } + opinion_modifier = { + who = scope:follower_1 + opinion_target = this + multiplier = 0.5 + } + } + save_scope_as = follower_2 + } + trigger_event = ep3_laamp_flavour_ewan.2021 + } +} + +################################################## +# Through with You +# by Ewan Cowhig Croft +# # 2031 - 2040 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + # Make sure they hate us. + opinion = { + target = root + value <= -95 + } + # And wouldn't suck in the resultant duel. + diplomacy >= high_skill_rating + # Plus stop the stooge from leaving. + NOT = { has_court_position = stooge_camp_officer } + # Filter out characters who've tried this and failed. + NOT = { has_character_flag = failed_to_quit_camp } +} + +# Someone who hates you up and leaves. +ep3_laamp_flavour_ewan.2031 = { + type = character_event + title = ep3_laamp_flavour_ewan.2031.t + desc = { + desc = ep3_laamp_flavour_ewan.2031.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:waverers_check = flag:some } + desc = ep3_laamp_flavour_ewan.2031.desc.waverers.some + } + desc = ep3_laamp_flavour_ewan.2031.desc.waverers.none + } + } + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:firebrand + animation = rage + } + override_background = { reference = ep3_campfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2031 } + } + # Make sure we have at least one firebrand troublemaker. + any_courtier = { ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2031 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2031 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longer + } + } + # Grab a suitable firebrand. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_2031_valid_hating_courtier_trigger = yes } + order_by = diplomacy + save_scope_as = firebrand + } + # See if we have anyone else who'd leave with them. + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + opinion = { + target = root + value <= -60 + } + # Not the stooge. + NOT = { has_court_position = stooge_camp_officer } + # Nor scope:firebrand themselves. + this != scope:firebrand + } + add_to_list = wavering_courtiers_list + save_scope_value_as = { + name = waverers_check + value = flag:some + } + } + # If we've got not waverers, flag that for loc. + if = { + limit = { "list_size(wavering_courtiers_list)" <= 0 } + save_scope_value_as = { + name = waverers_check + value = flag:none + } + } + } + + # Perhaps I can persuade you... + option = { + name = ep3_laamp_flavour_ewan.2031.a + + duel = { + skill = diplomacy + target = scope:firebrand + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2031.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2031.a.tt.success + left_icon = scope:firebrand + scope:firebrand = { + add_stress = major_stress_gain + hidden_effect = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + } + } + every_in_list = { + list = wavering_courtiers_list + custom = ep3_laamp_flavour_ewan.2031.tt.success.wavering_courtiers + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + } + } + scope:firebrand = { add_character_flag = failed_to_quit_camp } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2031.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2031.a.tt.failure + left_icon = scope:firebrand + add_prestige = medium_prestige_loss + scope:firebrand = { select_and_move_to_pool_effect = yes } + every_in_list = { + list = wavering_courtiers_list + custom = ep3_laamp_flavour_ewan.2031.tt.failure.wavering_courtiers_move_to_pool + select_and_move_to_pool_effect = yes + } + } + } + } + + stress_impact = { + calm = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + vengeful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # You're going nowhere, clap HerHim in irons! + option = { + name = ep3_laamp_flavour_ewan.2031.b + + # If you don't have a good reason, then yeah, this'll make you look like a douche. + imprison_character_effect = { + TARGET = scope:firebrand + IMPRISONER = root + } + scope:firebrand = { add_character_flag = failed_to_quit_camp } + + stress_impact = { + wrathful = miniscule_stress_impact_loss + vengeful = miniscule_stress_impact_loss + forgiving = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + } + } + + # Leave if you wish, but you'll take no one and nothing. + option = { + name = ep3_laamp_flavour_ewan.2031.c + trigger = { scope:waverers_check = flag:some } + + duel = { + skill = prowess + target = scope:firebrand + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2031.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2031.c.tt.success + left_icon = scope:firebrand + scope:firebrand = { select_and_move_to_pool_effect = yes } + every_in_list = { + list = wavering_courtiers_list + custom = ep3_laamp_flavour_ewan.2031.tt.success.wavering_courtiers + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2031.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2031.c.tt.failure + left_icon = scope:firebrand + add_prestige = medium_prestige_loss + scope:firebrand = { select_and_move_to_pool_effect = yes } + every_in_list = { + list = wavering_courtiers_list + custom = ep3_laamp_flavour_ewan.2031.tt.failure.wavering_courtiers_move_to_pool + select_and_move_to_pool_effect = yes + } + } + } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + forgiving = miniscule_stress_impact_loss + vengeful = miniscule_stress_impact_gain + wrathful = miniscule_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Go then, all of you. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { scope:waverers_check = flag:some } + desc = ep3_laamp_flavour_ewan.2031.d.multi + } + desc = ep3_laamp_flavour_ewan.2031.d.solo + } + } + } + + # Consolation prestige. + if = { + limit = { scope:waverers_check = flag:some } + add_prestige = medium_prestige_gain + } + else = { add_prestige = minor_prestige_gain } + # And we lose _everyone_. + scope:firebrand = { select_and_move_to_pool_effect = yes } + every_in_list = { + list = wavering_courtiers_list + select_and_move_to_pool_effect = yes + } + + stress_impact = { + shy = medium_stress_impact_loss + calm = medium_stress_impact_loss + forgiving = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + gregarious = minor_stress_impact_gain + sadistic = medium_stress_impact_gain + vengeful = major_stress_impact_gain + wrathful = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } +} + +################################################## +# Closer Quarters +# by Ewan Cowhig Croft +# # 2041 - 2050 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { has_trait = celibate } + # Make sure they either don't have complex relationships already, or else don't care about them. + might_cheat_on_every_partner_trigger = yes + # One lover at a time (for most), just to keep the complexity down. + OR = { + num_of_relation_lover <= 0 + has_trait = lustful + has_trait = seducer + has_trait = rakish + } + # Filter out anyone we're in a relationship with, so that there's no weird complexities to account for there. + NOR = { + is_consort_of = root + has_relation_lover = root + } + # If it'd be criminal for us to cheat/fornicate, then at least make sure we'd chance it. + trigger_if = { + limit = { + OR = { + trait_is_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:adulterer + GENDER_CHARACTER = this + } + AND = { + is_male = yes + faith = { has_doctrine_parameter = homosexuality_illegal } + } + } + } + NOR = { + has_trait = zealous + has_trait = craven + has_trait = just + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_precise_trigger = { + ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes + NOT = { this = $TARGET$ } + # Must have matching sexualities & the right legalities in place. + is_attracted_to_gender_of = $TARGET$ + $TARGET$ = { is_attracted_to_gender_of = prev } + # Ensure our ages aren't too far apart — not that this couldn't happen, but huge age gaps are a big verisimilitude problem for many players. + age >= { + value = $TARGET$.age + add = -8 + } + age <= { + value = $TARGET$.age + add = 8 + } + # Try to see how well they get along. + OR = { + AND = { + # Something in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 1 + } + # Mutual positive opinions. + opinion = { + target = $TARGET$ + value >= 1 + } + reverse_opinion = { + target = $TARGET$ + value >= 1 + } + } + AND = { + # Lots in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 2 + } + # They don't hate each other completely. + opinion = { + target = $TARGET$ + value >= -30 + } + reverse_opinion = { + target = $TARGET$ + value >= -30 + } + } + # Everything in common. + number_of_personality_traits_in_common = { + target = $TARGET$ + value >= 3 + } + # Allow the terminally horny to hook up. + AND = { + has_trait = lustful + $TARGET$ = { has_trait = lustful } + } + } + # Filter out any rivals that somehow made it this far. + NOT = { + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } +} + +# Lover developing from various sources. +ep3_laamp_flavour_ewan.2041 = { + type = character_event + title = ep3_laamp_flavour_ewan.2041.t + desc = ep3_laamp_flavour_ewan.2041.desc + theme = laamp + left_portrait = { + character = scope:follower_1 + animation = love + } + right_portrait = { + character = scope:follower_2 + animation = flirtation + } + override_background = { reference = ep3_campfire } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2041 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2041 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Make sure they like each other. + scope:follower_1 = { + add_opinion = { + target = scope:follower_2 + modifier = tryst_opinion + opinion = 75 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = tryst_opinion + opinion = 75 + } + } + } + + # Have them split up. + option = { + name = ep3_laamp_flavour_ewan.2041.a + + # Nab whichever follower has the higher diplomacy to be the duel target. + if = { + limit = { scope:follower_1.diplomacy >= scope:follower_2.diplomacy } + scope:follower_1 = { save_scope_as = duel_target } + } + else = { + scope:follower_2 = { save_scope_as = duel_target } + } + duel = { + skill = diplomacy + target = scope:duel_target + # Victory! + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2041.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2041.a.tt.success + left_icon = scope:follower_1 + right_icon = scope:follower_2 + add_prestige = minor_prestige_gain + scope:follower_1 = { + stress_impact = { + base = medium_stress_gain + chaste = minor_stress_impact_loss + lustful = minor_stress_impact_gain + } + } + scope:follower_2 = { + stress_impact = { + base = medium_stress_gain + chaste = minor_stress_impact_loss + lustful = minor_stress_impact_gain + } + } + } + } + # Defeat. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2041.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2041.a.tt.failure + left_icon = scope:follower_1 + right_icon = scope:follower_2 + scope:follower_1 = { + set_random_lover_reason = { TARGET = scope:follower_2 } + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -40 + } + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = annoyed_opinion + opinion = -40 + } + } + scope:follower_1 = { + remove_opinion = { + target = scope:follower_2 + modifier = tryst_opinion + } + } + scope:follower_2 = { + remove_opinion = { + target = scope:follower_1 + modifier = tryst_opinion + } + } + } + } + + stress_impact = { + sadistic = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + opinion_modifier = { + opinion_target = scope:follower_1 + multiplier = -0.5 + } + opinion_modifier = { + opinion_target = scope:follower_2 + multiplier = -0.5 + } + } + } + + # None of my business. + option = { + name = ep3_laamp_flavour_ewan.2041.b + + scope:follower_1 = { + set_random_lover_reason = { TARGET = scope:follower_2 } + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 2 } + opinion_modifier = { + opinion_target = scope:follower_1 + multiplier = 0.5 + } + opinion_modifier = { + opinion_target = scope:follower_2 + multiplier = 0.5 + } + } + } +} + +# Pre-filtering event to set up scopes. +ep3_laamp_flavour_ewan.2042 = { + hidden = yes + + trigger = { + trigger_if = { + limit = { + is_ai = yes + } + static_group_filter = { + group = ep3_laamp_flavour_ewan.2042 + match = 0.2 + } + } + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2041 } + } + # Must have suitable courtiers around and about. + any_courtier = { + ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:char_temp } + } + } + } + } + + immediate = { + # Alright, let's select our lovebirds. + ## First up, pick an appropriate character. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2041_valid_courtier_to_gain_lover_precise_trigger = { TARGET = scope:char_temp } + } + } + } + save_scope_as = follower_1 + } + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2021_valid_courtier_for_own_marriage_precise_trigger = { TARGET = scope:follower_1 } + } + weight = { + modifier = { + add = attraction + always = yes + } + modifier = { + add = 50 + has_trait = lustful + } + modifier = { + add = -50 + has_trait = chaste + } + } + save_scope_as = follower_2 + } + # If we've actually got our dudes, proceed to the event. + trigger_event = ep3_laamp_flavour_ewan.2041 + } +} + +################################################## +# What's the Point? +# by Ewan Cowhig Croft +# # 2051 - 2060 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + OR = { + has_trait = lazy + has_trait = eccentric + has_trait = athletic + AND = { + has_trait = diligent + has_trait = humble + } + } + NOR = { + has_trait = arrogant + has_trait = gregarious + culture = { has_cultural_parameter = better_disease_resistance } + } +} + +# Someone abandons bathing. +ep3_laamp_flavour_ewan.2051 = { + type = character_event + title = ep3_laamp_flavour_ewan.2051.t + desc = { + desc = ep3_laamp_flavour_ewan.2051.desc.intro + first_valid = { + triggered_desc = { + trigger = { + scope:smelly = { + has_trait = diligent + has_trait = humble + } + } + desc = ep3_laamp_flavour_ewan.2051.desc.diligent_and_humble + } + triggered_desc = { + trigger = { + scope:smelly = { has_trait = athletic } + } + desc = ep3_laamp_flavour_ewan.2051.desc.athletic + } + triggered_desc = { + trigger = { + scope:smelly = { has_trait = gregarious } + } + desc = ep3_laamp_flavour_ewan.2051.desc.gregarious + } + desc = ep3_laamp_flavour_ewan.2051.desc.lazy + } + desc = ep3_laamp_flavour_ewan.2051.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = disgust + } + right_portrait = { + character = scope:smelly + animation = personality_bold + } + override_background = { reference = wilderness } + override_effect_2d = { reference = flies } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2051 } + } + # Must have at least one potential scope:smelly. + any_courtier = { ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2051 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2051 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longer + } + } + # Nab our scope:smelly. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_2051_suitably_lazy_courtier_trigger = yes } + order_by = { + # We want the least socially competent person available. + value = 100 + subtract = diplomacy + } + save_scope_as = smelly + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2051_is_stinker_modifier + years = 10 + } + } + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_anybody_trigger = yes + this != scope:smelly + } + custom = custom.every_follower + add_opinion = { + target = scope:smelly + modifier = disgusted_opinion + opinion = -30 + } + } + } + + # Scope:smelly, you _reek_! + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:smelly = { + has_trait = diligent + has_trait = humble + } + } + desc = ep3_laamp_flavour_ewan.2051.a.diligent_and_humble + } + triggered_desc = { + trigger = { + scope:smelly = { has_trait = athletic } + } + desc = ep3_laamp_flavour_ewan.2051.a.athletic + } + triggered_desc = { + trigger = { + scope:smelly = { has_trait = gregarious } + } + desc = ep3_laamp_flavour_ewan.2051.a.gregarious + } + desc = ep3_laamp_flavour_ewan.2051.a.lazy + } + } + } + + reverse_add_opinion = { + target = scope:smelly + modifier = upset_opinion + opinion = -20 + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2051_disciplined_stinker_modifier + years = 10 + } + + stress_impact = { + arrogant = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 2 } + } + } + + # Join HerHim in filthy freedom. + option = { + name = ep3_laamp_flavour_ewan.2051.b + + reverse_add_opinion = { + target = scope:smelly + modifier = pleased_opinion + opinion = 35 + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2051_joined_stinker_modifier + years = 10 + } + + stress_impact = { + content = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_sociability = -1 + ai_boldness = 1 + } + } + } + + # Leave this petty drama to play out. + option = { + name = ep3_laamp_flavour_ewan.2051.c + + # Consolation prestige. + add_prestige = minor_prestige_gain + + stress_impact = { + shy = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -2 } + } + } +} + +################################################## +# My Spot +# by Ewan Cowhig Croft +# # 2061 - 2070 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOR = { + has_trait = patient + has_trait = calm + has_trait = humble + } +} + +scripted_trigger ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOT = { this = $TARGET$ } + # Make sure we've got poor relations with our target. + opinion = { + target = $TARGET$ + value <= -20 + } + reverse_opinion = { + target = $TARGET$ + value <= -20 + } + NOT = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } + save_temporary_scope_as = char_temp2 +} + +# Fight at dinner over tent pitch location. +ep3_laamp_flavour_ewan.2061 = { + type = character_event + title = ep3_laamp_flavour_ewan.2061.t + desc = ep3_laamp_flavour_ewan.2061.desc + theme = laamp + left_portrait = { + character = scope:victim + animation = anger + } + right_portrait = { + character = scope:thief + animation = dismissal + } + override_background = { reference = corridor_night } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2061 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2061 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Now, make them upset with one another. + scope:thief = { + add_opinion = { + target = scope:victim + modifier = overreaction_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:victim + modifier = annoyed_opinion + opinion = -30 + } + } + } + + # Side with scope:victim. + option = { + name = ep3_laamp_flavour_ewan.2061.a + + add_favour_hook_if_possible_simple_effect = { TARGET = scope:victim } + reverse_add_opinion = { + target = scope:victim + modifier = respect_opinion + opinion = 20 + } + reverse_add_opinion = { + target = scope:thief + modifier = upset_opinion + opinion = -20 + } + + stress_impact = { + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + opinion_modifier = { opinion_target = scope:victim } + } + } + + # Side with scope:thief. + option = { + name = ep3_laamp_flavour_ewan.2061.b + + add_favour_hook_if_possible_simple_effect = { TARGET = scope:thief } + reverse_add_opinion = { + target = scope:thief + modifier = respect_opinion + opinion = 20 + } + reverse_add_opinion = { + target = scope:victim + modifier = upset_opinion + opinion = -20 + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -1 } + opinion_modifier = { opinion_target = scope:thief } + } + } + + # Fixed Layout: we have rules for a reason, scope:thief. + option = { + name = ep3_laamp_flavour_ewan.2061.c + trigger = { + domicile = { has_domicile_building = camp_perimeter_fixed_layout } + } + reason = has_building_camp_perimeter_fixed_layout + + add_favour_hook_if_possible_simple_effect = { TARGET = scope:victim } + reverse_add_opinion = { + target = scope:victim + modifier = respect_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:thief + modifier = respect_opinion + opinion = 20 + } + add_prestige = medium_prestige_gain + + stress_impact = { + honest = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + } + ai_chance = { + # Just a good option for the AI to take if they can. + base = 1000 + } + } + + # Figure it out amongst yourselves. + option = { + name = ep3_laamp_flavour_ewan.2061.d + + # Consolation prestige. + add_prestige = minor_prestige_gain + + stress_impact = { + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } +} + +# Pre-filtering event to set up scopes. +ep3_laamp_flavour_ewan.2062 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2061 } + } + # Make sure we've got suitable courtiers available. + any_courtier = { + ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } + } + } + } + } + + immediate = { + # Find our best courtiers. + ## First, grabbing a valid annoyed char. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2061_valid_angry_courtier_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } + } + } + } + save_scope_as = victim + } + ## Then processing out a good thief. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2061_valid_angry_courtier_precise_trigger = { TARGET = scope:victim } + } + weight = { + modifier = { + add = 20 + has_trait = wrathful + } + modifier = { + add = 15 + has_trait = deceitful + } + modifier = { + add = 5 + has_trait = arrogant + } + modifier = { + add = 10 + has_trait = arbitrary + } + modifier = { + add = -20 + has_trait = just + } + modifier = { + add = 5 + has_trait = fickle + } + modifier = { + add = 15 + has_trait = vengeful + } + modifier = { + add = -15 + has_trait = forgiving + } + modifier = { + add = -15 + has_trait = honest + } + } + save_scope_as = thief + } + trigger_event = ep3_laamp_flavour_ewan.2061 + } +} + +################################################## +# Second-in-Command +# by Ewan Cowhig Croft +# # 2071 - 2080 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + can_be_employed_as = second_camp_officer + "aptitude(second_camp_officer)" >= 2 + # Plus make sure they'd actually want the job. + NOR = { + has_trait = lazy + has_trait = humble + has_trait = content + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } + } + opinion = { + target = root + value >= 20 + } + # For tonal reasons, it's easiest to just avoid disloyal/loyalty-hooked characters getting in here for any reason. + NOR = { + has_trait = disloyal + root = { has_strong_hook = prev } + } +} + +scripted_effect ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { + camp_officer_grant_effect = { + EMPLOYER = root + POS = second + CANDIDATE = $CHOSEN$ + } + reverse_add_opinion = { + target = $CHOSEN$ + modifier = grateful_opinion + opinion = 50 + } +} + +scripted_effect ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { + # If we have a scope:current_sic, then they're upset too. + scope:current_sic ?= { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -50 + } + } + # Whilst everyone else is just annoyed. + reverse_add_opinion = { + target = $CANDIDATE_A$ + modifier = insult_opinion + opinion = -30 + } + reverse_add_opinion = { + target = $CANDIDATE_B$ + modifier = insult_opinion + opinion = -30 + } +} + +# People scrabble for empty/ineffectual SiC position. +ep3_laamp_flavour_ewan.2071 = { + type = character_event + title = ep3_laamp_flavour_ewan.2071.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:current_sic } + desc = ep3_laamp_flavour_ewan.2071.desc.sic_exists + } + desc = ep3_laamp_flavour_ewan.2071.desc.sic_vacant + } + desc = ep3_laamp_flavour_ewan.2071.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:current_sic + animation = worry + } + lower_left_portrait = scope:candidate_1 + lower_center_portrait = scope:candidate_2 + lower_right_portrait = scope:candidate_3 + override_background = { reference = armory } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2071 } + } + # Either you don't have a SiC, or your SiC sucks. + OR = { + NOT = { employs_court_position = second_camp_officer } + court_position:second_camp_officer = { "aptitude(second_camp_officer)" <= 1 } + } + # You have at least three characters who'd be better. + any_courtier = { + count >= 3 + ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = yes + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2071 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2071 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Is the spot vacant, or merely incompetent? + if = { + limit = { employs_court_position = second_camp_officer } + court_position:second_camp_officer = { save_scope_as = current_sic } + } + # Alright, process out our possible SiCs. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_2071_better_possible_sics_trigger = yes } + order_by = { + # Ok, first we group by aptitude. + value = "aptitude(second_camp_officer)" + # Then we want to use diplomacy as a tiebreaker... + ## ... so make it a decimal of aptitude... + multiply = 100 + ## ... and _then_ add it. + add = diplomacy + } + max = 3 + check_range_bounds = no + # We place these in order of how much they'll offer you, which means we actually want to invert our count for how we save the scopes (so 3 -> 2 -> 1). + if = { + limit = { + NOT = { exists = scope:candidate_3 } + } + save_scope_as = candidate_3 + } + else_if = { + limit = { + NOT = { + this = scope:candidate_3 + exists = scope:candidate_2 + } + } + save_scope_as = candidate_2 + } + else_if = { + limit = { + NOT = { + this = scope:candidate_3 + this = scope:candidate_2 + exists = scope:candidate_1 + } + } + save_scope_as = candidate_1 + } + } + } + + # Accept scope:candidate_1, and their offer of complete loyalty. + option = { + name = ep3_laamp_flavour_ewan.2071.a + + ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_1 } + add_hook = { + target = scope:candidate_1 + type = loyalty_hook + } + # Flag that the loyalty hook is dependent on this court position. + scope:candidate_1 = { + set_variable = { + name = loyalty_dependent_on_position + value = root + } + } + # Everyone else is upset. + ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { + CANDIDATE_A = scope:candidate_2 + CANDIDATE_B = scope:candidate_3 + } + + # No stress here. + ai_chance = { + base = 1 + opinion_modifier = { opinion_target = scope:candidate_1 } + } + } + + # Take scope:candidate_2, who says they'll work themselves to death. + option = { + name = ep3_laamp_flavour_ewan.2071.b + + ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_2 } + scope:candidate_2 = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2071_b_work_self_to_death_modifier + years = 20 + } + } + # Everyone else is upset. + ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { + CANDIDATE_A = scope:candidate_1 + CANDIDATE_B = scope:candidate_3 + } + + # No stress here. + ai_chance = { + base = 1 + opinion_modifier = { opinion_target = scope:candidate_2 } + } + } + + # Mmmm, scope:candidate_3, please: HerHis skills are self-evident. + option = { + name = ep3_laamp_flavour_ewan.2071.c + + ep3_laamp_flavour_ewan_2071_apply_appointment_effect = { CHOSEN = scope:candidate_3 } + # Everyone else is upset. + ep3_laamp_flavour_ewan_2071_apply_trio_annoyed_opinions_effect = { + CANDIDATE_A = scope:candidate_1 + CANDIDATE_B = scope:candidate_2 + } + + # No stress here. + ai_chance = { + base = 1 + opinion_modifier = { opinion_target = scope:candidate_3 } + } + } + + # It shall remain vacant/scope:sic shall keep HerHis post. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:current_sic } + desc = ep3_laamp_flavour_ewan.2071.d.post_filled + } + desc = ep3_laamp_flavour_ewan.2071.d.post_empty + } + } + } + + # If we have a scope:current_sic, then they're duly grateful. + scope:current_sic ?= { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + } + # Whilst everyone else is just annoyed. + reverse_add_opinion = { + target = scope:candidate_1 + modifier = insult_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:candidate_2 + modifier = insult_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:candidate_3 + modifier = insult_opinion + opinion = -30 + } + # Consolation prestige. + add_prestige = minor_prestige_gain + + # Lose stress if we're playing to our reputation + it's appropriate. + if = { + limit = { exists = scope:current_sic } + stress_impact = { loyal = medium_stress_loss } + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } +} + +################################################## +# A Well-Oiled Machine +# by Ewan Cowhig Croft +# # 2081 - 2090 +################################################## + +# Helping each other out at pitch time. +ep3_laamp_flavour_ewan.2081 = { + type = character_event + title = ep3_laamp_flavour_ewan.2081.t + desc = { + desc = ep3_laamp_flavour_ewan.2081.desc.intro + first_valid = { + triggered_desc = { + trigger = { + scope:follower_1 = { + OR = { + opinion = { + target = scope:follower_2 + value <= -25 + } + reverse_opinion = { + target = scope:follower_2 + value <= -25 + } + } + } + } + desc = ep3_laamp_flavour_ewan.2081.desc.dislike + } + triggered_desc = { + trigger = { + scope:follower_1 = { + OR = { + opinion = { + target = scope:follower_2 + value >= 25 + } + reverse_opinion = { + target = scope:follower_2 + value >= 25 + } + } + } + } + desc = ep3_laamp_flavour_ewan.2081.desc.like + } + desc = ep3_laamp_flavour_ewan.2081.desc.neutral + } + desc = ep3_laamp_flavour_ewan.2081.desc.outro + } + theme = laamp + left_portrait = { + character = scope:follower_1 + animation = laugh + } + right_portrait = { + character = scope:follower_2 + animation = personality_bold + } + override_background = { reference = corridor_night } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2081 } + } + # Must have suitable courtiers available. + any_courtier = { + count >= 2 + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2081 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2081 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longer + } + } + # Nab our two courtiers. + random_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_trigger = yes } + weight = { + modifier = { + add = stewardship + always = yes + } + modifier = { + add = 10 + has_trait = diligent + } + modifier = { + add = -10 + has_trait = lazy + } + } + save_scope_as = follower_1 + } + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + this != scope:follower_1 + } + weight = { + modifier = { + add = stewardship + always = yes + } + modifier = { + add = 10 + has_trait = diligent + } + modifier = { + add = -10 + has_trait = lazy + } + } + save_scope_as = follower_2 + } + } + + # Do you need another hand? + option = { + name = ep3_laamp_flavour_ewan.2081.a + + reverse_add_opinion = { + target = scope:follower_1 + modifier = one_of_us_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = one_of_us_opinion + opinion = 30 + } + add_prestige = minor_prestige_loss + + stress_impact = { + diligent = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + ambitious = minor_stress_impact_gain + lazy = minor_stress_impact_gain + arrogant = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Legitimist: after you're done here, go help raise my pavillion. + option = { + name = ep3_laamp_flavour_ewan.2081.b + trigger = { has_realm_law = camp_purpose_legitimists } + reason = purpose_legitimists + + add_prestige = medium_prestige_gain + + stress_impact = { + arrogant = medium_stress_impact_loss + lazy = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Hmmm... don't like that, better move them apart. + option = { + name = ep3_laamp_flavour_ewan.2081.c + trigger = { + NOT = { has_realm_law = camp_purpose_legitimists } + } + + reverse_add_opinion = { + target = scope:follower_1 + modifier = annoyed_opinion + opinion = -10 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = annoyed_opinion + opinion = -10 + } + + stress_impact = { + paranoid = minor_stress_impact_loss + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -1 } + } + } + + # Fixed Layout: as it should be. + option = { + name = ep3_laamp_flavour_ewan.2081.d + trigger = { + domicile = { has_domicile_building = camp_perimeter_fixed_layout } + } + reason = has_building_camp_perimeter_fixed_layout + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_2081_d_well_oiled_operation_modifier + years = 10 + } + + # No stress here, + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # Good to see those two getting on! + option = { + name = ep3_laamp_flavour_ewan.2081.e + + scope:follower_1 = { + add_opinion = { + target = scope:follower_2 + modifier = respect_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = respect_opinion + opinion = 30 + } + } + + # No stress here, + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } +} + +################################################## +# Crimes of Passion +# by Ewan Cowhig Croft +# # 2091 - 2100 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + # Mustn't have a deescalatory personality. + NOR = { + has_trait = patient + has_trait = calm + has_trait = forgiving + } + # And make sure a fight is conceivable. + prowess >= 7 + can_start_single_combat_trigger = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { + NOT = { this = $TARGET$ } + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + # Make sure we've got poor relations with our target. + opinion = { + target = $TARGET$ + value <= -25 + } + reverse_opinion = { + target = $TARGET$ + value <= -25 + } + NOT = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = $TARGET$ } + } + save_temporary_scope_as = char_temp2 +} + +scripted_effect ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = { + configure_start_single_combat_effect = { + SC_INITIATOR = scope:attacker + SC_ATTACKER = scope:attacker + SC_DEFENDER = scope:defender + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = ep3_laamp_flavour_ewan.2092 + } +} + +# Followers attack each other. +ep3_laamp_flavour_ewan.2091 = { + type = character_event + title = ep3_laamp_flavour_ewan.2091.t + desc = ep3_laamp_flavour_ewan.2091.desc + theme = laamp + left_portrait = { + character = scope:attacker + animation = random_weapon_aggressive + camera = camera_event_very_left + } + right_portrait = { + character = scope:defender + animation = shock + } + override_background = { reference = ep3_campfire } + override_effect_2d = { reference = smoke } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_2091 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_2091 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Now, make them upset with one another. + scope:attacker = { + add_opinion = { + target = scope:defender + modifier = hate_opinion + opinion = -50 + } + reverse_add_opinion = { + target = scope:defender + modifier = hate_opinion + opinion = -50 + } + } + # Plus make sure we _definitely_ know who root is, for the after-toasts. + save_scope_as = og_root + } + + # Intervene. + option = { + name = ep3_laamp_flavour_ewan.2091.a + + duel = { + skill = diplomacy + target = scope:attacker + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2091.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2091.a.tt.success + left_icon = scope:attacker + right_icon = scope:defender + reverse_add_opinion = { + target = scope:attacker + modifier = respect_opinion + opinion = 40 + } + reverse_add_opinion = { + target = scope:defender + modifier = respect_opinion + opinion = 40 + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.2091.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2091.a.tt.failure + left_icon = scope:attacker + right_icon = scope:defender + reverse_add_opinion = { + target = scope:attacker + modifier = respect_opinion + opinion = -20 + } + reverse_add_opinion = { + target = scope:defender + modifier = respect_opinion + opinion = -20 + } + } + scope:attacker = { + increase_wounds_no_death_effect = { REASON = fight } + } + scope:defender = { + increase_wounds_no_death_effect = { REASON = fight } + } + } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + patient = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Freebooters/S4H: invite them to settle their grievances with a formal duel. + option = { + name = ep3_laamp_flavour_ewan.2091.b + trigger = { + OR = { + has_realm_law = camp_purpose_mercenaries + has_realm_law = camp_purpose_brigands + } + } + reason = purpose_brigands_and_mercenaries + + add_prestige = medium_prestige_gain + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + NOR = { + this = scope:attacker + this = scope:defender + } + } + custom = custom.every_adult_follower + add_stress = major_stress_loss + add_opinion = { + target = root + modifier = entertained_opinion + opinion = 30 + } + } + save_scope_value_as = { + name = duel_legal + value = yes + } + custom_tooltip = ep3_laamp_flavour_ewan.2091.tt.duel_commences + ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = yes + + # For once, all sides of the Calm/Just axes are happy! Blood and justice on the right terms! + ## ... or something. + stress_impact = { + calm = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + just = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # Have the attacker arrested and thrown in the stocks. + option = { + name = ep3_laamp_flavour_ewan.2091.c + + rightfully_imprison_character_effect = { + TARGET = scope:attacker + IMPRISONER = root + } + reverse_add_opinion = { + target = scope:defender + modifier = grateful_opinion + opinion = 50 + } + + stress_impact = { + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 1 } + } + } + + # Let them play it out. + option = { + name = ep3_laamp_flavour_ewan.2091.d + + custom_tooltip = ep3_laamp_flavour_ewan.2091.tt.duel_commences + ep3_laamp_flavour_ewan_2091_start_duel_to_death_effect = yes + + stress_impact = { + wrathful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + just = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } +} + +ep3_laamp_flavour_ewan.2092 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = scope:attacker } + scope:og_root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2092.tt.attacker_won + left_icon = scope:attacker + right_icon = scope:defender + custom_tooltip = ep3_laamp_flavour_ewan.2092.tt.attacker_won.tt + scope:attacker = { + if = { + limit = { + NOT = { exists = scope:duel_legal } + } + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_medium_gain + XP_MIN = gallowsbait_xp_medium_gain + } + } + } + } + } + } + else = { + scope:og_root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.2092.tt.defender_won + left_icon = scope:defender + right_icon = scope:attacker + custom_tooltip = ep3_laamp_flavour_ewan.2092.tt.defender_won.tt + } + } + } + } +} + +# Pre-filtering event to set up scopes. +ep3_laamp_flavour_ewan.2093 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_2091 } + } + # Make sure we've got suitable courtiers available. + any_courtier = { + ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } + } + } + } + } + + immediate = { + # Find our best courtiers. + ## First, grab a suitable candidate. + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2091_valid_angry_courtier_general_trigger = yes + save_temporary_scope_as = char_temp + root = { + any_courtier = { + ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { TARGET = scope:char_temp } + } + } + } + save_scope_as = defender + } + random_courtier = { + limit = { + ep3_laamp_flavour_ewan_2091_valid_angry_courtier_precise_trigger = { TARGET = scope:defender } + } + weight = { + modifier = { + add = 20 + has_trait = wrathful + } + modifier = { + add = 15 + has_trait = deceitful + } + modifier = { + add = 5 + has_trait = arrogant + } + modifier = { + add = 10 + has_trait = arbitrary + } + modifier = { + add = -20 + has_trait = just + } + modifier = { + add = 5 + has_trait = fickle + } + modifier = { + add = 15 + has_trait = vengeful + } + modifier = { + add = -15 + has_trait = forgiving + } + modifier = { + add = -15 + has_trait = honest + } + opinion_modifier = { + who = this + opinion_target = scope:defender + multiplier = -0.5 + } + } + save_scope_as = attacker + } + trigger_event = ep3_laamp_flavour_ewan.2091 + } +} + + + + + + + + + + + +################################################## +# CAMP PURPOSE + +################################################## +# Heard of You +# by Ewan Cowhig Croft +# # 3001 - 3010 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + create_character = { + template = criminal_brains_character + location = root.location + save_scope_as = brains + diplomacy = { + $OVERRIDE_SKILL_LOW$ + $OVERRIDE_SKILL_HIGH$ + } + stewardship = { + min_template_medium_skill + max_template_medium_skill + } + } + create_character = { + template = criminal_brawn_character + location = root.location + save_scope_as = brawn + prowess = { + $OVERRIDE_SKILL_LOW$ + $OVERRIDE_SKILL_HIGH$ + } + } + create_character = { + template = criminal_fingers_character + location = root.location + save_scope_as = fingers + intrigue = { + $OVERRIDE_SKILL_LOW$ + $OVERRIDE_SKILL_HIGH$ + } + } + # Plus try to give 'em all fun nicknames. + hidden_effect = { + scope:brains = { assign_random_nickname_effect = yes } + scope:brawn = { assign_random_nickname_effect = yes } + scope:fingers = { assign_random_nickname_effect = yes } + } +} + +scripted_effect ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { + add_courtier = scope:brains + add_courtier = scope:brawn + add_courtier = scope:fingers + reverse_add_opinion = { + target = scope:brains + modifier = grateful_opinion + opinion = $OPINION$ + } + reverse_add_opinion = { + target = scope:brawn + modifier = grateful_opinion + opinion = $OPINION$ + } + reverse_add_opinion = { + target = scope:fingers + modifier = grateful_opinion + opinion = $OPINION$ + } +} + +# Brigands attract cool local criminals, scaled to prestige level. +ep3_laamp_flavour_ewan.3001 = { + type = character_event + title = ep3_laamp_flavour_ewan.3001.t + desc = { + desc = ep3_laamp_flavour_ewan.3001.desc.intro + first_valid = { + triggered_desc = { + trigger = { prestige_level >= 5 } + desc = ep3_laamp_flavour_ewan.3001.desc.legendary + } + triggered_desc = { + trigger = { prestige_level >= 4 } + desc = ep3_laamp_flavour_ewan.3001.desc.exalted + } + triggered_desc = { + trigger = { prestige_level >= 3 } + desc = ep3_laamp_flavour_ewan.3001.desc.illustrious + } + triggered_desc = { + trigger = { prestige_level >= 2 } + desc = ep3_laamp_flavour_ewan.3001.desc.distinguished + } + triggered_desc = { + trigger = { prestige_level >= 1 } + desc = ep3_laamp_flavour_ewan.3001.desc.established + } + desc = ep3_laamp_flavour_ewan.3001.desc.disgraced + } + } + theme = laamp + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:brains + animation = admiration + } + lower_center_portrait = scope:brawn + lower_right_portrait = scope:fingers + override_background = { reference = armory } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3001 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_brigands + # And can't have more than a certain amount of courtiers already. + any_courtier = { count <= 20 } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3001 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3001 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Spawn our lil dudes. + if = { + limit = { prestige_level = 0 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_low_skill + OVERRIDE_SKILL_HIGH = max_template_low_skill + } + } + else_if = { + limit = { prestige_level = 1 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_average_skill + OVERRIDE_SKILL_HIGH = max_template_average_skill + } + } + else_if = { + limit = { prestige_level = 2 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_medium_skill + OVERRIDE_SKILL_HIGH = max_template_medium_skill + } + } + else_if = { + limit = { prestige_level = 3 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_decent_skill + OVERRIDE_SKILL_HIGH = max_template_decent_skill + } + } + else_if = { + limit = { prestige_level = 4 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_high_skill + OVERRIDE_SKILL_HIGH = max_template_high_skill + } + } + else_if = { + limit = { prestige_level = 5 } + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_very_high_skill + OVERRIDE_SKILL_HIGH = max_template_very_high_skill + } + } + ## Shouldn't happen, but just in case, leave a fallback equivalent to the bottom rung. + else = { + ep3_laamp_flavour_ewan_3001_spawn_appropriate_characters_effect = { + OVERRIDE_SKILL_LOW = min_template_low_skill + OVERRIDE_SKILL_HIGH = max_template_low_skill + } + } + # Plus make sure they get on. + hidden_effect = { + scope:brains = { + set_relation_friend = { + reason = friend_petty_criminals_together + target = scope:fingers + } + set_relation_friend = { + reason = friend_petty_criminals_together + target = scope:brawn + } + } + scope:brawn = { + set_relation_friend = { + reason = friend_petty_criminals_together + target = scope:fingers + } + } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Sure, we'll take you on... + option = { + name = ep3_laamp_flavour_ewan.3001.a + + ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { OPINION = 100 } + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # Stewardship duel: ... but you've gotta pay into the _pot_ first. + option = { + name = ep3_laamp_flavour_ewan.3001.b + + duel = { + skill = stewardship + target = scope:brains + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3001.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3001.b.tt.success + left_icon = scope:brains + scope:brains = { + pay_short_term_gold = { + target = root + gold = medium_gold_laamps_value + } + # Don't actually charge scope:brains, though. + hidden_effect = { add_gold = medium_gold_laamps_value } + } + } + ep3_laamp_flavour_ewan_3001_recruit_characters_effect = { OPINION = 40 } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3001.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3001.b.tt.failure + left_icon = scope:brains + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 2 } + } + } + + # Heh, get out of here y'curs. + option = { + name = ep3_laamp_flavour_ewan.3001.c + + add_prestige = medium_prestige_gain + reverse_add_opinion = { + target = scope:brains + modifier = disappointed_opinion + opinion = -20 + } + reverse_add_opinion = { + target = scope:brawn + modifier = disappointed_opinion + opinion = -20 + } + reverse_add_opinion = { + target = scope:fingers + modifier = disappointed_opinion + opinion = -20 + } + + stress_impact = { + paranoid = miniscule_stress_impact_loss + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -2 } + } + } + + after = { + # If we're an AI & didn't recruit them, clean up our criminals. + if = { + limit = { + is_ai = yes + NOR = { + this = scope:brains.liege + this = scope:brawn.liege + this = scope:fingers.liege + } + } + scope:brains = { + death = { death_reason = death_vanished } + } + scope:brawn = { + death = { death_reason = death_vanished } + } + scope:fingers = { + death = { death_reason = death_vanished } + } + + } + } +} + +################################################## +# Arguing the Toss +# by Ewan Cowhig Croft +# # 3011 - 3020 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + diplomacy >= decent_skill_rating +} + +scripted_trigger ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = { + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + learning >= decent_skill_rating +} + +# Scholars debate a learned follower. +ep3_laamp_flavour_ewan.3011 = { + type = character_event + title = ep3_laamp_flavour_ewan.3011.t + desc = ep3_laamp_flavour_ewan.3011.desc + theme = laamp + left_portrait = { + character = scope:eloquent_follower + animation = toast_goblet + } + right_portrait = { + character = scope:wise_follower + animation = writing + } + override_background = { reference = bp1_bonfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3011 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_scholars + # And some suitable courtiers. + any_courtier = { ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = yes } + ## Check for at least two, if we only have one valid courtier for diplo, them also being the best courtier for learning doesn't cause a hole in the script. + any_courtier = { + count >= 2 + ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = yes + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3011 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3011 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Set up our courtiers. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_3011_eloquent_courtier_trigger = yes } + order_by = diplomacy + save_scope_as = eloquent_follower + } + ordered_courtier = { + limit = { + ep3_laamp_flavour_ewan_3011_wise_courtier_trigger = yes + this != scope:eloquent_follower + } + order_by = learning + save_scope_as = wise_follower + } + } + + # Diplo duel the eloquent follower for prestige. + option = { + name = ep3_laamp_flavour_ewan.3011.a + + duel = { + skill = diplomacy + target = scope:eloquent_follower + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3011.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3011.a.tt.success + left_icon = scope:eloquent_follower + add_prestige = { + if = { + limit = { scope:eloquent_follower.diplomacy >= 32 } + add = major_prestige_gain + } + else = { add = medium_prestige_gain } + } + reverse_add_opinion = { + target = scope:eloquent_follower + modifier = respect_opinion + opinion = 40 + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3011.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3011.a.tt.failure + left_icon = scope:eloquent_follower + reverse_add_opinion = { + target = scope:eloquent_follower + modifier = respect_opinion + opinion = 20 + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Learning duel the wise follower for prestige. + option = { + name = ep3_laamp_flavour_ewan.3011.b + + duel = { + skill = learning + target = scope:wise_follower + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3011.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3011.b.tt.success + left_icon = scope:wise_follower + add_prestige = { + if = { + limit = { scope:wise_follower.learning >= 32 } + add = major_prestige_gain + } + else = { add = medium_prestige_gain } + } + reverse_add_opinion = { + target = scope:wise_follower + modifier = respect_opinion + opinion = 40 + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3011.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3011.b.tt.failure + left_icon = scope:wise_follower + reverse_add_opinion = { + target = scope:wise_follower + modifier = respect_opinion + opinion = 20 + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # Nightly Debates: better version of the usual modifier. + option = { + name = ep3_laamp_flavour_ewan.3011.c + trigger = { + domicile = { has_domicile_building = camp_fire_nightly_debates } + } + reason = has_building_camp_fire_nightly_debates + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3011_d_presiding_over_lively_debates_modifier + years = 10 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } + + # Nod along for a positive modifier. + option = { + name = ep3_laamp_flavour_ewan.3011.d + trigger = { + NOT = { + domicile = { has_domicile_building = camp_fire_nightly_debates } + } + } + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3011_d_presiding_over_debates_modifier + years = 10 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = -1 } + } + } +} + +################################################## +# Over the Horizon +# by Ewan Cowhig Croft +# # 3021 - 3030 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = { + save_temporary_scope_as = title_temp + holder ?= { + OR = { + prestige_level >= high_prestige_level + court_grandeur_current_level >= 6 + } + root = { + NOR = { + knows_language_of_culture = prev.culture + knows_language_of_culture = capital_county.culture + current_extra_languages >= language_soft_cap + } + OR = { + NOT = { has_variable = laamp_recently_visited_kingdoms } + NOT = { + is_target_in_variable_list = { + name = laamp_recently_visited_kingdoms + target = scope:title_temp + } + } + } + } + NOT = { + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = root } + } + # Put our performance-intensive checks riiiiight at the back, so we've ruled out as many places as possible by the time we get to these. + ## First a bunch of mass county-counting, but we only care about this for players. + root = { + trigger_if = { + limit = { is_ai = no } + NOT = { + culture = { + any_culture_kingdom = { this = scope:title_temp } + } + } + } + } + ## Then distance. + capital_county.title_province = { "squared_distance(root.location)" >= squared_distance_massive } + } +} + +scripted_effect ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { + # Make sure the contracts we're about to generate won't disappear. + save_scope_value_as = { + name = toggle_distance_ignore + value = yes + } + # Now create our actual contracts. + populate_location_with_special_contracts_effect = { + AREA_CHAR = $KINGDOM$.holder + AMOUNT = 5 + } + # Then, an easier-than-usual learning duel to try to pick up the language from afar. + duel = { + skill = learning + value = very_high_skill_rating + # Victory! + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 10 + desc = ep3_laamp_flavour_ewan.3021.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3021.tt.success + learn_language_of_culture = $KINGDOM$.title_capital_county.culture + } + } + # Defeat. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3021.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3021.tt.failure + add_stress = medium_stress_gain + } + } + } +} + +# Explorer gets a passion for stories of a distant land, populating contracts there & learning the local language.number. +ep3_laamp_flavour_ewan.3021 = { + type = character_event + title = ep3_laamp_flavour_ewan.3021.t + desc = ep3_laamp_flavour_ewan.3021.desc + theme = laamp + left_portrait = { + character = root + animation = admiration + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3021 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_explorers + any_kingdom = { + count >= 3 + ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = yes + } + } + + weight_multiplier = { + # Weight this down for the AI, as we're doing a bunch of distance checks. + modifier = { + add = -0.9 + is_ai = yes + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3021 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3021 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Alright, let's pick some kingdoms. + ## First, put all the valid ones in a list. + every_kingdom = { + limit = { ep3_laamp_flavour_ewan_3021_suitable_kingdom_to_dream_about_trigger = yes } + add_to_list = potential_kingdoms_list + } + ordered_in_list = { + list = potential_kingdoms_list + order_by = { + holder = { + # Go by CGV level first. + add = { + value = court_grandeur_current_level + multiply = 1000 + } + # Then prestige level. + add = { + value = prestige_level + multiply = 100 + } + # Then add diplomacy as a tie-breaker. + add = diplomacy + } + } + max = 3 + check_range_bounds = no + if = { + limit = { + NOT = { exists = scope:kingdom_1 } + } + save_scope_as = kingdom_1 + } + else_if = { + limit = { + NOT = { + this = scope:kingdom_1 + exists = scope:kingdom_2 + } + } + save_scope_as = kingdom_2 + } + else_if = { + limit = { + NOT = { + this = scope:kingdom_1 + this = scope:kingdom_2 + exists = scope:kingdom_3 + } + } + save_scope_as = kingdom_3 + } + } + } + + # Scope:kingdom_1. + option = { + name = ep3_laamp_flavour_ewan.3021.a + + custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_1.contracts_appear + ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_1 } + + # No stress here. + ai_chance = { + base = 1 + modifier = { + add = { + value = "scope:kingdom_1.holder.capital_county.culture.cultural_acceptance(root.culture)" + multiply = 2 + } + always = yes + } + } + } + + # Scope:kingdom_2. + option = { + name = ep3_laamp_flavour_ewan.3021.b + + custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_2.contracts_appear + ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_2 } + + # No stress here. + ai_chance = { + base = 1 + modifier = { + add = { + value = "scope:kingdom_2.holder.capital_county.culture.cultural_acceptance(root.culture)" + multiply = 2 + } + always = yes + } + } + } + + # Scope:kingdom_3. + option = { + name = ep3_laamp_flavour_ewan.3021.c + + custom_tooltip = ep3_laamp_flavour_ewan.3021.tt.kingdom_3.contracts_appear + ep3_laamp_flavour_ewan_3021_choose_kingdom_effect = { KINGDOM = scope:kingdom_3 } + + # No stress here. + ai_chance = { + base = 1 + modifier = { + add = { + value = "scope:kingdom_3.holder.capital_county.culture.cultural_acceptance(root.culture)" + multiply = 2 + } + always = yes + } + } + } + + # I have places to ponder yet... + option = { + name = ep3_laamp_flavour_ewan.3021.d + + # Consolation prestige. + add_prestige = minor_prestige_gain + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -3 } + } + } +} + +################################################## +# Mine by Right +# by Ewan Cowhig Croft +# # 3031 - 3040 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_3031_family_title_trigger = { + any_held_title = { + title_tier >= kingdom + save_temporary_scope_as = title_temp + root = { + NOT = { has_claim_on = scope:title_temp } + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = { + holder ?= { + any_held_title = { + title_tier >= kingdom + save_temporary_scope_as = title_temp2 + root = { + NOR = { + scope:title_temp ?= scope:title_temp2 + has_claim_on = scope:title_temp2 + } + } + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = { + has_memory_type = became_landless_adventurer_memory + var:old_primary_title ?= { + tier >= tier_kingdom + save_temporary_scope_as = title_temp3 + root = { + NOR = { + scope:title_temp ?= this + scope:title_temp2 ?= this + has_claim_on = scope:title_temp3 + } + } + } +} + +# Legitimist broods & extends their claims. +ep3_laamp_flavour_ewan.3031 = { + type = character_event + title = ep3_laamp_flavour_ewan.3031.t + desc = { + desc = ep3_laamp_flavour_ewan.3031.desc.intro + triggered_desc = { + trigger = { exists = scope:family_title } + desc = ep3_laamp_flavour_ewan.3031.desc.family_title + } + triggered_desc = { + trigger = { exists = scope:adjacent_title } + desc = ep3_laamp_flavour_ewan.3031.desc.adjacent_title + } + triggered_desc = { + trigger = { exists = scope:memory_title } + desc = ep3_laamp_flavour_ewan.3031.desc.memory_title + } + desc = ep3_laamp_flavour_ewan.3031.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = spymaster + } + lower_left_portrait = scope:portrait_3 + lower_center_portrait = scope:portrait_2 + lower_right_portrait = scope:portrait_1 + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3031 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_legitimists + # Then make sure that we could populate at least one specific option. + OR = { + any_close_or_extended_family_member = { ep3_laamp_flavour_ewan_3031_family_title_trigger = yes } + any_claim = { ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = yes } + any_memory = { ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = yes } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3031 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3031 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Try to nab our titles. + ordered_close_or_extended_family_member = { + limit = { ep3_laamp_flavour_ewan_3031_family_title_trigger = yes } + order_by = { + # If we're a player, order it by their opinion of us. + if = { + limit = { is_ai = no } + value = "reverse_opinion(root)" + } + # Otherwise, order by our opinion of them. + else = { value = "opinion(root)" } + } + scope:title_temp = { save_scope_as = family_title } + } + ordered_claim = { + limit = { ep3_laamp_flavour_ewan_3031_claim_adjacent_title_trigger = yes } + order_by = { + # If we're a player, order it by their opinion of us. + if = { + limit = { holder = { is_ai = no } } + value = "holder.reverse_opinion(root)" + } + # Otherwise, order by our opinion of them. + else = { value = "holder.opinion(root)" } + } + save_scope_as = adjacent_title + } + random_memory = { + limit = { ep3_laamp_flavour_ewan_3031_formerly_claimed_title_trigger = yes } + var:old_primary_title = { save_scope_as = memory_title } + } + # Sort our portrait scopes. + scope:family_title ?= { + holder = { save_scope_as = portrait_1 } + } + scope:adjacent_title ?= { + if = { + limit = { exists = scope:portrait_1 } + holder = { save_scope_as = portrait_2 } + } + else = { + holder = { save_scope_as = portrait_1 } + } + } + scope:memory_title ?= { + if = { + limit = { exists = scope:portrait_2 } + holder = { save_scope_as = portrait_3 } + } + else_if = { + limit = { exists = scope:portrait_1 } + holder = { save_scope_as = portrait_2 } + } + else = { + holder = { save_scope_as = portrait_1 } + } + } + # Account for some stress that'd apply in every option. + stress_impact = { + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + } + } + + # Add the best extant title held by up to an extended family member. + option = { + name = ep3_laamp_flavour_ewan.3031.a + trigger = { exists = scope:family_title } + + add_pressed_claim = scope:family_title + reverse_add_opinion = { + target = scope:family_title.holder + modifier = audacity_opinion + opinion = -30 + } + + stress_impact = { + arbitrary = medium_stress_impact_loss + just = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + opinion_modifier = { + opinion_target = scope:family_title.holder + multiplier = -1 + } + } + } + + # Add another same-tier-or-higher title held by someone who holds a kingdom+title you have a claim on. + option = { + name = ep3_laamp_flavour_ewan.3031.b + trigger = { exists = scope:adjacent_title } + + add_pressed_claim = scope:adjacent_title + reverse_add_opinion = { + target = scope:adjacent_title.holder + modifier = audacity_opinion + opinion = -30 + } + + stress_impact = { + arbitrary = medium_stress_impact_loss + just = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + opinion_modifier = { + opinion_target = scope:adjacent_title.holder + multiplier = -1 + } + } + } + + # Regain claims to a title you have a memory of losing but don't have a claim on. + option = { + name = ep3_laamp_flavour_ewan.3031.c + trigger = { exists = scope:memory_title } + + add_pressed_claim = scope:memory_title + reverse_add_opinion = { + target = scope:memory_title.holder + modifier = audacity_opinion + opinion = -30 + } + + stress_impact = { + arbitrary = medium_stress_impact_loss + just = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + opinion_modifier = { + opinion_target = scope:memory_title.holder + multiplier = -1 + } + } + } + + # Fixate on future gains. + option = { + name = ep3_laamp_flavour_ewan.3031.d + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3031_d_brooding_over_titles_modifier + years = 10 + } + + # No stress for opt out. + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = 2 } + } + } +} + +################################################## +# People from a Better Time +# by Ewan Cowhig Croft +# # 3041 - 3050 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_3041_valid_memory_trigger = { + has_memory_type = became_landless_adventurer_memory + memory_age_years >= 5 + var:old_primary_title ?= { tier >= tier_kingdom } +} + +scripted_effect ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = { + random_de_jure_county = { + limit = { + holder = { + any_liege_or_above = { this = scope:former_title.holder } + } + NOT = { is_in_list = partisan_titles_list } + # Make sure players don't get caught in the crossfire. + trigger_if = { + limit = { + holder = { is_ai = no } + } + holder = scope:former_title.holder + } + } + weight = { + # Weight up stuff directly held by the usurper. + modifier = { + add = 10000 + holder = scope:former_title.holder + } + # And stuff adjacent to the capital, just to cluster the effects in large realms. + modifier = { + add = 100 + kingdom.title_capital_county = scope:former_title.capital_county + } + } + add_to_list = partisan_titles_list + } +} + +# Old loyalists join legitimist. +ep3_laamp_flavour_ewan.3041 = { + type = character_event + title = ep3_laamp_flavour_ewan.3041.t + desc = { + desc = ep3_laamp_flavour_ewan.3041.desc.intro + random_valid = { + triggered_desc = { + trigger = { has_trait = compassionate } + desc = ep3_laamp_flavour_ewan.3041.desc.compassionate + } + triggered_desc = { + trigger = { has_trait = sadistic } + desc = ep3_laamp_flavour_ewan.3041.desc.sadistic + } + triggered_desc = { + trigger = { has_trait = callous } + desc = ep3_laamp_flavour_ewan.3041.desc.callous + } + triggered_desc = { + trigger = { has_trait = wrathful } + desc = ep3_laamp_flavour_ewan.3041.desc.wrathful + } + triggered_desc = { + trigger = { has_trait = calm } + desc = ep3_laamp_flavour_ewan.3041.desc.calm + } + triggered_desc = { + trigger = { has_trait = arrogant } + desc = ep3_laamp_flavour_ewan.3041.desc.arrogant + } + triggered_desc = { + trigger = { has_trait = humble } + desc = ep3_laamp_flavour_ewan.3041.desc.humble + } + triggered_desc = { + trigger = { has_trait = ambitious } + desc = ep3_laamp_flavour_ewan.3041.desc.ambitious + } + triggered_desc = { + trigger = { has_trait = content } + desc = ep3_laamp_flavour_ewan.3041.desc.content + } + triggered_desc = { + trigger = { has_trait = arbitrary } + desc = ep3_laamp_flavour_ewan.3041.desc.arbitrary + } + triggered_desc = { + trigger = { has_trait = just } + desc = ep3_laamp_flavour_ewan.3041.desc.just + } + triggered_desc = { + trigger = { + NOR = { + has_trait = compassionate + has_trait = sadistic + has_trait = callous + has_trait = wrathful + has_trait = calm + has_trait = arrogant + has_trait = humble + has_trait = ambitious + has_trait = content + has_trait = arbitrary + has_trait = just + } + } + desc = ep3_laamp_flavour_ewan.3041.desc.fallback + } + } + first_valid = { + triggered_desc = { + trigger = { has_claim_on = scope:former_title } + desc = ep3_laamp_flavour_ewan.3041.desc.title_claimed + } + desc = ep3_laamp_flavour_ewan.3041.desc.title_forsaken + } + } + theme = laamp + left_portrait = { + character = root + animation = personality_bold + } + right_portrait = { + character = scope:commander + animation = marshal + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3041 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_legitimists + # And we have to be doing something with our lives. + prestige_level >= 2 + # Must have held a title some years ago. + any_memory = { ep3_laamp_flavour_ewan_3041_valid_memory_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3041 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3041 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Nab our title. + random_memory = { + limit = { ep3_laamp_flavour_ewan_3041_valid_memory_trigger = yes } + var:old_primary_title = { save_scope_as = former_title } + } + ## Plus pick titles to be affected by our partisans. + scope:former_title = { + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + ep3_laamp_flavour_ewan_3041_sort_partisan_titles_list_effect = yes + } + # Create a commander for the troops. + create_character = { + template = new_commander_character + culture = scope:former_title.capital_county.culture + faith = scope:former_title.capital_county.faith + location = root.location + gender_female_chance = root_soldier_female_chance + dynasty = none + save_scope_as = commander + after_creation = { + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 300 + } + } + } + ## Give 'em a nickname. + hidden_effect = { + scope:commander = { assign_random_nickname_effect = yes } + } + } + + # More troops for the royal army-in-exile! + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + any_claim = { tier >= tier_empire } + } + desc = ep3_laamp_flavour_ewan.3041.a.imperial + } + desc = ep3_laamp_flavour_ewan.3041.a.royal + } + } + } + + add_courtier = scope:commander + add_hook = { + type = loyalty_hook + target = scope:commander + } + spawn_army = { + name = legitimist_loyalists + levies = { + value = 200 + # Increase this by a step for every prestige level we have beyond the minimum. + add = { + value = prestige_level + add = -1 + } + } + men_at_arms = { + type = armored_footmen + men = { + value = 200 + # Increase this by a step for every prestige level we have beyond the minimum. + add = { + value = prestige_level + add = -1 + } + } + } + location = root.location + origin = scope:former_title.capital_county.title_province + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Your loyalty is noted, but best used to subvert scope:usurper's rule [go reinforce peasant faction]. + option = { + name = ep3_laamp_flavour_ewan.3041.b + trigger = { + NOT = { has_trait = deceitful } + # Can't be used against players unless it's _both_ players. + OR = { + scope:former_title.holder = { is_ai = yes } + AND = { + is_ai = no + scope:former_title.holder = { is_ai = no } + } + } + } + + every_in_list = { + list = partisan_titles_list + custom = ep3_laamp_flavour_ewan.3041.tt.up_to_ten_usurper_held_counties + change_county_control = -30 + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # Deceitful: as above, but better. + option = { + name = ep3_laamp_flavour_ewan.3041.c + trigger = { + has_trait = deceitful + # Can't be used against players unless it's _both_ players. + OR = { + scope:former_title.holder = { is_ai = yes } + AND = { + is_ai = no + scope:former_title.holder = { is_ai = no } + } + } + } + trait = deceitful + + every_in_list = { + list = partisan_titles_list + custom = ep3_laamp_flavour_ewan.3041.tt.up_to_ten_usurper_held_counties + change_county_control = -50 + } + + stress_impact = { + deceitful = miniscule_stress_impact_loss + honest = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # I thank you, but I do not _need_ you. + option = { + name = ep3_laamp_flavour_ewan.3041.d + + add_prestige = medium_prestige_gain + + stress_impact = { + arrogant = miniscule_stress_impact_loss + humble = minor_stress_impact_gain + } + ai_chance = { + # The AI should virtually never turn down free troops. + base = 1 + } + } + + after = { + # Clean up our captain if we're not a player. + if = { + limit = { + is_ai = yes + this != scope:captain.liege + } + scope:captain = { + death = { death_reason = death_vanished } + } + } + } +} + +################################################## +# Map Painting +# by Ewan Cowhig Croft +# # 3051 - 3060 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { + duel = { + skill = diplomacy + value = $DUEL_DIFF$ + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3051.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3051.tt.success + create_artifact = { + name = handcrafted_map + description = { + random_valid = { + desc = handcrafted_map_desc.mythic_beasts + desc = handcrafted_map_desc.geography + desc = handcrafted_map_desc.settlements + desc = handcrafted_map_desc.people.urban + desc = handcrafted_map_desc.fauna + desc = handcrafted_map_desc.flora + desc = handcrafted_map_desc.government + desc = handcrafted_map_desc.tourism_sites + desc = handcrafted_map_desc.routes + desc = handcrafted_map_desc.people.rural + } + } + modifier = artifact_learning_$TIER$_modifier + modifier = artifact_diplomacy_$TIER$_modifier + type = miscellaneous + rarity = $RARITY$ + visuals = pocket_map + max_durability = 100 + save_scope_as = newly_created_map + } + scope:newly_created_map = { + set_variable = { + name = map_subject_title + value = root.location.empire + } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3051.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3051.tt.failure + add_stress = medium_stress_gain + } + } + } +} + +# Explorer writes/draws map of local area. +ep3_laamp_flavour_ewan.3051 = { + type = character_event + title = ep3_laamp_flavour_ewan.3051.t + desc = ep3_laamp_flavour_ewan.3051.desc + theme = laamp + left_portrait = { + character = root + animation = writing + } + artifact = { + target = scope:newly_created_map + position = lower_center_portrait + trigger = { exists = scope:newly_created_map } + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3051 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_explorers + # For tonal reasons, you can't be blind. + NOT = { has_trait = blind } + # Can't already have a map of this empire. + NOT = { + any_artifact = { + artifact_type = miscellaneous + # Deliberately not using ?= in case the NOT makes it go wonky. + has_variable = map_subject_title + var:map_subject_title = root.location.empire + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3051 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3051 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Nab our location for loc. + location.kingdom = { save_scope_as = kingdom } + } + + # Go for an illustrious artefact. + option = { + name = ep3_laamp_flavour_ewan.3051.a + + ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { + DUEL_DIFF = extremely_high_skill_rating + RARITY = illustrious + TIER = 3 + } + + stress_impact = { + diligent = medium_stress_impact_loss + lazy = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 3 } + } + } + + # Go for a famed artefact. + option = { + name = ep3_laamp_flavour_ewan.3051.b + + ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { + DUEL_DIFF = very_high_skill_rating + RARITY = famed + TIER = 2 + } + + stress_impact = { + diligent = minor_stress_impact_loss + lazy = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 2 } + } + } + + # Go for a masterwork artefact. + option = { + name = ep3_laamp_flavour_ewan.3051.c + + ep3_laamp_flavour_ewan_3051_duel_and_spawn_artefact = { + DUEL_DIFF = high_skill_rating + RARITY = masterwork + TIER = 1 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Simply have fun with it. + option = { + name = ep3_laamp_flavour_ewan.3051.d + + # Consolation prestige. + add_prestige = medium_prestige_gain + + # Plus some solid stress loss. + add_stress = medium_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } +} + +################################################## +# A Guide to ... +# by Ewan Cowhig Croft +# # 3061 - 3070 +################################################## + +# Scholar writes book on local subject. +ep3_laamp_flavour_ewan.3061 = { + type = character_event + title = ep3_laamp_flavour_ewan.3061.t + desc = ep3_laamp_flavour_ewan.3061.desc + theme = laamp + left_portrait = { + character = root + animation = writing + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3061 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_scholars + # For tonal reasons, you can't be blind. + NOT = { has_trait = blind } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3061 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3061 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown + } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Write on peoples & places. + option = { + name = ep3_laamp_flavour_ewan.3061.a + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3061_peoples_and_places_modifier + years = 10 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Write on prose & poetry. + option = { + name = ep3_laamp_flavour_ewan.3061.b + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3061_prose_and_poetry_modifier + years = 10 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Write on plants & animals. + option = { + name = ep3_laamp_flavour_ewan.3061.c + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_3061_plants_and_animals_modifier + years = 10 + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = 1 } + } + } + + # Simply doodle some thoughts. + option = { + name = ep3_laamp_flavour_ewan.3061.d + + # Mostly just stress relief. + add_stress = major_stress_loss + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } +} + +################################################## +# The Law in Scope:location +# by Ewan Cowhig Croft +# # 3071 - 3080 +################################################## + +# Law attacks criminal gang. +ep3_laamp_flavour_ewan.3071 = { + type = character_event + title = ep3_laamp_flavour_ewan.3071.t + desc = ep3_laamp_flavour_ewan.3071.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:local_soldier + animation = random_weapon_aggressive + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3071 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_brigands + # Sheriffs'll still try even against an army, just picking their moment, but even they have their limits. + current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_very_significant_armed_force + # Plus make sure that we're kind of a dick. + calc_true_if = { + amount >= 2 + # We'll either take moderate progress in at least two tracks... + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 30 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 30 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 30 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 30 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 30 + } + ## Or getting significant progress in any one track (since this'll count the prior increment as a separate validated trigger). + has_trait_xp = { + trait = gallowsbait + track = bandit + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = trickster + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = thief + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = poacher + value >= 60 + } + has_trait_xp = { + trait = gallowsbait + track = marauder + value >= 60 + } + } + # County checks. + location.county = { + # Must be in both a high-security area. + county_control >= 100 + # And not currently doing a job for the land's ruler. + holder = { save_temporary_scope_as = holder_temp } + NOT = { + root = { + any_character_active_contract = { + task_contract_employer ?= { + save_temporary_scope_as = employer_temp + OR = { + this = scope:holder_temp + scope:holder_temp = { + any_liege_or_above = { this = scope:employer_temp } + } + } + } + } + } + } + # Plus make sure that the holder doesn't actually think we're pretty chill. + holder = { + opinion = { + target = root + value <= 35 + } + NOT = { + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = root } + } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3071 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3071 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Create a local soldier. + hidden_effect_new_object = { + create_character = { + template = new_warrior_character + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = local_soldier + } + location.county.holder = { add_courtier = scope:local_soldier } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # SCE: duel the lead attacker. + option = { + name = ep3_laamp_flavour_ewan.3071.a + trigger = { can_start_single_combat_trigger = yes } + + custom_tooltip = { + text = duel_to_the_death.tt + configure_start_single_combat_effect = { + SC_INITIATOR = scope:local_soldier + SC_ATTACKER = scope:local_soldier + SC_DEFENDER = root + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = ep3_laamp_flavour_ewan.3072 + } + } + + stress_impact = { + brave = medium_stress_impact_loss + craven = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Intrigue insta-win: bring in your ambush immediately. + option = { + name = ep3_laamp_flavour_ewan.3071.b + trigger = { intrigue >= extremely_high_skill_rating } + skill = intrigue + + scope:local_soldier = { + death = { death_reason = death_battle } + } + add_prestige = medium_prestige_gain + + stress_impact = { deceitful = minor_stress_impact_loss } + ai_chance = { + # Honour or no, if you can insta-win, do it. + base = 1000 + } + } + + # Intrigue duel: you've got men nearby who can help. + option = { + name = ep3_laamp_flavour_ewan.3071.c + trigger = { intrigue < extremely_high_skill_rating } + + duel = { + skill = intrigue + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3071.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3071.c.tt.success + left_icon = scope:local_soldier + scope:local_soldier = { + death = { death_reason = death_battle } + } + add_prestige = medium_prestige_gain + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3071.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3071.c.tt.failure + left_icon = scope:local_soldier + increase_wounds_effect = { REASON = battle } + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { deceitful = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # Martial insta-win: your party easily counter-attacks. + option = { + name = ep3_laamp_flavour_ewan.3071.d + trigger = { martial >= extremely_high_skill_rating } + skill = martial + + scope:local_soldier = { + death = { death_reason = death_battle } + } + add_prestige = medium_prestige_gain + + # No stress here. + ai_chance = { + # Honour or no, if you can insta-win, do it. + base = 1000 + } + } + + # Martial duel: rally your small party against them. + option = { + name = ep3_laamp_flavour_ewan.3071.e + trigger = { martial < extremely_high_skill_rating } + + duel = { + skill = martial + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3071.e.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3071.e.tt.success + left_icon = scope:local_soldier + scope:local_soldier = { + death = { death_reason = death_battle } + } + add_prestige = medium_prestige_gain + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3071.e.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3071.e.tt.failure + left_icon = scope:local_soldier + increase_wounds_effect = { REASON = battle } + add_prestige = medium_prestige_loss + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = 1 + } + } + } + + # Flee. + option = { + name = ep3_laamp_flavour_ewan.3071.f + + random_list = { + 100 = { + desc = ep3_laamp_flavour_ewan.3071.f.success + add_prestige = minor_prestige_loss + } + 100 = { + desc = ep3_laamp_flavour_ewan.3071.f.failure + increase_wounds_effect = { REASON = battle } + add_prestige = medium_prestige_loss + } + } + + stress_impact = { + craven = medium_stress_impact_loss + brave = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = -2 } + } + } +} + +ep3_laamp_flavour_ewan.3072 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = root } + root = { + trigger_event = { + id = ep3_laamp_flavour_ewan.3073 + days = 1 + } + } + } + # No else: doesn't really matter if root is dead now, does it? + } +} + +# You won the single combat! +ep3_laamp_flavour_ewan.3073 = { + type = character_event + title = ep3_laamp_flavour_ewan.3073.t + desc = ep3_laamp_flavour_ewan.3073.desc + theme = laamp + left_portrait = { + character = root + animation = random_weapon_celebrate + } + override_background = { reference = battlefield } + + # Victory! + option = { + name = ep3_laamp_flavour_ewan.3073.a + + # We give you a bit more than the usual amount, since you risked your life overtly. + add_prestige = 250 + + # No stress here. + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } +} + +################################################## +# Wrestle for It +# by Ewan Cowhig Croft +# # 3081 - 3090 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = { + can_start_single_combat_trigger = yes + ep3_laamp_flavour_ewan_available_courtier_trigger = yes + prowess >= medium_skill_rating + is_knight = yes + NOR = { + has_trait = shy + has_trait = humble + has_trait = lazy + } + # This is a friendly challenge, so make sure we're not getting an utter bastard to do it. + opinion = { + target = root + value >= 1 + } +} + +# Merc challenged to a wrastlin'. +ep3_laamp_flavour_ewan.3081 = { + type = character_event + title = ep3_laamp_flavour_ewan.3081.t + desc = ep3_laamp_flavour_ewan.3081.desc + theme = laamp + left_portrait = { + character = root + animation = stayback + } + right_portrait = { + character = scope:challenger + animation = wrestling_victory + } + override_background = { reference = army_camp } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_3081 } + } + # Must have the correct camp purpose. + has_realm_law = camp_purpose_mercenaries + # We're not _actually_ going to use the SCE, but it's a good benchmark for whether wrestling would even make sense. + can_start_single_combat_trigger = yes + # And we should have at least one courtier who'd be game to try. + any_courtier = { ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_3081 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_3081 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_long + } + } + # Grab a suitable courtier. + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_3081_challenging_courtier_trigger = yes } + order_by = { + value = prowess + # A few traits let you skip the queue (partially). + if = { + limit = { has_trait = wrathful } + add = 5 + } + if = { + limit = { has_trait = arrogant } + add = 5 + } + if = { + limit = { has_trait = athletic } + add = 5 + } + } + save_scope_as = challenger + } + } + + # Sure. + option = { + name = ep3_laamp_flavour_ewan.3081.a + + duel = { + skill = prowess + target = scope:challenger + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3081.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3081.a.tt.success + left_icon = scope:challenger + add_prestige = medium_prestige_gain + reverse_add_opinion = { + target = scope:challenger + modifier = respect_opinion + opinion = 40 + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.3081.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.3081.a.tt.failure + left_icon = scope:challenger + add_prestige = miniscule_prestige_gain + reverse_add_opinion = { + target = scope:challenger + modifier = respect_opinion + opinion = 20 + } + } + } + } + + stress_impact = { + humble = minor_stress_impact_loss + gregarious = miniscule_stress_impact_loss + shy = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + opinion_modifier = { opinion_target = scope:challenger } + } + } + + # Have HerHim beaten for even asking. + option = { + name = ep3_laamp_flavour_ewan.3081.b + + add_dread = 30 + reverse_add_opinion = { + target = scope:challenger + modifier = overreaction_opinion + opinion = -50 + } + scope:challenger = { increase_wounds_effect = { REASON = beaten } } + + stress_impact = { + sadistic = medium_stress_impact_loss + arrogant = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = minor_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_vengefulness = 2 } + opinion_modifier = { + opinion_target = scope:challenger + multiplier = -1 + } + } + } + + # Hah, no. + option = { + name = ep3_laamp_flavour_ewan.3081.c + + add_prestige = minor_prestige_gain + reverse_add_opinion = { + target = scope:challenger + modifier = haughty_opinion + opinion = -20 + } + + stress_impact = { + arrogant = minor_stress_impact_loss + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 2 } + } + } +} + + + + + + + + + + + +################################################## +# TRAVEL DANGER / SUPPLIES + + +################################################## +# Bandits! +# by Ewan Cowhig Croft +# 4001 - 4010 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4001_duel_victory_effect = { + add_prestige = { + value = medium_prestige_gain + if = { + limit = { scope:sc_victor ?= root } + # If you win the duel, we give you a bit more than the usual amount, since you risked your life overtly. + add = 100 + } + } + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4001_duel_defeat_effect = { + add_prestige = medium_prestige_loss + increase_wounds_effect = { REASON = bandit_attack } + domicile = { + change_provisions = { + value = scope:provisions_loss + multiply = -1 + } + } +} + +# Bandit raid whilst moving. +ep3_laamp_flavour_ewan.4001 = { + type = character_event + title = ep3_laamp_flavour_ewan.4001.t + desc = ep3_laamp_flavour_ewan.4001.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:bandit_leader + animation = threatening + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4001 } + } + # Must have the correct travel danger type. + location = { + travel_danger_type = { + travel_plan = root.current_travel_plan + type = county_control + } + } + # Bandits won't attack forces over a certain size, even assuming you're spread out in a long line. + current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4001 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4001 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + # Nab this as a scope, as we may need it if the duel finishes up. + save_scope_as = laamp_title + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Create a hostile bandit. + create_character = { + template = bandit_character + location = root.location + culture = root.location.culture + faith = root.location.faith + martial = { + min_template_decent_skill + max_template_high_skill + } + prowess = { + min_template_decent_skill + max_template_high_skill + } + save_scope_as = bandit_leader + } + # How many provisions do we need to surrender? + save_scope_value_as = { + name = provisions_loss + value = { + add = domicile.provisions + multiply = 0.33 + floor = yes + min = @ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking + } + } + } + + # Martial duel to repel them. + option = { + name = ep3_laamp_flavour_ewan.4001.a + + duel = { + skill = martial + target = scope:bandit_leader + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4001.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4001.a.tt.success + left_icon = scope:bandit_leader + ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes + scope:bandit_leader = { + death = { death_reason = death_attacking_laamp_train } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4001.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4001.a.tt.failure + left_icon = scope:bandit_leader + ep3_laamp_flavour_ewan_4001_duel_defeat_effect = yes + } + } + } + + stress_impact = { + brave = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = 1 + } + } + } + + # SCE: tackle the bandit leader head-on. + option = { + name = ep3_laamp_flavour_ewan.4001.b + trigger = { can_start_single_combat_trigger = yes } + + custom_tooltip = { + text = duel_to_the_death.tt + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:bandit_leader + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = ep3_laamp_flavour_ewan.4002 + } + } + + stress_impact = { + brave = medium_stress_impact_loss + craven = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # Brigands: back off, little fish. + option = { + name = ep3_laamp_flavour_ewan.4001.c + trigger = { has_realm_law = camp_purpose_brigands } + reason = purpose_brigands + + duel = { + skill = intrigue + target = scope:bandit_leader + # Victory! + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4001.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4001.c.tt.success + left_icon = scope:bandit_leader + ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes + } + } + # Defeat. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4001.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4001.c.tt.failure + left_icon = scope:bandit_leader + ep3_laamp_flavour_ewan_4001_duel_defeat_effect = yes + } + } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + humble = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -2 } + } + } + + # Surrender an amount of provisions to them. + option = { + name = ep3_laamp_flavour_ewan.4001.d + trigger = { domicile.provisions >= scope:provisions_loss } + show_as_unavailable = { always = yes } + + add_prestige = miniscule_prestige_loss + domicile = { + change_provisions = { + value = scope:provisions_loss + multiply = -1 + } + } + + stress_impact = { + craven = major_stress_impact_loss + brave = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = -2 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + +ep3_laamp_flavour_ewan.4002 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = root } + root = { + trigger_event = { + id = ep3_laamp_flavour_ewan.4003 + days = 1 + } + } + } + else = { + # Otherwise, remember to have the bandits loot. + scope:laamp_title.holder.domicile = { + change_provisions = { + value = scope:provisions_loss + multiply = -1 + } + } + } + } +} + +# You won the single combat! +ep3_laamp_flavour_ewan.4003 = { + type = character_event + title = ep3_laamp_flavour_ewan.4003.t + desc = ep3_laamp_flavour_ewan.4003.desc + theme = laamp + left_portrait = { + character = root + animation = random_weapon_celebrate + } + override_background = { reference = battlefield } + + # Victory! + option = { + name = ep3_laamp_flavour_ewan.4003.a + + ep3_laamp_flavour_ewan_4001_duel_victory_effect = yes + + # No stress here. + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } +} + +################################################## +# A Land of Milk & Honey +# by Ewan Cowhig Croft +# 4011 - 4020 +################################################## + +# Bountiful hunting/foraging. +ep3_laamp_flavour_ewan.4011 = { + type = character_event + title = ep3_laamp_flavour_ewan.4011.t + desc = ep3_laamp_flavour_ewan.4011.desc + theme = widgetless_travel + left_portrait = { + character = root + animation = happiness + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4011 } + } + # Must be in a nice, safe area with plentiful food. + current_travel_plan.current_danger_value <= 0 + location = { + county.county_control >= 100 + OR = { + terrain = farmlands + AND = { + terrain = floodplains + county.development_level >= 25 + } + } + } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4011 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4011 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Everyone loses stress. + stress_impact = { + base = medium_stress_loss + lazy = minor_stress_impact_loss + gluttonous = minor_stress_impact_loss + } + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + # No complex impact because it'll make the tooltips wonky. + add_stress = medium_stress_loss + } + # How many provisions do we take on? + random_list = { + 100 = { + save_scope_value_as = { + name = provisions_gain + value = medium_provisions_gain + } + } + 100 = { + save_scope_value_as = { + name = provisions_gain + value = major_provisions_gain + } + } + 100 = { + save_scope_value_as = { + name = provisions_gain + value = massive_provisions_gain + } + } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + } + + # Enjoy the fruits. + option = { + name = ep3_laamp_flavour_ewan.4011.a + + domicile = { change_provisions = scope:provisions_gain } + + # Stress handled in the immediate. + ai_chance = { + # Only one option, so no logic needed. + base = 1 + } + } +} + +################################################## +# Parched +# by Ewan Cowhig Croft +# 4021 - 4030 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = { + add_prestige = minor_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = 20 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = { + if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier } + custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.dehydration_already_at_worst + } + else_if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier } + hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier + years = 10 + } + } + else_if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier } + hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t2_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t1_modifier + years = 10 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = { + if = { + limit = { health <= good_health } + ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = yes + } + every_courtier = { + limit = { + location = root.location + health <= good_health + } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.dehydration_increments + hidden_effect = { ep3_laamp_flavour_ewan_4021_increment_dehydration_effect = yes } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { + custom_tooltip = ep3_laamp_flavour_ewan.4021.tt.officer_aptitude + random_list = { + 0 = { + desc = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.success + left_icon = $OFFICER$ + ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = yes + } + modifier = { + add = { + value = $APTITUDE$ + multiply = 20 + min = 5 + max = 95 + } + always = yes + } + } + 0 = { + desc = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.tt.delegated_to_officer.failure + left_icon = $OFFICER$ + ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes + } + modifier = { + add = { + value = 100 + add = { + add = $APTITUDE$ + multiply = -20 + } + min = 5 + max = 95 + } + always = yes + } + } + } +} + +# Difficulty finding water. +ep3_laamp_flavour_ewan.4021 = { + type = character_event + title = ep3_laamp_flavour_ewan.4021.t + desc = ep3_laamp_flavour_ewan.4021.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:portrait_1 + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4021 } + } + # If we've already got the parched modifier, don't stack it past the max. + NOT = { has_character_modifier = ep3_laamp_flavour_ewan_4021_extended_period_of_dehydration_t3_modifier } + # Make sure we're not somewhere where we could credibly source water. + location = { + any_neighboring_province = { is_river_province = no } + # You can't drink coastal ocean water except for some inland freshwater seas, but they will tend to have tributaries flowing into them so we allow it. + is_coastal = no + } + # And make sure we're not absolutely swimming in supplies. + domicile ?= { provisions <= sixty_percent_provisions_value } + # Must have the correct travel danger type. + location = { + OR = { + travel_danger_type = { + travel_plan = root.current_travel_plan + terrain = desert + } + travel_danger_type = { + travel_plan = root.current_travel_plan + terrain = desert_mountains + } + # Some terrains depend on season. + AND = { + is_nice_season_to_be_outside_trigger = { LOCATION = root.location } + travel_danger_type = { + travel_plan = root.current_travel_plan + terrain = steppe + } + } + AND = { + is_nice_season_to_be_outside_trigger = { LOCATION = root.location } + travel_danger_type = { + travel_plan = root.current_travel_plan + terrain = drylands + } + } + } + } + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4021 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4021 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # If we have a forager or a huntsman, grab whichever is better at their job. + court_position:chief_forager_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + save_scope_as = forager + # We'll want their aptitude later. + save_scope_value_as = { + name = forager_apt + value = "aptitude(chief_forager_camp_officer)" + } + # Plus, register who we're showing a portrait of. + save_scope_as = portrait_1 + } + } + court_position:huntperson_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + save_scope_as = hunter + # We'll want their aptitude later. + save_scope_value_as = { + name = hunter_apt + value = "aptitude(huntperson_camp_officer)" + } + # Plus, register who we're showing a portrait of. + save_scope_as = portrait_1 + } + } + # Sort whose event option will be displayed. + ## If we have both, pick whichever is better (preferring the forager). + if = { + limit = { + exists = scope:forager + exists = scope:hunter + } + if = { + limit = { scope:forager_apt >= scope:hunter_apt } + save_scope_value_as = { + name = preferred_officer + value = flag:forager + } + } + else = { + save_scope_value_as = { + name = preferred_officer + value = flag:hunter + } + } + } + else_if = { + limit = { exists = scope:forager } + save_scope_value_as = { + name = preferred_officer + value = flag:forager + } + } + else_if = { + limit = { exists = scope:hunter } + save_scope_value_as = { + name = preferred_officer + value = flag:hunter + } + } + # Sort our duel diff according to what terrain we're in. + save_scope_value_as = { + name = duel_diff + value = { + if = { + limit = { + location = { terrain = desert } + } + add = very_high_skill_rating + } + if = { + limit = { + location = { terrain = desert_mountains } + } + add = extremely_high_skill_rating + } + if = { + limit = { + location = { terrain = steppe } + } + add = high_skill_rating + } + if = { + limit = { + location = { terrain = drylands } + } + add = decent_skill_rating + } + } + } + } + + weight_multiplier = { + modifier = { + add = 1 + ep3_laamp_flavour_ewan_0041_access_sahara_provision_options_trigger = yes + } + } + + # Learning duel: there must be _something_ around here... + option = { + name = ep3_laamp_flavour_ewan.4021.a + + duel = { + skill = intrigue + value = scope:duel_diff + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4021.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.a.tt.success + left_icon = scope:CHANGE_ME + ep3_laamp_flavour_ewan_4021_camp_avoids_dehydration_effect = yes + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4021.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.a.tt.failure + left_icon = scope:CHANGE_ME + ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Chief forager: send them out searching. + option = { + name = ep3_laamp_flavour_ewan.4021.b + trigger = { scope:preferred_officer ?= flag:forager } + reason = have_chief_forager + + ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { + OFFICER = scope:forager + APTITUDE = scope:forager_apt + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Huntsman: send them out searching. + option = { + name = ep3_laamp_flavour_ewan.4021.c + trigger = { scope:preferred_officer ?= flag:hunter } + reason = have_huntperson + + ep3_laamp_flavour_ewan_4021_delegate_search_to_officer_effect = { + OFFICER = scope:hunter + APTITUDE = scope:hunter_apt + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Reserve water: ration your way through this. + option = { + name = ep3_laamp_flavour_ewan.4021.d + trigger = { + domicile = { has_domicile_building = supply_tent_reserve_water } + } + reason = has_building_supply_tent_reserve_water + + add_prestige = minor_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + + # No stress here. + ai_chance = { + # If you have the good option, take the good option. + base = 1000 + } + } + + # Let's hope we're out of this hell soon. + option = { + name = ep3_laamp_flavour_ewan.4021.e + + random_list = { + 30 = { + desc = ep3_laamp_flavour_ewan.4021.e.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.e.tt.success + # Consolation prestige, since you took the "I'm inept and I did no planning" option. + add_prestige = minor_prestige_gain + } + modifier = { + add = -20 + location = { terrain = desert_mountains } + } + modifier = { + add = 25 + location = { terrain = drylands } + } + } + 70 = { + desc = ep3_laamp_flavour_ewan.4021.e.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4021.e.tt.failure + ep3_laamp_flavour_ewan_4021_camp_suffers_dehydration_effect = yes + } + modifier = { + add = 20 + location = { terrain = desert_mountains } + } + modifier = { + add = -25 + location = { terrain = drylands } + } + } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + +################################################## +# Sickness in the Herd +# by Ewan Cowhig Croft +# 4031 - 4040 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4031_animals_treated_effect = { + add_prestige = minor_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = { + add_prestige = minor_prestige_loss + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier + years = 10 + } +} + +scripted_effect ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = { + every_courtier = { + limit = { + location = root.location + has_trait = callous + } + custom = custom.every_callous_follower + add_opinion = { + target = root + modifier = practical_opinion + opinion = 40 + } + } + every_courtier = { + limit = { + location = root.location + has_trait = compassionate + } + custom = custom.every_compassionate_follower + add_opinion = { + target = root + modifier = callous_opinion + opinion = -40 + } + } +} + +# Pack animals are sick or wounded. +ep3_laamp_flavour_ewan.4031 = { + type = character_event + title = ep3_laamp_flavour_ewan.4031.t + desc = ep3_laamp_flavour_ewan.4031.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = stress + } + lower_left_portrait = scope:groom + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4031 } + } + # Make sure we're not already suffering from the previous effects of sickness amongst the animals. + NOR = { + has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_affects_some_of_herd_modifier + has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier + has_character_modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_wildly_through_herd_modifier + has_character_modifier = ep3_laamp_flavour_ewan_4031_callous_culled_herd_modifier + has_character_modifier = ep3_laamp_flavour_ewan_4031_plentiful_steeds_culled_herd_modifier + has_character_modifier = ep3_laamp_flavour_ewan_4031_callous_and_plentiful_steeds_culled_herd_modifier + } + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4031 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4031 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # If we have a groom, nab 'em. + court_position:head_groom_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + save_scope_as = groom + # We'll want their aptitude later. + save_scope_value_as = { + name = groom_apt + value = "aptitude(head_groom_camp_officer)" + } + } + } + } + + # Learning duel to treat them. + option = { + name = ep3_laamp_flavour_ewan.4031.a + + duel = { + skill = learning + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4031.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.a.tt.success + ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4031.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.a.tt.failure + ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes + } + } + } + + stress_impact = { compassionate = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + modifier = { + add = 50 + highest_skill = learning + } + } + } + + # Martial duel to treat them. + option = { + name = ep3_laamp_flavour_ewan.4031.b + + duel = { + skill = martial + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4031.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.b.tt.success + ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4031.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.b.tt.failure + ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + modifier = { + add = 50 + highest_skill = martial + } + } + } + + # Head groom: up & at 'em m'droog. + option = { + name = ep3_laamp_flavour_ewan.4031.c + trigger = { exists = scope:groom } + + random_list = { + 0 = { + desc = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.success + left_icon = scope:groom + ep3_laamp_flavour_ewan_4031_animals_treated_effect = yes + } + modifier = { + add = { + value = scope:groom_apt + multiply = 20 + min = 5 + max = 95 + } + always = yes + } + } + 0 = { + desc = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.tt.delegated_to_officer.failure + left_icon = scope:groom + ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_effect = yes + } + modifier = { + add = { + value = 100 + add = { + add = scope:groom_apt + multiply = -20 + } + min = 5 + max = 95 + } + always = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Callous: slaughter and toss the sick ones, save the rest. + option = { + name = ep3_laamp_flavour_ewan.4031.d + trigger = { + has_trait = callous + NOT = { + domicile = { has_domicile_building = baggage_train_ample_steeds } + } + } + trait = callous + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_callous_culled_herd_modifier + years = 10 + } + ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes + + stress_impact = { callous = medium_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + } + } + + # Plentiful Steeds: slaughter and toss the sick ones, save the rest. + option = { + name = ep3_laamp_flavour_ewan.4031.e + trigger = { + NOT = { has_trait = callous } + domicile = { has_domicile_building = baggage_train_ample_steeds } + } + reason = has_building_baggage_train_ample_steeds + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_plentiful_steeds_culled_herd_modifier + years = 10 + } + ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes + + stress_impact = { + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + } + } + + # Callous & Plentiful Steeds: slaughter and toss the sick ones, save the rest. + option = { + name = ep3_laamp_flavour_ewan.4031.f + trigger = { + has_trait = callous + domicile = { has_domicile_building = baggage_train_ample_steeds } + } + reason = is_callous_has_building_baggage_train_ample_steeds + + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_callous_and_plentiful_steeds_culled_herd_modifier + years = 10 + } + ep3_laamp_flavour_ewan_4031_cull_sick_animals_apply_opinions_effect = yes + + stress_impact = { callous = major_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = -2 } + } + } + + # Carry on & pray to HealthGodName for mercy. + option = { + name = ep3_laamp_flavour_ewan.4031.g + + random_list = { + 10 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_fades + custom_tooltip = ep3_laamp_flavour_ewan.4031.g.tt.some_of_herd.tt + } + } + 30 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_contained + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_sickness_affects_some_of_herd_modifier + years = 10 + } + } + } + 40 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_spreads + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_through_herd_modifier + years = 10 + } + } + } + 20 = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4031.g.tt.sickness_spreads_wildly + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4031_sickness_spreads_wildly_through_herd_modifier + years = 10 + } + } + } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_zeal = 1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + +################################################## +# Fortuna's Tithe +# by Ewan Cowhig Croft +# 4041 - 4050 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = { + location = root.location + health <= good_health +} + +scripted_trigger ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = { + maa_current_troops_count >= 2 + root = { + OR = { + is_at_war = no + AND = { + is_at_war = yes + prev = { is_raised = no } + } + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = { + OR = { + scope:weather_type = flag:storm_snow + scope:weather_type = flag:frozen_water + } +} + +scripted_effect ep3_laamp_flavour_ewan_4041_train_rallies_effect = { + add_prestige = medium_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = $OPINION$ + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = { + if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t3_modifier } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_already_at_worst + } + else_if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier } + hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t3_modifier + years = 8 + } + } + else_if = { + limit = { has_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier } + hidden_effect = { remove_character_modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t2_modifier + years = 8 + } + } + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_hypothermia_t1_modifier + years = 8 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = { + switch = { + trigger = scope:weather_type + flag:storm_thunder = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 40 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments + hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } + } + if = { + limit = { + NOR = { + exists = scope:lightning_strike_happened + root.primary_title = { has_variable = had_ep3_laamp_flavour_ewan_4041_lightning_strike } + } + } + random = { + chance = 1 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning + hidden_effect = { + random_list = { + 60 = { + increase_wounds_effect = { REASON = struck_by_lightning } + increase_wounds_effect = { REASON = struck_by_lightning } + increase_wounds_effect = { REASON = struck_by_lightning } + } + 40 = { + death = { death_reason = death_struck_by_lightning } + } + } + save_scope_as = lightning_strike_happened + root = { + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4041_lightning_strike + value = scope:lightning_strike_happened + years = 50 + } + } + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning + if = { + limit = { + scope:lightning_strike_happened = { is_alive = no } + } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning.dead + } + else = { custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.struck_by_lightning.alive } + } + } + } + } + } + } + } + flag:storm_wind = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 25 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments + hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } + } + } + } + flag:storm_snow = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 60 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice + hidden_effect = { + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + } + } + } + } + flag:storm_sand = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 50 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.modifier_worse_for_vulnerable_characters + hidden_effect = { + if = { + limit = { + OR = { + is_adult = no + AND = { + is_female = yes + age >= Define:NCharacter|FEMALE_ELDERLY_AGE + } + AND = { + is_male = yes + age >= Define:NCharacter|MALE_ELDERLY_AGE + } + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_sandstorm_lungs_vulnerable_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_sandstorm_lungs_adult_modifier + years = 5 + } + } + } + } + } + } + flag:wild_fires = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 30 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.modifier_worse_for_vulnerable_characters + hidden_effect = { + if = { + limit = { + OR = { + is_adult = no + AND = { + is_female = yes + age >= Define:NCharacter|FEMALE_ELDERLY_AGE + } + AND = { + is_male = yes + age >= Define:NCharacter|MALE_ELDERLY_AGE + } + } + } + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_wildfire_lungs_vulnerable_modifier + years = 10 + } + } + else = { + add_character_modifier = { + modifier = ep3_laamp_flavour_ewan_4041_wildfire_lungs_adult_modifier + years = 5 + } + } + } + } + if = { + limit = { + # Some people can always outrun the flames... + trigger_if = { + limit = { + # ... unless fate has been especially cruel. + NOT = { has_trait = one_legged } + } + NOR = { + has_trait = athletic + has_trait = strong + has_trait = physique_good + } + } + } + random = { + chance = 5 + death = { death_reason = death_burnt_in_wild_fire } + } + } + } + every_maa_regiment = { + limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } + custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment + random = { + chance = 40 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.wildfire + hidden_effect = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = { + integer_range = { + min = ep3_laamp_flavour_ewan_4041_regiment_damage_wildfires_min + max = ep3_laamp_flavour_ewan_4041_regiment_damage_wildfires_max + } + } + multiply = -1 + } + } + } + } + } + flag:avalanches = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 60 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice + hidden_effect = { + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + } + } + if = { + limit = { + NOR = { + has_trait = winter_soldier + has_trait = rough_terrain_expert + } + } + random = { + chance = 5 + death = { death_reason = death_swept_away_by_avalanche } + } + } + } + every_maa_regiment = { + limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } + custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment + random = { + chance = { + value = 40 + # Big ups to the Barcas. + if = { + limit = { is_unit_type = elephant_cavalry } + add = 40 + } + } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.avalanche + hidden_effect = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = { + integer_range = { + min = ep3_laamp_flavour_ewan_4041_regiment_damage_avalanches_min + max = ep3_laamp_flavour_ewan_4041_regiment_damage_avalanches_max + } + } + multiply = -1 + } + } + } + } + } + flag:flash_floods = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 30 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments + hidden_effect = { ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes } + } + if = { + limit = { + # Except strong/veteran swimmers... + trigger_if = { + limit = { + # ... unless fate has been especially cruel. + NOT = { has_trait = one_legged } + } + NOR = { + has_trait = forder + has_trait = athletic + has_trait = strong + has_trait = physique_good + } + } + } + random = { + chance = 5 + death = { death_reason = death_swept_away_by_flash_flood } + } + } + } + every_maa_regiment = { + limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } + custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment + random = { + chance = { + value = 40 + # Big ups to the Barcas. + if = { + limit = { is_unit_type = elephant_cavalry } + add = 40 + } + } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.flash_floods + hidden_effect = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = { + integer_range = { + min = ep3_laamp_flavour_ewan_4041_regiment_damage_flash_floods_min + max = ep3_laamp_flavour_ewan_4041_regiment_damage_flash_floods_max + } + } + multiply = -1 + } + } + } + } + } + flag:frozen_water = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 50 + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.hypothermia_increments_twice + hidden_effect = { + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + ep3_laamp_flavour_ewan_4041_increment_hypothermia_effect = yes + } + } + if = { + limit = { + NOT = { has_trait = winter_soldier } + # No swimming exception on this one: the shock of it, especially in thick winter clothing, is gonna paralyse you. + } + random = { + chance = 5 + death = { death_reason = death_drowned_in_hidden_icy_water } + } + } + } + every_maa_regiment = { + limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } + custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment + random = { + chance = { + value = 30 + # Heavier MaA types & cavalry are screwed. + if = { + limit = { + OR = { + is_unit_type = elephant_cavalry + is_unit_type = camel_cavalry + is_unit_type = heavy_cavalry + is_unit_type = light_cavalry + is_unit_type = heavy_infantry + is_unit_type = siege_weapon + } + } + add = 30 + } + # Anything lighter, or at least not mounted, can at least _try_ to bolt. + else_if = { + limit = { + OR = { + is_unit_type = skirmishers + is_unit_type = archers + is_unit_type = pikemen + } + } + add = -20 + } + } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.frozen_water + hidden_effect = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = { + integer_range = { + min = ep3_laamp_flavour_ewan_4041_regiment_damage_frozen_water_min + max = ep3_laamp_flavour_ewan_4041_regiment_damage_frozen_water_max + } + } + multiply = -1 + } + } + } + } + } + flag:earthquake = { + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4041_here_and_not_peak_health_trigger = yes } + custom = ep3_laamp_flavour_ewan.4021.tt.every_courtier_at_your_location_with_less_than_excellent_health + random = { + chance = 25 + death = { death_reason = death_consumed_by_earthquake } + } + } + every_maa_regiment = { + limit = { ep3_laamp_flavour_ewan_4041_valid_regiment_trigger = yes } + custom = ep3_laamp_flavour_ewan.4041.tt.every_regiment + random = { + chance = { + value = 50 + # Heavier MaA types are screwed. + if = { + limit = { + OR = { + is_unit_type = elephant_cavalry + is_unit_type = heavy_infantry + is_unit_type = siege_weapon + is_unit_type = heavy_cavalry + } + } + add = 30 + } + # Anything lighter can at least _try_ to bolt. + else_if = { + limit = { + OR = { + is_unit_type = skirmishers + is_unit_type = archers + } + } + add = -30 + } + } + custom_tooltip = ep3_laamp_flavour_ewan.4041.tt.regiments_take_damage_range.earthquake + hidden_effect = { + change_maa_troops_count = { + value = maa_current_troops_count + multiply = { + integer_range = { + min = ep3_laamp_flavour_ewan_4041_regiment_damage_earthquake_min + max = ep3_laamp_flavour_ewan_4041_regiment_damage_earthquake_max + } + } + multiply = -1 + } + } + } + } + } + } +} + +# Bad weather destroys wagons or pack animals. +ep3_laamp_flavour_ewan.4041 = { + type = character_event + title = ep3_laamp_flavour_ewan.4041.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:weather_type = flag:storm_thunder } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.thunder + } + triggered_desc = { + trigger = { scope:weather_type = flag:storm_wind } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.wind + } + triggered_desc = { + trigger = { scope:weather_type = flag:storm_snow } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.snow + } + triggered_desc = { + trigger = { scope:weather_type = flag:storm_sand } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.storm.sand + } + triggered_desc = { + trigger = { scope:weather_type = flag:wild_fires } + desc = { + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.intro + first_valid = { + triggered_desc = { + trigger = { + location = { + OR = { + terrain = steppe + terrain = drylands + } + } + } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.scrub + } + triggered_desc = { + trigger = { + location = { + OR = { + terrain = hills + terrain = mountains + } + } + } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.slopes + } + triggered_desc = { + trigger = { + location = { + OR = { + terrain = jungle + terrain = forest + terrain = taiga + } + } + } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.treeline + } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.wild_fires.fallback + } + } + } + triggered_desc = { + trigger = { scope:weather_type = flag:avalanches } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.avalanche + } + triggered_desc = { + trigger = { scope:weather_type = flag:flash_floods } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.flood + } + triggered_desc = { + trigger = { scope:weather_type = flag:frozen_water } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.frozen_water + } + triggered_desc = { + trigger = { scope:weather_type = flag:earthquake } + desc = ep3_laamp_flavour_ewan.4041.desc.weather_type.earthquake + } + } + desc = ep3_laamp_flavour_ewan.4041.desc.outro + } + theme = widgetless_travel_danger + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + scope:weather_type = flag:storm_thunder + scope:weather_type = flag:storm_snow + scope:weather_type = flag:storm_wind + } + } + animation = shiver + } + animation = shock + } + override_background = { + trigger = { ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = yes } + reference = wilderness + } + override_background = { + trigger = { ep3_laamp_flavour_ewan_4041_use_snowy_forest_backdrop_trigger = no } + reference = wilderness + } + # ALL THE VFX! + override_effect_2d = { + trigger = { scope:weather_type = flag:wild_fires } + reference = smoke + } + widgets = { + widget = { + is_shown = { + OR = { + scope:weather_type = flag:storm_snow + scope:weather_type = flag:avalanches + scope:weather_type = flag:frozen_water + } + } + gui = "event_window_widget_vfx_snowstorm" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:storm_thunder } + gui = "event_window_widget_vfx_lightning_storm" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:storm_wind } + gui = "event_window_widget_vfx_rain_storm" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:storm_sand } + gui = "event_window_widget_vfx_sandstorm" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:wild_fires } + gui = "event_window_widget_vfx_heavy_smoke" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:flash_floods } + gui = "event_window_widget_vfx_rainy_fog" + container = "foreground_shader_vfx_container" + } + widget = { + is_shown = { scope:weather_type = flag:earthquake } + gui = "event_window_widget_vfx_earthquake" + container = "foreground_shader_vfx_container" + } + } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4041 } + } + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4041 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4041 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Roll our severe weather type. + random_list = { + # Some storms can happen anywhere. + ## Thunder. + 250 = { + trigger = { + location = { + NOR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + save_scope_value_as = { + name = weather_type + value = flag:storm_thunder + } + } + ## Wind. + 250 = { + trigger = { + location = { + NOR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + save_scope_value_as = { + name = weather_type + value = flag:storm_wind + } + } + # Snow storms. + 100 = { + trigger = { + location_has_normal_or_worse_winter_trigger = yes + # Some people won't consider this excessive hardship. + NOR = { + culture_uses_frequent_winter_transportation_trigger = yes + has_trait = winter_soldier + } + } + save_scope_value_as = { + name = weather_type + value = flag:storm_snow + } + } + # Sand storms. + 100 = { + trigger = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + save_scope_value_as = { + name = weather_type + value = flag:storm_sand + } + } + # Wild fires. + 100 = { + trigger = { + # Is it summer where we are? + is_nice_season_to_be_outside_trigger = { LOCATION = root.location } + # If so, proceed. + location = { + # Just in case, since winter may retreat late in Siberia but wild fires do happen. + county = { county_has_winter_trigger = no } + # Suitable terrains. + OR = { + terrain = plains + terrain = farmlands + terrain = hills + terrain = mountains + terrain = jungle + terrain = forest + terrain = taiga + terrain = steppe + terrain = drylands + } + # And places where they occur. + OR = { + geographical_region = world_europe_south + geographical_region = world_europe_east + geographical_region = world_asia_minor + geographical_region = world_middle_east + geographical_region = world_india + geographical_region = world_africa + geographical_region = world_steppe + geographical_region = world_burma + geographical_region = world_asia_china + geographical_region = world_asia_japan + geographical_region = world_asia_korea + geographical_region = world_asia_southeast + } + } + } + save_scope_value_as = { + name = weather_type + value = flag:wild_fires + } + } + # Avalanches. + 200 = { + trigger = { + location_has_normal_or_worse_winter_trigger = yes + location = { terrain = mountains } + # Some people won't consider this excessive hardship. + NOR = { + has_trait = rough_terrain_expert + culture = { has_cultural_parameter = mountain_trait_bonuses } + } + } + save_scope_value_as = { + name = weather_type + value = flag:avalanches + } + } + # Flood. + 200 = { + trigger = { + OR = { + location = { + OR = { + terrain = floodplains + terrain = wetlands + } + } + AND = { + current_season_wet = yes + location = { + OR = { + is_coastal = yes + any_neighboring_province = { is_river_province = yes } + terrain = plains + terrain = hills + terrain = farmlands + terrain = jungle + terrain = forest + } + # Some places will never have floods — not that they mightn't IRL, but they'd be potentially verisimilitude-breaking at a glance IG. + NOR = { + terrain = mountains + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + } + # Some people won't consider this excessive hardship. + NOT = { has_trait = forder } + } + save_scope_value_as = { + name = weather_type + value = flag:flash_floods + } + } + # Frozen water. + 200 = { + trigger = { + location_has_normal_or_worse_winter_trigger = yes + location = { + OR = { + terrain = plains + terrain = forest + terrain = taiga + } + } + # Rule out anyone who wouldn't be fooled by this. + NOR = { + culture_uses_frequent_winter_transportation_trigger = yes + has_trait = winter_soldier + } + } + save_scope_value_as = { + name = weather_type + value = flag:frozen_water + } + } + # Earthquakes. + 10 = { + trigger = { + location = { + OR = { + geographical_region = world_europe_south_east + geographical_region = world_europe_south_italy + geographical_region = world_asia_minor + geographical_region = world_middle_east_persia + geographical_region = world_tibet + geographical_region = world_himalaya + geographical_region = world_burma + geographical_region = world_asia_china + geographical_region = world_asia_japan + geographical_region = world_asia_korea + geographical_region = world_asia_southeast + # Plus some places but _only_ in their mountainous/hilly areas. + AND = { + geographical_region = ghw_region_iberia + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } + } + AND = { + geographical_region = ghw_region_north_africa + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } + } + AND = { + geographical_region = ghw_region_horn_of_africa + OR = { + terrain = mountains + terrain = desert_mountains + terrain = hills + } + } + } + } + } + save_scope_value_as = { + name = weather_type + value = flag:earthquake + } + # If this isn't the direct holding of a player, cause some serious damage. + location.county = { + holder = { + if = { + limit = { + is_ai = yes + } + random_courtier = { + limit = { location = prev.location } + death = { death_reason = death_consumed_by_earthquake } + } + random_courtier = { + limit = { location = prev.location } + death = { death_reason = death_consumed_by_earthquake } + } + random_courtier = { + limit = { location = prev.location } + death = { death_reason = death_consumed_by_earthquake } + } + random_courtier = { + limit = { location = prev.location } + death = { death_reason = death_consumed_by_earthquake } + } + prev = { + change_development_level = { + integer_range = { + min = -35 + max = -10 + } + } + change_county_control = -100 + } + random = { + chance = 20 + death = { death_reason = death_consumed_by_earthquake } + } + } + } + } + } + } + } + + # Martial duel to get things going. + option = { + name = ep3_laamp_flavour_ewan.4041.a + + duel = { + skill = martial + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4041.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.a.tt.success + ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 30 } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4041.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.a.tt.failure + ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Stewardship duel to get things going. + option = { + name = ep3_laamp_flavour_ewan.4041.b + + duel = { + skill = stewardship + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4041.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.b.tt.success + ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 30 } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4041.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.b.tt.failure + ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + } + } + + # Stubborn: come on, _heave_! + option = { + name = ep3_laamp_flavour_ewan.4041.c + trigger = { has_trait = stubborn } + trait = stubborn + + random_list = { + 50 = { + desc = ep3_laamp_flavour_ewan.4041.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.c.tt.success + ep3_laamp_flavour_ewan_4041_train_rallies_effect = { OPINION = 40 } + } + } + 50 = { + desc = ep3_laamp_flavour_ewan.4041.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.c.tt.failure + ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes + } + } + } + + stress_impact = { stubborn = minor_stress_impact_loss } + ai_chance = { + # If you're stubborn, you're quite likely to uhhh... be stubborn. + base = 100 + } + } + + # Pray to FateGodName & hope. + option = { + name = ep3_laamp_flavour_ewan.4041.d + trigger = { + NOT = { has_trait = stubborn } + } + + random_list = { + 25 = { + desc = ep3_laamp_flavour_ewan.4041.d.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.d.tt.success + add_prestige = minor_prestige_gain + } + } + 75 = { + desc = ep3_laamp_flavour_ewan.4041.d.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4041.d.tt.failure + add_piety = minor_piety_loss + ep3_laamp_flavour_ewan_4041_process_consequences_by_weather_type_effect = yes + } + } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_zeal = 1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + +################################################## +# Supplies Unaccounted For +# by Ewan Cowhig Croft +# 4051 - 4060 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4051_roll_duel_effect = { + duel = { + skill = $SKILL$ + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = $VICTORY_LOC$ + send_interface_toast = { + title = $VICTORY_LOC$ + add_prestige = minor_prestige_gain + custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.most_provisions_regained + domicile = { + change_provisions = { + value = scope:provisions_tally + multiply = 0.8 + ceiling = yes + } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = $DEFEAT_LOC$ + send_interface_toast = { + title = $DEFEAT_LOC$ + random_list = { + 40 = { + custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.some_provisions_regained + domicile = { + change_provisions = { + value = scope:provisions_tally + multiply = 0.2 + ceiling = yes + } + } + } + 60 = { custom_tooltip = ep3_laamp_flavour_ewan.4051.tt.provisions_lost } + } + } + } + } +} + +# Supplies go missing in large armies. +ep3_laamp_flavour_ewan.4051 = { + type = character_event + title = ep3_laamp_flavour_ewan.4051.t + desc = ep3_laamp_flavour_ewan.4051.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = anger + } + override_background = { reference = army_camp } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4051 } + } + # No one would seriously try this in a smaller baggage train. + ## Outside of that one gallowsbait event, of course. + current_military_strength >= @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force + # Plus make sure we've got enough provisions for someone to try it on. + domicile.provisions >= @ep3_laamp_flavour_ewan_4051_minimum_provisions_count + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4051 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4051 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Lose an amount of provisions scaling to how many we currently have. + domicile = { + if = { + limit = { provisions >= 1000 } + # Register how many we're expending so we can try to get most of them back. + save_scope_value_as = { + name = provisions_tally + value = 300 + } + change_provisions = { + value = scope:provisions_tally + multiply = -1 + } + } + else_if = { + limit = { provisions >= 750 } + # Register how many we're expending so we can try to get most of them back. + save_scope_value_as = { + name = provisions_tally + value = 250 + } + change_provisions = { + value = scope:provisions_tally + multiply = -1 + } + } + else_if = { + limit = { provisions >= 500 } + # Register how many we're expending so we can try to get most of them back. + save_scope_value_as = { + name = provisions_tally + value = 150 + } + change_provisions = { + value = scope:provisions_tally + multiply = -1 + } + } + else_if = { + limit = { provisions >= 250 } + # Register how many we're expending so we can try to get most of them back. + save_scope_value_as = { + name = provisions_tally + value = 75 + } + change_provisions = { + value = scope:provisions_tally + multiply = -1 + } + } + else = { + # Register how many we're expending so we can try to get most of them back. + save_scope_value_as = { + name = provisions_tally + value = 50 + } + change_provisions = { + value = scope:provisions_tally + multiply = -1 + } + } + } + } + + # Martial duel to find who's responsible. + option = { + name = ep3_laamp_flavour_ewan.4051.a + + ep3_laamp_flavour_ewan_4051_roll_duel_effect = { + SKILL = martial + VICTORY_LOC = ep3_laamp_flavour_ewan.4051.a.tt.success + DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.a.tt.failure + } + + stress_impact = { wrathful = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Stewardship duel to find who's responsible. + option = { + name = ep3_laamp_flavour_ewan.4051.b + + ep3_laamp_flavour_ewan_4051_roll_duel_effect = { + SKILL = stewardship + VICTORY_LOC = ep3_laamp_flavour_ewan.4051.b.tt.success + DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.b.tt.failure + } + + stress_impact = { diligent = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_greed = 1 } + } + } + + # Intrigue duel to find who's responsible. + option = { + name = ep3_laamp_flavour_ewan.4051.c + + ep3_laamp_flavour_ewan_4051_roll_duel_effect = { + SKILL = intrigue + VICTORY_LOC = ep3_laamp_flavour_ewan.4051.c.tt.success + DEFEAT_LOC = ep3_laamp_flavour_ewan.4051.c.tt.failure + } + + stress_impact = { deceitful = miniscule_stress_impact_loss } + ai_chance = { + base = 1 + ai_value_modifier = { ai_honor = -1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + +################################################## +# Eyes in the Night +# by Ewan Cowhig Croft +# 4061 - 4070 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = { + OR = { + has_trait = cannibal + any_secret = { type = secret_cannibal } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + # Alright, figure out how big our size mult'll be. + save_scope_value_as = { + name = hunter_size + value = { + integer_range = { + min = $MIN$ + max = $MAX$ + } + } + } + # And set up our duel diffs. + save_scope_value_as = { + name = duel_diff_safe + value = { + value = scope:hunter_size + multiply = 2.5 + floor = yes + min = 10 + max = 20 + } + } + save_scope_value_as = { + name = duel_diff_risky + value = { + value = scope:hunter_size + multiply = 3.5 + floor = yes + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = { + if = { + limit = { scope:hunter_size >= 9 } + random_courtier = { + limit = { location = root.location } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_1 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + this != scope:death_1 + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_2 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + NOR = { + this = scope:death_1 + this = scope:death_2 + } + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_3 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + NOR = { + this = scope:death_1 + this = scope:death_2 + this = scope:death_3 + } + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + death = { death_reason = death_hunted_by_wild_beast } + } + } + else_if = { + limit = { scope:hunter_size >= 6 } + random_courtier = { + limit = { location = root.location } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_1 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + this != scope:death_1 + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_2 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + NOR = { + this = scope:death_1 + this = scope:death_2 + } + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + death = { death_reason = death_hunted_by_wild_beast } + } + } + else_if = { + limit = { scope:hunter_size >= 3 } + random_courtier = { + limit = { location = root.location } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_1 + death = { death_reason = death_hunted_by_wild_beast } + } + random_courtier = { + limit = { + location = root.location + this != scope:death_1 + } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + save_scope_as = death_2 + death = { death_reason = death_hunted_by_wild_beast } + } + } + else = { + random_courtier = { + limit = { location = root.location } + weight = { + base = 50 + modifier = { + add = { + add = prowess + add = { + value = martial + multiply = 0.5 + } + multiply = -1 + } + } + } + death = { death_reason = death_hunted_by_wild_beast } + } + } +} + +# Local predator picking off people each evening. +ep3_laamp_flavour_ewan.4061 = { + type = character_event + title = ep3_laamp_flavour_ewan.4061.t + desc = { + desc = ep3_laamp_flavour_ewan.4061.desc.intro + # Animal size. + first_valid = { + triggered_desc = { + trigger = { scope:hunter_size >= 12 } + desc = ep3_laamp_flavour_ewan.4061.desc.size.titanic + } + triggered_desc = { + trigger = { scope:hunter_size >= 10 } + desc = ep3_laamp_flavour_ewan.4061.desc.size.colossal + } + triggered_desc = { + trigger = { scope:hunter_size >= 8 } + desc = ep3_laamp_flavour_ewan.4061.desc.size.mammoth + } + triggered_desc = { + trigger = { scope:hunter_size >= 6 } + desc = ep3_laamp_flavour_ewan.4061.desc.size.huge + } + triggered_desc = { + trigger = { scope:hunter_size >= 4 } + desc = ep3_laamp_flavour_ewan.4061.desc.size.large + } + desc = ep3_laamp_flavour_ewan.4061.desc.size.nimble + } + desc = ep3_laamp_flavour_ewan.4061.desc.midtro + # Sight. + first_valid = { + triggered_desc = { + trigger = { has_trait = blind } + desc = ep3_laamp_flavour_ewan.4061.desc.sight.blind + } + desc = ep3_laamp_flavour_ewan.4061.desc.sight.sighted + } + # Terrain + first_valid = { + triggered_desc = { + trigger = { + location = { + any_neighboring_province = { is_river_province = yes } + } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.major_river + } + triggered_desc = { + trigger = { + location = { terrain = farmlands } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.farmlands + } + triggered_desc = { + trigger = { + location = { terrain = hills } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.hills + } + triggered_desc = { + trigger = { + location = { terrain = mountains } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.mountains + } + triggered_desc = { + trigger = { + location = { terrain = desert } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.desert + } + triggered_desc = { + trigger = { + location = { terrain = desert_mountains } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.desert_mountains + } + triggered_desc = { + trigger = { + location = { terrain = oasis } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.oasis + } + triggered_desc = { + trigger = { + location = { terrain = jungle } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.jungle + } + triggered_desc = { + trigger = { + location = { terrain = forest } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.forest + } + triggered_desc = { + trigger = { + location = { terrain = taiga } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.taiga + } + triggered_desc = { + trigger = { + location = { terrain = wetlands } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.wetlands + } + triggered_desc = { + trigger = { + location = { terrain = steppe } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.steppe + } + triggered_desc = { + trigger = { + location = { terrain = floodplains } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.floodplains + } + triggered_desc = { + trigger = { + location = { terrain = drylands } + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.drylands + } + desc = ep3_laamp_flavour_ewan.4061.desc.terrain.plains + } + desc = ep3_laamp_flavour_ewan.4061.desc.outro + } + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = worry + } + # Night would be more dramatic, but the follow-up wilderness events _have_ to be during the day due to art constraints, so we start off in the morning instead. + override_background = { reference = corridor_day } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4061 } + } + # Narrative'll break if you don't have _some_ available courtiers. + any_courtier = { location = root.location } + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4061 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4061 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_short + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Roll our large Old World man-eater. + random_list = { + # Feral Dog (fallback) + 25 = { + save_scope_value_as = { + name = hunter_type + value = flag:dog + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 4 + } + } + # Wolf + 250 = { + trigger = { + location = { hunt_animal_wolf_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:wolf + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 2 + MAX = 4 + } + } + # Hyena + 200 = { + trigger = { + location = { hunt_animal_hyena_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:hyena + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 4 + } + } + # Lion + 200 = { + trigger = { + location = { hunt_animal_lion_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:lion + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 2 + MAX = 6 + } + } + # Tiger + 300 = { + trigger = { + location = { hunt_animal_tiger_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:tiger + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 4 + MAX = 7 + } + } + # Leopard + 150 = { + trigger = { + location = { hunt_animal_leopard_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:leopard + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 3 + MAX = 5 + } + } + # Panther (black leopards) + 1 = { + trigger = { + location = { hunt_animal_leopard_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:panther + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 3 + MAX = 5 + } + } + # Lynx + 75 = { + trigger = { + location = { hunt_animal_lynx_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:lynx + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 2 + MAX = 4 + } + } + # Caracal + 75 = { + trigger = { + location = { hunt_animal_caracal_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:caracal + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 3 + } + } + # Bear + 150 = { + trigger = { + location = { hunt_animal_bear_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:bear + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 4 + MAX = 9 + } + } + # Hippo + ## This one goes out to Dog: he was the best, deadliest pet an Arisen could ever ask for. + ## Yes, hippos do eat meat, though in the ordinary course of things they wouldn't _hunt_ per se. Not like this — basically this'd have to be a hippo that's maybe desperate for food, likely extra territorial, and probably just has a certain taste for meat. + 25 = { + trigger = { + location = { hunt_animal_hippo_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:hippo + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 8 + MAX = 12 + } + } + # Crocodile + 100 = { + trigger = { + ## + location = { hunt_animal_crocodile_trigger = yes } + # Just to be safe, try to ensure we're at least intending to step near their habitat for longer than a day. + current_travel_plan.next_location = { hunt_animal_crocodile_trigger = yes } + } + save_scope_value_as = { + name = hunter_type + value = flag:crocodile + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 3 + MAX = 8 + } + } + # Cannibal (generated) + 1 = { + trigger = { can_start_single_combat_trigger = yes } + save_scope_value_as = { + name = hunter_type + value = flag:cannibal_generated + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 1 + } + # Create & nab our cannibal. + create_character = { + template = criminal_brawn_character + location = root.location + save_scope_as = cannibal + trait = cannibal + prowess = { + max_template_medium_skill + max_template_very_high_skill + } + } + } + # Cannibal (existing) + 10 = { + trigger = { + can_start_single_combat_trigger = yes + any_pool_character = { + province = root.location + ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = yes + } + } + save_scope_value_as = { + name = hunter_type + value = flag:cannibal_existing + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 1 + } + # Nab our cannibal. + random_pool_character = { + province = root.location + limit = { ep3_laamp_flavour_ewan_4061_local_cannibal_trigger = yes } + save_scope_as = cannibal + } + } + # Cannibal (Chad) + 50 = { + trigger = { + can_start_single_combat_trigger = yes + character:easteregg_chad_uhl ?= { + is_alive = yes + location ?= root.location + is_pool_character = yes + } + } + save_scope_value_as = { + name = hunter_type + value = flag:cannibal_chad + } + ep3_laamp_flavour_ewan_4061_roll_animal_size_effect = { + MIN = 1 + MAX = 1 + } + # Nab our cannibal. + character:easteregg_chad_uhl = { save_scope_as = cannibal } + } + } + # Apply our local modifier. + location.county = { + if = { + limit = { + # But not to hapless players who don't know what's happening. + NOT = { + holder = { is_ai = no } + } + } + switch = { + trigger = scope:hunter_size + 12 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_12_modifier + years = 3 + } + } + 11 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_11_modifier + years = 3 + } + } + 10 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_10_modifier + years = 3 + } + } + 9 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_09_modifier + years = 3 + } + } + 8 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_08_modifier + years = 3 + } + } + 7 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_07_modifier + years = 3 + } + } + 6 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_06_modifier + years = 3 + } + } + 5 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_05_modifier + years = 3 + } + } + 4 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_04_modifier + years = 3 + } + } + 3 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_03_modifier + years = 3 + } + } + 2 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_02_modifier + years = 3 + } + } + 1 = { + add_county_modifier = { + modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_01_modifier + years = 3 + } + } + } + } + } + } + + # Martial duel to try and organise better watches. + option = { + name = ep3_laamp_flavour_ewan.4061.a + + custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.safe + duel = { + skill = martial + value = scope:duel_diff_safe + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4061.a.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = ep3_laamp_flavour_ewan.4061.a.tt.success + add_prestige = minor_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = 20 + } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4061.a.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_laamp_flavour_ewan.4061.a.tt.failure + ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = yes + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # Go after it yourself. + option = { + name = ep3_laamp_flavour_ewan.4061.b + + custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.risky + custom_tooltip = ep3_laamp_flavour_ewan.4061.a.tt.duel.risky.are_you_sure + trigger_event = ep3_laamp_flavour_ewan.4062 + + # Flag not to clean up our cannibal, if we made one. + save_scope_value_as = { + name = dont_clean_cannibal + value = yes + } + + stress_impact = { + lifestyle_hunter = minor_stress_impact_loss + brave = minor_stress_impact_loss + craven = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 2 } + } + } + + # As long as it doesn't eat anyone important. + option = { + name = ep3_laamp_flavour_ewan.4061.c + + random_list = { + 50 = { + desc = ep3_laamp_flavour_ewan.4061.c.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4061.c.tt.success + add_prestige = miniscule_prestige_gain + } + } + 50 = { + desc = ep3_laamp_flavour_ewan.4061.c.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4061.c.tt.failure + ep3_laamp_flavour_ewan_4061_roll_courtier_deaths_effect = yes + } + } + } + + stress_impact = { + craven = medium_stress_impact_loss + brave = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_energy = -2 } + } + } + + after = { + # If we're slowed due to multi, resume travel. + mp_resume_travel_plan = yes + # Clean up our cannibal, if necessary. + if = { + limit = { + scope:hunter_type = flag:cannibal_generated + NOT = { exists = scope:dont_clean_cannibal } + } + scope:cannibal = { + death = { death_reason = death_vanished } + } + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = { + OR = { + scope:hunter_type = flag:cannibal_generated + scope:hunter_type = flag:cannibal_existing + scope:hunter_type = flag:cannibal_chad + } +} + +scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_canine_trigger = { + OR = { + scope:hunter_type = flag:dog + scope:hunter_type = flag:wolf + scope:hunter_type = flag:hyena + } +} + +scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_feline_trigger = { + OR = { + scope:hunter_type = flag:lion + scope:hunter_type = flag:tiger + scope:hunter_type = flag:leopard + scope:hunter_type = flag:panther + scope:hunter_type = flag:lynx + scope:hunter_type = flag:caracal + } +} + +scripted_trigger ep3_laamp_flavour_ewan_4062_animal_group_human_trigger = { + OR = { + scope:hunter_type = flag:cannibal_generated + scope:hunter_type = flag:cannibal_existing + scope:hunter_type = flag:cannibal_chad + } +} + +scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_effect = { + duel = { + skill = $SKILL$ + value = scope:duel_diff_risky + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.tt.success + add_prestige = { + value = medium_prestige_gain + add = { + value = scope:hunter_size + multiply = 50 + } + } + every_courtier = { + limit = { location = root.location } + custom = custom.every_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = { + value = 30 + add = { + value = scope:hunter_size + multiply = 2 + } + } + } + } + } + ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.tt.failure + ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes + } + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = { + switch = { + trigger = scope:hunter_type + flag:dog = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = dog + SUCCESS_% = 90 + FAILURE_% = 10 + WOUNDS = 1 + } + } + flag:wolf = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = wolf + SUCCESS_% = 80 + FAILURE_% = 20 + WOUNDS = 1 + } + } + flag:hyena = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = hyena + SUCCESS_% = 85 + FAILURE_% = 15 + WOUNDS = 1 + } + } + flag:lion = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = lion + SUCCESS_% = 60 + FAILURE_% = 40 + WOUNDS = 2 + } + } + flag:tiger = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = tiger + SUCCESS_% = 40 + FAILURE_% = 60 + WOUNDS = 3 + } + } + flag:leopard = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = leopard + SUCCESS_% = 60 + FAILURE_% = 40 + WOUNDS = 2 + } + } + flag:panther = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = panther + SUCCESS_% = 60 + FAILURE_% = 40 + WOUNDS = 2 + } + } + flag:lynx = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = lynx + SUCCESS_% = 80 + FAILURE_% = 20 + WOUNDS = 1 + } + } + flag:caracal = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = caracal + SUCCESS_% = 80 + FAILURE_% = 20 + WOUNDS = 1 + } + } + flag:bear = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = bear + SUCCESS_% = 30 + FAILURE_% = 70 + WOUNDS = 3 + } + } + flag:hippo = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = hippo + SUCCESS_% = 10 + FAILURE_% = 90 + WOUNDS = 3 + } + } + flag:crocodile = { + ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + ANIMAL = crocodile + SUCCESS_% = 40 + FAILURE_% = 60 + WOUNDS = 3 + } + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4062_animal_duel_loss_guts_effect = { + save_scope_value_as = { + name = wounds_tally + value = $WOUNDS$ + } + random_list = { + $SUCCESS_%$ = { + increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } + if = { + limit = { scope:wounds_tally = 2 } + increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } + } + else_if = { + limit = { scope:wounds_tally >= 3 } + increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } + increase_wounds_effect = { REASON = killed_by_monstrous_$ANIMAL$ } + } + } + $FAILURE_%$ = { + death = { death_reason = death_killed_by_monstrous_$ANIMAL$ } + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = { + hidden_effect = { + location.county = { + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_12_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_11_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_10_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_09_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_08_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_07_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_06_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_05_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_04_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_03_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_02_modifier + remove_county_modifier = ep3_laamp_flavour_ewan_4061_hungry_maneater_size_01_modifier + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4062_engagement_stress_effect = { + # vs. cannibals. + if = { + limit = { + OR = { + scope:hunter_type = flag:cannibal_generated + scope:hunter_type = flag:cannibal_existing + scope:hunter_type = flag:cannibal_chad + } + } + stress_impact = { + base = 10 + lifestyle_hunter = -10 + brave = -20 + craven = 10 + } + } + # vs. size. + ## 12. + else_if = { + limit = { scope:hunter_size >= 12 } + stress_impact = { + base = 50 + lifestyle_hunter = -30 + brave = -30 + craven = 30 + } + } + ## 10. + else_if = { + limit = { scope:hunter_size >= 10 } + stress_impact = { + base = 40 + lifestyle_hunter = -25 + brave = -25 + craven = 25 + } + } + ## 08. + else_if = { + limit = { scope:hunter_size >= 8 } + stress_impact = { + base = 20 + lifestyle_hunter = -20 + brave = -20 + craven = 20 + } + } + ## 06. + else_if = { + limit = { scope:hunter_size >= 6 } + stress_impact = { + base = 10 + lifestyle_hunter = -15 + brave = -15 + craven = 15 + } + } + ## 04. + else_if = { + limit = { scope:hunter_size >= 4 } + stress_impact = { + lifestyle_hunter = -10 + brave = -10 + craven = 10 + } + } + ## 02. + else_if = { + limit = { scope:hunter_size >= 2 } + stress_impact = { + lifestyle_hunter = -7 + brave = -7 + craven = 7 + } + } + ## 01. + else = { + stress_impact = { + lifestyle_hunter = -5 + brave = -5 + craven = 5 + } + } + # If we're over a certain size, we take base stress. + # Set up our animal stress. + save_scope_value_as = { + name = brave_size_stress + value = { + add = scope:hunter_size + multiply = -3 + } + } + save_scope_value_as = { + name = craven_size_stress + value = { + add = scope:hunter_size + multiply = 4 + } + } +} + +# Alright, time to fight! +ep3_laamp_flavour_ewan.4062 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { scope:hunter_type = flag:dog } + desc = ep3_laamp_flavour_ewan.4062.t.dog + } + triggered_desc = { + trigger = { scope:hunter_type = flag:wolf } + desc = ep3_laamp_flavour_ewan.4062.t.wolf + } + triggered_desc = { + trigger = { scope:hunter_type = flag:hyena } + desc = ep3_laamp_flavour_ewan.4062.t.hyena + } + triggered_desc = { + trigger = { scope:hunter_type = flag:lion } + desc = ep3_laamp_flavour_ewan.4062.t.lion + } + triggered_desc = { + trigger = { scope:hunter_type = flag:tiger } + desc = ep3_laamp_flavour_ewan.4062.t.tiger + } + triggered_desc = { + trigger = { scope:hunter_type = flag:leopard } + desc = ep3_laamp_flavour_ewan.4062.t.leopard + } + triggered_desc = { + trigger = { scope:hunter_type = flag:panther } + desc = ep3_laamp_flavour_ewan.4062.t.panther + } + triggered_desc = { + trigger = { scope:hunter_type = flag:lynx } + desc = ep3_laamp_flavour_ewan.4062.t.lynx + } + triggered_desc = { + trigger = { scope:hunter_type = flag:caracal } + desc = ep3_laamp_flavour_ewan.4062.t.caracal + } + triggered_desc = { + trigger = { scope:hunter_type = flag:bear } + desc = ep3_laamp_flavour_ewan.4062.t.bear + } + triggered_desc = { + trigger = { scope:hunter_type = flag:hippo } + desc = ep3_laamp_flavour_ewan.4062.t.hippo + } + triggered_desc = { + trigger = { scope:hunter_type = flag:crocodile } + desc = ep3_laamp_flavour_ewan.4062.t.crocodile + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_generated } + desc = ep3_laamp_flavour_ewan.4062.t.cannibal_generated + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_existing } + desc = ep3_laamp_flavour_ewan.4062.t.cannibal_existing + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_chad } + desc = ep3_laamp_flavour_ewan.4062.t.cannibal_chad + } + } + } + desc = { + desc = ep3_laamp_flavour_ewan.4062.desc.intro + # Tracks. + first_valid = { + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_4062_animal_group_canine_trigger = yes } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.canine + } + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_4062_animal_group_feline_trigger = yes } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.feline + } + triggered_desc = { + trigger = { scope:hunter_type = flag:bear } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.ursine + } + triggered_desc = { + trigger = { scope:hunter_type = flag:hippo } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.hippopotomine + } + triggered_desc = { + trigger = { scope:hunter_type = flag:crocodile } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.crocodyline + } + triggered_desc = { + trigger = { ep3_laamp_flavour_ewan_4062_animal_group_human_trigger = yes } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.human + } + } + desc = ep3_laamp_flavour_ewan.4062.desc.tracks.connector + # Terrain + first_valid = { + triggered_desc = { + trigger = { + location = { + any_neighboring_province = { is_river_province = yes } + } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.major_river + } + triggered_desc = { + trigger = { + location = { terrain = farmlands } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.farmlands + } + triggered_desc = { + trigger = { + location = { terrain = hills } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.hills + } + triggered_desc = { + trigger = { + location = { terrain = mountains } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.mountains + } + triggered_desc = { + trigger = { + location = { terrain = desert } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.desert + } + triggered_desc = { + trigger = { + location = { terrain = desert_mountains } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.desert_mountains + } + triggered_desc = { + trigger = { + location = { terrain = oasis } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.oasis + } + triggered_desc = { + trigger = { + location = { terrain = jungle } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.jungle + } + triggered_desc = { + trigger = { + location = { terrain = forest } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.forest + } + triggered_desc = { + trigger = { + location = { terrain = taiga } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.taiga + } + triggered_desc = { + trigger = { + location = { terrain = wetlands } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.wetlands + } + triggered_desc = { + trigger = { + location = { terrain = steppe } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.steppe + } + triggered_desc = { + trigger = { + location = { terrain = floodplains } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.floodplains + } + triggered_desc = { + trigger = { + location = { terrain = drylands } + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.drylands + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.plains + } + desc = ep3_laamp_flavour_ewan.4062.desc.terrain.connector + # Animal + first_valid = { + triggered_desc = { + trigger = { scope:hunter_type = flag:dog } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.dog + } + triggered_desc = { + trigger = { scope:hunter_type = flag:wolf } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.wolf + } + triggered_desc = { + trigger = { scope:hunter_type = flag:hyena } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.hyena + } + triggered_desc = { + trigger = { scope:hunter_type = flag:lion } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.lion + } + triggered_desc = { + trigger = { scope:hunter_type = flag:tiger } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.tiger + } + triggered_desc = { + trigger = { scope:hunter_type = flag:leopard } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.leopard + } + triggered_desc = { + trigger = { scope:hunter_type = flag:panther } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.panther + } + triggered_desc = { + trigger = { scope:hunter_type = flag:lynx } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.lynx + } + triggered_desc = { + trigger = { scope:hunter_type = flag:caracal } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.caracal + } + triggered_desc = { + trigger = { scope:hunter_type = flag:bear } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.bear + } + triggered_desc = { + trigger = { + scope:hunter_type = flag:hippo + scope:hunter_size >= 10 + } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.hippo.largest + } + triggered_desc = { + trigger = { scope:hunter_type = flag:hippo } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.hippo.fallback + } + triggered_desc = { + trigger = { scope:hunter_type = flag:crocodile } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.crocodile + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_generated } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_generated + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_existing } + desc = { + first_valid = { + triggered_desc = { + trigger = { character:easteregg_anna_johansson ?= scope:cannibal } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.anna + } + triggered_desc = { + trigger = { + scope:cannibal = { + any_secret = { type = secret_cannibal } + } + } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.secret + } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_existing.fallback + } + } + } + triggered_desc = { + trigger = { scope:hunter_type = flag:cannibal_chad } + desc = ep3_laamp_flavour_ewan.4062.desc.animal.cannibal_chad + } + } + } + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:cannibal + animation = random_weapon_aggressive + } + override_background = { reference = wilderness } + + immediate = { + # Plus, we'll need to know how big our animal is. + set_variable = { + name = 4061_size_adjective + value = scope:hunter_size + } + # Sort our sacrifices. + court_position:huntperson_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + save_scope_as = huntsperson + } + } + court_position:kennelperson_camp_officer ?= { + if = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + save_scope_as = kenneler + } + } + } + + # Animal: martial duel. + option = { + name = ep3_laamp_flavour_ewan.4062.a + trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no } + + ep3_laamp_flavour_ewan_4062_animal_duel_effect = { SKILL = martial } + + ep3_laamp_flavour_ewan_4062_engagement_stress_effect = yes + ai_chance = { + base = 1 + modifier = { + add = { + value = martial + multiply = 10 + } + martial > prowess + } + } + } + + # Animal: prowess duel. + option = { + name = ep3_laamp_flavour_ewan.4062.b + trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no } + + ep3_laamp_flavour_ewan_4062_animal_duel_effect = { SKILL = prowess } + + ep3_laamp_flavour_ewan_4062_engagement_stress_effect = yes + ai_chance = { + base = 1 + modifier = { + add = { + value = prowess + multiply = 10 + } + prowess > martial + } + } + } + + # Huntperson: shoot her, SHOOOOT HERRRR! + option = { + name = ep3_laamp_flavour_ewan.4062.c + trigger = { + ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no + exists = scope:huntsperson + } + reason = have_huntperson + + scope:huntsperson = { + duel = { + skill = prowess + value = scope:duel_diff_risky + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.c.tt.success + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.c.tt.success + left_icon = scope:huntsperson + add_prestige = { + value = medium_prestige_gain + add = { + value = scope:hunter_size + multiply = 50 + } + multiply = 0.5 + } + every_courtier = { + limit = { location = root.location } + custom = custom.every_follower + add_opinion = { + target = scope:huntsperson + modifier = saviour_opinion + opinion = { + value = 30 + add = { + value = scope:hunter_size + multiply = 2 + } + } + } + } + } + ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.c.tt.failure + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.c.tt.failure + left_icon = scope:huntsperson + scope:huntsperson = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes } + } + } + } + } + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Dog: kennelmaster, bring me that hound! + option = { + name = ep3_laamp_flavour_ewan.4062.d + trigger = { + ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = no + scope:hunter_type = flag:dog + exists = scope:kenneler + NOT = { has_character_modifier = dog_story_modifier } + } + + scope:kenneler = { + duel = { + skill = prowess + value = scope:duel_diff_risky + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.d.tt.success + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.d.tt.success + left_icon = scope:kenneler + add_prestige = medium_prestige_gain + start_dog_story_cycle_effect = yes + every_courtier = { + limit = { location = root.location } + custom = custom.every_follower + add_opinion = { + target = scope:kenneler + modifier = impressed_opinion + opinion = { + value = 15 + add = { + value = scope:hunter_size + multiply = 2 + } + } + } + } + } + ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4062.d.tt.failure + root = { + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4062.d.tt.failure + left_icon = scope:kenneler + scope:kenneler = { ep3_laamp_flavour_ewan_4062_animal_duel_loss_effect = yes } + } + } + } + } + } + + stress_impact = { + greedy = miniscule_stress_impact_loss + lustful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_sociability = 1 } + } + } + + # Cannibal: single combat. + option = { + name = ep3_laamp_flavour_ewan.4062.e + trigger = { ep3_laamp_flavour_ewan_4062_cannibal_options_trigger = yes } + + # In case death would change it (say, losing an artefact), register scope:cannibal's prowess. + save_scope_value_as = { + name = cannibal_prowess + value = scope:cannibal.prowess + } + # Then, into the actual duel we go! + custom_tooltip = { + text = duel_to_the_death.tt + configure_start_single_combat_effect = { + SC_INITIATOR = scope:cannibal + SC_ATTACKER = scope:cannibal + SC_DEFENDER = root + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = ep3_laamp_flavour_ewan.4063 + } + } + + # No stress here. + ai_chance = { + # You don't get a choice here, you're fightin'. + base = 1 + } + } + + after = { + # If we're slowed due to multi, resume travel. + mp_resume_travel_plan = yes + # Clean up our animal size. + if = { + # The AI can get killed here _real_ fast, so we make sure to check that they're not gonna fire an error. + limit = { is_alive = yes } + remove_variable = 4061_size_adjective + } + } +} + +ep3_laamp_flavour_ewan.4063 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = root } + root = { + trigger_event = { + id = ep3_laamp_flavour_ewan.4064 + days = 1 + } + } + # Log if it was Chad who lost. + if = { + limit = { character:easteregg_chad_uhl ?= scope:sc_loser } + trigger_event = ep3_laamp_flavour_ewan.4065 + } + # Or Anna. + else_if = { + limit = { character:easteregg_anna_johansson ?= scope:sc_loser } + trigger_event = ep3_laamp_flavour_ewan.4067 + } + } + # Log if it was Chad who won. + else_if = { + limit = { character:easteregg_chad_uhl ?= scope:sc_victor } + trigger_event = ep3_laamp_flavour_ewan.4066 + } + # Or Anna. + else_if = { + limit = { character:easteregg_anna_johansson ?= scope:sc_loser } + trigger_event = ep3_laamp_flavour_ewan.4068 + } + } +} + +# You won the single combat! +ep3_laamp_flavour_ewan.4064 = { + type = character_event + title = ep3_laamp_flavour_ewan.4064.t + desc = ep3_laamp_flavour_ewan.4064.desc + theme = laamp + left_portrait = { + character = root + animation = random_weapon_celebrate + } + override_background = { reference = wilderness } + + immediate = { + add_prestige = { + value = medium_prestige_gain + add = { + value = scope:cannibal_prowess + multiply = 25 + } + } + ep3_laamp_flavour_ewan_4062_clean_man_eater_effect = yes + } + + # Victory! + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + any_secret = { type = secret_cannibal } + has_trait = cannibal + } + } + desc = ep3_laamp_flavour_ewan.4064.a.is_cannibal + } + desc = ep3_laamp_flavour_ewan.4064.a.not_cannibal + } + } + } + + every_courtier = { + limit = { location = root.location } + custom = custom.every_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = { + value = 30 + add = scope:cannibal_prowess + } + } + } + + # No stress here. + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } +} + +# Gather our ultimate fighter statistics. +ep3_laamp_flavour_ewan.4065 = { hidden = yes } +ep3_laamp_flavour_ewan.4066 = { hidden = yes } +ep3_laamp_flavour_ewan.4067 = { hidden = yes } +ep3_laamp_flavour_ewan.4068 = { hidden = yes } + +################################################## +# Slavers +# by Ewan Cowhig Croft +# 4071 - 4080 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + NOR = { + is_close_family_of = root + is_consort_of = root + has_important_relationship_with_character_trigger = { CHARACTER = root } + highest_skill_value >= very_high_skill_rating + prowess >= very_high_skill_rating + average_of_all_skills_and_prowess >= sum_of_all_skills_threshold_excellent + has_trait_with_flag = illness + has_wounds_trigger = yes + } +} + +scripted_effect ep3_laamp_flavour_ewan_4071_won_duel_effect = { + add_prestige = { + value = medium_prestige_gain + if = { + limit = { scope:sc_victor ?= root } + # If you win the duel, we give you a bit more than the usual amount, since you risked your life overtly. + add = 100 + } + } + every_courtier = { + limit = { location = root.location } + custom = custom.every_follower + add_opinion = { + target = root + modifier = saviour_opinion + opinion = 30 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = { + scope:follower_1 = { + death = { death_reason = death_disappeared_into_slave_markets } + } + scope:follower_2 = { + death = { death_reason = death_disappeared_into_slave_markets } + } + scope:follower_3 = { + death = { death_reason = death_disappeared_into_slave_markets } + } +} + +# Bastards try to kidnap people from the edges of your train. +ep3_laamp_flavour_ewan.4071 = { + type = character_event + title = ep3_laamp_flavour_ewan.4071.t + desc = ep3_laamp_flavour_ewan.4071.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:slaver + animation = schadenfreude + } + lower_left_portrait = scope:follower_1 + lower_center_portrait = scope:follower_2 + lower_right_portrait = scope:follower_3 + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4071 } + } + # Must have the correct travel danger type. + location = { + travel_danger_type = { + travel_plan = root.current_travel_plan + type = county_control + } + } + # And you won't see slavers literally outside someone important's capital, just openly kidnapping travellers. + NOT = { + location.county = { + holder.highest_held_title_tier >= tier_duchy + this = holder.capital_county + } + } + # Must have enough courtiers to lose in a duel. + any_courtier = { + count >= 3 + ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = yes + } + # Slavers won't attack forces over a certain size, even assuming you're spread out in a long line. + current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4071 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4071 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Nab our available courtiers. + ## First sorting them to a list. + every_courtier = { + limit = { ep3_laamp_flavour_ewan_4071_valid_courtiers_to_lose_trigger = yes } + add_to_list = loseable_courtiers_list + } + ## Then sorting who we'll lose if we lose a duel. + ordered_in_list = { + list = loseable_courtiers_list + order_by = sum_of_all_skills_and_prowess_value + max = 3 + check_range_bounds = no + if = { + limit = { + NOT = { exists = scope:follower_1 } + } + save_scope_as = follower_1 + } + else_if = { + limit = { + NOT = { + this = scope:follower_1 + exists = scope:follower_2 + } + } + save_scope_as = follower_2 + } + else_if = { + limit = { + NOT = { + this = scope:follower_1 + this = scope:follower_2 + exists = scope:follower_3 + } + } + save_scope_as = follower_3 + } + } + ## Then sorting who we'll lose if we sell people. + if = { + # Which means making sure we've got enough people; we want 5, we have three taken from us, so we need at least 8 in the list. + limit = { "list_size(loseable_courtiers_list)" >= 8 } + ordered_in_list = { + list = loseable_courtiers_list + order_by = { + value = sum_of_all_skills_and_prowess_value + multiply = -1 + } + max = 5 + check_range_bounds = no + # We're gonna save these as individual scopes for easier tooltipping, but also put them in a list for less verbose checking in some specific script later. + if = { + limit = { + NOT = { exists = scope:follower_4 } + } + save_scope_as = follower_4 + add_to_list = sellable_courtiers_list + } + else_if = { + limit = { + NOT = { + this = scope:follower_4 + exists = scope:follower_5 + } + } + save_scope_as = follower_5 + add_to_list = sellable_courtiers_list + } + else_if = { + limit = { + NOT = { + this = scope:follower_4 + this = scope:follower_5 + exists = scope:follower_6 + } + } + save_scope_as = follower_6 + add_to_list = sellable_courtiers_list + } + else_if = { + limit = { + NOT = { + this = scope:follower_4 + this = scope:follower_5 + this = scope:follower_6 + exists = scope:follower_7 + } + } + save_scope_as = follower_7 + add_to_list = sellable_courtiers_list + } + else_if = { + limit = { + NOT = { + this = scope:follower_4 + this = scope:follower_5 + this = scope:follower_6 + this = scope:follower_7 + exists = scope:follower_8 + } + } + save_scope_as = follower_8 + add_to_list = sellable_courtiers_list + } + } + } + # Create a hostile slaver. + create_character = { + template = bandit_character + location = root.location + culture = root.location.culture + faith = root.location.faith + trait = gallowsbait + martial = { + min_template_decent_skill + max_template_high_skill + } + stewardship = { + min_template_decent_skill + max_template_high_skill + } + prowess = { + min_template_decent_skill + max_template_high_skill + } + save_scope_as = slaver + after_creation = { + # Make sure we telegraph that they're a dick. + ## First, level up their gallowsbait + laamp_rewards_apply_criminal_xp_effect = { + TRACK = bandit + XP_MAX = gallowsbait_xp_massive_gain + XP_MIN = gallowsbait_xp_massive_gain + } + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_massive_gain + XP_MIN = gallowsbait_xp_massive_gain + } + ## Then make sure they've got a suitably horrid personality. + if = { + limit = { number_of_personality_traits < 3 } + add_trait = callous + } + if = { + limit = { number_of_personality_traits < 3 } + add_trait = greedy + } + if = { + limit = { number_of_personality_traits < 3 } + add_trait = arbitrary + } + if = { + limit = { number_of_personality_traits < 3 } + add_trait = wrathful + } + if = { + limit = { number_of_personality_traits < 3 } + add_trait = vengeful + } + } + } + } + + # Martial duel to fight them off. + option = { + name = ep3_laamp_flavour_ewan.4071.a + + duel = { + skill = martial + target = scope:slaver + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4071.a.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4071.a.tt.success + left_icon = scope:slaver + ep3_laamp_flavour_ewan_4071_won_duel_effect = yes + scope:slaver = { + death = { death_reason = death_attacking_laamp_train } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4071.a.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4071.a.tt.failure + left_icon = scope:slaver + add_prestige = minor_prestige_loss + ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes + } + } + } + + # No stress here, + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 2 } + } + } + + # SCE: launch yourself at the largest and fiercest of them. + option = { + name = ep3_laamp_flavour_ewan.4071.b + trigger = { can_start_single_combat_trigger = yes } + + custom_tooltip = { + text = duel_to_the_death.tt + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:slaver + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = single_combat.1006 + OUTPUT_EVENT = ep3_laamp_flavour_ewan.4072 + } + } + save_scope_value_as = { + name = duel_begun + value = yes + } + + stress_impact = { + brave = medium_stress_impact_loss + craven = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Haggle & sell some lesser courtiers yourself. + option = { + name = ep3_laamp_flavour_ewan.4071.c + trigger = { exists = scope:follower_4 } + + # Alright, explain how this works. + custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.profit + custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.limitations + custom_tooltip = ep3_laamp_flavour_ewan.4071.c.sale_explanation.death + # Then sum it up. + scope:slaver = { + pay_short_term_gold = { + target = root + gold = { + add = scope:follower_4.sum_of_all_skills_and_prowess_value + add = scope:follower_5.sum_of_all_skills_and_prowess_value + add = scope:follower_6.sum_of_all_skills_and_prowess_value + add = scope:follower_7.sum_of_all_skills_and_prowess_value + add = scope:follower_8.sum_of_all_skills_and_prowess_value + } + } + } + # And we'd lose the listed courtiers, permanently. + scope:follower_4 = { + death = { + death_reason = death_disappeared_into_slave_markets + killer = root + } + } + scope:follower_5 = { + death = { + death_reason = death_disappeared_into_slave_markets + killer = root + } + } + scope:follower_6 = { + death = { + death_reason = death_disappeared_into_slave_markets + killer = root + } + } + scope:follower_7 = { + death = { + death_reason = death_disappeared_into_slave_markets + killer = root + } + } + scope:follower_8 = { + death = { + death_reason = death_disappeared_into_slave_markets + killer = root + } + } + # Sort out opinions. + ## We make a fake version first for easier tooltipping. + show_as_tooltip = { + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + has_trait = callous + } + custom = custom.every_callous_follower + add_opinion = { + target = root + modifier = practical_opinion + opinion = 30 + } + } + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + has_trait = compassionate + } + custom = custom.every_compassionate_follower + add_opinion = { + target = root + modifier = callous_opinion + opinion = -100 + } + } + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + NOR = { + has_trait = compassionate + has_trait = callous + } + } + custom = custom.every_other_follower + add_opinion = { + target = root + modifier = outraged_opinion + opinion = -50 + } + } + } + ## Then we process the actual list. + hidden_effect = { + every_courtier = { + # Compassionates. + if = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + has_trait = compassionate + } + add_opinion = { + target = root + modifier = callous_opinion + opinion = -100 + } + } + # Callous courtiers who didn't lose friends, consorts, or spouses. + else_if = { + limit = { + has_trait = callous + save_temporary_scope_as = char_temp + NOT = { + any_in_list = { + list = sellable_courtiers_list + OR = { + AND = { + reverse_opinion = { + target = scope:char_temp + value >= 30 + } + OR = { + is_consort_of = scope:char_temp + is_close_or_extended_family_of = scope:char_temp + } + } + has_any_moderate_good_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + } + } + } + } + add_opinion = { + target = root + modifier = practical_opinion + opinion = 30 + } + } + else_if = { + limit = { + save_temporary_scope_as = char_temp + NOT = { + any_in_list = { + list = sellable_courtiers_list + count = all + OR = { + reverse_opinion = { + target = scope:char_temp + value <= -80 + } + has_any_moderate_bad_relationship_with_character_trigger = { CHARACTER = scope:char_temp } + } + } + } + } + add_opinion = { + target = root + modifier = outraged_opinion + opinion = -50 + } + } + } + } + # Last, but by no means least, gallowsbait. + laamp_rewards_apply_criminal_xp_effect = { + TRACK = marauder + XP_MAX = gallowsbait_xp_major_gain + XP_MIN = gallowsbait_xp_major_gain + } + + stress_impact = { + callous = major_stress_impact_loss + arbitrary = medium_stress_impact_loss + just = massive_stress_impact_gain + compassionate = massive_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = 2 + ai_compassion = -3 + } + } + } + + # Ignore the cries and hope for the best. + option = { + name = ep3_laamp_flavour_ewan.4071.d + + random_list = { + 25 = { + desc = ep3_laamp_flavour_ewan.4071.d.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4071.d.tt.success + scope:slaver = { + death = { death_reason = death_attacking_laamp_train } + } + } + } + 75 = { + desc = ep3_laamp_flavour_ewan.4071.d.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4071.d.tt.failure + add_prestige = medium_prestige_loss + ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes + } + } + } + + stress_impact = { + craven = medium_stress_impact_loss + brave = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_energy = 1 + ai_honor = -0.5 + } + } + } + + after = { + # If we're slowed due to multi, resume travel. + mp_resume_travel_plan = yes + # Whatever else happens, our slaver is gone. + hidden_effect = { + scope:slaver = { + if = { + limit = { + is_alive = yes + NOT = { exists = scope:duel_begun } + } + death = { death_reason = death_vanished } + } + } + } + } +} + +ep3_laamp_flavour_ewan.4072 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = root } + root = { trigger_event = ep3_laamp_flavour_ewan.4073 } + } + else = { ep3_laamp_flavour_ewan_4071_lose_courtiers_effect = yes } + } +} + +# You won the single combat! +ep3_laamp_flavour_ewan.4073 = { + type = character_event + title = ep3_laamp_flavour_ewan.4073.t + desc = ep3_laamp_flavour_ewan.4073.desc + theme = laamp + left_portrait = { + character = root + animation = random_weapon_celebrate + } + override_background = { reference = battlefield } + + # Victory! + option = { + name = ep3_laamp_flavour_ewan.4073.a + + ep3_laamp_flavour_ewan_4071_won_duel_effect = yes + + # No stress here. + ai_chance = { + # No logic needed for notification event. + base = 1 + } + } +} + +################################################## +# Born of Desperation +# by Ewan Cowhig Croft +# 4081 - 4090 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4081_duel_loss_effect = { + add_prestige = medium_prestige_loss + increase_wounds_effect = { REASON = starving_peasant_horde } + domicile = { + change_provisions = { + value = scope:provisions_loss + multiply = -1 + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { + duel = { + skill = $SKILL$ + value = high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = $VICTORY_LOC$ + send_interface_toast = { + title = $VICTORY_LOC$ + add_prestige = medium_prestige_gain + every_courtier = { + limit = { ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes } + custom = custom.every_adult_follower + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = $DEFEAT_LOC$ + send_interface_toast = { + title = $DEFEAT_LOC$ + ep3_laamp_flavour_ewan_4081_duel_loss_effect = yes + } + } + } +} + +# Hungry locals swarm at you, searching for food. +ep3_laamp_flavour_ewan.4081 = { + type = character_event + title = ep3_laamp_flavour_ewan.4081.t + desc = { + desc = ep3_laamp_flavour_ewan.4081.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:hunger_type = flag:epidemic } + desc = ep3_laamp_flavour_ewan.4081.desc.epidemic + } + triggered_desc = { + trigger = { scope:hunger_type = flag:mundane } + desc = ep3_laamp_flavour_ewan.4081.desc.mundane + } + } + desc = ep3_laamp_flavour_ewan.4081.desc.outro + } + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:local_peasant + animation = aggressive_spear + outfit_tags = { beggar_rags } + hide_info = yes + } + override_background = { reference = wilderness } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4081 } + } + # Must have the correct travel danger type. + location = { + OR = { + travel_danger_type = { + travel_plan = root.current_travel_plan + type = county_control + } + travel_danger_type = { + travel_plan = root.current_travel_plan + type = epidemic + } + } + } + # A mob won't attack forces over a certain size, even assuming you're spread out in a long line. + current_military_strength < @ep3_laamp_flavour_ewan_baggage_train_has_significant_armed_force + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4081 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4081 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Check to see if this is a generic famine or an epidemic-induced one. + if = { + limit = { + location = { + any_province_epidemic = { } + } + } + save_scope_value_as = { + name = hunger_type + value = flag:epidemic + } + } + else ={ + save_scope_value_as = { + name = hunger_type + value = flag:mundane + } + } + # How many provisions do we need to surrender? + save_scope_value_as = { + name = provisions_loss + value = { + add = domicile.provisions + multiply = 0.2 + floor = yes + min = @ep3_laamp_flavour_ewan_4000_min_provisions_worth_attacking + } + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + # Create a peasant to look annoyed for players. + if = { + limit = { is_ai = no } + hidden_effect = { + random_list = { + 90 = { + create_character = { + template = generic_peasant_character + location = root.location + culture = root.location.culture + faith = root.location.faith + prowess = 16 + save_scope_as = local_peasant + after_creation = { + change_current_weight = -100 + add_character_flag = no_headgear + } + } + } + 10 = { + create_character = { + template = diseased_peasant_character + location = root.location + culture = root.location.culture + faith = root.location.faith + prowess = 16 + save_scope_as = local_peasant + after_creation = { + change_current_weight = -100 + add_character_flag = no_headgear + } + } + } + } + } + } + } + + # Diplomacy duel to try and calm them. + option = { + name = ep3_laamp_flavour_ewan.4081.a + + ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { + SKILL = diplomacy + VICTORY_LOC = ep3_laamp_flavour_ewan.4081.a.tt.success + DEFEAT_LOC = ep3_laamp_flavour_ewan.4081.a.tt.failure + } + + stress_impact = { + calm = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_compassion = 1 } + } + } + + # Stewardship duel to try and force them to pay. + option = { + name = ep3_laamp_flavour_ewan.4081.b + + duel = { + skill = stewardship + value = high_skill_rating + # Victory! + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4081.b.tt.success + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4081.b.tt.success + add_gold = medium_gold_laamps_value + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + OR = { + has_trait = compassionate + has_trait = generous + } + # Compassionate overrules greedy, but callous and sadistic overrule generous. + NOR = { + has_trait = callous + has_trait = sadistic + } + } + custom = ep3_laamp_flavour_ewan.4081.b.tt.success.every_compassionate_or_generous_follower + add_opinion = { + target = root + modifier = callous_opinion + opinion = -30 + } + } + every_courtier = { + limit = { + ep3_laamp_flavour_ewan_available_courtier_travel_danger_trigger = yes + OR = { + has_trait = callous + has_trait = sadistic + has_trait = greedy + } + # Callous and sadistic overrule generous, but compassionate overrules greedy. + NOT = { has_trait = compassionate } + } + custom = ep3_laamp_flavour_ewan.4081.b.tt.success.every_callous_greedy_or_sadistic_follower + add_opinion = { + target = root + modifier = practical_opinion + opinion = 30 + } + } + } + } + # Defeat. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = ep3_laamp_flavour_ewan.4081.b.tt.failure + send_interface_toast = { + title = ep3_laamp_flavour_ewan.4081.b.tt.failure + ep3_laamp_flavour_ewan_4081_duel_loss_effect = yes + } + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = major_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -0.5 + } + } + } + + # Martial duel to force them back. + option = { + name = ep3_laamp_flavour_ewan.4081.c + + ep3_laamp_flavour_ewan_4081_roll_non_financial_duel_effect = { + SKILL = martial + VICTORY_LOC = ep3_laamp_flavour_ewan.4081.c.tt.success + DEFEAT_LOC = ep3_laamp_flavour_ewan.4081.c.tt.failure + } + + stress_impact = { + wrathful = medium_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + calm = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = -0.5 + } + } + } + + # Accept and let them take X provisions. + option = { + name = ep3_laamp_flavour_ewan.4081.d + trigger = { domicile.provisions >= scope:provisions_loss } + show_as_unavailable = { always = yes } + + add_prestige = miniscule_prestige_loss + domicile = { + change_provisions = { + value = scope:provisions_loss + multiply = -1 + } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + generous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + greedy = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = -1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { + mp_resume_travel_plan = yes + # Clean up our peasant. + scope:local_peasant ?= { silent_disappearance_effect = yes } + } +} + +################################################## +# Night Attack +# by Ewan Cowhig Croft +# 4091 - 4100 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_4091_roll_duel_effect = { + duel = { + skill = $SKILL$ + value = very_high_skill_rating + # Victory! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = $SUCCESS_LOC$ + send_interface_toast = { + title = $SUCCESS_LOC$ + add_prestige = medium_prestige_gain + } + } + # Defeat. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = $FAILURE_LOC$ + send_interface_toast = { + title = $FAILURE_LOC$ + increase_wounds_effect = { REASON = battle } + random_courtier = { + limit = { location = root.location } + increase_wounds_effect = { REASON = battle } + save_temporary_scope_as = courtier_1 + } + random_courtier = { + limit = { + location = root.location + this != scope:courtier_1 + } + increase_wounds_effect = { REASON = battle } + save_temporary_scope_as = courtier_2 + } + random_courtier = { + limit = { + location = root.location + this != scope:courtier_1 + this != scope:courtier_2 + } + increase_wounds_effect = { REASON = battle } + } + } + } + } +} + +# Unknown group assaults your camp one evening. +ep3_laamp_flavour_ewan.4091 = { + type = character_event + title = ep3_laamp_flavour_ewan.4091.t + desc = ep3_laamp_flavour_ewan.4091.desc + theme = widgetless_travel_danger + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:retainer + animation = aggressive_sword + outfit_tags = { military_outfit } + hide_info = yes + } + override_background = { reference = ep3_campfire } + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_available_travelling_adult = yes + current_travel_plan = { is_travel_with_domicile = yes } + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_4091 } + } + # Must have the correct travel danger type. + location = { + OR = { + travel_danger_type = { + travel_plan = root.current_travel_plan + type = owner_opinion + } + travel_danger_type = { + travel_plan = root.current_travel_plan + type = county_control + } + } + } + # Plus rule out anyone who'd have likely have a palisade. + NOT = { + domicile = { has_domicile_building = camp_perimeter_palisade } + } + } + + immediate = { + # Slow down in MP. + mp_delay_travel_plan = { DAYS = 90 } + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_4091 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_4091 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Increment XP. + traveler_danger_xp_effect = { + MIN = 1 + MAX = 3 + } + # Save our county for loc. + location.county = { save_scope_as = current_county } + # Create a bandit to look annoyed for players. + if = { + limit = { is_ai = no } + hidden_effect = { + create_character = { + template = mercenary + employer = root.location.county.holder + culture = root.location.culture + faith = root.location.county.holder.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = retainer + } + } + } + } + + # Martial duel to fight them off. + option = { + name = ep3_laamp_flavour_ewan.4091.a + + ep3_laamp_flavour_ewan_4091_roll_duel_effect = { + SKILL = martial + SUCCESS_LOC = ep3_laamp_flavour_ewan.4091.a.tt.success + FAILURE_LOC = ep3_laamp_flavour_ewan.4091.a.tt.failure + } + + # No stress here. + ai_chance = { + base = 1 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # Prowess duel to launch yourself into the frey. + option = { + name = ep3_laamp_flavour_ewan.4091.b + + ep3_laamp_flavour_ewan_4091_roll_duel_effect = { + SKILL = prowess + SUCCESS_LOC = ep3_laamp_flavour_ewan.4091.b.tt.success + FAILURE_LOC = ep3_laamp_flavour_ewan.4091.b.tt.failure + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # Hide from the chaos. + option = { + name = ep3_laamp_flavour_ewan.4091.c + + every_courtier = { + limit = { + location = root.location + NOT = { has_trait = craven } + } + custom = ep3_laamp_flavour_ewan.4091.c.every_non_craven_follower + add_opinion = { + target = root + modifier = disgusted_opinion + opinion = -25 + } + } + + stress_impact = { + craven = minor_stress_impact_loss + brave = medium_stress_impact_gain + } + ai_chance = { + base = 1 + ai_value_modifier = { ai_boldness = -1 } + } + } + + # If we're slowed due to multi, resume travel. + after = { mp_resume_travel_plan = yes } +} + + + + + + + + + + + +################################################## +# LOANED COURTIER RETURNS + +################################################## +# Core Tombola +# by Ewan Cowhig Croft +# 9501 - 9510 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = { + culture = { + OR = { + this != prev.host.culture + this != prev.host.capital_county.culture + } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { + num_sinful_traits = { + value <= 0 + target = $FAITH$ + } + num_virtuous_traits = { + value >= 1 + target = $FAITH$ + } +} + +scripted_trigger ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = { + NOT = { has_character_flag = ai_will_not_convert } + faith = { + NOR = { + this = prev.host.faith + this = prev.host.capital_county.faith + } + } + # Cynics don't care enough to switch + ## Or rather, they switch for entirely cynical reasons and we're portraying this as more of a finding-your-true-self thing. + NOT = { has_trait = cynical } + # Religious characters compare what faiths fit them best. + OR = { + # Non-zealous characters will consider a switch if they're not virtuous but would be in a new faith. + AND = { + NOT = { has_trait = zealous } + num_virtuous_traits = { + value <= 0 + target = faith + } + OR = { + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.faith } + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.capital_county.faith } + } + } + # Zealous characters will _also_ switch, but also need to feel like they're sinful in their current faith. + AND = { + has_trait = zealous + num_sinful_traits = { + value >= 1 + target = faith + } + num_virtuous_traits = { + value <= 0 + target = faith + } + OR = { + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.faith } + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = host.capital_county.faith } + } + } + } +} + +# Takes care of returning to camp after a period away. +ep3_laamp_flavour_ewan.9501 = { + hidden = yes + + trigger = { + is_imprisoned = no + scope:visitor = { + is_alive = yes + is_imprisoned = no + is_incapable = no + } + } + + on_trigger_fail = { + # Dead. + if = { + limit = { + scope:visitor = { is_alive = no } + } + trigger_event = ep3_laamp_flavour_ewan.9531 + } + # Imprisoned. + else_if = { + limit = { + scope:visitor = { is_imprisoned = yes } + } + trigger_event = ep3_laamp_flavour_ewan.9532 + } + # Incapable. + else_if = { + limit = { + scope:visitor = { is_incapable = yes } + } + trigger_event = ep3_laamp_flavour_ewan.9533 + } + # If we're imprisoned, just return them to camp with no fanfare. + else_if = { + limit = { is_imprisoned = yes } + scope:visitor = { return_to_court = yes } + } + # Fallback (we don't know what's happened to them). + else = { trigger_event = ep3_laamp_flavour_ewan.9534 } + } + + immediate = { + # Wherever they were, we give them the language of the place & their soon-to-be-former host if they didn't speak them already. + scope:visitor = { + # Prio the host's language. + if = { + limit = { + NOT = { knows_language_of_culture = host.culture } + current_extra_languages < language_soft_cap + } + learn_language_of_culture = host.culture + } + # Then the local tongue. + if = { + limit = { + NOT = { knows_language_of_culture = host.capital_county.culture } + current_extra_languages < language_soft_cap + } + learn_language_of_culture = host.capital_county.culture + } + # Nab our host scopes so we can reference them in loc. + host = { + save_scope_as = host + capital_county = { save_scope_as = capital } + } + } + # Next, determine what event we get when they return. + ## Try to have these add up to 100%. + random_list = { + # They're the same as ever. + 60 = { + trigger_event = ep3_laamp_flavour_ewan.9511 + # Boosts for other entries come out of this one, so we reduce the likelihood based on modifiers further down. + modifier = { + add = -20 + scope:visitor = { has_trait = gregarious } + } + modifier = { + add = -60 + scope:visitor = { + has_trait = zealous + ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes + } + } + } + # They've learnt a thing or two. + 25 = { + trigger_event = ep3_laamp_flavour_ewan.9512 + } + # They have taken on the local culture. + 5 = { + trigger = { + scope:visitor = { + ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = yes + NOT = { has_character_flag = laamp_follower_tombola_changed_culture_flag } + } + } + scope:visitor = { add_character_flag = laamp_follower_tombola_changed_culture_flag } + trigger_event = ep3_laamp_flavour_ewan.9521 + # More likely for gregarious characters. + modifier = { + add = 20 + scope:visitor = { has_trait = gregarious } + } + # Less likely for shy characters. + modifier = { + add = -5 + scope:visitor = { has_trait = shy } + } + } + # They have adopted the local faith. + 5 = { + # Zealous characters won't ever consider this unless they have a sin-virtue mismatch. + trigger = { + scope:visitor = { + ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes + NOT = { has_character_flag = laamp_follower_tombola_changed_faith_flag } + } + } + scope:visitor = { add_character_flag = laamp_follower_tombola_changed_faith_flag } + trigger_event = ep3_laamp_flavour_ewan.9522 + # If zealous characters are valid for this, then it means the new faith is a much better fit, so we weight them up drastically. + modifier = { + add = 60 + scope:visitor = { has_trait = zealous } + } + } + # They've taken both the culture and the faith + 5 = { + trigger = { + scope:visitor = { + ep3_laamp_flavour_ewan_9501_culture_to_adopt_trigger = yes + # Zealous characters won't ever consider this unless they have a sin-virtue mismatch. + ep3_laamp_flavour_ewan_9501_character_would_go_idea_shopping_trigger = yes + NOR = { + has_character_flag = laamp_follower_tombola_changed_culture_flag + has_character_flag = laamp_follower_tombola_changed_faith_flag + } + } + } + scope:visitor = { + add_character_flag = laamp_follower_tombola_changed_culture_flag + add_character_flag = laamp_follower_tombola_changed_faith_flag + } + trigger_event = ep3_laamp_flavour_ewan.9523 + # More likely for gregarious characters. + modifier = { + add = 20 + scope:visitor = { has_trait = gregarious } + } + # Less likely for shy characters. + modifier = { + add = -5 + scope:visitor = { has_trait = shy } + } + # If zealous characters are valid for this, then it means the new faith is a much better fit, so we weight them up drastically. + modifier = { + add = 60 + scope:visitor = { has_trait = zealous } + } + } + } + } +} + +################################################## +# Follower Returned +# by Ewan Cowhig Croft +# 9511 - 9520 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = { + stress_impact = { + sadistic = minor_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + } +} + +# Follower returns, the same as when they left. +ep3_laamp_flavour_ewan.9511 = { + type = character_event + title = ep3_laamp_flavour_ewan.9511.t + desc = { + desc = ep3_laamp_flavour_ewan.9511.desc.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:visitor_spouse } + desc = ep3_laamp_flavour_ewan.9511.desc.spouse.got_married + } + desc = ep3_laamp_flavour_ewan.9511.desc.spouse.nope + } + desc = ep3_laamp_flavour_ewan.9511.desc.outro + } + theme = laamp + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:visitor + animation = happiness + } + lower_right_portrait = scope:visitor_spouse + override_background = { reference = ep3_campfire } + + immediate = { + scope:visitor = { + # Have they have gotten married to a local? + if = { + limit = { + can_marry_trigger = yes + OR = { + NOT = { has_sexuality = homosexual } + allowed_to_marry_same_sex_trigger = yes + } + might_cheat_on_every_partner_trigger = yes + } + random = { + chance = { + value = 20 + # Reduce this a little for each existing marriage. + every_spouse = { add = -5 } + # Gregarious characters go out more. + if = { + limit = { has_trait = gregarious } + add = 10 + } + # Lustful characters are potentially in the market. + if = { + limit = { has_trait = gregarious } + add = 5 + } + } + # Create our new char. + save_scope_as = attraction_check + create_character = { + employer = root + age = { + value = scope:visitor.age + integer_range = { + min = -5 + max = 5 + } + min = 20 + max = 85 + } + gender_female_chance = scope_attraction_based_female_chance + culture = scope:visitor.host.capital_county.culture + faith = scope:visitor.host.capital_county.faith + dynasty = none + diplomacy = { + min_template_low_skill + max_template_medium_skill + } + martial = { + min_template_low_skill + max_template_medium_skill + } + stewardship = { + min_template_low_skill + max_template_medium_skill + } + intrigue = { + min_template_low_skill + max_template_medium_skill + } + learning = { + min_template_low_skill + max_template_medium_skill + } + prowess = { + min_template_low_skill + max_template_medium_skill + } + random_traits = no + # Education + random_traits_list = { + count = 1 + education_diplomacy_2 = {} + education_martial_2 = {} + education_stewardship_2 = {} + education_intrigue_2 = {} + education_learning_2 = {} + } + # Personality traits that match their partner + random_traits_list = { + count = 2 + lustful = { + trigger = { + scope:visitor = { has_trait = lustful } + } + } + chaste = { + trigger = { + scope:visitor = { has_trait = chaste } + } + } + gluttonous = { + trigger = { + scope:visitor = { has_trait = gluttonous } + } + } + temperate = { + trigger = { + scope:visitor = { has_trait = temperate } + } + } + greedy = { + trigger = { + scope:visitor = { has_trait = greedy } + } + } + generous = { + trigger = { + scope:visitor = { has_trait = generous } + } + } + lazy = { + trigger = { + scope:visitor = { has_trait = lazy } + } + } + diligent = { + trigger = { + scope:visitor = { has_trait = diligent } + } + } + wrathful = { + trigger = { + scope:visitor = { has_trait = wrathful } + } + } + calm = { + trigger = { + scope:visitor = { has_trait = calm } + } + } + patient = { + trigger = { + scope:visitor = { has_trait = patient } + } + } + impatient = { + trigger = { + scope:visitor = { has_trait = impatient } + } + } + arrogant = { + trigger = { + scope:visitor = { has_trait = arrogant } + } + } + humble = { + trigger = { + scope:visitor = { has_trait = humble } + } + } + deceitful = { + trigger = { + scope:visitor = { has_trait = deceitful } + } + } + honest = { + trigger = { + scope:visitor = { has_trait = honest } + } + } + craven = { + trigger = { + scope:visitor = { has_trait = craven } + } + } + brave = { + trigger = { + scope:visitor = { has_trait = brave } + } + } + shy = { + trigger = { + scope:visitor = { has_trait = shy } + } + } + gregarious = { + trigger = { + scope:visitor = { has_trait = gregarious } + } + } + ambitious = { + trigger = { + scope:visitor = { has_trait = ambitious } + } + } + content = { + trigger = { + scope:visitor = { has_trait = content } + } + } + arbitrary = { + trigger = { + scope:visitor = { has_trait = arbitrary } + } + } + just = { + trigger = { + scope:visitor = { has_trait = just } + } + } + cynical = { + trigger = { + scope:visitor = { has_trait = cynical } + } + } + zealous = { + trigger = { + scope:visitor = { has_trait = zealous } + } + } + paranoid = { + trigger = { + scope:visitor = { has_trait = paranoid } + } + } + trusting = { + trigger = { + scope:visitor = { has_trait = trusting } + } + } + compassionate = { + trigger = { + scope:visitor = { has_trait = compassionate } + } + } + callous = { + trigger = { + scope:visitor = { has_trait = callous } + } + } + sadistic = { + trigger = { + scope:visitor = { has_trait = sadistic } + } + } + stubborn = { + trigger = { + scope:visitor = { has_trait = stubborn } + } + } + fickle = { + trigger = { + scope:visitor = { has_trait = fickle } + } + } + vengeful = { + trigger = { + scope:visitor = { has_trait = vengeful } + } + } + forgiving = { + trigger = { + scope:visitor = { has_trait = forgiving } + } + } + eccentric = { + trigger = { + scope:visitor = { has_trait = eccentric } + } + } + } + # +1 random personality trait + random_traits_list = { + count = 1 + lustful = {} + chaste = {} + gluttonous = {} + temperate = {} + greedy = {} + generous = {} + lazy = {} + diligent = {} + wrathful = {} + calm = {} + patient = {} + impatient = {} + arrogant = {} + humble = {} + deceitful = {} + honest = {} + craven = {} + brave = {} + shy = {} + gregarious = {} + ambitious = {} + content = {} + arbitrary = {} + just = {} + cynical = {} + zealous = {} + paranoid = {} + trusting = {} + compassionate = {} + callous = {} + sadistic = {} + stubborn = {} + fickle = {} + vengeful = {} + forgiving = {} + eccentric = {} + } + # Somethings to spice 'em up. + random_traits_list = { + count = { 1 2 } + # Lifestyles + lifestyle_reveler = {} + lifestyle_blademaster = {} + lifestyle_hunter = {} + lifestyle_mystic = {} + lifestyle_physician = {} + lifestyle_herbalist = {} + lifestyle_gardener = {} + # Stress + drunkard = {} + rakish = {} + reclusive = {} + irritable = {} + flagellant = {} + profligate = {} + improvident = {} + contrite = {} + comfort_eater = {} + inappetetic = {} + journaller = {} + confider = {} + athletic = {} + # Fame + lifestyle_poet = {} + loyal = {} + disloyal = {} + gallowsbait = {} + # Health + depressed_genetic = {} + lunatic_genetic = {} + possessed_genetic = {} + one_eyed = {} + one_legged = {} + disfigured = {} + # Genetic + beauty_bad_1 = {} + beauty_good_1 = {} + intellect_bad_1 = {} + intellect_good_1 = {} + physique_bad_1 = {} + physique_good_1 = {} + clubfooted = {} + hunchbacked = {} + lisping = {} + stuttering = {} + dwarf = {} + giant = {} + spindly = {} + scaly = {} + albino = {} + wheezing = {} + bleeder = {} + infertile = {} + # Natural + fecund = {} + strong = {} + shrewd = {} + } + save_scope_as = visitor_spouse + after_creation = { set_sexuality = bisexual } + } + # Alright, now let's marry 'em up. + if = { + limit = { is_female = yes } + marry_matrilineal = scope:visitor_spouse + } + else = { marry = scope:visitor_spouse } + # Aaaand make sure that the marriage is a happy one. + hidden_effect = { + set_random_lover_reason = { TARGET = scope:visitor_spouse } + add_opinion = { + target = scope:visitor_spouse + modifier = love_opinion + opinion = 100 + } + reverse_add_opinion = { + target = scope:visitor_spouse + modifier = love_opinion + opinion = 100 + } + } + } + } + # And send 'em home. + return_to_court = yes + } + } + + # Welcome, welcome! + option = { + name = ep3_laamp_flavour_ewan.9511.a + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # _Married?_ I think not! + option = { + name = ep3_laamp_flavour_ewan.9511.b + trigger = { exists = scope:visitor_spouse } + + # Divorce. + scope:visitor = { divorce = scope:visitor_spouse } + # Banish them. + remove_courtier_or_guest = { + character = scope:visitor_spouse + new_location = scope:host.capital_county.title_province + } + # And apply some opinions. + scope:visitor = { + add_opinion = { + modifier = forced_divorce_opinion + target = root + } + } + scope:visitor_spouse = { + add_opinion = { + modifier = forced_divorce_opinion + target = root + } + } + + stress_impact = { + sadistic = major_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = major_stress_impact_gain + } + # The AI should never take this option. + ai_chance = { base = 0 } + } + + # You are no longer welcome with us. + option = { + name = ep3_laamp_flavour_ewan.9511.c + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +# Follower returns and they've learnt a thing or two. +ep3_laamp_flavour_ewan.9512 = { + type = character_event + title = ep3_laamp_flavour_ewan.9512.t + desc = ep3_laamp_flavour_ewan.9512.desc + theme = laamp + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:visitor + triggered_animation = { + trigger = { scope:skill = flag:diplomacy } + animation = chancellor + } + triggered_animation = { + trigger = { + OR = { + scope:skill = flag:martial + scope:skill = flag:prowess + } + } + animation = marshal + } + triggered_animation = { + trigger = { scope:skill = flag:stewardship } + animation = steward + } + triggered_animation = { + trigger = { scope:skill = flag:intrigue } + animation = spymaster + } + triggered_animation = { + trigger = { scope:skill = flag:learning } + animation = chaplain + } + animation = hero_flex + } + override_background = { reference = ep3_campfire } + + immediate = { + scope:visitor = { + # Sort how much skill we'll be adding. + save_scope_value_as = { + name = skill_gain + value = { + integer_range = { + min = 2 + max = 4 + } + if = { + limit = { has_trait = diligent } + add = 1 + } + else_if = { + limit = { has_trait = lazy } + add = -1 + } + } + } + # Now add it to the highest skill that scope:visitor has. + switch = { + trigger = highest_skill + diplomacy = { add_diplomacy_skill = scope:skill_gain } + martial = { add_martial_skill = scope:skill_gain } + stewardship = { add_stewardship_skill = scope:skill_gain } + intrigue = { add_intrigue_skill = scope:skill_gain } + learning = { add_learning_skill = scope:skill_gain } + } + # Finally, return them to court. + return_to_court = yes + } + } + + # How you've improved, scope:visitor! + option = { + name = ep3_laamp_flavour_ewan.9512.a + + # No effect. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Begone, vagabond. + option = { + name = ep3_laamp_flavour_ewan.9512.b + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +################################################## +# Not As I Remember You +# by Ewan Cowhig Croft +# 9521 - 9530 +################################################## + +scripted_effect ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = { + scope:visitor = { + culture = { save_scope_as = old_culture } + random_list = { + 100 = { + trigger = { + this != host.culture + } + set_culture = host.culture + save_scope_value_as = { + name = culture_change + value = flag:host + } + } + 100 = { + trigger = { + this != host.capital_county.culture + } + set_culture = host.capital_county.culture + save_scope_value_as = { + name = culture_change + value = flag:capital + } + } + } + culture = { save_scope_as = new_culture } + } +} + +scripted_effect ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = { + # Sort our reactions. + ## They changed away from our culture. + if = { + limit = { culture = scope:old_culture } + save_scope_value_as = { + name = culture_reaction + value = flag:changed_away + } + } + ## They changed _to_ our culture. + else_if = { + limit = { culture = scope:new_culture } + save_scope_value_as = { + name = culture_reaction + value = flag:changed_to + } + } + ## They simply changed culture. + else = { + save_scope_value_as = { + name = culture_reaction + value = flag:uninvolved + } + } +} + +scripted_effect ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = { + # They've learnt a lot from their new ethos (even if it was the same as their old one). + ## First, randomise our values. + save_scope_value_as = { + name = skill_2 + value = { + integer_range = { + min = 2 + max = 5 + } + } + } + save_scope_value_as = { + name = skill_1 + value = { + integer_range = { + min = { + value = scope:skill_2 + add = 1 + } + max = 6 + } + } + } + ## Then apply them. + switch = { + trigger = has_cultural_pillar + ethos_bellicose = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.martial + add_martial_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.prowess + add_prowess_skill = scope:skill_2 + } + } + ethos_stoic = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.martial + add_martial_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.stewardship + add_stewardship_skill = scope:skill_2 + } + } + ethos_bureaucratic = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.stewardship + add_stewardship_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.learning + add_learning_skill = scope:skill_2 + } + } + ethos_spiritual = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.learning + add_learning_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.diplomacy + add_diplomacy_skill = scope:skill_2 + } + } + ethos_courtly = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.diplomacy + add_diplomacy_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.intrigue + add_intrigue_skill = scope:skill_2 + } + } + ethos_egalitarian = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.diplomacy + add_diplomacy_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.stewardship + add_stewardship_skill = scope:skill_2 + } + } + ethos_communal = { + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.primary_skill.stewardship + add_stewardship_skill = scope:skill_1 + } + custom_tooltip = { + text = ep3_laamp_flavour_ewan.9521.tt.secondary_skill.learning + add_learning_skill = scope:skill_2 + } + } + } +} + +# Follower has taken on the culture of the place they stayed at. +ep3_laamp_flavour_ewan.9521 = { + type = character_event + title = ep3_laamp_flavour_ewan.9521.t + desc = { + desc = ep3_laamp_flavour_ewan.9521.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:culture_change = flag:host } + desc = ep3_laamp_flavour_ewan.9521.desc.source.host + } + triggered_desc = { + trigger = { scope:culture_change = flag:capital } + desc = ep3_laamp_flavour_ewan.9521.desc.source.capital + } + } + first_valid = { + triggered_desc = { + trigger = { scope:culture_reaction = flag:changed_away } + desc = ep3_laamp_flavour_ewan.9521.desc.reaction.changed_away + } + triggered_desc = { + trigger = { scope:culture_reaction = flag:changed_to } + desc = ep3_laamp_flavour_ewan.9521.desc.reaction.changed_to + } + triggered_desc = { + trigger = { scope:culture_reaction = flag:uninvolved } + desc = ep3_laamp_flavour_ewan.9521.desc.reaction.uninvolved + } + } + desc = ep3_laamp_flavour_ewan.9521.desc.outro + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:culture_reaction = flag:changed_away } + animation = shock + } + triggered_animation = { + trigger = { scope:culture_reaction = flag:changed_to } + animation = admiration + } + triggered_animation = { + trigger = { scope:culture_reaction = flag:uninvolved } + animation = personality_forgiving + } + } + right_portrait = { + character = scope:visitor + animation = personality_bold + } + override_background = { reference = ep3_campfire } + + immediate = { + # Configure scope:visitor's culture change. + ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = yes + # Sort our reactions. + ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = yes + # They've learnt a lot from their new ethos (even if it was the same as their old one). + ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = yes + # Bring them home. + scope:visitor = { return_to_court = yes } + } + + # Accept them back. + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { scope:culture_reaction = flag:changed_away } + desc = ep3_laamp_flavour_ewan.9521.a.changed_away + } + triggered_desc = { + trigger = { scope:culture_reaction = flag:changed_to } + desc = ep3_laamp_flavour_ewan.9521.a.changed_to + } + triggered_desc = { + trigger = { scope:culture_reaction = flag:uninvolved } + desc = ep3_laamp_flavour_ewan.9521.a.uninvolved + } + } + } + } + + # No effects. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # You're not wanted any more, scope:visitor. + option = { + name = ep3_laamp_flavour_ewan.9521.b + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +scripted_effect ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = { + scope:visitor = { + faith = { save_scope_as = old_faith } + random_list = { + 100 = { + trigger = { + this != host.faith + } + set_character_faith = host.faith + save_scope_value_as = { + name = faith_change + value = flag:host + } + } + 100 = { + trigger = { + this != host.capital_county.faith + } + set_character_faith = host.capital_county.faith + save_scope_value_as = { + name = faith_change + value = flag:capital + } + } + } + faith = { save_scope_as = new_faith } + } +} + +scripted_effect ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = { + # Sort our reactions. + ## We are cynical. + if = { + limit = { has_trait = cynical } + save_scope_value_as = { + name = faith_reaction + value = flag:give_a_shit + } + } + ## They changed away from our faith. + if = { + limit = { faith = scope:old_faith } + save_scope_value_as = { + name = faith_reaction + value = flag:changed_away + } + } + ## They changed _to_ our faith. + else_if = { + limit = { faith = scope:new_faith } + save_scope_value_as = { + name = faith_reaction + value = flag:changed_to_ours + } + } + ## They changed to a faith we love. + else_if = { + limit = { faith = scope:new_faith } + save_scope_value_as = { + name = faith_reaction + value = flag:changed_to_lovable + } + } + ## They changed to a faith we tolerate. + else_if = { + limit = { faith = scope:new_faith } + save_scope_value_as = { + name = faith_reaction + value = flag:changed_to_acceptable + } + } + ## They simply changed faith. + else = { + save_scope_value_as = { + name = faith_reaction + value = flag:uninvolved + } + } +} + +# Follower has taken on the faith of the place they stayed at. +ep3_laamp_flavour_ewan.9522 = { + type = character_event + title = ep3_laamp_flavour_ewan.9522.t + desc = { + desc = ep3_laamp_flavour_ewan.9522.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:faith_change = flag:host } + desc = ep3_laamp_flavour_ewan.9522.desc.source.host + } + triggered_desc = { + trigger = { scope:faith_change = flag:capital } + desc = ep3_laamp_flavour_ewan.9522.desc.source.capital + } + } + desc = ep3_laamp_flavour_ewan.9522.desc.source.bridge + first_valid = { + triggered_desc = { + trigger = { scope:faith_reaction = flag:give_a_shit } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.give_a_shit + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_away } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_away + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_ours } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_ours + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_lovable } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_lovable + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_acceptable } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.changed_to_acceptable + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:uninvolved } + desc = ep3_laamp_flavour_ewan.9522.desc.reaction.uninvolved + } + } + desc = ep3_laamp_flavour_ewan.9522.desc.outro + } + theme = laamp + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:faith_reaction = flag:give_a_shit } + animation = dismissal + } + triggered_animation = { + trigger = { scope:faith_reaction = flag:changed_away } + animation = shock + } + triggered_animation = { + trigger = { + OR = { + scope:faith_reaction = flag:changed_to_ours + scope:faith_reaction = flag:changed_to_lovable + scope:faith_reaction = flag:changed_to_acceptable + } + } + animation = admiration + } + triggered_animation = { + trigger = { scope:faith_reaction = flag:uninvolved } + animation = personality_forgiving + } + } + right_portrait = { + character = scope:visitor + animation = personality_zealous + } + override_background = { reference = ep3_campfire } + + immediate = { + # Configure scope:visitor's faith change. + ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = yes + # Sort our reactions. + ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = yes + # The conversion process involves a lot of education. + scope:visitor = { + add_learning_skill = { + integer_range = { + min = 3 + max = 8 + } + } + } + # Bring them home. + scope:visitor = { return_to_court = yes } + } + + # Zealous, same faith: welcome, SisterBrother! + option = { + name = ep3_laamp_flavour_ewan.9522.a + trigger = { + has_trait = zealous + faith = scope:visitor.faith + } + trait = zealous + + add_piety = minor_piety_gain + + stress_impact = { zealous = minor_stress_impact_loss } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Zealous, other: But why convert to scope:new_faith... + option = { + name = ep3_laamp_flavour_ewan.9522.b + trigger = { + has_trait = zealous + NOR = { + faith = scope:visitor.faith + faith = scope:old_faith + } + } + trait = zealous + + # No effects. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Zealous, converted away: What have you done, you fool?! + option = { + name = ep3_laamp_flavour_ewan.9522.c + trigger = { + has_trait = zealous + faith = scope:old_faith + } + trait = zealous + + # No effects. + + stress_impact = { zealous = minor_stress_impact_gain } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Cynical: scope:old_faith, scope:new_faith, you're still scope:visitor to me. + option = { + name = ep3_laamp_flavour_ewan.9522.d + trigger = { has_trait = cynical } + + reverse_add_opinion = { + target = scope:visitor + modifier = respect_opinion + opinion = 50 + } + if = { + limit = { + can_set_relation_potential_friend_trigger = { CHARACTER = scope:visitor } + } + set_relation_potential_friend = scope:visitor + } + + stress_impact = { cynical = medium_stress_impact_loss } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Good to have you back, scope:visitor. + option = { + name = ep3_laamp_flavour_ewan.9522.e + trigger = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + + # No effect. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # You are no longer welcome here. + option = { + name = ep3_laamp_flavour_ewan.9522.f + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +# Follower has taken on the faith and culture of the place they stayed at. +ep3_laamp_flavour_ewan.9523 = { + type = character_event + title = ep3_laamp_flavour_ewan.9523.t + desc = { + desc = ep3_laamp_flavour_ewan.9523.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:faith_change = flag:host } + desc = ep3_laamp_flavour_ewan.9523.desc.source.host + } + triggered_desc = { + trigger = { scope:faith_change = flag:capital } + desc = ep3_laamp_flavour_ewan.9523.desc.source.capital + } + } + desc = ep3_laamp_flavour_ewan.9523.desc.source.bridge + first_valid = { + triggered_desc = { + trigger = { scope:faith_reaction = flag:give_a_shit } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.give_a_shit + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_away } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_away + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_ours } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_ours + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_lovable } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_lovable + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:changed_to_acceptable } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.changed_to_acceptable + } + triggered_desc = { + trigger = { scope:faith_reaction = flag:uninvolved } + desc = ep3_laamp_flavour_ewan.9523.desc.reaction.uninvolved + } + } + desc = ep3_laamp_flavour_ewan.9523.desc.outro + } + theme = laamp + # We dupe the faith logic for portraits, because it's the more important of the two & because _Jesus H. Christ_ the permutations otherwise. + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:faith_reaction = flag:give_a_shit } + animation = dismissal + } + triggered_animation = { + trigger = { scope:faith_reaction = flag:changed_away } + animation = shock + } + triggered_animation = { + trigger = { + OR = { + scope:faith_reaction = flag:changed_to_ours + scope:faith_reaction = flag:changed_to_lovable + scope:faith_reaction = flag:changed_to_acceptable + } + } + animation = admiration + } + triggered_animation = { + trigger = { scope:faith_reaction = flag:uninvolved } + animation = personality_forgiving + } + } + right_portrait = { + character = scope:visitor + animation = personality_zealous + } + override_background = { reference = ep3_campfire } + + immediate = { + # Configure scope:visitor's changes. + ## Culture. + ep3_laamp_flavour_ewan_9521_change_visitor_culture_effect = yes + ## Faith. + ep3_laamp_flavour_ewan_9522_change_visitor_faith_effect = yes + # Sort our reactions. + ## Culture. + ep3_laamp_flavour_ewan_9521_register_culture_change_reaction_effect = yes + ## Faith. + ep3_laamp_flavour_ewan_9522_register_faith_change_reaction_effect = yes + # They've learnt a lot from their new ethos (even if it was the same as their old one). + ## Ignore a bonus from conversion — they're already getting a substantial one from this change that's more flavourful. + ep3_laamp_flavour_ewan_9521_apply_ethos_skill_bonuses_effect = yes + # Bring them home. + scope:visitor = { return_to_court = yes } + } + + # Zealous, same faith: welcome, SisterBrother! + option = { + name = ep3_laamp_flavour_ewan.9523.a + trigger = { + has_trait = zealous + faith = scope:visitor.faith + } + trait = zealous + + add_piety = minor_piety_gain + + stress_impact = { zealous = minor_stress_impact_loss } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Zealous, other: But why convert to scope:new_faith... + option = { + name = ep3_laamp_flavour_ewan.9523.b + trigger = { + has_trait = zealous + NOR = { + faith = scope:visitor.faith + faith = scope:old_faith + } + } + trait = zealous + + # No effects. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Zealous, converted away: What have you done, you fool?! + option = { + name = ep3_laamp_flavour_ewan.9523.c + trigger = { + has_trait = zealous + faith = scope:old_faith + } + trait = zealous + + # No effects. + + stress_impact = { zealous = minor_stress_impact_gain } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Cynical: scope:old_faith, scope:new_faith, you're still scope:visitor to me. + option = { + name = ep3_laamp_flavour_ewan.9523.d + trigger = { has_trait = cynical } + + reverse_add_opinion = { + target = scope:visitor + modifier = respect_opinion + opinion = 50 + } + if = { + limit = { + can_set_relation_potential_friend_trigger = { CHARACTER = scope:visitor } + } + set_relation_potential_friend = scope:visitor + } + + stress_impact = { cynical = medium_stress_impact_loss } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Good to have you back, scope:visitor. + option = { + name = ep3_laamp_flavour_ewan.9523.e + trigger = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + + # No effect. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # You are no longer welcome here. + option = { + name = ep3_laamp_flavour_ewan.9523.f + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +################################################## +# Missing Follower +# by Ewan Cowhig Croft +# 9531 - 9540 +################################################## + +# Follower has died whilst away from camp. +ep3_laamp_flavour_ewan.9531 = { + type = character_event + title = ep3_laamp_flavour_ewan.9531.t + desc = ep3_laamp_flavour_ewan.9531.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:visitor + animation = map_fear + } + override_background = { reference = ep3_campfire } + + trigger = { + # Make sure that this isn't a character who we would've been informed about the death of already (i.e., a spouse or family — relations are lost on death already so we have to bite the bullet there without doing something awful with variables). + NOR = { + is_spouse_of_even_if_dead = scope:visitor + is_close_or_extended_family_of = scope:visitor + } + } + + immediate = { + custom_tooltip = ep3_laamp_flavour_ewan.9531.tt.follower_is_dead + hidden_effect = { + scope:visitor = { return_to_court = yes } + } + } + + # To think we shall never see HerHim again... + option = { + name = ep3_laamp_flavour_ewan.9531.a + + # No effect. + + # No stress here. + # The AI should only take this if it's the _only_ option. + ai_chance = { base = 0 } + } + + # Callous: eh. + option = { + name = ep3_laamp_flavour_ewan.9531.b + trigger = { has_trait = callous } + trait = callous + + stress_impact = { callous = major_stress_impact_loss } + # If you're callous, take the stress loss. + ai_chance = { base = 100 } + } +} + +# Follower has been imprisoned away from camp. +ep3_laamp_flavour_ewan.9532 = { + type = character_event + title = ep3_laamp_flavour_ewan.9532.t + desc = ep3_laamp_flavour_ewan.9532.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:visitor + animation = prisondungeon + } + override_background = { reference = ep3_campfire } + + trigger = { + root != scope:visitor.imprisoner + } + + on_trigger_fail = { + scope:visitor = { return_to_court = yes } + } + + immediate = { + scope:visitor.imprisoner = { save_scope_as = imprisoner } + show_as_tooltip = { + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:visitor + IMPRISONER = scope:imprisoner + } + } + hidden_effect = { + scope:visitor = { return_to_court = yes } + } + } + + # We must free scope:visitor! + option = { + name = ep3_laamp_flavour_ewan.9532.a + + # No effects. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Scope:imprisoner can keep HerHim for all I care. + option = { + name = ep3_laamp_flavour_ewan.9532.b + + remove_courtier_or_guest = scope:visitor + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +# Follower has become incapable whilst away from camp. +ep3_laamp_flavour_ewan.9533 = { + type = character_event + title = ep3_laamp_flavour_ewan.9533.t + desc = ep3_laamp_flavour_ewan.9533.desc + theme = laamp + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:visitor + animation = paranoia + } + override_background = { reference = ep3_campfire } + + immediate = { + custom_tooltip = ep3_laamp_flavour_ewan.9533.tt.follower_is_incapable + scope:visitor = { return_to_court = yes } + } + + # What on Earth happened to HerHim? + option = { + name = ep3_laamp_flavour_ewan.9533.a + trigger = { + NOT = { has_trait = compassionate } + } + + # No effect. + + # No stress here. + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Compassionate: worry not, scope:visitor, we shall care for you. + option = { + name = ep3_laamp_flavour_ewan.9533.b + trigger = { has_trait = compassionate } + trait = compassionate + + reverse_add_opinion = { + target = scope:visitor + modifier = feast_helped_me_opinion + opinion = 50 + } + every_courtier = { + custom = custom.every_non_callous_or_sadistic_follower + limit = { + NOR = { + has_trait = callous + has_trait = sadistic + } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + + stress_impact = { compassionate = major_stress_impact_loss } + # The AI should always just uncritically take people back. + ai_chance = { base = 100 } + } + + # Drive this imbecile away. + option = { + name = ep3_laamp_flavour_ewan.9533.c + + scope:visitor = { select_and_move_to_pool_effect = yes } + + ep3_laamp_flavour_ewan_9511_standard_drive_away_char_stress_effect = yes + # The AI should never take this option. + ai_chance = { base = 0 } + } +} + +# Follower never comes home. +ep3_laamp_flavour_ewan.9534 = { + type = character_event + title = ep3_laamp_flavour_ewan.9534.t + desc = ep3_laamp_flavour_ewan.9534.desc + theme = laamp + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:visitor + animation = map_disbelief + } + override_background = { reference = ep3_campfire } + + immediate = { + custom_tooltip = ep3_laamp_flavour_ewan.9534.tt.follower_is_lost + hidden_effect = { + remove_courtier_or_guest = { + character = scope:visitor + new_location = scope:visitor.location + } + } + } + + # I wonder what could have happened to HerHim... + option = { + name = ep3_laamp_flavour_ewan.9534.a + + # No effects. + + # No stress, no AI. + } +} + +################################################## +# Camp Activity Feed Message +# by Ewan Cowhig Croft +# 9541 - 9550 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = { + is_adult = yes + is_available_allow_travelling = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = { + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + has_any_nickname = no +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = { + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + ep3_laamp_flavour_ewan_no_dog_trigger = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = { + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + ep3_laamp_flavour_ewan_no_cat_trigger = yes +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = { + this != scope:follower_1 + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + "trait_compatibility(scope:follower_1)" >= low_positive_trait_compatibility + NOT = { + has_important_relationship_with_character_trigger = { CHARACTER = scope:follower_1 } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = { + this != scope:follower_1 + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + "trait_compatibility(scope:follower_1)" <= low_negative_trait_compatibility + NOT = { + has_important_relationship_with_character_trigger = { CHARACTER = scope:follower_1 } + } +} + +scripted_trigger ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = { + ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes + stress >= 1 +} + +# Something minor happens at camp. +ep3_laamp_flavour_ewan.9541 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_9541 } + } + # Plus make sure _someone_ is valid for something. + any_courtier = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_9541 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_9541 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_shorter + } + } + # Grab a courtier for our relation effect triggers. + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } + save_scope_as = follower_1 + } + # Right, determine what's going to be happening. + random_list = { + # Nicknames. + 500 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = yes } + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_nicknameable_courtier_trigger = yes } + weight = { laamp_weight_up_minor_chars_modifier = yes } + save_scope_as = eponymee + } + hidden_effect = { + scope:eponymee = { + assign_random_nickname_effect = yes + hidden_effect = { + if = { + limit = { + has_any_nickname = no + } + set_random_negative_nickname_effect = yes + } + } + } + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.nickname_gained + desc = ep3_laamp_flavour_ewan.9541.desc.nickname_gained + left_icon = scope:eponymee + } + } + # Dogs. + 75 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = yes } + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_dog_courtier_trigger = yes } + weight = { laamp_weight_up_minor_chars_modifier = yes } + save_scope_as = pet_owner + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.dog_gained + desc = ep3_laamp_flavour_ewan.9541.desc.dog_gained + left_icon = scope:pet_owner + scope:pet_owner = { start_dog_story_cycle_effect = yes } + } + } + # Cats. + 100 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = yes } + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_cat_courtier_trigger = yes } + weight = { laamp_weight_up_minor_chars_modifier = yes } + save_scope_as = pet_owner + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.cat_gained + desc = ep3_laamp_flavour_ewan.9541.desc.cat_gained + left_icon = scope:pet_owner + scope:pet_owner = { start_cat_story_cycle_effect = yes } + } + } + # Opinions & potential friends. + 100 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = yes } + } + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_potential_friend_courtier_trigger = yes } + order_by = "trait_compatibility(scope:follower_1)" + save_scope_as = follower_2 + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.opinion_gained + desc = ep3_laamp_flavour_ewan.9541.desc.opinion_gained + left_icon = scope:follower_1 + right_icon = scope:follower_2 + scope:follower_1 = { + if = { + limit = { + can_set_relation_potential_friend_trigger = { CHARACTER = scope:follower_2 } + } + set_relation_potential_friend = scope:follower_2 + } + add_opinion = { + target = scope:follower_2 + modifier = friendliness_opinion + opinion = 30 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = friendliness_opinion + opinion = 30 + } + } + } + } + # Opinions & potential rivals. + 100 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = yes } + } + ordered_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_potential_rival_courtier_trigger = yes } + order_by = "trait_compatibility(scope:follower_1)" + save_scope_as = follower_2 + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.opinion_lost + desc = ep3_laamp_flavour_ewan.9541.desc.opinion_lost + left_icon = scope:follower_1 + right_icon = scope:follower_2 + scope:follower_1 = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = scope:follower_2 } + } + set_relation_potential_rival = scope:follower_2 + } + add_opinion = { + target = scope:follower_2 + modifier = irritated_opinion + opinion = -30 + } + reverse_add_opinion = { + target = scope:follower_2 + modifier = irritated_opinion + opinion = -30 + } + } + } + } + # Gain stress. + ## Largely here as a fallback — not that interesting so we weight it down reaaaalll good. + 5 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_suitable_courtier_trigger = yes } + weight = { laamp_weight_up_minor_chars_modifier = yes } + save_scope_as = stressee + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.stress_gained + desc = ep3_laamp_flavour_ewan.9541.desc.stress_gained + left_icon = scope:stressee + scope:stressee = { + random_list = { + 20 = { add_stress = minor_stress_gain } + 60 = { add_stress = medium_stress_gain } + 20 = { add_stress = major_stress_gain } + } + } + } + } + # Lose stress. + 120 = { + trigger = { + any_courtier = { ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = yes } + } + random_courtier = { + limit = { ep3_laamp_flavour_ewan_9541_valid_stressed_courtier_trigger = yes } + save_scope_as = stressee + } + send_interface_message = { + type = event_camp_follower_with_text + title = ep3_laamp_flavour_ewan.9541.t.stress_lost + desc = ep3_laamp_flavour_ewan.9541.desc.stress_lost + left_icon = scope:stressee + scope:stressee = { + random_list = { + 10 = { add_stress = minor_stress_loss } + 60 = { add_stress = medium_stress_loss } + 30 = { add_stress = major_stress_loss } + } + } + } + } + } + } +} + +################################################## +# AI Laamp Converts +# by Ewan Cowhig Croft +# 9551 - 9560 +################################################## + +scripted_trigger ep3_laamp_flavour_ewan_9551_character_would_go_idea_shopping_trigger = { + NOR = { + has_character_flag = ai_will_not_convert + has_trait = faith_warrior + has_trait = crusader_king + has_trait = stubborn + faith = location.faith + } + # Religious characters compare what faiths fit them best. + OR = { + # Non-zealous characters will consider a switch if they're not virtuous but would be in a new faith. + AND = { + NOT = { has_trait = zealous } + num_virtuous_traits = { + value <= 0 + target = faith + } + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = location.faith } + } + # Zealous characters will _also_ switch, but also need to feel like they're sinful in their current faith. + AND = { + has_trait = zealous + num_sinful_traits = { + value >= 1 + target = faith + } + num_virtuous_traits = { + value <= 0 + target = faith + } + ep3_laamp_flavour_ewan_9501_faith_sin_virtue_check_trigger = { FAITH = location.faith } + } + # Cynical characters will gladly convert to whatever, provided they feel it suits them. + AND = { + has_trait = cynical + NOR = { + has_trait = arrogant + has_trait = stubborn + } + } + } + # Just rule out the inevitable modded HoF laamps from trying to abandon their faith. + NOT = { faith.religious_head ?= root } +} + +# AI laamps convert to various local faiths. +ep3_laamp_flavour_ewan.9551 = { + hidden = yes + + trigger = { + # DLC check. + has_ep3_dlc_trigger = yes + # Standard checks. + is_adult = yes + is_available_allow_travelling = yes + # Make sure we're on dry land. + is_location_valid_for_travel_event_on_land = yes + # Laamps use title cooldowns, to help trim down repeats when succession happens. + primary_title = { + NOT = { has_variable = had_ep3_laamp_flavour_ewan_9551 } + } + # Now make sure that we'd actually convert. + ## Never convert reformed to unreformed without good reason. + location.faith = { + OR = { + NOT = { has_doctrine_parameter = unreformed } + AND = { + has_doctrine_parameter = unreformed + root.faith = { has_doctrine_parameter = unreformed } + } + root = { has_trait = eccentric } + } + } + ## General validity checks. + ep3_laamp_flavour_ewan_9551_character_would_go_idea_shopping_trigger = yes + # AI-only. + is_ai = yes + } + + immediate = { + if = { + limit = { enable_debug_laamp_event_logging_toggle_trigger = yes } + increment_global_variable_effect = { + VAR = tally_lfe_9551 + VAL = 1 + } + } + # Set our cooldown. + primary_title = { + set_variable = { + name = had_ep3_laamp_flavour_ewan_9551 + value = yes + years = @ep3_laamp_flavour_ewan_event_cooldown_longest + } + } + # And convert our character. + set_character_faith_with_conversion = location.faith + } +} + + + + + + + + + + + +################################################## +# MAINTENANCE + +# Range 9801+ reserved for w/e lil management events might turn up. diff --git a/events/dlc/ep3/ep3_roman_restoration_events.txt b/events/dlc/ep3/ep3_roman_restoration_events.txt new file mode 100644 index 00000000..1da11a6f --- /dev/null +++ b/events/dlc/ep3/ep3_roman_restoration_events.txt @@ -0,0 +1,533 @@ +namespace = ep3_roman_restoration + +####################################### +### +### EP3 RESTORE ROME STORY CYCLE EVENTS +### by Chad Uhl +### +### 0100 Justinian's Dream +### 0101-0109 Rome Reformed Notifications +### 0300-0590 Post-Restoration Difficulties +### +####################################### + +# Justinian's Dream +# Event fired on story cycle setup informing the player that they can form the roman empire +ep3_roman_restoration.0001 = { + type = character_event + title = ep3_roman_restoration.0001.t + desc = ep3_roman_restoration.0001.desc + theme = emperor + + override_background = { + trigger = { capital_county = title:c_byzantion } + reference = ep3_constantinople + } + + left_portrait = { + character = root + animation = emotion_thinking_scepter + } + + trigger = { + NOT = { has_global_variable = flag_restored_roman_empire } + } + + option = { + name = ep3_roman_restoration.0001.a + custom_tooltip = ep3_roman_restoration.0001.a.tt + decision:restore_roman_empire_decision = { + open_view_data = { + view = decision_detail + player = root + } + } + } +} + +# Should I LARP or nah? +ep3_roman_restoration.0100 = { + type = character_event + window = fullscreen_event + title = ep3_roman_restoration.0100.t + desc = ep3_roman_restoration.0100.desc + theme = emperor + override_background = { reference = ep3_fullscreen_restore_rome } + + immediate = { + save_scope_as = scoped_emperor + } + + option = { # LARP (Hard Mode) + name = ep3_roman_restoration.0100.a + custom_tooltip = ep3_roman_restoration.hard_mode + custom_tooltip = ep3_roman_restoration.end_hard_mode + custom_tooltip = ep3_roman_restoration.invasion_cb + every_held_title = { + limit = { + is_head_of_faith = yes + } + root = { + destroy_title = prev + } + } + set_character_faith = faith:hellenic_pagan + if = { + limit = { + faith:hellenic_pagan = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + primary_title = { set_state_faith = faith:hellenic_pagan } + every_held_title = { + custom = custom.every_held_county + title_tier = county + set_county_faith = faith:hellenic_pagan + } + every_vassal = { + custom = custom.every_vassal + limit = { + NOT = { + any_held_title = { + is_head_of_faith = yes # you cannot convert the Ecumenical Patriarch, sorry + } + } + } + custom_tooltip = { + text = may_choose_to_convert_hellenic_desc + run_interaction = { # We use the same interaction as when creating a new faith to keep a consistent behaviour, since that is essentially what you're doing here + interaction = ask_for_conversion_interaction + actor = root + recipient = this + execute_threshold = accept + } + } + } + custom_tooltip = { + text = ep3_roman_restoration.household_gods_tenet + set_global_variable = household_gods_tenet_unlocked + } + custom_tooltip = { + text = uses_custom_caesar_flavourization_tt + set_variable = uses_custom_caesar_flavourization + } + if = { + limit = { + any_owned_story = { type = ep3_story_cycle_restoring_rome } + } + random_owned_story = { + type = ep3_story_cycle_restoring_rome + set_variable = roman_empire_hard_mode + } + } + } + + option = { # Roleplay option (become Hellenic without Hard Mode) + name = ep3_roman_restoration.0100.c + custom_tooltip = ep3_roman_restoration.easy_mode + every_held_title = { + limit = { + is_head_of_faith = yes + } + root = { + destroy_title = prev + } + } + set_character_faith = faith:hellenic_pagan + if = { + limit = { + faith:hellenic_pagan = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + primary_title = { set_state_faith = faith:hellenic_pagan } + every_held_title = { + custom = custom.every_held_county + title_tier = county + set_county_faith = faith:hellenic_pagan + } + every_vassal = { + custom = custom.every_vassal + limit = { + NOT = { + any_held_title = { + is_head_of_faith = yes # you cannot convert the Ecumenical Patriarch, sorry + } + } + } + custom_tooltip = { + text = may_choose_to_convert_hellenic_desc + run_interaction = { # We use the same interaction as when creating a new faith to keep a consistent behaviour, since that is essentially what you're doing here + interaction = ask_for_conversion_interaction + actor = root + recipient = this + execute_threshold = accept + } + } + } + custom_tooltip = { + text = ep3_roman_restoration.household_gods_tenet + set_global_variable = household_gods_tenet_unlocked + } + custom_tooltip = { + text = uses_custom_caesar_flavourization_tt + set_variable = uses_custom_caesar_flavourization + } + } + + option = { # Easy Mode + name = ep3_roman_restoration.0100.b + custom_tooltip = ep3_roman_restoration.easy_mode + } + + after = { + create_roman_empire_scripted_effect = yes + set_nickname_effect = { NICKNAME = nick_the_glorious } + # Send narrative fluff to other players (if any). + every_player = { + limit = { this != root } + trigger_event = ep3_roman_restoration.0101 + } + } +} + +# Some chucklefuck restored Rome +ep3_roman_restoration.0101 = { + type = character_event + window = fullscreen_event + title = roman_restoration.0002.t + desc = { + desc = ep3_roman_restoration.0101.intro + first_valid = { + triggered_desc = { + trigger = { scope:scoped_emperor.primary_title.state_faith ?= faith:hellenic_pagan } + desc = ep3_roman_restoration.0101.hellenic + } + triggered_desc = { + trigger = { scope:scoped_emperor.primary_title.state_faith ?= faith:orthodox } + desc = ep3_roman_restoration.0101.orthodox + } + desc = ep3_roman_restoration.0101.fallback + } + desc = ep3_roman_restoration.0101.outro + } + theme = emperor + override_background = { reference = ep3_fullscreen_restore_rome } + + immediate = { + #Same-faith non-empire tier rulers are over-awed. + if = { + limit = { faith = scope:scoped_emperor.primary_title.state_faith } + play_music_cue = "mx_cue_epic_sacral_moment" + } + #Otherwise, this is a tacit statement of imperial threat. + else = { play_music_cue = "mx_cue_combat_2" } + } + + option = { + name = ep3_roman_restoration.0101.a + } +} + + +####################################### +### POST-ROME DIFFICULTIES + +# Your inefficient governor messed up, causing mass loss in popular opinion. Can you fix it? +ep3_roman_restoration.0300 = { + type = character_event + title = ep3_roman_restoration.0300.t + desc = ep3_roman_restoration.0300.desc + theme = emperor + + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:inefficient_governor + animation = shock + } + + cooldown = { years = 20 } + + immediate = { + ordered_vassal = { + limit = { + is_governor = yes + is_ai = yes + } + order_by = { # Mostly sort by governor efficiency + value = governor_efficiency + multiply = -10 + # Prefer governors with a larger realm size for more difficulty + add = sub_realm_size + } + save_scope_as = inefficient_governor + } + custom_tooltip = ep3_roman_restoration.0300.efficiency + } + + option = { # Stewardship Challenge + name = ep3_roman_restoration.0300.a + duel = { + skill = stewardship + value = excellent_skill_level + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_roman_restoration.0300.a.success + left_icon = scope:inefficient_governor + right_icon = scope:inefficient_governor.primary_title + + scope:inefficient_governor = { + every_sub_realm_county = { + custom = ep3_roman_restoration.0300.every_sub_realm_county + add_county_modifier = { + modifier = restore_rome_recuperated_county_opinion_modifier + years = 10 + } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_roman_restoration.0300.a.failure + left_icon = scope:inefficient_governor + right_icon = scope:inefficient_governor.primary_title + + scope:inefficient_governor = { + every_sub_realm_county = { + custom = ep3_roman_restoration.0300.every_sub_realm_county + add_county_modifier = { + modifier = restore_rome_devastated_county_opinion_modifier + years = 10 + } + } + } + } + } + } + } + + option = { # Fire the Governor + name = ep3_roman_restoration.0300.b + change_influence = massive_influence_loss + save_scope_as = actor + scope:inefficient_governor = { + save_scope_as = recipient + primary_title = { save_scope_as = landed_title } + } + save_scope_value_as = { + name = hook + value = no + } + scope:inefficient_governor = { + every_sub_realm_county = { + custom = ep3_roman_restoration.0300.every_sub_realm_county + add_county_modifier = { + modifier = restore_rome_recuperated_county_opinion_modifier + years = 10 + } + } + force_step_down_landed_titles = yes + } + } + + option = { # Opt-Out + name = ep3_roman_restoration.0300.c + + scope:inefficient_governor = { + every_sub_realm_county = { + custom = ep3_roman_restoration.0300.every_sub_realm_county + add_county_modifier = { + modifier = restore_rome_lowered_county_opinion_modifier + years = 10 + } + } + } + + stress_impact = { + base = medium_stress_impact_loss + lazy = minor_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } +} + +# Every 10-30 years, a random kingdom will raid you +ep3_roman_restoration.0500 = { + type = character_event + title = ep3_roman_restoration.0500.t + desc = ep3_roman_restoration.0500.desc + theme = emperor + + left_portrait = { + character = root + animation = emotion_thinking_scepter + } + + right_portrait = { + character = scope:marshal + animation = inspect_weapon + } + + lower_center_portrait = scope:target_kingdom + + cooldown = { years = { 10 30 } } + + trigger = { + exists = cp:councillor_marshal + any_neighboring_top_liege_realm_owner = { + is_ai = yes + is_at_war = no + primary_title = { tier >= tier_kingdom } + NOR = { + is_allied_to = root + any_truce_target = { this = root } + has_relation_friend = root + has_relation_lover = root + } + any_top_realm_border_county = { + any_neighboring_county = { + holder.top_liege = root + NOT = { + title_province = { has_province_modifier = recently_looted_modifier } + } + } + } + } + } + + immediate = { + cp:councillor_marshal = { save_scope_as = marshal } + ordered_neighboring_top_liege_realm_owner = { + limit = { + is_ai = yes + is_at_war = no + primary_title = { tier >= tier_kingdom } + any_top_realm_border_county = { + any_neighboring_county = { + holder.top_liege = root + NOT = { + title_province = { has_province_modifier = recently_looted_modifier } + } + } + } + } + order_by = { + value = 1 + add = { # inverted opinion since we're looking for ppl who hate you + value = "opinion(root)" + multiply = -1 + } + if = { + limit = { can_raid_trigger = yes } + add = 50 + } + } + save_scope_as = target_kingdom + } + scope:target_kingdom = { + random_top_realm_border_county = { + limit = { + any_neighboring_county = { + holder.top_liege = root + NOT = { + title_province = { has_province_modifier = recently_looted_modifier } + } + } + } + random_neighboring_county = { + limit = { + holder.top_liege = root + NOT = { + title_province = { has_province_modifier = recently_looted_modifier } + } + } + save_scope_as = target_county + } + } + } + } + + option = { + name = ep3_roman_restoration.0500.a + } + + after = { + scope:target_kingdom = { + start_war = { + cb = ep3_roman_empire_border_war + target = root + target_title = scope:target_county + } + } + } +} + +# Special Bubonic Plague Spawns - Commented out and disabled because this is not very fun +#ep3_roman_restoration.0510 = { +# hidden = yes +# +# immediate = { +# random_realm_county = { +# limit = { exists = holder } +# holder = { save_scope_as = target_holder } +# save_scope_as = infected_county +# title_province = { +# save_scope_as = target_province +# create_epidemic_outbreak = { +# type = bubonic_plague +# intensity = major +# save_scope_as = epidemic +# } +# } +# } +# trigger_event = epidemic_events.1100 +# } +#} + +# Mongol Invasion Spawns +ep3_roman_restoration.0520 = { + scope = none + hidden = yes + + trigger = { + NOR = { + has_global_variable = mongols_have_appeared + any_player = { + THIS = culture:mongol.culture_head + realm_size >= 100 + } + } + } + + immediate = { + set_global_variable = { + name = mongols_have_appeared + value = yes + } + debug_log = "Mongols appeared!" + debug_log_date = yes + spawn_temujin_character_effect = yes + scope:temujin = { + save_scope_as = story_owner + create_story = story_mongol_invasion + } + } +} diff --git a/events/dlc/ep3/ep3_story_cycle_harrying_of_the_north_events.txt b/events/dlc/ep3/ep3_story_cycle_harrying_of_the_north_events.txt new file mode 100644 index 00000000..1473fd4d --- /dev/null +++ b/events/dlc/ep3/ep3_story_cycle_harrying_of_the_north_events.txt @@ -0,0 +1,4666 @@ +namespace = ep3_story_cycle_harrying + +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣿⣀⣀⣤⣴⡞⠀⠀⣀⣴⣿⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣸⣿⠿⣿⣿⢿⣿⣷⣶⣿⣿⣿⡟⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⡏⠀⠈⠁⠘⠿⠟⠛⢉⣽⣿⠃⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⡘⠃⠀⠀⠀⠀⠀⠀⢰⣿⣿⣋⣀⡄⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣾⣿⣿⣦⠀⠀⠀⠀⠀⣀⣬⣿⣿⡿⠋⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣿⣿⣷⣄⠀⣀⣀⣻⣿⣏⣉⠀⠀⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣦⡙⢿⣿⣿⣿⣿⣿⡷⠈⠙⠛⠛⠋⠁⠀⠀⠀⠀ +#⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣄⠙⢿⠿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +#⠀⠀⠀⠀⠀⠀⣠⣿⣿⣿⣿⣿⡿⠛⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +#⠀⠀⠀⠀⢠⣾⣿⣿⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +#⠀⠀⢀⣴⣿⣿⣿⠿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +#⠀⠠⣿⣿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ +#⠀⠀⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ + +### Maintenance events +## 0001-0999 +# by Nick Meredith + +# Harrying ends - the Aethelings are no more +ep3_story_cycle_harrying.0001 = { + type = character_event + title = ep3_story_cycle_harrying.0001.t + desc = { + desc = ep3_story_cycle_harrying.0001.desc + first_valid = { + triggered_desc = { + trigger = { + this = scope:ruler_england + } + desc = ep3_story_cycle_harrying.0001.desc.william + } + triggered_desc = { + trigger = { + this = character:90028 + } + desc = ep3_story_cycle_harrying.0001.desc.hereward + } + desc = ep3_story_cycle_harrying.0001.desc.therest + } + } + + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + trigger = { root != this } + character = scope:ruler_england + animation = personality_honorable + } + + immediate = { + title:k_england.holder = { + save_scope_as = ruler_england + } + title:k_england = { + save_scope_as = england + } + custom_tooltip = harrying_end + } + + option = { # Hereward + name = ep3_story_cycle_harrying.0001.a + + trigger = { + this = character:90028 + } + + stress_impact = { + base = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { #William + name = ep3_story_cycle_harrying.0001.b + + trigger = { + this = scope:ruler_england + } + + stress_impact = { + base = major_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { #All others + name = ep3_story_cycle_harrying.0001.b + + trigger = { + NOR = { + this = scope:ruler_england + this = character:90028 + } + } + + ai_chance = { + base = 100 + } + } +} + +# Harrying ends - an Aetheling rules +ep3_story_cycle_harrying.0002 = { + type = character_event + title = ep3_story_cycle_harrying.0002.t + desc = { + desc = ep3_story_cycle_harrying.0002.desc + first_valid = { + triggered_desc = { + trigger = { + this = scope:ruler_england + } + desc = ep3_story_cycle_harrying.0002.desc.ruler + } + triggered_desc = { + trigger = { + this = character:90028 + } + desc = ep3_story_cycle_harrying.0002.desc.hereward + } + desc = ep3_story_cycle_harrying.0002.desc.therest + } + } + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + trigger = { root != this } + character = scope:ruler_england + animation = personality_honorable + } + + immediate = { + title:k_england.holder = { + save_scope_as = ruler_england + } + title:k_england = { + save_scope_as = england + } + custom_tooltip = harrying_end + } + + option = { # Hereward + name = ep3_story_cycle_harrying.0002.a + + trigger = { + this = character:90028 + } + + stress_impact = { + base = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { # Ruler + name = ep3_story_cycle_harrying.0002.b + + trigger = { + this = scope:ruler_england + } + + stress_impact = { + base = major_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { #All others + name = ep3_story_cycle_harrying.0002.b + + trigger = { + NOR = { + this = scope:ruler_england + this = character:90028 + } + } + + ai_chance = { + base = 100 + } + } +} + +# Harrying ends - neither Normans nor Aethelings rule +ep3_story_cycle_harrying.0003 = { + type = character_event + title = ep3_story_cycle_harrying.0003.t + desc = ep3_story_cycle_harrying.0003.desc + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + trigger = { root != this } + character = scope:ruler_england + animation = personality_honorable + } + + immediate = { + title:k_england.holder = { + save_scope_as = ruler_england + } + title:k_england = { + save_scope_as = england + } + custom_tooltip = harrying_end + } + + option = { # Hereward + name = ep3_story_cycle_harrying.0003.a + + trigger = { + this = character:90028 + } + + stress_impact = { + base = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { # Ruler + name = ep3_story_cycle_harrying.0003.b + + trigger = { + this = scope:ruler_england + } + + stress_impact = { + base = major_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { #All others + name = ep3_story_cycle_harrying.0003.b + + trigger = { + NOR = { + this = scope:ruler_england + this = character:90028 + } + } + + ai_chance = { + base = 100 + } + } +} + +# Harrying ends - 100 years have passed +ep3_story_cycle_harrying.0004 = { + type = character_event + title = ep3_story_cycle_harrying.0004.t + desc = { + desc = ep3_story_cycle_harrying.0004.desc + first_valid = { + triggered_desc = { + trigger = { + this = scope:ruler_england + } + desc = ep3_story_cycle_harrying.0004.desc.ruler + } + triggered_desc = { + trigger = { + this.culture = culture:anglo_saxon + } + desc = ep3_story_cycle_harrying.0004.desc.anglo_saxon + } + desc = ep3_story_cycle_harrying.0004.desc.therest + } + } + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + trigger = { root != this } + character = scope:ruler_england + animation = personality_honorable + } + + immediate = { + title:k_england.holder = { + save_scope_as = ruler_england + } + title:k_england = { + save_scope_as = england + } + custom_tooltip = harrying_end + } + + option = { # Anglo-Saxons + name = ep3_story_cycle_harrying.0004.a + + trigger = { + this.culture = culture:anglo_saxon + } + + stress_impact = { + base = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { # Ruler + name = ep3_story_cycle_harrying.0004.b + + trigger = { + this = scope:ruler_england + } + + stress_impact = { + base = major_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { #All others + name = ep3_story_cycle_harrying.0004.b + + trigger = { + NOR = { + this = scope:ruler_england + this.culture = culture:anglo_saxon + } + } + + ai_chance = { + base = 100 + } + } +} + +################################################## +# William Events +# by Nick Meredith +# 1000-1999 +################################################## + +#Burn crops +#Burn down villages +#Construct castles +#Improve infrastructure North/South +#Revoke titles +#Slaughter supposed conspirators +#Build spy network +#Rebuild villages in grids +#Decide the fate of a captive Aetheling +#Receive a desperate northerner +#Mutilate a captive + +# Burn crops +ep3_story_cycle_harrying.1000 = { + type = character_event + title = ep3_story_cycle_harrying.1000.t + desc = ep3_story_cycle_harrying.1000.desc + theme = harrying + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:aetheling + animation = anger + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + any_vassal = { + culture = culture:anglo_saxon + highest_held_title_tier > tier_county + } + } + + immediate = { + random_vassal = { + limit = { + culture = culture:anglo_saxon + highest_held_title_tier > tier_county + } + save_scope_as = aetheling + } + scope:aetheling.primary_title = { + save_scope_as = crop_duchy + } + ep3_harrying_widget_setup_effect = yes + + save_scope_as = root_scope + } + + option = { #Burn all the crops + name = ep3_story_cycle_harrying.1000.a + + add_dread = medium_dread_gain + + add_tyranny = minor_tyranny_gain + + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + + scope:crop_duchy = { + change_county_control = 15 + every_direct_de_jure_vassal_title = { + custom = every_county_in_duchy_aetheling + add_county_modifier = { + modifier = all_crops_burned + years = 5 + } + } + } + + culture = { + change_cultural_acceptance = { + target = scope:aetheling.culture + value = minor_cultural_acceptance_loss + desc = harrying_of_the_north_tt + } + } + + stress_impact = { + wrathful = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + vengeful = minor_stress_impact_loss + compassionate = major_stress_impact_gain + forgiving = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + } + } + + option = { #Burn most of them, leaving enough for subsistence + name = ep3_story_cycle_harrying.1000.b + + add_dread = minor_dread_gain + + scope:crop_duchy = { + change_county_control = 5 + every_direct_de_jure_vassal_title = { + custom = every_county_in_duchy_aetheling + add_county_modifier = { + modifier = crops_burned + years = 5 + } + } + } + + culture = { + change_cultural_acceptance = { + target = scope:aetheling.culture + value = miniscule_cultural_acceptance_loss + desc = harrying_of_the_north_tt + } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + vengeful = miniscule_stress_impact_loss + wrathful = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_compassion = -0.5 + } + } + } + + option = { #Exact a levy of crops + name = ep3_story_cycle_harrying.1000.c + + add_treasury_or_gold = medium_treasury_or_gold_value + + scope:crop_duchy = { + change_county_control = -10 + every_direct_de_jure_vassal_title = { + custom = every_county_in_duchy_aetheling + add_county_modifier = { + modifier = crop_levy + years = 5 + } + } + } + + every_vassal = { + custom = every_minority_vassal + vassal_stance = minority + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + + stress_impact = { + sadistic = medium_stress_impact_gain + vengeful = major_stress_impact_gain + compassionate = miniscule_stress_impact_loss + forgiving = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_compassion = 1 + } + } + } + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +# Build on the Great North Road +ep3_story_cycle_harrying.1005 = { + type = character_event + title = ep3_story_cycle_harrying.1005.t + desc = ep3_story_cycle_harrying.1005.desc + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:marshal + animation = chancellor + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + any_vassal = { + culture = culture:anglo_saxon + } + OR = { #Ensure owns at least one county on the route + has_title = title:c_middlesex + has_title = title:c_hertfordshire + has_title = title:c_bedford + has_title = title:c_northamptonshire + has_title = title:c_leicestershire + has_title = title:c_nottinghamshire + has_title = title:c_west_riding + } + exists = cp:councillor_marshal + } + + immediate = { + every_county_in_region = { + region = world_europe_west_britannia + limit = { # All counties along the Great North Road...ish + OR = { + this = title:c_middlesex + this = title:c_hertfordshire + this = title:c_bedford + this = title:c_northamptonshire + this = title:c_leicestershire + this = title:c_nottinghamshire + this = title:c_west_riding + } + OR = { + holder = root + holder.top_liege = root + } + } + add_to_list = great_north_road + } + cp:councillor_marshal = { + save_scope_as = marshal + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Rebuild and stock the road with armed guards + name = ep3_story_cycle_harrying.1005.a + + remove_treasury_or_gold = major_treasury_or_gold_value + + every_in_list = { + list = great_north_road + custom = ep3_story_cycle_harrying.1005.a.tt + add_county_modifier = { + modifier = ep3_gnr_guards_modifier + years = 15 + } + } + + stress_impact = { + craven = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_loss + lazy = minor_stress_impact_gain + greedy = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_greed = -1 + } + } + } + + option = { #Rebuild the road + name = ep3_story_cycle_harrying.1005.b + + remove_treasury_or_gold = major_treasury_or_gold_value + + every_in_list = { + list = great_north_road + custom = ep3_story_cycle_harrying.1005.a.tt + add_county_modifier = { + modifier = ep3_gnr_modifier + years = 10 + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_gain + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + } + } + } + + option = { #Destroy the northern parts of the road; deny them the passage + name = ep3_story_cycle_harrying.1005.c + + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + + every_in_list = { + list = great_north_road + custom = ep3_story_cycle_harrying.1005.c.tt1 + limit = { + holder.culture = culture:anglo_saxon + } + add_county_modifier = { + modifier = ep3_gnr_negative_modifier + years = 10 + } + } + + stress_impact = { + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + greedy = miniscule_stress_impact_loss + vengeful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + just = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + } + } + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +# Decide the fate of a captive Aetheling +ep3_story_cycle_harrying.1010 = { + type = character_event + title = ep3_story_cycle_harrying.1010.t + desc = ep3_story_cycle_harrying.1010.desc + theme = harrying + override_background = { reference = dungeon } + left_portrait = { + character = root + animation = spymaster + } + right_portrait = { + character = scope:captured + animation = prisondungeon + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + any_prisoner = { + is_ai = yes + is_adult = yes + culture = culture:anglo_saxon + is_lowborn = no + } + } + + immediate = { + save_scope_as = actor + random_prisoner = { + limit = { + is_ai = yes + is_adult = yes + culture = culture:anglo_saxon + is_lowborn = no + } + save_scope_as = captured + save_scope_as = recipient + } + save_scope_as = root_scope #for tooltip + ep3_harrying_widget_setup_effect = yes + } + + option = { #Kill him + name = ep3_story_cycle_harrying.1010.a + + execute_prisoner_effect = { + VICTIM = scope:captured + EXECUTIONER = root + } + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + + stress_impact = { + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + vengeful = miniscule_stress_impact_loss + compassionate = major_stress_impact_gain + just = major_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_honor = -1 + } + } + } + + option = { #Mutilate and release him + name = ep3_story_cycle_harrying.1010.b + + add_dread = miniscule_dread_gain + + disfigure_recipient_effect = yes + torture_blind_castrate_disfigure_opinion_effect = { VERB = disfigured } + + stress_impact = { + sadistic = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + just = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_honor = -0.5 + } + } + } + + option = { #You will be a Norman, now + name = ep3_story_cycle_harrying.1010.c + + duel = { + skills = { diplomacy intrigue } + target = scope:captured + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.1010.c.success + + show_as_tooltip = { #To resolve in follow-up, due to learn language scheme + scope:captured = { + set_culture = culture:norman + } + } + + trigger_event = { + id = ep3_story_cycle_harrying.1011 + days = { 1 2 } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.1010.c.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.1010.c.failure + + add_prestige = medium_prestige_loss + every_vassal = { + vassal_stance = glory_hound + custom = every_glory_hound_vassal + add_opinion = { + modifier = tournament_mocked_opinion #Re-using + target = root + opinion = -15 + } + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_compassion = 1 + } + } + } + + option = { #Let them rot + name = ep3_story_cycle_harrying.1010.d + + add_character_modifier = { + modifier = ep3_honourable_jailor_modifier + years = 15 + } + + stress_impact = { + base = miniscule_stress_impact_loss + sadistic = major_stress_impact_gain + compassionate = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_compassion = 1 + } + } + } + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#Follow-up on acceptance +ep3_story_cycle_harrying.1011 = { + type = character_event + title = ep3_story_cycle_harrying.1011.t + desc = { + desc = ep3_story_cycle_harrying.1011.desc + triggered_desc = { + trigger = { + scope:spouse_courtier = { + exists = this + } + } + desc = ep3_story_cycle_harrying.1011.desc.spouse + } + } + theme = harrying + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:captured + animation = happiness + } + lower_center_portrait = { + trigger = { + scope:spouse_courtier = { + exists = this + } + } + character = scope:spouse_courtier + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + immediate = { + if = { #Ugly if/else block starts here! + limit = { + scope:captured = { + can_marry_common_trigger = yes + is_betrothed = no + } + } + if = { #Grab a courtier + limit = { + any_courtier = { + can_marry_character_trigger = { CHARACTER = scope:captured } + sex_opposite_of = scope:captured + culture = culture:norman + age > scope:captured.age_plus_10 + age < scope:captured.age_minus_10 + } + } + random_courtier = { + limit = { + sex_opposite_of = scope:captured + can_marry_character_trigger = { CHARACTER = scope:captured } + culture = culture:norman + age > scope:captured.age_plus_10 + age < scope:captured.age_minus_10 + } + weight = { + base = 1 + modifier = { + factor = 10 + is_lowborn = no #Always good to do noble marriages where possible + } + modifier = { + factor = 5 + is_close_or_extended_family_of = root #And what nobler than the king? + } + } + save_scope_as = spouse_courtier + } + } + else = { #Just in case + hidden_effect = { + create_character = { + location = root.location + random_traits = yes + faith = root.faith + culture = culture:norman + age = scope:captured.age + gender_female_chance = { + if = { + limit = { scope:captured = { is_female = yes } } + add = 0 + } + else = { add = 100 } + } + save_scope_as = spouse_courtier + } + } + } + } + + if = { #Just to ensure she's actually part of your court, if generated + limit = { + scope:spouse_courtier = { + exists = this + NOT = { + is_courtier_of = root + } + } + } + hidden_effect = { + add_courtier = scope:spouse_courtier + } + } + + ep3_harrying_widget_setup_effect = yes + + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + } + + option = { #You'll get married to a nice Norman lad/lass! Also learn the language + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:spouse_courtier = { + exists = this + } + } + desc = ep3_story_cycle_harrying.1011.a.spouselanguage + } + desc = ep3_story_cycle_harrying.1011.a.language + } + } + } + + scope:captured = { + if = { + limit = { + scope:spouse_courtier = { + exists = this + } + } + marry = scope:spouse_courtier + } + if = { + limit = { + can_start_scheme = { + type = learn_language + target_character = root + } + } + start_scheme = { + type = learn_language + target_character = root + } + } + release_from_prison = yes + if = { + limit = { + highest_held_title_tier = tier_unlanded + } + change_liege = { + liege = root + change = scope:change + } + add_courtier = scope:captured + } + } + + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:captured + opinion = 35 + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_compassion = 1 + } + } + } + + option = { #Go now, and be free + name = ep3_story_cycle_harrying.1011.b + + scope:captured = { + release_from_prison = yes + if = { + limit = { + highest_held_title_tier = tier_unlanded + } + change_liege = { + liege = root + change = scope:change + } + } + } + + stress_impact = { + diligent = miniscule_stress_impact_loss + patient = miniscule_stress_impact_loss + lazy = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:captured + opinion = 50 + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_compassion = 0.5 + ai_honor = 1 + } + } + } + + after = { + hidden_effect = { + scope:captured = { + set_culture = culture:norman + } + } + ep3_harrying_widget_clear_effect = yes + } +} + +scripted_trigger harrying_1015_trigger = { + culture = culture:anglo_saxon + highest_held_title_tier > tier_county + any_held_title = { + tier = tier_county + is_landless_type_title = no + any_county_province = { + has_holding = yes + num_buildings > 0 + } + } +} + +# Punish a village +ep3_story_cycle_harrying.1015 = { + type = character_event + title = ep3_story_cycle_harrying.1015.t + desc = ep3_story_cycle_harrying.1015.desc + theme = harrying + override_background = { reference = burning_building } + override_effect_2d = smoke + left_portrait = { + character = root + animation = rage + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + any_vassal = { + harrying_1015_trigger = yes + } + } + + immediate = { + random_vassal = { + limit = { + harrying_1015_trigger = yes + } + save_scope_as = vassal + random_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + any_county_province = { + has_holding = yes + num_buildings > 0 + } + } + random_county_province = { + limit = { + has_holding = yes + num_buildings > 0 + } + save_scope_as = offending_village + every_neighboring_province = { add_to_list = resettlement_villages } + hidden_effect = { destroy_random_building_variable_effect = yes } + } + } + } + save_scope_as = root_scope #for tooltip + ep3_harrying_widget_setup_effect = yes + } + + option = { #Burn it to cinders + name = ep3_story_cycle_harrying.1015.a + + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + + scope:offending_village = { + destroy_random_building_effect = yes + add_province_modifier = { + modifier = ep3_smouldering_village + years = 15 + } + } + + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + compassionate = major_stress_impact_gain + just = major_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_honor = -1 + } + } + } + + option = { #Resettle the residents + name = ep3_story_cycle_harrying.1015.b + trigger = { + any_in_list = { + list = resettlement_villages + count >= 1 + } + } + + scope:offending_village = { + add_province_modifier = { + modifier = ep3_resettled_village + years = 15 + } + } + + every_in_list = { + list = resettlement_villages + custom = all_neighbouring_villages + add_province_modifier = { + modifier = ep3_population_boost + years = 15 + } + } + + stress_impact = { + sadistic = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + just = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_honor = -0.5 + } + } + } + + option = { #Leave it be + name = ep3_story_cycle_harrying.1015.c + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + add_tyranny = minor_tyranny_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_compassion = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +################################################## +# Aetheling Events +# by Nick Meredith +# 2000-2999 +################################################## + +#Appeal for Scottish help +#Bleddyn allies with Anglo-Saxons +#Welsh raids into Herefordshire +#Send messages to Europe for knights +#Stoke flames across the country + +# Recruit levies from starving men +ep3_story_cycle_harrying.2000 = { + type = character_event + title = ep3_story_cycle_harrying.2000.t + desc = { + desc = ep3_story_cycle_harrying.2000.desc + triggered_desc = { + trigger = { + NOR = { + has_trait = callous + has_trait = sadistic + } + } + desc = ep3_story_cycle_harrying.2000.notcallous + } + } + theme = harrying + override_background = { reference = alley_day } + left_portrait = { + character = root + animation = sadness + } + right_portrait = { + character = scope:starving_man + animation = beg + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + location = root.capital_province + exists = root.cp:councillor_marshal + } + + immediate = { + location = { + save_scope_as = location + } + top_liege = { + save_scope_as = william + } + hidden_effect = { + random_dummy_gender_effect = yes + create_character = { + template = new_warrior_character + location = root.location + culture = culture:anglo_saxon + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = starving_man + } + scope:starving_man = { + change_current_weight = -50 + } + } + root.cp:councillor_marshal = { + save_scope_as = marshal + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #All of you; you're all hired. + name = ep3_story_cycle_harrying.2000.a + + remove_short_term_gold = major_gold_value + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + add_prestige = medium_prestige_gain + + scope:location.county = { + add_county_modifier = { + modifier = ep3_paid_grains + years = 10 + } + } + + trigger_event = { + id = ep3_story_cycle_harrying.2001 + days = { 3 6 } + } + + stress_impact = { + greedy = medium_stress_impact_gain + callous = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + generous = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + } + } + + option = { #I'll hire you, fine gentleman + name = ep3_story_cycle_harrying.2000.b + + remove_short_term_gold = minor_gold_value + + add_courtier = scope:starving_man + + stress_impact = { + greedy = minor_stress_impact_gain + callous = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + generous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_compassion = 1 + } + } + } + + option = { #Maybe I can try intervening myself? + name = ep3_story_cycle_harrying.2000.c + + duel = { + skill = stewardship + value = decent_skill_rating + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2000.c.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.2000.c.success + + ep3_decrease_pacification_effect = yes + + scope:location.county = { + add_county_modifier = { + modifier = ep3_innovative_farming_techniques + years = 10 + } + } + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2000.c.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.2000.c.failure + + add_prestige = minor_prestige_loss + ep3_decrease_resistance_effect = yes + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + generous = minor_stress_impact_gain + lazy = minor_stress_impact_gain + diligent = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#You gain event troops! +ep3_story_cycle_harrying.2001 = { + type = letter_event + opening = ep3_story_cycle_harrying.2001.opening + desc = ep3_story_cycle_harrying.2001.desc + sender = scope:marshal + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + add_stress = minor_stress_loss + } + + option = { # Wooo! + name = ep3_story_cycle_harrying.2001.a + + spawn_army = { + name = event_troop_default_name + levies = 1000 + location = scope:location + origin = scope:location + } + + ai_chance = { + base = 100 + } + } + + option = { # Reject them for now + name = ep3_story_cycle_harrying.2001.b + + flavor = ep3_story_cycle_harrying.2001.b.tt + + scope:location.county = { + add_county_modifier = { + modifier = ep3_surplus_manpower + years = 10 + } + } + + ai_chance = { + base = 100 + } + } +} + +# Recruit murderers to kill Normans +ep3_story_cycle_harrying.2005 = { + type = character_event + title = ep3_story_cycle_harrying.2005.t + desc = ep3_story_cycle_harrying.2005.desc + theme = harrying + override_background = { reference = armory } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:murderer + animation = spymaster + } + lower_center_portrait = { + character = scope:spymaster + } + cooldown = { years = 20 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + exists = root.cp:councillor_spymaster + title:k_england.holder = { + culture = culture:norman + any_vassal = { + culture = culture:norman + capital_province = { + geographical_region = world_europe_west_britannia + } + } + } + } + + immediate = { + location = { + save_scope_as = location + } + top_liege = { + save_scope_as = william + } + scope:william = { + random_vassal = { + limit = { + culture = culture:norman + capital_province = { + geographical_region = world_europe_west_britannia + } + } + capital_province.county = { + save_scope_as = willy_vassal + } + } + } + hidden_effect = { + create_character = { + template = ep3_murderer_template + location = root.location + culture = culture:anglo_saxon + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = murderer + } + } + root.cp:councillor_spymaster = { + save_scope_as = spymaster + } + scope:william = { + random_close_family_member = { + limit = { + location = { geographical_region = world_europe_west_britannia } + } + save_scope_as = willy_family + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Perhaps we need to aim higher... + name = ep3_story_cycle_harrying.2005.a + + trigger = { + scope:william = { + any_close_family_member = { + location = { geographical_region = world_europe_west_britannia } + } + } + } + + add_internal_flag = special + + pay_short_term_gold = { + target = scope:murderer + gold = medium_gold_value + } + + start_scheme = { type = murder target_character = scope:willy_family } + + custom_tooltip = diplomacy_family.2250.b.tt + hidden_effect = { + random_scheme = { + type = murder + limit = { + scheme_target_character = scope:willy_family + } + add_scheme_modifier = { + type = extra_success_chance_modifier + } + } + } + + hidden_effect = { + scope:murderer = { + silent_disappearance_effect = yes + } + } + + stress_impact = { + vengeful = medium_stress_impact_loss + sadistic = minor_stress_impact_loss + forgiving = medium_stress_impact_gain + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + option = { #Go off and murder some Normans, wouldja? + name = ep3_story_cycle_harrying.2005.b + + flavor = ep3_story_cycle_harrying.2005.b.tt + + pay_short_term_gold = { + target = scope:murderer + gold = medium_gold_value + } + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + scope:willy_vassal = { + add_county_modifier = { + modifier = ep3_murderers_loose + years = 20 + } + } + + hidden_effect = { + scope:murderer = { + silent_disappearance_effect = yes + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + generous = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + } + } + } + + option = { #Well, you might be handy to have around... + name = ep3_story_cycle_harrying.2005.c + + add_courtier = scope:murderer + + stress_impact = { + lazy = minor_stress_impact_loss + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +# Gather support amongst the minor nobles +ep3_story_cycle_harrying.2010 = { + type = character_event + title = ep3_story_cycle_harrying.2010.t + desc = ep3_story_cycle_harrying.2010.desc + theme = harrying + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = chancellor + } + cooldown = { years = 15 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + title:k_england.holder = { + culture = culture:norman + any_duchy = { + count > 1 + } + } + } + + immediate = { + top_liege = { + save_scope_as = william + } + scope:william = { + every_sub_realm_county = { #Choose first one of two random counties + limit = { + holder = { + culture = culture:norman + } + } + add_to_list = county_list + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Rally general support + name = ep3_story_cycle_harrying.2010.a + + duel = { + skill = diplomacy + value = decent_skill_rating + + 10 = { #It really works + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2010.a.critsuccess + send_interface_toast = { + type = event_toast_effect_good + title = ep3_story_cycle_harrying.2010.a.critsuccess + left_icon = root + + ep3_increase_resistance_large_effect = yes + } + } + + 50 = { #It works + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = ep3_story_cycle_harrying.2010.a.success + send_interface_toast = { + type = event_toast_effect_good + title = ep3_story_cycle_harrying.2010.a.success + left_icon = root + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + } + } + + 50 = { #It doesn't work + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = ep3_story_cycle_harrying.2010.a.failure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_story_cycle_harrying.2010.a.failure + left_icon = root + + add_prestige = medium_prestige_loss + } + } + + 10 = { #Message is intercepted and more troops sent + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2010.a.critfailure + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_story_cycle_harrying.2010.a.critfailure + left_icon = root + + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + content = medium_stress_impact_gain + greedy = miniscule_stress_impact_gain + brave = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + option = { #Appeal for extra tax revenue + name = ep3_story_cycle_harrying.2010.b + + duel = { + skills = { stewardship diplomacy } + value = decent_skill_rating + + 50 = { #Yes! + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2010.b.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.2010.b.success + left_icon = root + + add_gold = medium_gold_value + } + } + 50 = { #...no + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2010.b.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.2010.b.failure + left_icon = root + + add_prestige = minor_prestige_loss + ep3_decrease_resistance_effect = yes + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + option = { #Tell them to save their strength + name = ep3_story_cycle_harrying.2010.c + + + scope:william = { + every_sub_realm_county = { + limit = { + is_in_list = county_list + } + custom = county_list_tt + random = { + chance = 5 + add_county_modifier = { + modifier = ep3_counties_restless_modifier + years = 15 + } + } + } + } + + stress_impact = { + lazy = minor_stress_impact_loss + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#Forge documents strengthening Aetheling positions +ep3_story_cycle_harrying.2015 = { + type = character_event + title = ep3_story_cycle_harrying.2015.t + desc = ep3_story_cycle_harrying.2015.desc + theme = harrying + override_background = { reference = study } + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:chancellor + animation = chancellor + } + lower_center_portrait = { + trigger = { + scope:other_vassal = { + is_alive = yes + } + } + character = scope:other_vassal + } + cooldown = { years = 15 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + primary_title.tier >= tier_duchy + } + + immediate = { + top_liege = { + save_scope_as = william + } + primary_title = { + save_scope_as = primary_title + } + if = { + limit = { + scope:william = { + any_vassal = { + this != root + culture = culture:anglo_saxon + } + } + } + scope:william = { + random_vassal = { + limit = { + this != root + culture = culture:anglo_saxon + } + save_scope_as = other_vassal + primary_title = { + save_scope_as = other_vassal_primary_title + } + } + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Ensure your titles cannot be revoked + name = ep3_story_cycle_harrying.2015.a + + duel = { + skills = { diplomacy intrigue } + target = scope:william + + 60 = { #Yes! + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2015.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.2015.a.success + left_icon = root + right_icon = scope:william + + if = { + limit = { + vassal_contract_obligation_level_can_be_decreased = title_revocation_rights + } + vassal_contract_set_obligation_level = { + type = title_revocation_rights + level = 1 + } + } + else = { + if = { + limit = { + can_add_hook = { + target = scope:william + type = fabrication_hook + } + } + add_hook = { + target = scope:william + type = fabrication_hook + } + } + } + + if = { + limit = { + scope:other_vassal = { + is_alive = yes + vassal_contract_obligation_level_can_be_decreased = title_revocation_rights + } + } + scope:other_vassal = { + vassal_contract_set_obligation_level = { + type = title_revocation_rights + level = 1 + } + } + } + } + } + 40 = { #...no + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.2015.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.2015.a.failure + left_icon = root + right_icon = scope:william + + if = { + limit = { + can_add_hook = { + target = scope:william + type = favor_hook + } + } + add_hook = { + target = scope:william + type = favor_hook + } + } + if = { + limit = { + scope:other_vassal = { + is_alive = yes + } + } + scope:other_vassal = { + add_hook = { + target = scope:william + type = favor_hook + } + } + } + } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + content = medium_stress_impact_gain + deceitful = miniscule_stress_impact_loss + brave = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + + option = { #Reduce Feudal Levies/Taxes + name = ep3_story_cycle_harrying.2015.b + + if = { + limit = { + vassal_contract_obligation_level_can_be_decreased = feudal_government_taxes + } + vassal_contract_decrease_obligation_level = feudal_government_taxes + } + if = { + limit = { + vassal_contract_obligation_level_can_be_decreased = feudal_government_levies + } + vassal_contract_decrease_obligation_level = feudal_government_levies + } + if = { + limit = { + scope:other_vassal = { + is_alive = yes + } + } + scope:other_vassal = { + if = { + limit = { + vassal_contract_obligation_level_can_be_decreased = feudal_government_taxes + } + vassal_contract_decrease_obligation_level = feudal_government_taxes + } + if = { + limit = { + vassal_contract_obligation_level_can_be_decreased = feudal_government_levies + } + vassal_contract_decrease_obligation_level = feudal_government_levies + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + generous = medium_stress_impact_gain + just = miniscule_stress_impact_gain + arbitrary = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + option = { #Gain Marcher Lord status + name = ep3_story_cycle_harrying.2015.c + + vassal_contract_set_obligation_level = { + type = special_contract + level = 2 + } + + scope:other_vassal = { + vassal_contract_set_obligation_level = { + type = special_contract + level = 2 + } + } + + stress_impact = { + lazy = minor_stress_impact_loss + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +################################################## +# Hereward Events +# by Nick Meredith +# 3000-3999 +################################################## + +#Rob local church +#William offers to parcel out Cambridgeshire to you +#Call in Danish help +#Heist an artifact from a local noble +#Downgrade local building +#Travel to other areas of the country to gather support + +# Rob local church +ep3_story_cycle_harrying.3000 = { + type = character_event + title = ep3_story_cycle_harrying.3000.t + desc = ep3_story_cycle_harrying.3000.desc + theme = harrying + override_background = { reference = temple } + left_portrait = { + character = root + animation = scheme + } + right_portrait = { + character = scope:bishop + animation = beg + } + artifact = { + target = scope:newly_created_artifact + position = lower_center_portrait + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + location = { save_temporary_scope_as = current_temp } + scope:current_temp = { + any_neighboring_province = { + has_holding_type = church_holding + } + } + } + + immediate = { + location = { + random_neighboring_province = { + limit = { + has_holding_type = church_holding + } + save_scope_as = neighboring_church + } + } + hidden_effect = { + create_character = { + template = priest_character_template + location = scope:neighboring_church + save_scope_as = bishop + } + random_dummy_gender_effect = yes + scope:bishop = { + create_artifact_brooch_effect = { + OWNER = scope:bishop + SMITH = scope:dummy_gender + } + } + scope:newly_created_artifact = { + set_artifact_name = artifact_church_saint_brooch_name + set_artifact_description = artifact_church_saint_brooch_description + add_artifact_modifier = artifact_monthly_piety_4_modifier + add_artifact_modifier = artifact_same_faith_opinion_4_modifier + add_artifact_modifier = artifact_clergy_opinion_penalty_5_modifier + set_artifact_rarity = famed + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Relics, you say? + name = ep3_story_cycle_harrying.3000.a + + add_piety = medium_piety_loss + + add_prestige = minor_prestige_loss + + scope:newly_created_artifact = { + set_owner = root + } + + scope:neighboring_church = { + add_province_modifier = { + modifier = ep3_church_bereft + years = 15 + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -1 + } + } + } + + option = { #This gold is needed for the war effort, but we'll leave any relics + name = ep3_story_cycle_harrying.3000.b + + flavor = ep3_story_cycle_harrying.3000.b.tt + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + add_gold = medium_gold_value + + stress_impact = { + calm = miniscule_stress_impact_loss + greedy = miniscule_stress_impact_loss + generous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_compassion = -0.5 + } + } + } + + option = { #I am a man of god, I would never. + name = ep3_story_cycle_harrying.3000.c + + add_piety = medium_piety_gain + + add_character_modifier = { + modifier = ep3_man_of_god + years = 10 + } + + stress_impact = { + greedy = medium_stress_impact_gain + generous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +# Interdict supply lines +ep3_story_cycle_harrying.3005 = { + type = character_event + title = ep3_story_cycle_harrying.3005.t + desc = ep3_story_cycle_harrying.3005.desc + theme = harrying + override_background = { reference = ep2_hunt_foggy_forest } + override_effect_2d = fog + left_portrait = { + character = root + animation = inspect_weapon + } + right_portrait = { + character = scope:norman_soldier + animation = survey + } + artifact = { + target = scope:newly_created_artifact + position = lower_right_portrait + } + + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + } + + immediate = { + location = { + save_scope_as = location + } + random_dummy_gender_effect = yes + create_character = { + template = new_warrior_character + location = root.location + culture = culture:norman + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = norman_soldier + } + hidden_effect = { + scope:norman_soldier = { + create_artifact = { #Scripted effect didn't like this, so custom weapon it is + name = norman_sword_name + description = stolen_norman_sword_description + type = sword + visuals = sword + modifier = artifact_prowess_4_modifier + modifier = artifact_knight_effectiveness_3_modifier + modifier = artifact_hard_casualty_modifier_4_modifier + rarity = masterwork + save_scope_as = newly_created_artifact + } + } + } + global_var:harrying_of_the_north.story_owner = { + save_scope_as = william + random_vassal = { + limit = { + location = { geographical_region = world_europe_west_britannia } #To ensure they're not getting sent to Normandy + } + primary_title = { + save_scope_as = vassal_county + } + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Grab the equipment for yourself + name = ep3_story_cycle_harrying.3005.a + + duel = { + skills = { martial prowess } + target = scope:norman_soldier + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3005.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3005.a.success + + ep3_decrease_pacification_effect = yes + + add_character_modifier = { + modifier = ep3_stolen_equipment + years = 5 + } + + scope:newly_created_artifact = { + set_owner = root + set_artifact_name = stolen_norman_sword_name + } + + scope:vassal_county = { + add_county_modifier = { + modifier = ep3_missing_supplies + years = 15 + } + } + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3005.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3005.a.failure + + add_prestige = medium_prestige_loss + increase_wounds_no_death_effect = { REASON = battle } + every_knight = { + custom = every_knight + add_opinion = { + modifier = botched_ambush_opinion + target = root + opinion = -15 + } + } + } + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 0.5 + } + } + } + + option = { #Take the equipment for allies + name = ep3_story_cycle_harrying.3005.b + + flavor = ep3_story_cycle_harrying.3005.b.tt + + duel = { + skills = { martial prowess } + target = scope:norman_soldier + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3005.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3005.a.success + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + ep3_decrease_pacification_effect = yes + + scope:vassal_county = { + add_county_modifier = { + modifier = ep3_missing_supplies + years = 15 + } + } + global_var:harrying_of_the_north.story_owner = { + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + custom = every_anglo_vassal + add_character_modifier = { + modifier = ep3_redistributed_equipment + years = 5 + } + } + } + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3005.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3005.a.failure + + add_prestige = medium_prestige_loss + increase_wounds_no_death_effect = { REASON = battle } + every_knight = { + custom = every_knight + add_opinion = { + modifier = botched_ambush_opinion + target = root + opinion = -15 + } + } + } + } + } + + stress_impact = { + arrogant = minor_stress_impact_gain + greedy = minor_stress_impact_gain + generous = medium_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_energy = 0.5 + } + } + } + + option = { #Sabotage the road ahead + name = ep3_story_cycle_harrying.3005.c + + flavor = ep3_story_cycle_harrying.3005.c.tt + + scope:location = { + add_province_modifier = { + modifier = ep3_sabotaged_roads + years = 10 + } + } + + scope:vassal_county = { + add_county_modifier = { + modifier = ep3_delayed_supplies + years = 10 + } + } + + stress_impact = { + craven = medium_stress_impact_loss + brave = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + scope:norman_soldier = { + silent_disappearance_effect = yes + } + } +} + +scripted_trigger ep3_story_cycle_harrying_3010_ambushable_noble_trigger = { + location = { + geographical_region = world_europe_west_britannia + duchy = root.location.duchy #Same duchy as Hereward + } + culture = culture:norman + is_theocratic_lessee = no #No dueling priests! + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = $WILLIAM$ } + NOT = { has_character_flag = hereward_ambushed } +} + +#Ambush Norman noble +ep3_story_cycle_harrying.3010 = { + type = character_event + title = ep3_story_cycle_harrying.3010.t + desc = ep3_story_cycle_harrying.3010.desc + theme = harrying + override_background = { reference = ep2_travel_bridge } + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:norman_noble + animation = aggressive_sword + } + artifact = { + target = scope:newly_created_artifact + position = lower_right_portrait + } + + cooldown = { years = 5 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + is_healthy = yes + global_var:harrying_of_the_north.story_owner = { + save_temporary_scope_as = william_temp + any_vassal_or_below = { + ep3_story_cycle_harrying_3010_ambushable_noble_trigger = { WILLIAM = scope:william_temp } + } + } + } + + immediate = { + location = { save_scope_as = location } + global_var:harrying_of_the_north.story_owner = { + save_scope_as = william + random_vassal_or_below = { + limit = { + ep3_story_cycle_harrying_3010_ambushable_noble_trigger = { WILLIAM = scope:william } + } + primary_title = { save_scope_as = noble_county } + save_scope_as = norman_noble + add_character_flag = hereward_ambushed + } + } + hidden_effect = { + random_dummy_gender_effect = yes + scope:norman_noble = { + create_artifact_ring_effect = { + OWNER = scope:norman_noble + SMITH = scope:dummy_gender + } + } + } + root = { save_scope_as = root_for_loc } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Fight them + name = ep3_story_cycle_harrying.3010.a + + custom_tooltip = ep3_story_cycle_harrying.3010.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:norman_noble + FIXED = no + FATALITY = always + LOCALE = ep2_travel_bridge + OUTPUT_EVENT = ep3_story_cycle_harrying.3011 + INVALIDATION_EVENT = fp1_yearly.2002 #Re-use this + } + + stress_impact = { + brave = medium_stress_impact_loss + wrathful = miniscule_stress_impact_loss + calm = miniscule_stress_impact_gain + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + option = { #Simply rob them + name = ep3_story_cycle_harrying.3010.b + + add_short_term_gold = medium_gold_value + + scope:newly_created_artifact = { + set_owner = root + } + + ep3_decrease_pacification_effect = yes + + stress_impact = { + brave = medium_stress_impact_gain + wrathful = miniscule_stress_impact_gain + calm = miniscule_stress_impact_loss + craven = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_energy = -0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#Followup, post-duel +ep3_story_cycle_harrying.3011 = { + type = character_event + title = ep3_story_cycle_harrying.3011.t + desc = ep3_story_cycle_harrying.3011.desc + theme = harrying + override_background = { reference = ep2_travel_bridge } + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:saxon_soldier_1 + animation = thinking + } + lower_center_portrait = { + character = scope:saxon_soldier_2 + } + + cooldown = { years = 5 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + is_healthy = yes + } + + immediate = { + ep3_harrying_widget_setup_effect = yes + ep3_decrease_pacification_effect = yes + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + scope:newly_created_artifact = { + set_owner = root + } + hidden_effect = { + random_dummy_gender_effect = yes + create_character = { + template = new_warrior_character + location = root.location + culture = culture:anglo_saxon + faith = root.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = saxon_soldier_1 + } + create_character = { + template = new_warrior_character + location = root.location + culture = culture:anglo_saxon + faith = root.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = saxon_soldier_2 + } + } + } + + option = { #Would you boys like a job? + name = ep3_story_cycle_harrying.3011.a + + add_courtier = scope:saxon_soldier_1 + add_courtier = scope:saxon_soldier_2 + + stress_impact = { + forgiving = medium_stress_impact_loss + vengeful = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_vengefulness = -1 + } + } + } + + option = { #Let them return to their families + name = ep3_story_cycle_harrying.3011.b + + hidden_effect = { + scope:saxon_soldier_1 = { + silent_disappearance_effect = yes + } + scope:saxon_soldier_2 = { + silent_disappearance_effect = yes + } + } + + add_character_modifier = { + modifier = ep3_defender_of_families + years = 10 + } + + stress_impact = { + generous = miniscule_stress_impact_loss + greedy = miniscule_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#Call in Danish help +ep3_story_cycle_harrying.3015 = { + type = character_event + title = ep3_story_cycle_harrying.3015.t + desc = ep3_story_cycle_harrying.3015.desc + theme = harrying + left_portrait = { + character = root + animation = writing + } + right_portrait = { + character = scope:danish_king + animation = thinking + } + cooldown = { years = 50 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + is_healthy = yes + title:k_denmark.holder = { + is_at_war = no + is_available_healthy_ai_adult = yes + } + title:k_england.holder = { + is_ai = yes #Just to ensure we don't screw players over + } + } + + immediate = { + location = { + save_scope_as = location + } + title:k_denmark.holder = { + save_scope_as = danish_king + } + hidden_effect = { + create_character = { + location = scope:danish_king.location + template = new_warrior_character + faith = scope:danish_king.faith + culture = scope:danish_king.culture + gender_female_chance = root_soldier_female_chance + save_scope_as = knight_1 + } + create_character = { + location = scope:danish_king.location + template = new_berserker_character + faith = scope:danish_king.faith + culture = scope:danish_king.culture + gender_female_chance = root_soldier_female_chance + save_scope_as = knight_2 + } + create_character = { + location = scope:danish_king.location + template = new_commander_character + faith = scope:danish_king.faith + culture = scope:danish_king.culture + gender_female_chance = root_soldier_female_chance + save_scope_as = knight_3 + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Send them a letter begging for them to be your new liege + name = ep3_story_cycle_harrying.3015.a + + duel = { + skill = diplomacy + value = decent_skill_rating + + 50 = { #He agrees + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3015.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3015.a.success + left_icon = root + right_icon = scope:danish_king + + scope:danish_king = { + add_unpressed_claim = title:k_england + } + create_alliance = { + target = scope:danish_king + allied_through_owner = root + allied_through_target = scope:danish_king + } + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + ep3_decrease_pacification_effect = yes + add_stress = medium_stress_loss + } + } + + 50 = { #He disagrees + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3015.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3015.a.failure + + add_prestige = miniscule_prestige_loss + ep3_increase_pacification_effect = { AMOUNT = harrying_medium_increase_value } + } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + brave = miniscule_stress_impact_loss + content = medium_stress_impact_gain + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + option = { #Send them a letter begging for soldiers + name = ep3_story_cycle_harrying.3015.b + + duel = { + skills = { diplomacy martial } + value = decent_skill_rating + + 75 = { #He agrees + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3015.b.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3015.b.success + left_icon = root + right_icon = scope:danish_king + + add_character_flag = soldiers_accepted_flag + + add_courtier = scope:knight_1 + add_courtier = scope:knight_2 + add_courtier = scope:knight_3 + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + } + } + + 25 = { #He disagrees + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3015.b.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3015.b.failure + + add_prestige = miniscule_prestige_loss + add_stress = minor_stress_gain + } + } + } + + stress_impact = { + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + } + } + } + + option = { #We fight this battle alone + name = ep3_story_cycle_harrying.3015.c + + add_character_modifier = { + modifier = ep3_standing_alone_modifier + years = 10 + } + + every_courtier_or_guest = { + custom = every_follower_custom + add_opinion = { + target = root + modifier = impressed_opinion + opinion = 25 + } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_greed = -1 + ai_energy = -0.5 + } + } + } + + after = { + if = { + limit = { + NOT = { + has_character_flag = soldiers_accepted_flag + } + } + scope:knight_1 = { silent_disappearance_effect = yes } + scope:knight_2 = { silent_disappearance_effect = yes } + scope:knight_3 = { silent_disappearance_effect = yes } + } + ep3_harrying_widget_clear_effect = yes + } +} + +#Travel to another area of the country to intimidate a Norman sympathiser +ep3_story_cycle_harrying.3020 = { + type = character_event + title = ep3_story_cycle_harrying.3020.t + desc = ep3_story_cycle_harrying.3020.desc + theme = harrying + left_portrait = { + character = root + animation = inspect_weapon + } + right_portrait = { + character = scope:willy_vassal + animation = dismissal + } + cooldown = { years = 10 } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + is_healthy = yes + title:k_england.holder = { + save_temporary_scope_as = willy_temp + any_vassal = { + culture = culture:anglo_saxon + capital_province = { geographical_region = world_europe_west_britannia } + highest_held_title_tier > tier_barony + opinion = { + target = scope:willy_temp + value >= neutral_opinion + } + any_courtier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + culture = culture:anglo_saxon + } + } + } + } + + immediate = { + location = { + save_scope_as = location + } + title:k_england.holder = { + save_scope_as = willy + random_vassal = { + limit = { + culture = culture:anglo_saxon + capital_province = { geographical_region = world_europe_west_britannia } + highest_held_title_tier > tier_barony + opinion = { + target = scope:willy + value >= neutral_opinion + } + any_courtier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + culture = culture:anglo_saxon + } + } + save_scope_as = willy_vassal + location = { + save_scope_as = willy_vassal_capital + } + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Travel there, raise hell + name = ep3_story_cycle_harrying.3020.a + + custom_tooltip = ep3_story_cycle_harrying.3020.a.tt + + start_travel_plan = { + destination = scope:willy_vassal_capital + players_use_planner = no + on_arrival_destinations = last + on_arrival_event = ep3_story_cycle_harrying.3021 + return_trip = no + } + + stress_impact = { + ambitious = minor_stress_impact_loss + brave = miniscule_stress_impact_loss + content = medium_stress_impact_gain + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + option = { #Leave it + name = ep3_story_cycle_harrying.3020.b + + ep3_decrease_resistance_effect = yes + + stress_impact = { + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = 0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#You arrive and ambush him +ep3_story_cycle_harrying.3021 = { + type = character_event + title = ep3_story_cycle_harrying.3021.t + desc = ep3_story_cycle_harrying.3021.desc + theme = harrying + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:willy_vassal + animation = beg + } + cooldown = { years = 5 } + override_background = { reference = alley_night } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_available = yes + is_healthy = yes + title:k_england.holder = { + save_temporary_scope_as = willy_temp + any_vassal = { + culture = culture:anglo_saxon + capital_province = { geographical_region = world_europe_west_britannia } + highest_held_title_tier > tier_barony + opinion = { + target = scope:willy_temp + value >= neutral_opinion + } + location = root.location + any_courtier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + culture = culture:anglo_saxon + } + } + } + } + + immediate = { + save_scope_as = root_for_loc + title:k_england.holder = { + save_scope_as = willy + random_vassal = { + limit = { + culture = culture:anglo_saxon + capital_province = { geographical_region = world_europe_west_britannia } + highest_held_title_tier > tier_barony + opinion = { + target = scope:willy + value >= neutral_opinion + } + location = root.location + any_courtier = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + culture = culture:anglo_saxon + } + } + save_scope_as = willy_vassal + } + } + scope:willy_vassal = { + random_courtier = { + limit = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + culture = culture:anglo_saxon + } + save_scope_as = knight_1 + } + } + hidden_effect = { + create_character = { + template = new_warrior_character + location = scope:willy_vassal.location + culture = scope:willy_vassal.culture + faith = scope:willy_vassal.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = knight_2 + } + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Kill him and steal his stuff + name = ep3_story_cycle_harrying.3021.a + + custom_tooltip = ep3_story_cycle_harrying.3021.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:willy_vassal + FIXED = no + FATALITY = always + LOCALE = ep2_travel_bridge + OUTPUT_EVENT = ep3_story_cycle_harrying.3022 + INVALIDATION_EVENT = fp1_yearly.2002 #Re-use this + } + + stress_impact = { + calm = medium_stress_impact_gain + just = minor_stress_impact_gain + wrathful = minor_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = 1 + ai_compassion = -1 + } + } + } + + option = { #Reason with him + name = ep3_story_cycle_harrying.3021.b + + duel = { + skill = diplomacy + target = scope:willy_vassal + + 50 = { #You reason successfully + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3021.b.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3021.b.success + left_icon = root + right_icon = scope:willy_vassal + + scope:willy_vassal = { + add_opinion = { + target = scope:willy + modifier = revanchist_opinion + opinion = -120 + } + } + scope:willy = { + add_character_modifier = { + modifier = ep3_disgruntled_vassals_modifier + years = 10 + } + } + ep3_decrease_pacification_effect = yes + } + } + + 50 = { #You are unable to reason with him + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3021.b.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3021.b.failure + + add_stress = miniscule_stress_gain + ep3_decrease_resistance_effect = yes + } + } + } + + stress_impact = { + calm = minor_stress_impact_loss + just = miniscule_stress_impact_loss + wrathful = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + option = { #Threaten him + name = ep3_story_cycle_harrying.3021.c + + duel = { + skill = prowess + target = scope:willy_vassal + + 60 = { #Your threats work + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3021.c.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3021.c.success + left_icon = root + right_icon = scope:willy_vassal + + scope:willy_vassal = { + add_opinion = { + target = scope:willy + modifier = revanchist_opinion + opinion = -120 + } + } + scope:willy = { + add_dread = major_dread_loss + add_character_modifier = { + modifier = ep3_disgruntled_vassals_modifier + years = 10 + } + } + ep3_decrease_pacification_effect = yes + } + } + + 40 = { #Your threats don't work + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3021.c.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3021.c.failure + + add_dread = minor_dread_loss + add_prestige = minor_prestige_loss + ep3_decrease_resistance_effect = yes + } + } + } + + stress_impact = { + ambitious = miniscule_stress_impact_loss + vengeful = miniscule_stress_impact_loss + content = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -0.5 + } + } + } + + option = { #Take some loyalists and leave him to it + name = ep3_story_cycle_harrying.3021.d + + flavor = ep3_story_cycle_harrying.3021.d.flavour + + add_courtier = scope:knight_1 + add_courtier = scope:knight_2 + + ep3_decrease_resistance_effect = yes + + stress_impact = { + patient = miniscule_stress_impact_loss + impatient = minor_stress_impact_gain + just = miniscule_stress_impact_loss + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +#Duel resolution +ep3_story_cycle_harrying.3022 = { + type = character_event + title = ep3_story_cycle_harrying.3022.t + desc = ep3_story_cycle_harrying.3022.desc + theme = harrying + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:willy_vassal + animation = dead + } + artifact = { + target = scope:newly_created_artifact + position = lower_left_portrait + } + artifact = { + target = scope:traitors_head_artifact + position = lower_right_portrait + } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + ep3_harrying_widget_setup_effect = yes + capital_province = { save_scope_as = domicile } + + random_dummy_gender_effect = yes + + add_gold = { 50 100 } + + hidden_effect = { + scope:willy_vassal = { + create_artifact_brooch_effect = { + OWNER = scope:willy_vassal + SMITH = scope:dummy_gender + } + } + create_artifact = { + name = traitors_head + description = traitors_head_description + type = miscellaneous + visuals = small_box + durability = 10 + max_durability = 10 + decaying = yes + modifier = artifact_health_penalty_1_modifier + modifier = artifact_stress_gain_1_penalty_modifier + modifier = artifact_attraction_opinion_negative_2_modifier + creator = root + rarity = famed + save_scope_as = traitors_head_artifact + } + } + + scope:newly_created_artifact = { + set_owner = root + } + } + + option = { #Send his head to William + name = ep3_story_cycle_harrying.3022.a + + scope:traitors_head_artifact = { + set_owner = scope:willy + } + + scope:willy = { + add_character_modifier = { + modifier = ep3_life_threatened_modifier + years = 10 + } + } + + stress_impact = { + calm = minor_stress_impact_gain + just = minor_stress_impact_gain + wrathful = miniscule_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = 1 + ai_compassion = -1 + } + } + } + + option = { #Let everyone know what happens to turncoats + name = ep3_story_cycle_harrying.3022.b + + ep3_increase_resistance_large_effect = yes + + if = { + limit = { + scope:willy = { + any_sub_realm_duchy = { + count > 1 + holder.culture = culture:norman + } + } + } + scope:willy = { + random_sub_realm_duchy = { + limit = { + holder.culture = culture:norman + } + show_as_tooltip = { + add_county_modifier = { + modifier = ep3_impassioned_populace_modifier + years = 10 + } + } + hidden_effect = { + every_de_jure_county = { + add_county_modifier = { + modifier = ep3_impassioned_populace_modifier + years = 10 + } + } + } + save_scope_as = saved_duchy + } + random_sub_realm_duchy = { + limit = { + holder.culture = culture:norman + this != scope:saved_duchy + } + show_as_tooltip = { + add_county_modifier = { + modifier = ep3_impassioned_populace_modifier + years = 10 + } + } + hidden_effect = { + every_de_jure_county = { + add_county_modifier = { + modifier = ep3_impassioned_populace_modifier + years = 10 + } + } + } + } + } + } + + hidden_effect = { + destroy_artifact = scope:traitors_head_artifact + } + + stress_impact = { + calm = minor_stress_impact_loss + just = miniscule_stress_impact_loss + wrathful = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + start_travel_plan = { + destination = scope:domicile + players_use_planner = no + on_arrival_destinations = last + return_trip = no + } + } +} + +### EVENT CHAIN: +## Dealing with the Devil + +#William sends you a letter +ep3_story_cycle_harrying.3050 = { + type = letter_event + opening = ep3_story_cycle_harrying.3050.opening + desc = ep3_story_cycle_harrying.3050.desc + sender = scope:william + cooldown = { years = 100 } + + trigger = { + has_ep3_dlc_trigger = yes + is_ai = no #Don't even trigger this for AI + is_imprisoned = no + is_incapable = no + global_var:harrying_of_the_north.story_owner = { #King of England + is_ai = yes + OR = { #But needs to either have Cambridgeshire or be able to take it off a Norman vassal + has_title = title:c_cambridgeshire + any_vassal = { + culture = culture:norman + has_title = title:c_cambridgeshire + } + } + } + } + + immediate = { + global_var:harrying_of_the_north.story_owner = { + save_scope_as = william + capital_province.barony = { save_scope_as = london } + } + } + + option = { # Grimly accept + name = ep3_story_cycle_harrying.3050.a + + custom_tooltip = ep3_story_cycle_harrying.3050.a.tt + + every_character_active_contract = { invalidate_contract = yes } + + start_travel_plan = { + destination = scope:william.capital_province + players_use_planner = no + on_arrival_event = ep3_story_cycle_harrying.3051 + on_arrival_destinations = last + return_trip = no + } + + ai_chance = { #Just in case + base = 0 + } + } + + option = { # Refuse + name = ep3_story_cycle_harrying.3050.b + + reverse_add_opinion = { + target = scope:william + modifier = disrespect_opinion + opinion = -40 + } + + ai_chance = { + base = 100 + } + } +} + +#You meet William +ep3_story_cycle_harrying.3051 = { + type = character_event + title = ep3_story_cycle_harrying.3051.t + desc = ep3_story_cycle_harrying.3051.desc + theme = harrying + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:william + animation = thinking + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + location = { + save_scope_as = location + } + } + + option = { #Greet him cheekily + name = ep3_story_cycle_harrying.3051.a + + duel = { + skill = diplomacy + value = decent_skill_rating + + 70 = { #He's lets it slide + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3051.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3051.a.success + left_icon = root + right_icon = scope:william + + if = { + limit = { + scope:william = { + this = character:140 + } + } + scope:william = { + add_legitimacy = miniscule_legitimacy_loss + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + custom = every_anglo_vassal + add_opinion = { + modifier = bantered_with_the_bastard_opinion + target = root + opinion = 10 + } + } + } + } + else = { + scope:william = { + add_legitimacy = miniscule_legitimacy_loss + every_vassal = { + limit = { + culture = culture:anglo_saxon + } + custom = every_anglo_vassal + add_opinion = { + modifier = bantered_with_the_devil_opinion + target = root + opinion = 10 + } + } + } + } + } + } + + 30 = { #He's annoyed by your levity + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3051.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3051.a.failure + + add_prestige = miniscule_prestige_loss + } + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 0.5 + } + } + } + + option = { #Stay silent + name = ep3_story_cycle_harrying.3051.b + + flavor = ep3_story_cycle_harrying.3051.b.tt + + stress_impact = { + arrogant = minor_stress_impact_gain + greedy = minor_stress_impact_gain + generous = medium_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_energy = 0.5 + } + } + } + + + after = { + trigger_event = { + id = ep3_story_cycle_harrying.3052 + days = 1 + } + } +} + +#William offers to give you Cambridgeshire +ep3_story_cycle_harrying.3052 = { + type = character_event + title = ep3_story_cycle_harrying.3052.t + desc = ep3_story_cycle_harrying.3052.desc + theme = harrying + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:william + animation = disapproval + } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + location = { + save_scope_as = location + } + title:c_cambridgeshire = { save_scope_as = cambridgeshire } + father = { + save_scope_as = father + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Take his offer + name = ep3_story_cycle_harrying.3052.a + + flavor = ep3_story_cycle_harrying.3052.a.flavor + custom_tooltip = ep3_story_cycle_harrying.3052.a.tt + + add_prestige = medium_prestige_loss + + if = { + limit = { + scope:cambridgeshire.holder = { + this != scope:william + } + } + scope:cambridgeshire.holder = { + add_opinion = { + target = scope:william + modifier = angry_opinion + opinion = -40 + } + } + } + + trigger_event = { + id = ep3_story_cycle_harrying.3053 + days = 1 + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 0.5 + } + } + } + + option = { #Turn down his offer + name = ep3_story_cycle_harrying.3052.b + + ep3_increase_resistance_effect = { AMOUNT = harrying_medium_increase_value } + + reverse_add_opinion = { + target = scope:william + modifier = angry_opinion + opinion = -65 + } + + trigger_event = { + id = ep3_story_cycle_harrying.3054 + days = 1 + } + + stress_impact = { + arrogant = minor_stress_impact_gain + greedy = minor_stress_impact_gain + generous = medium_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_energy = 0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + } +} + +scripted_effect ep3_story_cycle_harrying_3053_process_vassalisation_effect = { + create_title_and_vassal_change = { + type = granted + save_scope_as = change + } + if = { + limit = { + scope:duke_norfolk ?= { is_vassal_of = scope:william } + } + change_liege = { + liege = scope:duke_norfolk + change = scope:change + } + add_truce_both_ways = { + character = scope:william + years = 100 + name = fp3_landed_zanj_reason #Re-using this + } + add_truce_both_ways = { + character = scope:duke_norfolk + years = 100 + name = fp3_landed_zanj_reason #Re-using this + } + } + else = { + change_liege = { + liege = scope:william + change = scope:change + } + add_truce_both_ways = { + character = scope:william + years = 100 + name = fp3_landed_zanj_reason #Re-using this + } + } + resolve_title_and_vassal_change = scope:change +} + +#You accept his offer +ep3_story_cycle_harrying.3053 = { + type = character_event + title = ep3_story_cycle_harrying.3053.t + desc = ep3_story_cycle_harrying.3053.desc + theme = harrying + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:william + animation = disapproval + } + lower_right_portrait = scope:duke_norfolk + cooldown = { years = 10 } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + scope:cambridgeshire.duchy.holder ?= { save_scope_as = duke_norfolk } + } + + option = { #Recant your decision + name = ep3_story_cycle_harrying.3053.a + + add_prestige = medium_prestige_gain + + trigger_event = { + id = ep3_story_cycle_harrying.3054 + days = 1 + } + + ai_chance = { + base = 100 + } + } + + option = { #Accept + name = ep3_story_cycle_harrying.3053.b + + custom_tooltip = ep3_story_cycle_harrying.3053.b.tt + + create_title_and_vassal_change = { + type = granted + save_scope_as = change + } + scope:cambridgeshire = { + change_title_holder_include_vassals = { + holder = root + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + # We need to do this here to account for you already being duke tier. + show_as_tooltip = { ep3_story_cycle_harrying_3053_process_vassalisation_effect = yes } + save_scope_value_as = { + name = settled_option + value = yes + } + add_character_flag = hereward_settled_flag + + ep3_decrease_resistance_effect = yes + ep3_increase_pacification_large_effect = yes + + if = { + limit = { + has_nickname = nick_the_wake + } + remove_nickname = yes + } + + give_nickname = nick_iscariot + + remove_trait = the_wake + + start_travel_plan = { + destination = root.capital_province + players_use_planner = no + on_arrival_destinations = last + return_trip = no + } + + scope:william = { + add_stress = major_stress_loss + } + + ai_chance = { + base = 0 + } + } + + after = { + # We need to do this here to account for you already being duke tier. + hidden_effect = { + if = { + limit = { exists = scope:settled_option } + ep3_story_cycle_harrying_3053_process_vassalisation_effect = yes + } + } + } +} + +#You decline his offer +ep3_story_cycle_harrying.3054 = { + type = character_event + title = ep3_story_cycle_harrying.3054.t + desc = ep3_story_cycle_harrying.3054.desc + theme = harrying + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:william + animation = rage + } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + } + + immediate = { + location = { + save_scope_as = location + } + ep3_harrying_widget_setup_effect = yes + } + + option = { #Try to fight your way out + name = ep3_story_cycle_harrying.3054.a + + duel = { + skill = prowess + value = very_high_skill_rating + + 25 = { #You escape! + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3054.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3054.a.success + left_icon = root + + add_prestige = major_prestige_gain + + scope:william = { + add_prestige = major_prestige_loss + } + } + + start_travel_plan = { + destination = root.domicile.domicile_location + players_use_planner = no + on_arrival_destinations = last + return_trip = no + } + } + 75 = { #You are caught, beaten, and carted down to the cells + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3054.a.failure + + trigger_event = { + id = ep3_story_cycle_harrying.3055 + days = 1 + } + + send_interface_toast = { + title = ep3_story_cycle_harrying.3054.a.failure + + ep3_decrease_resistance_effect = yes + + add_prestige = medium_prestige_loss + + increase_wounds_no_death_effect = { REASON = fight } + + scope:william = { + imprison = { + target = root + type = dungeon + } + } + } + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + callous = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 0.5 + } + } + } + + option = { #Allow yourself to be taken to the dungeons + name = ep3_story_cycle_harrying.3054.b + + flavor = ep3_story_cycle_harrying.3054.b.tt + + ep3_decrease_resistance_effect = yes + + add_prestige = minor_prestige_loss + + scope:william = { + imprison = { + target = root + type = dungeon + } + } + + trigger_event = { + id = ep3_story_cycle_harrying.3055 + days = 1 + } + + stress_impact = { + arrogant = minor_stress_impact_gain + greedy = minor_stress_impact_gain + generous = medium_stress_impact_loss + humble = miniscule_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_energy = 0.5 + } + } + } + + after = { + ep3_harrying_widget_clear_effect = yes + # Since we sent custom imprisonment events, we want to block the default ones. + hidden_effect = { + add_character_flag = { + flag = block_imprisonment_event + days = 2 + } + } + } +} + +#You are thrown in the dungeon +ep3_story_cycle_harrying.3055 = { + type = character_event + title = ep3_story_cycle_harrying.3055.t + desc = ep3_story_cycle_harrying.3055.desc + theme = harrying + override_background = { reference = dungeon } + left_portrait = { + character = root + animation = prisondungeon + outfit_tags = { beggar_rags } + } + right_portrait = { + character = scope:william + animation = schadenfreude + } + lower_center_portrait = { + character = scope:sympathetic_courtier + } + + trigger = { + has_ep3_dlc_trigger = yes + is_imprisoned = yes + imprisoner = scope:william + } + + immediate = { + if = { + limit = { + scope:william = { + any_courtier = { + culture = culture:anglo_saxon + } + } + } + scope:william = { + random_courtier = { + limit = { + culture = culture:anglo_saxon + } + save_scope_as = sympathetic_courtier + } + } + } + else = { + hidden_effect = { + create_character = { + employer = scope:william + template = servant_character + gender_female_chance = 50 + culture = culture:anglo_saxon + faith = root.faith + save_scope_as = sympathetic_courtier + } + scope:william = { + add_courtier = scope:sympathetic_courtier + } + } + } + add_character_flag = harrying_imprisoned_flag + } + + option = { #You look around your cell + name = ep3_story_cycle_harrying.3055.a + + stress_impact = { + base = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + after = { + trigger_event = { + id = ep3_story_cycle_harrying.3056 + days = { 30 40 } + } + } +} + +# A mysterious letter appears +ep3_story_cycle_harrying.3056 = { + type = character_event + window = anonymous_letter_event + title = debug.0002.t + desc = ep3_story_cycle_harrying.3056.desc + theme = harrying + + trigger = { + has_ep3_dlc_trigger = yes + is_imprisoned = yes + imprisoner = scope:william + } + + option = { # A lifeline! + name = ep3_story_cycle_harrying.3056.a + + stress_impact = { + base = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + after = { + trigger_event = { + id = ep3_story_cycle_harrying.3057 + days = { 2 4 } + } + } +} + +#You are sprung free! +ep3_story_cycle_harrying.3057 = { + type = character_event + title = ep3_story_cycle_harrying.3057.t + desc = ep3_story_cycle_harrying.3057.desc + theme = harrying + override_background = { reference = alley_night } + + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:sympathetic_courtier + animation = survey + outfit_tags = { western_stealth_hood } + } + widget = { + gui = "event_window_widget_harrying" + container = "custom_widgets_container" + } + + trigger = { + has_ep3_dlc_trigger = yes + is_imprisoned = yes + imprisoner = scope:william + } + + immediate = { + ep3_harrying_widget_setup_effect = yes + } + + option = { #Come with me! + name = ep3_story_cycle_harrying.3057.a + + duel = { + skill = diplomacy + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3057.a.success + + send_interface_toast = { + title = ep3_story_cycle_harrying.3057.a.success + left_icon = root + right_icon = scope:sympathetic_courtier + + add_courtier = scope:sympathetic_courtier + + reverse_add_opinion = { + target = scope:sympathetic_courtier + modifier = pleased_opinion + opinion = 15 + } + + hidden_effect = { + start_travel_plan = { + destination = root.domicile.domicile_location + players_use_planner = no + on_arrival_destinations = last + return_trip = no + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = ep3_story_cycle_harrying.3057.a.failure + + send_interface_toast = { + title = ep3_story_cycle_harrying.3057.a.failure + left_icon = root + right_icon = scope:sympathetic_courtier + + add_stress = miniscule_stress_gain + } + } + } + + release_from_prison = yes #Used here for event order reasons + + ai_chance = { + base = 100 + } + } + + option = { #I will always remember you. + name = ep3_story_cycle_harrying.3057.b + + #scope:sympathetic_courtier = { #In case we ever wanna use him for something + # add_character_flag = sympathetic_courtier_flag + #} + + stress_impact = { + base = minor_stress_impact_loss + } + + release_from_prison = yes #Used here for event order reasons + + ai_chance = { + base = 100 + } + } + + after = { + start_travel_plan = { + destination = root.domicile.domicile_location + players_use_planner = no + on_arrival_destinations = last + return_trip = no + } + scope:sympathetic_courtier = { + add_stress = medium_stress_loss #Prevent errors + } + ep3_harrying_widget_clear_effect = yes + remove_character_flag = harrying_imprisoned_flag + } +} diff --git a/events/dlc/ep3/ep3_wedding_events.txt b/events/dlc/ep3/ep3_wedding_events.txt new file mode 100644 index 00000000..33860489 --- /dev/null +++ b/events/dlc/ep3/ep3_wedding_events.txt @@ -0,0 +1,2616 @@ +namespace = ep3_wedding + +################################################## +# #Banquet Phase +# 0001 - 003 Almost the Bride + +################################################## +# Almost the Bride +# by Jason Cantalini +# 0001 +################################################## + +scripted_trigger ep3_wedding_0001_flirter_trigger = { + save_temporary_scope_as = flirter_temp + #Shouldn't get the event multiple times with the same character + trigger_if = { + limit = { + root = { + has_variable = had_ep3_wedding_0001_var + } + } + root = { + var:had_ep3_wedding_0001_var = { + this = scope:flirter_temp + } + } + } + trigger_if = { + limit = { + has_variable = had_ep3_wedding_0001_var + } + var:had_ep3_wedding_0001_var = { + this = root + } + } + is_physically_able_ai_adult = yes + #Needs to be a member of the other family + OR = { + AND = { + root = scope:activity.special_guest:spouse_1 + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_1 + } + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = scope:activity.special_guest:spouse_2 + is_close_family_of = scope:activity.special_guest:spouse_1 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_2 + } + is_close_family_of = scope:activity.special_guest:spouse_1 + } + } + #Either willing to do adultery or not in relationship + might_cheat_on_every_partner_trigger = yes + is_attracted_to_gender_of = root + NOR = { + has_trait = chaste + has_trait = celibate + this = scope:activity.special_guest:spouse_1 + this = scope:activity.special_guest:spouse_2 + } +} + +scripted_trigger ep3_wedding_0001_pervert_trigger = { + OR = { + has_trait = lustful + has_trait = seducer + has_trait = rakish + is_deviant_trigger = yes + has_focus = intrigue_temptation_focus + has_trait = drunkard + has_activity_intent = woo_attendee_intent + } +} + +scripted_trigger ep3_wedding_0001_relative_ages_trigger = { + OR = { + #Both people aren't old + AND = { + age <= 55 + root = { + age <= 55 + } + } + #Both people are old + AND = { + age > 55 + root = { + age > 55 + } + } + #Root is old + AND = { + root = { + age > 55 + } + OR = { + age > 40 + is_deviant_trigger = yes + } + } + #Target is old + AND = { + root = { + OR = { + age > 40 + is_deviant_trigger = yes + } + } + age > 55 + } + } +} + +#A family member of someone getting married is flirting with you +ep3_wedding.0001 = { + type = activity_event + title = ep3_wedding.0001.t + desc = { + desc = ep3_wedding.0001.desc + first_valid = { + triggered_desc = { + trigger = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + desc = ep3_wedding.0001.desc_own_wedding + } + desc = ep3_wedding.0001.desc_guest + } + } + theme = wedding_banquet_activity + left_portrait = { + character = root + triggered_animation = { + trigger = { + drinks_alcohol_trigger = yes + } + animation = wedding_drunk + } + triggered_animation = { + trigger = { + drinks_alcohol_trigger = no + } + animation = admiration + } + } + right_portrait = { + character = scope:flirting_in_law + animation = dancing + } + lower_right_portrait = { + character = scope:other_family_spouse + } + lower_left_portrait = { + character = scope:same_family_spouse + } + + trigger = { + is_adult = yes + is_healthy = yes + #Prevent event happening back to back + NOT = { + has_character_flag = had_ep3_wedding_0001_flag + } + #Either has to be a player or is open to this shizz + might_cheat_on_every_partner_trigger = yes + OR = { + NOR = { + has_trait = chaste + has_trait = celibate + } + is_ai = no + } + OR = { + #Random flirting + scope:activity = { + any_attending_character = { + NOT = { + has_character_flag = had_ep3_wedding_0001 + } + ep3_wedding_0001_flirter_trigger = yes + #At least one person has to be horny + OR = { + ep3_wedding_0001_pervert_trigger = yes + attraction > medium_positive_attraction + root = { attraction > medium_positive_attraction } + root = { ep3_wedding_0001_pervert_trigger = yes } + } + ###incest check + OR = { + NOT = { is_close_family_of = root } + AND = { + ep3_wedding_0001_pervert_trigger = yes + root = { ep3_wedding_0001_pervert_trigger = yes } + } + } + root = { is_attracted_to_gender_of = prev } + NOT = { + attraction < 0 + } + ep3_wedding_0001_relative_ages_trigger = yes + } + } + #Being targeted by wooing + scope:activity = { + any_attending_character = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target = root + is_ai = yes + OR = { + AND = { + root = scope:activity.special_guest:spouse_1 + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_1 + } + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = scope:activity.special_guest:spouse_2 + is_close_family_of = scope:activity.special_guest:spouse_1 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_2 + } + is_close_family_of = scope:activity.special_guest:spouse_1 + } + } + } + } + #Targeting with wooing + AND = { + has_activity_intent = woo_attendee_intent + exists = scope:host.intent_target + scope:host.intent_target = { + ep3_wedding_0001_flirter_trigger = yes + ###incest check + OR = { + NOT = { is_close_family_of = root } + ep3_wedding_0001_pervert_trigger = yes + } + NOR = { + #Root is old + AND = { + root = { + age > 55 + } + OR = { + age < 40 + NOT = { is_deviant_trigger = yes } + } + + } + #Target is old + AND = { + root = { + OR = { + age < 40 + NOT = { is_deviant_trigger = yes } + } + } + age > 55 + } + } + } + } + } + } + + weight_multiplier = { + base = 1 + + # Weight up for pervs + modifier = { + add = 9 + ep3_wedding_0001_pervert_trigger = yes + NOR = { + has_trait = chaste + has_trait = celibate + } + } + modifier = { + add = 4 + OR = { + is_married = no + AND = { + is_male = yes + faith = { has_doctrine = doctrine_adultery_men_accepted } + } + AND = { + is_female = yes + faith = { has_doctrine = doctrine_adultery_women_accepted } + } + } + } + modifier = { + add = 2 + attraction > 0 + } + modifier = { + add = 2 + attraction >= 10 + } + modifier = { + add = 2 + attraction >= 25 + } + modifier = { + add = 2 + any_relation = { type = lover } + } + modifier = { + factor = 0.5 + OR = { + attraction < 0 + has_trait = chaste + has_trait = celibate + has_trait = devoted + AND = { + is_married = yes + ai_honor > medium_positive_ai_value + } + AND = { + is_married = yes + any_spouse = { + has_relation_soulmate = root + } + } + } + } + } + + immediate = { + if = { + limit = { + has_activity_intent = woo_attendee_intent + exists = scope:host.intent_target + scope:host.intent_target = { + ep3_wedding_0001_flirter_trigger = yes + ###incest check + OR = { + NOT = { is_close_family_of = root } + ep3_wedding_0001_pervert_trigger = yes + } + NOR = { + #Root is old + AND = { + root = { + age > 55 + } + OR = { + age < 40 + NOT = { is_deviant_trigger = yes } + } + + } + #Target is old + AND = { + root = { + OR = { + age < 40 + NOT = { is_deviant_trigger = yes } + } + } + age > 55 + } + } + } + } + scope:host.intent_target = { + save_scope_as = flirting_in_law + } + } + else_if = { + limit = { + scope:activity = { + any_attending_character = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target = root + is_ai = yes + OR = { + AND = { + root = scope:activity.special_guest:spouse_1 + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_1 + } + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = scope:activity.special_guest:spouse_2 + is_close_family_of = scope:activity.special_guest:spouse_1 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_2 + } + is_close_family_of = scope:activity.special_guest:spouse_1 + } + } + } + } + } + scope:activity = { + random_attending_character = { + limit = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target = root + is_ai = yes + OR = { + AND = { + root = scope:activity.special_guest:spouse_1 + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_1 + } + is_close_family_of = scope:activity.special_guest:spouse_2 + } + AND = { + root = scope:activity.special_guest:spouse_2 + is_close_family_of = scope:activity.special_guest:spouse_1 + } + AND = { + root = { + is_close_family_of = scope:activity.special_guest:spouse_2 + } + is_close_family_of = scope:activity.special_guest:spouse_1 + } + } + } + save_scope_as = flirting_in_law + } + } + } + else = { + scope:activity = { + random_attending_character = { + limit = { + ep3_wedding_0001_flirter_trigger = yes + NOT = { + has_character_flag = had_ep3_wedding_0001 + } + #At least one person has to be horny + OR = { + ep3_wedding_0001_pervert_trigger = yes + attraction > medium_positive_attraction + root = { attraction > medium_positive_attraction } + root = { ep3_wedding_0001_pervert_trigger = yes } + } + ###incest check + OR = { + NOT = { is_close_family_of = root } + AND = { + ep3_wedding_0001_pervert_trigger = yes + root = { ep3_wedding_0001_pervert_trigger = yes } + } + } + root = { is_attracted_to_gender_of = prev } + NOT = { + attraction < 0 + } + ep3_wedding_0001_relative_ages_trigger = yes + } + save_scope_as = flirting_in_law + } + } + } + scope:flirting_in_law = { + add_character_flag = { + flag = had_ep3_wedding_0001 + months = 3 + } + } + #Save the marrying person you ain't related to + if = { + limit = { + OR = { + root = scope:activity.special_guest:spouse_1 + AND = { + is_close_family_of = scope:activity.special_guest:spouse_1 + root != scope:activity.special_guest:spouse_2 + } + + } + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = other_family_spouse + } + } + if = { + limit = { + OR = { + root = scope:activity.special_guest:spouse_2 + AND = { + is_close_family_of = scope:activity.special_guest:spouse_2 + root != scope:activity.special_guest:spouse_1 + } + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = other_family_spouse + } + } + #If you're not getting married, save the marrying person you're related to + if = { + limit = { + is_close_family_of = scope:activity.special_guest:spouse_1 + NOR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + scope:activity.special_guest:spouse_1 = { + save_scope_as = same_family_spouse + } + } + if = { + limit = { + is_close_family_of = scope:activity.special_guest:spouse_2 + NOR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + scope:activity.special_guest:spouse_2 = { + save_scope_as = same_family_spouse + } + } + set_variable = { + name = had_ep3_wedding_0001_var + value = scope:flirting_in_law + months = 6 + } + add_character_flag = { + flag = had_ep3_wedding_0001_flag + days = 20 + } + } + + # I should really warn my beloved spouse/family member + option = { + name = { + trigger = { + NOR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + text = ep3_wedding.0001.a_non_spouse + } + name = { + trigger = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + text = ep3_wedding.0001.a_spouse + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + NOR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + desc = ep3_wedding.0001.a.flavor_non_spouse + } + desc = ep3_wedding.0001.a.flavor_spouse + } + } + trigger = { + OR = { + has_relation_friend = scope:other_family_spouse + has_relation_best_friend = scope:other_family_spouse + has_relation_lover = scope:other_family_spouse + has_relation_soulmate = scope:other_family_spouse + has_trait = loyal + has_trait = just + has_trait = honest + } + } + if = { + limit = { + NOT = { has_trait = loyal } + } + random = { + chance = 50 + modifier = { + OR = { + has_trait = honest + has_trait = just + has_trait = chaste + has_trait = compassionate + } + add = 40 + } + modifier = { + OR = { + has_trait = trusting + has_trait = humble + has_trait = content + } + NOR = { + has_trait = honest + has_trait = just + has_trait = chaste + has_trait = compassionate + } + add = 25 + } + modifier = { + OR = { + has_trait = arbitrary + has_trait = deceitful + has_trait = callous + has_trait = fickle + has_trait = lustful + has_trait = arrogant + } + add = -25 + } + add_trait = loyal + } + } + else = { + add_piety = medium_piety_gain + } + if = { + limit = { + NOR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + reverse_add_opinion = { + modifier = loyalty_opinion + target = scope:same_family_spouse + opinion = 20 + } + } + else = { + reverse_add_opinion = { + modifier = love_opinion + target = scope:other_family_spouse + opinion = 20 + } + } + + stress_impact = { + loyal = miniscule_stress_impact_loss + just = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + lustful = major_stress_impact_gain + arbitrary = medium_stress_impact_gain + fickle = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + modifier = { + add = 50 + has_relation_soulmate = scope:other_family_spouse + } + modifier = { + add = 50 + any_relation = { type = soulmate } + } + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = arbitrary + has_trait = fickle + has_trait = deceitful + } + } + } + } + + # HORNINESS ACTIVATED + option = { + name = ep3_wedding.0001.b + flavor = ep3_wedding.0001.b.flavor + + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + custom_tooltip = own_wedding_difficulty_tooltip + } + duel = { + skill = intrigue + value = { + value = mediocre_skill_rating + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + add = 7 + } + } + 50 = { #Success. + desc = ep3_wedding.0001.b.success.desc.tt + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 1 + #Fire sexy follow up + trigger_event = ep3_wedding.0002 + show_as_tooltip = { + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + add_intrigue_skill = 1 + add_intrigue_lifestyle_xp = medium_lifestyle_xp + + } + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + } + } + 10 = { #Succeed, but get caught + desc = ep3_wedding.0001.b.caught.desc.tt + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -9 + } + trigger = { + scope:other_family_spouse = { is_ai = yes } + } + min = 2 + modifier = { + add = 10 + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + modifier = { + add = 15 + intrigue <= medium_skill_rating + } + modifier = { + add = 15 + intrigue < average_skill_rating + } + modifier = { + add = 30 + intrigue < low_skill_rating + } + custom_tooltip = ep3_wedding.001.b.got_caught + show_as_tooltip = { + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + } + + #Fire tragically sexy followup + trigger_event = ep3_wedding.0003 + } + 40 = { #Fail. + desc = ep3_wedding.0001.b.fail.desc.tt + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + min = 1 + modifier = { + add = -25 + scope:flirting_in_law = { + opinion = { + target = root + value >= 80 + } + } + } + modifier = { + add = -25 + scope:flirting_in_law = { + opinion = { + target = root + value >= 40 + } + } + } + modifier = { + add = 25 + scope:flirting_in_law = { + opinion = { + target = root + value <= 0 + } + } + } + modifier = { + add = 25 + scope:flirting_in_law = { + opinion = { + target = root + value <= -40 + } + } + } + modifier = { + add = 25 + scope:flirting_in_law = { + opinion = { + target = root + value <= -80 + } + } + } + modifier = { + add = 10 + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + scope:other_family_spouse = { + is_ai = no + } + } + modifier = { + add = 25 + scope:other_family_spouse = { + is_ai = no + } + } + modifier = { + add = 15 + intrigue <= medium_skill_rating + scope:other_family_spouse = { + is_ai = no + } + } + modifier = { + add = 15 + intrigue < average_skill_rating + scope:other_family_spouse = { + is_ai = no + } + } + modifier = { + add = 30 + intrigue < low_skill_rating + scope:other_family_spouse = { + is_ai = no + } + } + + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_wedding.0001.b.fail.desc.tt + left_icon = scope:flirting_in_law + + add_stress = minor_stress_gain + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:flirting_in_law + opinion = -10 + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:other_family_spouse + opinion = -30 + } + } + } + } + } + + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + stress_impact = { + fickle = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + impatient = minor_stress_impact_loss + chaste = massive_stress_impact_gain + just = massive_stress_impact_gain + patient = major_stress_impact_gain + honest = massive_stress_impact_gain + compassionate = major_stress_impact_gain + shy = minor_stress_impact_gain + } + } + else = { + stress_impact = { + fickle = minor_stress_impact_loss + arrogant = miniscule_stress_impact_loss + impatient = minor_stress_impact_loss + chaste = major_stress_impact_gain + just = medium_stress_impact_gain + honest = medium_stress_impact_gain + shy = minor_stress_impact_gain + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_honor = -1 + } + modifier = { + add = 100 + ep3_wedding_0001_pervert_trigger = yes + } + modifier = { + add = -100 + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + modifier = { + add = -50 + OR = { + has_trait = shy + intrigue <= medium_skill_rating + } + } + modifier = { + factor = 0 + OR = { + has_trait = chaste + has_trait = just + has_trait = honest + intrigue <= low_skill_rating + AND = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + OR = { + has_trait = patient + has_trait = compassionate + } + } + } + } + } + } + + # Just a harmless little dance + option = { + name = ep3_wedding.0001.c + flavor = ep3_wedding.0001.c.flavor + + reverse_add_opinion = { + modifier = friendliness_opinion + target = scope:flirting_in_law + opinion = 30 + } + + stress_impact = { + base = medium_stress_impact_loss + shy = minor_stress_impact_gain + lazy = minor_stress_impact_gain + chaste = minor_stress_impact_gain + } + + ai_chance = { + base = 200 + ai_value_modifier = { + ai_sociability = 1 + ai_honor = 0.5 + } + modifier = { + add = -50 + OR = { + has_trait = shy + has_trait = lazy + has_trait = chaste + } + } + } + } +} + +#You and the member of the marital family have some sex +ep3_wedding.0002 = { + type = activity_event + title = ep3_wedding.0002.t + desc = { + desc = ep3_wedding.0002.intro + first_valid = { + triggered_desc = { + trigger = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + desc = ep3_wedding.0002.own_wedding + } + desc = ep3_wedding.0002.others_wedding + } + first_valid = { + triggered_desc = { + trigger = { + scope:other_family_spouse = { + is_lowborn = yes + } + } + desc = ep3_wedding.0002.lowborn + } + desc = ep3_wedding.0002.highborn + } + } + theme = wedding_banquet_activity + override_background = { + reference = corridor_night + } + center_portrait = { + character = root + animation = schadenfreude + } + right_portrait = { + character = scope:flirting_in_law + animation = dancing + camera = camera_event_very_right + } + lower_right_portrait = { + character = scope:other_family_spouse + } + lower_left_portrait = { + character = scope:same_family_spouse + } + immediate = { + add_character_flag = { + flag = is_naked + days = 30 + } + scope:flirting_in_law = { + add_character_flag = { + flag = is_naked + days = 30 + } + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target ?= scope:flirting_in_law + } + complete_activity_intent = yes + } + if = { + limit = { + scope:flirting_in_law = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target ?= root + } + } + scope:flirting_in_law = { complete_activity_intent = yes } + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + add_intrigue_skill = 1 + add_intrigue_lifestyle_xp = medium_lifestyle_xp + + } + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + } + #Holy shit, you're the one I'm really meant to be with + option = { + name = ep3_wedding.0002.a + flavor = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + desc = ep3_wedding.0002.a.flavor + } + desc = ep3_wedding.0002.a.flavor_non_spouse + } + + } + trigger = { + can_set_relation_soulmate_trigger = { CHARACTER = scope:flirting_in_law } + } + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { #Success + desc = ep3_wedding.0002.a.success.desc.tt + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = -10 + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + modifier = { + add = 10 + scope:flirting_in_law = { + OR = { + has_trait = trusting + has_trait = eccentric + has_trait = stubborn + } + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value >= 80 + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value >= 50 + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value > 20 + } + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_wedding.0002.a.success.desc.tt + left_icon = scope:flirting_in_law + + set_relation_soulmate = { + target = scope:flirting_in_law + reason = soulmate_absconded_during_wedding + } + } + } + 50 = { #They're not into it + desc = ep3_wedding.0002.a.fail.desc.tt + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = 20 + scope:flirting_in_law = { + OR = { + has_trait = lustful + has_trait = callous + has_trait = fickle + has_trait = sadistic + has_trait = deceitful + has_trait = arbitrary + has_trait = content + } + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value <= -60 + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value <= -30 + } + } + modifier = { + add = 25 + reverse_opinion = { + target = scope:flirting_in_law + value <= 0 + } + } + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_wedding.0002.a.fail.desc.tt + left_icon = scope:flirting_in_law + + reverse_add_opinion = { + modifier = flattered_opinion + target = scope:flirting_in_law + opinion = 20 + } + + } + } + } + stress_impact = { + lustful = minor_stress_impact_gain + fickle = medium_stress_impact_gain + callous = medium_stress_impact_gain + deceitful = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + ai_boldness = 1 + } + modifier = { + add = -50 + OR = { + has_trait = deceitful + has_trait = arbitrary + } + } + modifier = { + add = 50 + opinion = { + target = scope:flirting_in_law + value >= 50 + } + } + modifier = { + add = -50 + opinion = { + target = scope:flirting_in_law + value < 0 + } + } + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = fickle + has_trait = callous + } + } + } + } + #Let's be lovers + option = { + name = ep3_wedding.0002.b + trigger = { + can_set_relation_lover_trigger = { CHARACTER = scope:flirting_in_law } + } + set_relation_lover = { + target = scope:flirting_in_law + reason = lover_absconded_during_wedding + } + stress_impact = { + lustful = miniscule_stress_impact_loss + fickle = minor_stress_impact_gain + chaste = major_stress_impact_gain + honest = medium_stress_impact_gain + just = medium_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 1 + } + modifier = { + add = -50 + has_trait = fickle + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = honest + has_trait = chaste + } + } + modifier = { + add = 50 + opinion = { + target = scope:flirting_in_law + value >= 50 + } + } + modifier = { + add = -50 + opinion = { + target = scope:flirting_in_law + value < 0 + } + } + } + } + #Well that was nice sex... gotta go back now + option = { + name = ep3_wedding.0002.c + if = { + limit = { + scope:flirting_in_law = { + NOR = { + has_trait = lustful + has_trait = callous + has_trait = fickle + has_trait = sadistic + has_trait = deceitful + has_trait = arbitrary + has_trait = content + } + } + } + reverse_add_opinion = { + modifier = angry_opinion + target = scope:flirting_in_law + opinion = -30 + } + } + if = { + limit = { + has_activity_intent = reduce_stress_intent + } + if = { + limit = { + has_trait = lifestyle_reveler + } + add_trait_xp = { + trait = trait:lifestyle_reveler + value = 20 + } + } + else = { + add_trait = lifestyle_reveler + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_boldness = -1 + } + modifier = { + add = -50 + OR = { + has_trait = lustful + has_trait = loyal + has_trait = stubborn + } + } + modifier = { + add = -50 + opinion = { + target = scope:flirting_in_law + value >= 50 + } + } + modifier = { + add = 50 + opinion = { + target = scope:flirting_in_law + value < 0 + } + } + } + } + after = { + remove_character_flag = is_naked + scope:flirting_in_law = { + remove_character_flag = is_naked + } + } +} + +#You are caught having sex with the relative +ep3_wedding.0003 = { + type = activity_event + title = ep3_wedding.0003.t + desc = { + desc = ep3_wedding.0003.desc_intro + first_valid = { + triggered_desc = { + trigger = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + desc = ep3_wedding.0003.desc_own_wedding + } + desc = ep3_wedding.0003.desc_guest + } + } + theme = wedding_banquet_activity + override_background = { + reference = corridor_night + } + left_portrait = { + character = root + animation = stayback + camera = camera_event_very_left + } + center_portrait = { + character = scope:flirting_in_law + triggered_animation = { + trigger = { + OR = { + AND = { + faith_dominant_gender_male_or_equal = yes + is_female = yes + } + AND = { + faith_dominant_gender_male_or_equal = no + is_male = yes + } + } + } + animation = crying + } + triggered_animation = { + trigger = { + OR = { + AND = { + faith_dominant_gender_male_or_equal = yes + is_male = yes + } + AND = { + faith_dominant_gender_male_or_equal = no + is_female = yes + } + } + } + animation = shame + } + } + right_portrait = { + character = scope:other_family_spouse + animation = shock + camera = camera_event_very_right + } + lower_right_portrait = scope:same_family_spouse + immediate = { + add_character_flag = { + flag = is_naked + days = 30 + } + scope:flirting_in_law = { + add_character_flag = { + flag = is_naked + days = 30 + } + } + if = { + limit = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target ?= scope:flirting_in_law + } + complete_activity_intent = yes + } + if = { + limit = { + scope:flirting_in_law = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target ?= root + } + } + scope:flirting_in_law = { complete_activity_intent = yes } + } + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + } + create_character_memory = { + type = wedding_infidelity_spouse + participants = { + in_law = scope:flirting_in_law + other_spouse = scope:other_family_spouse + } + } + scope:flirting_in_law = { + create_character_memory = { + type = wedding_infidelity_kin + participants = { + sex_spouse = root + kin_spouse = scope:other_family_spouse + } + } + } + scope:other_family_spouse = { + create_character_memory = { + type = wedding_infidelity_victim + participants = { + other_spouse = root + in_law = scope:flirting_in_law + } + } + } + } + } + #Join us, it definitely isn't weird + option = { + name = ep3_wedding.0003.a + flavor = ep3_wedding.0003.a.flavor + trigger = { + #other family spouse is either attracted to root or their own family member + scope:other_family_spouse = { + NOR = { + has_trait = chaste + has_trait = celibate + } + } + OR = { + AND = { + #attracted to root + OR = { + has_trait = seducer + attraction > 0 + scope:other_family_spouse = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target = root + } + has_relation_lover = scope:other_family_spouse + scope:other_family_spouse = { + opinion = { + target = root + value >= 80 + } + } + } + scope:other_family_spouse = { + is_attracted_to_gender_of = root + ep3_wedding_0001_relative_ages_trigger = yes + } + } + AND = { + #attracted to own family member + scope:flirting_in_law = { + OR = { + has_trait = seducer + attraction > 0 + scope:other_family_spouse = { + has_activity_intent = woo_attendee_intent + scope:host.intent_target = scope:flirting_in_law + } + has_relation_lover = scope:other_family_spouse + scope:other_family_spouse = { + opinion = { + target = scope:flirting_in_law + value >= 80 + } + } + } + scope:other_family_spouse = { + is_attracted_to_gender_of = scope:flirting_in_law + OR = { + #Both people aren't old + AND = { + age <= 55 + scope:flirting_in_law = { + age <= 55 + } + } + #Both people are old + AND = { + age > 55 + scope:flirting_in_law = { + age > 55 + } + } + #Root is old + AND = { + scope:flirting_in_law = { + age > 55 + } + OR = { + age > 40 + is_deviant_trigger = yes + } + } + #Target is old + AND = { + scope:flirting_in_law = { + OR = { + age > 40 + is_deviant_trigger = yes + } + } + age > 55 + } + } + } + } + } + } + #Down to rashly do incest + scope:other_family_spouse = { + OR = { + is_incestuous_trigger = yes + is_deviant_trigger = yes + NOT = { + trait_is_shunned_or_criminal_in_faith_trigger = { TRAIT = trait:incestuous FAITH = scope:other_family_spouse.faith GENDER_CHARACTER = scope:other_family_spouse } + } + has_trait = lustful + has_trait = drunkard + #Will overlook scruples if root is really hot or persuasive + root = { + OR = { + has_trait = seducer + has_relation_lover = scope:other_family_spouse + has_trait = beauty_good_3 + attraction >= 30 + reverse_opinion = { + target = scope:other_family_spouse + value >= 100 + } + } + } + } + } + + #in law is down to rashly do incest + scope:flirting_in_law = { + OR = { + is_incestuous_trigger = yes + is_deviant_trigger = yes + NOT = { + trait_is_shunned_or_criminal_in_faith_trigger = { TRAIT = trait:incestuous FAITH = scope:flirting_in_law.faith GENDER_CHARACTER = scope:flirting_in_law } + } + has_trait = lustful + has_trait = drunkard + #Will overlook scruples if root is really hot or persuasive + root = { + OR = { + has_trait = seducer + has_relation_lover = scope:flirting_in_law + has_trait = beauty_good_3 + attraction >= 30 + reverse_opinion = { + target = scope:flirting_in_law + value >= 100 + } + } + } + } + } + } + add_internal_flag = special + if = { + limit = { + scope:other_family_spouse = { + is_attracted_to_gender_of = root + } + is_attracted_to_gender_of = scope:other_family_spouse + } + had_sex_with_effect = { + CHARACTER = scope:other_family_spouse + PREGNANCY_CHANCE = pregnancy_chance + } + } + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + + if = { + limit = { + scope:flirting_in_law = { + is_attracted_to_gender_of = scope:other_family_spouse + } + scope:other_family_spouse = { + is_attracted_to_gender_of = scope:flirting_in_law + } + } + scope:other_family_spouse = { + had_sex_with_effect = { + CHARACTER = scope:flirting_in_law + PREGNANCY_CHANCE = pregnancy_chance + } + } + } + if = { + limit = { + can_set_relation_lover_trigger = { CHARACTER = scope:flirting_in_law } + scope:flirting_in_law = { + is_attracted_to_gender_of = root + } + is_attracted_to_gender_of = scope:flirting_in_law + } + set_relation_lover = { + target = scope:flirting_in_law + reason = lover_absconded_during_wedding + } + } + if = { + limit = { + can_set_relation_lover_trigger = { CHARACTER = scope:other_family_spouse } + scope:other_family_spouse = { + is_attracted_to_gender_of = root + } + is_attracted_to_gender_of = scope:other_family_spouse + } + set_relation_lover = { + target = scope:other_family_spouse + reason = lover_incestuous_wedding_threesome + } + } + + if = { + limit = { + NOT = { + has_trait = lifestyle_reveler + } + } + add_trait = lifestyle_reveler + } + else = { + add_trait_xp = { + trait = lifestyle_reveler + value = 50 + } + } + if = { + limit = { + NOT = { + has_trait = seducer + } + } + add_trait = seducer + } + else = { + add_diplomacy_skill = 1 + } + stress_impact = { + chaste = major_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 300 + ai_value_modifier = { + ai_energy = 0.5 + ai_sociability = 0.5 + } + modifier = { + add = -250 + NOR = { + is_deviant_trigger = yes + is_incestuous_trigger = yes + has_trait = lustful + has_trait = drunkard + } + } + modifier = { + factor = 0 + OR = { + has_trait = chaste + #attracted to root + NOT = { is_attracted_to_gender_of = scope:other_family_spouse } + NOR = { + #Both people aren't old + AND = { + age <= 55 + scope:other_family_spouse = { + age <= 55 + } + } + #Both people are old + AND = { + age > 55 + scope:other_family_spouse = { + age > 55 + } + } + #Root is old + AND = { + scope:other_family_spouse = { + age > 55 + } + OR = { + age > 40 + is_deviant_trigger = yes + } + } + #Target is old + AND = { + scope:other_family_spouse = { + OR = { + age > 40 + is_deviant_trigger = yes + } + } + age > 55 + } + } + } + } + } + } + + #We will never speak of this again... or else + option = { + name = ep3_wedding.0003.b + trigger = { + OR = { + dread >= 80 + has_trait = torturer + scope:other_family_spouse = { + has_dread_level_towards = { + target = root + level >= 1 + } + } + } + } + scope:other_family_spouse = { + add_stress = major_stress_impact_gain + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + NOR = { + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_men_accepted + } + is_male = yes + } + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_women_accepted + } + is_female = yes + } + } + } + scope:other_family_spouse = { + add_opinion = { + modifier = cheater_opinion + target = root + opinion = -100 + } + } + } + else = { + scope:other_family_spouse = { + add_opinion = { + modifier = threatened_opinion + target = root + opinion = -25 + } + } + } + if = { + limit = { + has_relation_soulmate = scope:other_family_spouse + } + remove_relation_soulmate = scope:other_family_spouse + } + stress_impact = { + compassionate = major_stress_impact_gain + forgiving = medium_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = trusting + } + } + } + } + + #AN EVIL SPIRIT CAME OVER ME OR SOMETHING + option = { + name = ep3_wedding.0003.c + flavor = ep3_wedding.0003.c.flavor + trigger = { + OR = { + has_trait = possessed + has_trait = lunatic + has_trait = witch + has_trait = lifestyle_mystic + has_trait = deceitful + has_trait = schemer + has_trait = arbitrary + has_trait = zealous + has_trait = eccentric + } + } + duel = { + skills = { diplomacy intrigue } + target = scope:other_family_spouse + 50 = { #They agree not to speak of this horrible affliction + desc = ep3_wedding.0003.c.success.desc + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + add = 20 + has_trait = possessed + } + modifier = { + add = 20 + has_trait = lunatic + } + modifier = { + add = 20 + has_trait = witch + } + modifier = { + add = 20 + has_trait = lifestyle_mystic + } + modifier = { + add = 10 + reverse_opinion = { + target = scope:other_family_spouse + value >= 80 + } + } + modifier = { + add = 10 + reverse_opinion = { + target = scope:other_family_spouse + value >= 50 + } + } + modifier = { + add = 10 + reverse_opinion = { + target = scope:other_family_spouse + value > 25 + } + } + modifier = { + add = 50 + scope:other_family_spouse = { + OR = { + has_trait = zealous + has_trait = trusting + has_trait = eccentric + } + } + } + modifier = { + add = 25 + scope:other_family_spouse = { + OR = { + has_trait = forgiving + has_trait = lifestyle_mystic + has_trait = witch + has_trait = possessed + has_trait = lunatic + } + } + } + send_interface_toast = { + type = event_toast_effect_good + title = ep3_wedding.0003.c.success.desc + left_icon = scope:other_family_spouse + + if = { + limit = { + has_trait = lifestyle_mystic + } + add_trait_xp = { + trait = trait:lifestyle_mystic + value = 25 + } + } + add_character_modifier = { + modifier = possessed_by_lust_demon_modifier + years = 10 + desc = lust_demon_success_chance + } + custom_tooltip = lust_demon_success_chance_tt + hidden_effect = { + if = { + limit = { + scope:flirting_in_law = { + is_female = yes + age <= 45 + is_pregnant = no + } + is_male = yes + } + scope:flirting_in_law = { + make_pregnant = { + father = root + number_of_children = 1 + } + } + } + else_if = { + limit = { + is_female = yes + age <= 45 + is_pregnant = no + scope:flirting_in_law = { + is_male = yes + } + } + make_pregnant = { + father = scope:flirting_in_law + number_of_children = 3 + } + } + } + } + } + 50 = { #They don't buy this bullshit + desc = ep3_wedding.0003.c.fail.desc + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + add = 20 + scope:other_family_spouse = { + OR = { + has_trait = lustful + has_trait = paranoid + has_trait = sadistic + has_trait = deceitful + has_trait = schemer + } + } + } + modifier = { + add = 20 + reverse_opinion = { + target = scope:other_family_spouse + value <= -60 + } + } + modifier = { + add = 20 + reverse_opinion = { + target = scope:other_family_spouse + value <= -30 + } + } + modifier = { + add = 10 + reverse_opinion = { + target = scope:other_family_spouse + value <= 0 + } + } + modifier = { + add = 50 + scope:other_family_spouse = { + OR = { + has_trait = cynical + has_trait = vengeful + } + } + } + send_interface_toast = { + type = event_toast_effect_bad + title = ep3_wedding.0003.c.fail.desc + left_icon = scope:other_family_spouse + + if = { + limit = { + scope:other_family_spouse = { + can_add_hook = { + target = root + type = manipulation_hook + } + } + } + scope:other_family_spouse = { + add_hook = { + type = manipulation_hook + target = root + } + } + } + if = { + limit = { + scope:other_family_spouse = { + can_add_hook = { + target = scope:flirting_in_law + type = manipulation_hook + } + } + } + scope:other_family_spouse = { + add_hook = { + type = manipulation_hook + target = scope:flirting_in_law + } + } + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + NOR = { + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_men_accepted + } + is_male = yes + } + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_women_accepted + } + is_female = yes + } + } + } + scope:other_family_spouse = { + add_opinion = { + modifier = cheater_opinion + target = root + opinion = -100 + } + } + } + else = { + scope:other_family_spouse = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -25 + } + } + } + add_piety = major_piety_loss + } + + } + } + if = { + limit = { + has_relation_soulmate = scope:other_family_spouse + } + remove_relation_soulmate = scope:other_family_spouse + } + stress_impact = { + zealous = minor_stress_impact_gain + just = medium_stress_impact_gain + honest = major_stress_impact_gain + + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_honor = -1 + ai_zeal = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = just + has_trait = honest + diplomacy < low_skill_rating + intrigue < low_skill_rating + AND = { + diplomacy < mediocre_skill_rating + intrigue < mediocre_skill_rating + } + } + } + modifier = { + add = -100 + OR = { + diplomacy < mediocre_skill_rating + intrigue < mediocre_skill_rating + AND = { + diplomacy < medium_skill_rating + intrigue < medium_skill_rating + } + } + } + modifier = { + add = 100 + OR = { + has_trait = lunatic + has_trait = possessed + has_trait = lifestyle_mystic + } + } + } + } + #I don't even care, this just makes me look cool + option = { + name = ep3_wedding.0003.d + flavor = ep3_wedding.0003.d.flavor + if = { + limit = { + NOT = { + has_trait = lifestyle_reveler + } + } + add_trait = lifestyle_reveler + } + else = { + add_trait_xp = { + trait = lifestyle_reveler + value = 25 + } + } + add_character_modifier = { + modifier = unflappable_boudoir_confidence_modifier + years = 10 + } + if = { + limit = { + is_male = yes + scope:flirting_in_law = { + is_male = yes + } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:sodomite + GENDER_CHARACTER = root + FAITH = root.faith + } + NOT = { has_trait = sodomite } + } + add_trait = sodomite + } + if = { + limit = { + relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = scope:flirting_in_law } + NOT = { has_trait = incestuous } + } + add_trait = incestuous + } + if = { + limit = { + is_married = yes + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:adulterer + GENDER_CHARACTER = root + FAITH = root.faith + } + NOT = { has_trait = adulterer } + } + add_trait = adulterer + } + if = { + limit = { + is_married = no + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:fornicator + GENDER_CHARACTER = root + FAITH = root.faith + } + NOT = { has_trait = fornicator } + } + add_trait = fornicator + } + if = { + limit = { + scope:flirting_in_law = { + is_married = yes + } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:adulterer + GENDER_CHARACTER = scope:flirting_in_law + FAITH = scope:flirting_in_law.faith + } + scope:flirting_in_law = { + NOT = { has_trait = adulterer } + } + } + scope:flirting_in_law = { add_trait = adulterer } + } + if = { + limit = { + scope:flirting_in_law = { + is_married = no + } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:fornicator + GENDER_CHARACTER = scope:flirting_in_law + FAITH = scope:flirting_in_law.faith + } + scope:flirting_in_law = { + NOT = { has_trait = fornicator } + } + } + scope:flirting_in_law = { add_trait = fornicator } + } + if = { + limit = { + is_male = yes + scope:flirting_in_law = { + is_male = yes + } + trait_is_shunned_or_criminal_in_faith_trigger = { + TRAIT = trait:sodomite + GENDER_CHARACTER = scope:flirting_in_law + FAITH = scope:flirting_in_law.faith + } + scope:flirting_in_law = { + NOT = { has_trait = sodomite } + } + } + scope:flirting_in_law = { add_trait = sodomite } + } + if = { + limit = { + scope:flirting_in_law = { + relation_with_character_is_incestuous_in_my_or_lieges_faith_trigger = { CHARACTER = root } + NOT = { has_trait = incestuous } + } + } + scope:flirting_in_law = { add_trait = incestuous } + } + if = { + limit = { + OR = { + this = scope:activity.special_guest:spouse_2 + this = scope:activity.special_guest:spouse_1 + } + NOR = { + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_men_accepted + } + is_male = yes + } + AND = { + scope:other_family_spouse.faith = { + has_doctrine = doctrine_adultery_women_accepted + } + is_female = yes + } + } + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:other_family_spouse } + } + scope:other_family_spouse = { + set_relation_rival = { + target = root + reason = rival_wedding_infidelity + } + } + } + else_if = { + limit = { + can_set_relation_nemesis_trigger = { CHARACTER = scope:other_family_spouse } + } + scope:other_family_spouse = { + set_relation_nemesis = { + target = root + reason = rival_wedding_infidelity + } + } + } + } + else = { + scope:other_family_spouse = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -25 + } + } + } + if = { + limit = { + scope:flirting_in_law = { + OR = { + is_married = yes + is_concubine = yes + } + } + } + scope:flirting_in_law = { + every_consort = { + limit = { + this != root + NOR = { + AND = { + faith = { + has_doctrine = doctrine_adultery_men_accepted + } + scope:flirting_in_law = { + is_male = yes + } + } + AND = { + faith = { + has_doctrine = doctrine_adultery_women_accepted + } + scope:flirting_in_law = { + is_female = yes + } + } + } + } + add_opinion = { + modifier = cheater_opinion + target = scope:flirting_in_law + opinion = -100 + } + } + } + } + if = { + limit = { + has_relation_soulmate = scope:other_family_spouse + } + remove_relation_soulmate = scope:other_family_spouse + } + stress_impact = { + paranoid = minor_stress_impact_gain + just = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_boldness = 1 + } + modifier = { + add = -75 + OR = { + AND = { + faith = { + has_doctrine = doctrine_adultery_men_shunned + } + is_male = yes + } + AND = { + faith = { + has_doctrine = doctrine_adultery_women_shunned + } + is_female = yes + } + } + } + modifier = { + factor = 0 + OR = { + has_trait = just + AND = { + faith = { + has_doctrine = doctrine_adultery_men_crime + } + is_male = yes + } + AND = { + faith = { + has_doctrine = doctrine_adultery_women_crime + } + is_female = yes + } + } + } + } + } + #I'm sorry!!! Please don't tell anyone!!! + option = { + name = ep3_wedding.0003.e + flavor = ep3_wedding.0003.e.flavor + if = { + limit = { + scope:other_family_spouse = { + can_add_hook = { + target = root + type = manipulation_hook + } + } + } + scope:other_family_spouse = { + add_hook = { + type = manipulation_hook + target = root + } + } + } + if = { + limit = { + scope:other_family_spouse = { + can_add_hook = { + target = scope:flirting_in_law + type = manipulation_hook + } + } + } + scope:other_family_spouse = { + add_hook = { + type = manipulation_hook + target = scope:flirting_in_law + } + } + } + scope:other_family_spouse = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -75 + } + } + if = { + limit = { + has_relation_soulmate = scope:other_family_spouse + } + remove_relation_soulmate = scope:other_family_spouse + } + stress_impact = { + arrogant = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_boldness = -0.5 + ai_honor = 0.5 + } + modifier = { + factor = 0 + has_trait = arrogant + } + } + } + after = { + remove_character_flag = is_naked + scope:flirting_in_law = { + remove_character_flag = is_naked + } + } +} diff --git a/events/dlc/fp1/fp1_jomsvikings_events.txt b/events/dlc/fp1/fp1_jomsvikings_events.txt new file mode 100644 index 00000000..43e85089 --- /dev/null +++ b/events/dlc/fp1/fp1_jomsvikings_events.txt @@ -0,0 +1,2222 @@ +namespace = fp1_jomsvikings + +################################################## +# #Standard Events +# 0001 - 0010 Jomsvikings offer a Retainer +# 0011 - 0020 Jomsvikings terrorise their neighbours +# 0021 - 0030 Jomsvikings send Event Troops +# 0031 - 0040 SPARE +# 0041 - 0050 Jomsvikings challenge a Dishonourable Norse Pagan Ruler to Holmgang +# +# #Special Events +# 1001 - 1010 Jomsvikings Destroyed +# 1011 - 1020 Jomsvikings Formed Autonomously +################################################## + + + + + +################################################## +# #Generic Scripted Triggers + +scripted_trigger fp1_pious_enough_for_jomsvikings_reward_trigger = { + # You must share their faith. + faith = global_var:jomsvikings_title.holder.faith + # Piety level minimum. + piety_level >= high_piety_level + # Sin maximum. + num_sinful_traits <= 1 + # Piety to spend. + piety >= major_piety_value + # The Grandmaster needs to not hate you also. + global_var:jomsvikings_title.holder = { + has_any_bad_relationship_with_root_trigger = no + opinion = { + target = root + value >= low_negative_opinion + } + } +} + +scripted_trigger fp1_jomsvikings_exist_in_range_trigger = { + # Do they exist at all? + exists = global_var:jomsvikings_title + # Are they within diplomatic range? + exists = global_var:jomsvikings_title.holder + in_diplomatic_range = global_var:jomsvikings_title.holder +} + +################################################## +# #Standard Events + +################################################## +# Jomsvikings offer a Retainer +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +# You are rewarded for your piety with a loyal warrior. +fp1_jomsvikings.0001 = { + type = character_event + title = fp1_jomsvikings.0001.t + desc = { + desc = fp1_jomsvikings.0001.desc.intro + # Describe scope:retainer_a. + first_valid = { + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:zealous } + desc = fp1_jomsvikings.0001.desc.zealous + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:wrathful } + desc = fp1_jomsvikings.0001.desc.wrathful + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:impatient } + desc = fp1_jomsvikings.0001.desc.impatient + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:arrogant } + desc = fp1_jomsvikings.0001.desc.arrogant + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:brave } + desc = fp1_jomsvikings.0001.desc.brave + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:ambitious } + desc = fp1_jomsvikings.0001.desc.ambitious + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:diligent } + desc = fp1_jomsvikings.0001.desc.diligent + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:gregarious } + desc = fp1_jomsvikings.0001.desc.gregarious + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:stubborn } + desc = fp1_jomsvikings.0001.desc.stubborn + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:fickle } + desc = fp1_jomsvikings.0001.desc.fickle + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:vengeful } + desc = fp1_jomsvikings.0001.desc.vengeful + } + triggered_desc = { + trigger = { scope:retainer_a_descriptor = flag:viking } + desc = fp1_jomsvikings.0001.desc.viking + } + } + desc = fp1_jomsvikings.0001.desc.connector + # Describe scope:retainer_b. + first_valid = { + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:zealous } + desc = fp1_jomsvikings.0001.desc.zealous + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:wrathful } + desc = fp1_jomsvikings.0001.desc.wrathful + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:impatient } + desc = fp1_jomsvikings.0001.desc.impatient + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:arrogant } + desc = fp1_jomsvikings.0001.desc.arrogant + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:brave } + desc = fp1_jomsvikings.0001.desc.brave + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:ambitious } + desc = fp1_jomsvikings.0001.desc.ambitious + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:diligent } + desc = fp1_jomsvikings.0001.desc.diligent + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:gregarious } + desc = fp1_jomsvikings.0001.desc.gregarious + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:stubborn } + desc = fp1_jomsvikings.0001.desc.stubborn + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:fickle } + desc = fp1_jomsvikings.0001.desc.fickle + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:vengeful } + desc = fp1_jomsvikings.0001.desc.vengeful + } + triggered_desc = { + trigger = { scope:retainer_b_descriptor = flag:viking } + desc = fp1_jomsvikings.0001.desc.viking + } + } + desc = fp1_jomsvikings.0001.desc.outro + } + theme = faith + left_portrait = { + character = scope:retainer_a + animation = personality_zealous + } + right_portrait = { + character = scope:retainer_b + animation = admiration + } + lower_center_portrait = scope:leader + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # The Jomsvikings must exist; check this before the usual standard checks for best efficiency. + fp1_jomsvikings_exist_in_range_trigger = yes + # Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_jomsvikings_0001 } + # You must fulfill their generic piety requirements. + fp1_pious_enough_for_jomsvikings_reward_trigger = yes + } + + weight_multiplier = { + base = 1 + + # Weight up for excess levels of piety & high levels of prestige. + fp1_jomsvikings_approve_of_extra_piety_and_prestige_modifier = yes + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_jomsvikings_0001 + days = 1825 + } + # Grab the Grandmaster. + global_var:jomsvikings_title.holder = { save_scope_as = leader } + # Generate a brace of possible retainers. + ## First a martial-focused character. + create_character = { + location = root.capital_province + template = fp1_jomsviking_retainer_martial + save_scope_as = retainer_a + } + ## Then a prowess-focused character. + create_character = { + location = root.capital_province + template = fp1_jomsviking_retainer_prowess + save_scope_as = retainer_b + } + # Generate a descriptive string for each retainer. + ## Twelve options of 8.3% each. + ## First, retainer_a. + scope:retainer_a = { + random_list = { + # Zealous + 100 = { + trigger = { has_trait = zealous } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:zealous + } + } + # Wrathful + 100 = { + trigger = { has_trait = wrathful } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:wrathful + } + } + # Impatient + 100 = { + trigger = { has_trait = impatient } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:impatient + } + } + # Arrogant + 100 = { + trigger = { has_trait = arrogant } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:arrogant + } + } + # Brave + 100 = { + trigger = { has_trait = brave } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:brave + } + } + # Ambitious + 100 = { + trigger = { has_trait = ambitious } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:ambitious + } + } + # Diligent + 100 = { + trigger = { has_trait = diligent } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:diligent + } + } + # Gregarious + 100 = { + trigger = { has_trait = gregarious } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:gregarious + } + } + # Stubborn + 100 = { + trigger = { has_trait = stubborn } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:stubborn + } + } + # Fickle + 100 = { + trigger = { has_trait = fickle } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:fickle + } + } + # Vengeful + 100 = { + trigger = { has_trait = vengeful } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:vengeful + } + } + # Viking + 100 = { + trigger = { has_trait = viking } + save_scope_value_as = { + name = retainer_a_descriptor + value = flag:viking + } + } + } + } + ## Then, retainer_b. + scope:retainer_b = { + random_list = { + # Zealous + 100 = { + trigger = { + has_trait = zealous + NOT = { scope:retainer_a_descriptor = flag:zealous } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:zealous + } + } + # Wrathful + 100 = { + trigger = { + has_trait = wrathful + NOT = { scope:retainer_a_descriptor = flag:wrathful } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:wrathful + } + } + # Impatient + 100 = { + trigger = { + has_trait = impatient + NOT = { scope:retainer_a_descriptor = flag:impatient } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:impatient + } + } + # Arrogant + 100 = { + trigger = { + has_trait = arrogant + NOT = { scope:retainer_a_descriptor = flag:arrogant } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:arrogant + } + } + # Brave + 100 = { + trigger = { + has_trait = brave + NOT = { scope:retainer_a_descriptor = flag:brave } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:brave + } + } + # Ambitious + 100 = { + trigger = { + has_trait = ambitious + NOT = { scope:retainer_a_descriptor = flag:ambitious } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:ambitious + } + } + # Diligent + 100 = { + trigger = { + has_trait = diligent + NOT = { scope:retainer_a_descriptor = flag:diligent } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:diligent + } + } + # Gregarious + 100 = { + trigger = { + has_trait = gregarious + NOT = { scope:retainer_a_descriptor = flag:gregarious } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:gregarious + } + } + # Stubborn + 100 = { + trigger = { + has_trait = stubborn + NOT = { scope:retainer_a_descriptor = flag:stubborn } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:stubborn + } + } + # Fickle + 100 = { + trigger = { + has_trait = fickle + NOT = { scope:retainer_a_descriptor = flag:fickle } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:fickle + } + } + # Vengeful + 100 = { + trigger = { + has_trait = vengeful + NOT = { scope:retainer_a_descriptor = flag:vengeful } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:vengeful + } + } + # Viking + 100 = { + trigger = { + has_trait = viking + NOT = { scope:retainer_a_descriptor = flag:viking } + } + save_scope_value_as = { + name = retainer_b_descriptor + value = flag:viking + } + } + } + } + } + + # Scope:retainer_a looks formidable! + option = { + name = fp1_jomsvikings.0001.a + + # Spend the piety cost. + add_piety = major_piety_loss + # Gain the courtier. + add_courtier = scope:retainer_a + # Send the other lad packing back to the Jomsvikings. + hidden_effect = { + scope:leader = { add_courtier = scope:retainer_b } + } + + stress_impact = { + trusting = minor_stress_impact_loss + zealous = medium_stress_impact_loss + paranoid = medium_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.75 + ai_sociability = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight up for stress. + add = 20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = cynical + } + } + } + + # Scope:retainer_b shall serve me well. + option = { + name = fp1_jomsvikings.0001.b + + # Spend the piety cost. + add_piety = major_piety_loss + # Gain the courtier. + add_courtier = scope:retainer_b + # Send the other lad packing back to the Jomsvikings. + hidden_effect = { + scope:leader = { add_courtier = scope:retainer_a } + } + + stress_impact = { + trusting = minor_stress_impact_loss + zealous = medium_stress_impact_loss + paranoid = medium_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.75 + ai_sociability = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight up for stress. + add = 20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = cynical + } + } + } + + # I'm fine, thanks. + option = { + name = fp1_jomsvikings.0001.c + + # Gain a little consolation prestige. + add_prestige = minor_prestige_gain + # Send both lads packing. + scope:leader = { + hidden_effect = { + add_courtier = scope:retainer_a + add_courtier = scope:retainer_b + } + } + # The Grandmaster considers this an insult. + scope:leader = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -30 + } + hidden_effect = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = root } + } + set_relation_potential_rival = root + } + } + } + + stress_impact = { + paranoid = medium_stress_impact_loss + cynical = major_stress_impact_loss + trusting = minor_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -0.5 + ai_rationality = -0.25 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = paranoid + } + modifier = { # Weight up for stress. + add = 30 + has_trait = cynical + } + modifier = { # Weight down for stress. + add = -10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -30 + has_trait = zealous + } + } + } +} + +################################################## +# Jomsvikings terrorise their neighbours +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +scripted_trigger fp1_viable_target_for_jomsviking_aggression_trigger = { + holder = root + + # The Jomsvikings won't pillage faithful non-reformist Asatru. Much. + NOT = { faith = faith:norse_pagan } + + # Otherwise, they need something coastal or nearby. + OR = { + title_province = { is_coastal = yes } + + # TIT-25456 + any_neighboring_county = { + save_temporary_scope_as = current_county + exists = global_var:jomsvikings_title.holder.faith + global_var:jomsvikings_title.holder.faith = { + any_faith_holy_order = { + title = global_var:jomsvikings_title + any_leased_title = { county = scope:current_county } + } + } + } + } +} + +scripted_trigger fp1_jomsviking_raid_source_one_wales_trigger = { + this.leader.capital_province = { + squared_distance = { + target = scope:target_county.title_province + value <= squared_distance_small + } + } +} + +scripted_trigger fp1_jomsviking_raid_source_one_ireland_trigger = { + this.leader.capital_province = { + squared_distance = { + target = scope:target_county.title_province + value <= squared_distance_medium + } + } +} + +scripted_trigger fp1_jomsviking_raid_source_one_france_trigger = { + this.leader.capital_province = { + squared_distance = { + target = scope:target_county.title_province + value <= squared_distance_large + } + } +} + +scripted_trigger fp1_jomsviking_raid_source_one_hre_trigger = { + this.leader.capital_province = { + squared_distance = { + target = scope:target_county.title_province + value <= squared_distance_huge + } + } +} + +# You are singled out as a traitor/viable target. +fp1_jomsvikings.0011 = { + type = character_event + title = { + first_valid = { + # Reformed Asatruans. + triggered_desc = { + trigger = { + religion = religion:germanic_religion + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + desc = fp1_jomsvikings.0011.t.reformed_norse + } + # Reformed non-Asatruans. + triggered_desc = { + trigger = { + NAND = { + religion = religion:germanic_religion + faith = { has_doctrine_parameter = unreformed } + } + } + desc = fp1_jomsvikings.0011.t.reformed_other + } + # Unreformed/fallback. + desc = fp1_jomsvikings.0011.t.fallback + } + } + desc = { + desc = fp1_jomsvikings.0011.desc.intro + # Is this an ideological raid or an economic one? + first_valid = { + # Ideological, reformist. + triggered_desc = { + trigger = { + religion = religion:germanic_religion + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + desc = fp1_jomsvikings.0011.desc.ideological_reformist + } + # Ideological, other. + triggered_desc = { + trigger = { + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + desc = fp1_jomsvikings.0011.desc.ideological_other + } + # Economic. + desc = fp1_jomsvikings.0011.desc.economic + } + desc = fp1_jomsvikings.0011.desc.outro + } + theme = war + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:leader + animation = rage + } + lower_left_portrait = scope:benefactor + override_background = { reference = burning_building } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # The Jomsvikings must exist; check this before the usual standard checks for best efficiency. + fp1_jomsvikings_exist_in_range_trigger = yes + # Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_jomsvikings_0011 } + # Must not be following the unreformed version of Norse paganism. + NOT = { faith = global_var:jomsvikings_title.holder.faith } + # Out of fairness/for performance, restrict this to dukes & above. + highest_held_title_tier >= tier_duchy + # You must either hold a valid coastal province, or else border someone who hosts the Jomsvikings. + any_sub_realm_county = { fp1_viable_target_for_jomsviking_aggression_trigger = yes } + } + + weight_multiplier = { + base = 1 + + # Extra rage is reserved for Germanic reformists, as they're the traitoriest traitors. + modifier = { + add = 1 + religion = religion:germanic_religion + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + } + + immediate = { + play_music_cue = "mx_cue_combat_2" + # Set up a cooldowns. + ## Reformed Germanics get a shorter cooldown. + if = { + limit = { + religion = religion:germanic_religion + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + add_character_flag = { + flag = had_event_fp1_jomsvikings_0011 + days = 1825 + } + } + ## Everyone else gets a decent breather. + else = { + add_character_flag = { + flag = had_event_fp1_jomsvikings_0011 + days = 5475 + } + } + # Grab the Grandmaster. + global_var:jomsvikings_title.holder = { save_scope_as = leader } + # Flag a suitable target. + ## First, add everything to a list. + every_sub_realm_county = { + limit = { fp1_viable_target_for_jomsviking_aggression_trigger = yes } + add_to_list = viable_jomsviking_targets_list + } + ## Then, sort through that list and pick out a painful target. + ordered_in_list = { + list = viable_jomsviking_targets_list + order_by = fp1_jomvsvikings_raid_value + save_scope_as = target_county + } + # And an origin for the Jomsvikings. + scope:leader.faith = { + random_faith_holy_order = { + limit = { leader = scope:leader } + # Preferring something closer. + ## First, we check to see if it's even necessary to look at distance, since distance is an expensive check. + if = { + limit = { + # Since this is purely for loc, we can just flat rule it out for non-players. + root = { is_ai = no } + # Otherwise, we're just looking to see if the Jomsvikings have more than two leased holdings. + num_leased_titles >= 2 + } + # Try successive distances. + ## About a Wales or so away. + if = { + limit = { fp1_jomsviking_raid_source_one_wales_trigger = yes } + random_leased_title = { + limit = { fp1_jomsviking_raid_source_one_wales_trigger = yes } + save_scope_as = raid_source + } + } + ## About an Ireland away. + else_if = { + limit = { fp1_jomsviking_raid_source_one_ireland_trigger = yes } + random_leased_title = { + limit = { fp1_jomsviking_raid_source_one_ireland_trigger = yes } + save_scope_as = raid_source + } + } + ## About a France away. + else_if = { + limit = { fp1_jomsviking_raid_source_one_france_trigger = yes } + random_leased_title = { + limit = { fp1_jomsviking_raid_source_one_france_trigger = yes } + save_scope_as = raid_source + } + } + ## About an HRE away. + else_if = { + limit = { fp1_jomsviking_raid_source_one_hre_trigger = yes } + random_leased_title = { + limit = { fp1_jomsviking_raid_source_one_hre_trigger = yes } + save_scope_as = raid_source + } + } + ## Still nothing? Uhhhh, sod it, just pick at random. + else = { + random_leased_title = { save_scope_as = raid_source } + } + } + # But otherwise we just grab their capital or w/e. + else = { + random_leased_title = { save_scope_as = raid_source } + } + } + } + # Check to see if there's a good neighbour to import clergy from. + ## Only necessary if root is reformed, since unreformed don't have this option. + if = { + limit = { + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + faith = root.faith + # Filter out anyone who sincerely hates you. + has_any_bad_relationship_with_root_trigger = no + opinion = { + target = root + value >= very_high_negative_opinion + } + } + save_scope_as = benefactor + } + } + } + + # Try to out-strategise the pirates. + option = { + name = fp1_jomsvikings.0011.a + + # Martial duel to fend off the lightning assault. + duel = { + skill = martial + target = scope:leader + # You outmanoeuvre the pirates. + ## Really gotta balance in the player's favour, as the Jomsvikings tend to have OP leaders. + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp1_jomsvikings.0011.a.tt_success + send_interface_toast = { + title = fp1_jomsvikings.0011.a.tt_success + left_icon = scope:leader + # Tiny control loss. + scope:target_county = { change_county_control = miniscule_county_control_loss } + # Decent prestige gain for unreformed. + if = { + limit = { + faith = { has_doctrine_parameter = unreformed } + } + add_prestige = medium_prestige_gain + } + # Decent piety gain for reformed. + else = { add_piety = medium_piety_gain } + } + } + # The Jomsvikings sack *everything*. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp1_jomsvikings.0011.a.tt_failure + send_interface_toast = { + title = fp1_jomsvikings.0011.a.tt_failure + left_icon = scope:leader + # Colossal control loss. + scope:target_county = { change_county_control = massive_county_control_loss } + # Minor prestige loss for unreformed. + if = { + limit = { + faith = { has_doctrine_parameter = unreformed } + } + add_prestige = minor_prestige_loss + } + # Minor piety loss for reformed. + else = { add_piety = minor_piety_loss } + } + } + } + + stress_impact = { + diligent = minor_stress_impact_loss + arrogant = medium_stress_impact_loss + vengeful = major_stress_impact_loss + lazy = minor_stress_impact_gain + humble = medium_stress_impact_gain + forgiving = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_vengefulness = 0.5 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = diligent + } + modifier = { # Weight up for stress. + add = 20 + has_trait = arrogant + } + modifier = { # Weight up for stress. + add = 30 + has_trait = vengeful + } + modifier = { # Weight down for stress. + add = -10 + has_trait = lazy + } + modifier = { # Weight down for stress. + add = -20 + has_trait = humble + } + modifier = { # Weight down for stress. + add = -30 + has_trait = forgiving + } + } + } + + # Pay to import foreign clergy. + option = { + name = { + trigger = { exists = scope:benefactor } + text = fp1_jomsvikings.0011.b.benefactor + } + name = { + trigger = { + NOT = { exists = scope:benefactor } + } + text = fp1_jomsvikings.0011.b.fallback + } + # Must be some flavour of reformed for this to be an issue. + trigger = { + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + # As there's gold involved, the character should either be a player or have enough to spend. + OR = { + is_ai = no + short_term_gold >= medium_gold_value + } + } + + # Deduct gold. + ## This goes to scope:benefactor if they exist. + if = { + limit = { exists = scope:benefactor } + pay_short_term_gold = { + target = scope:benefactor + gold = medium_gold_value + } + } + ## And otherwise is just vomited into the ether. + remove_short_term_gold = medium_gold_value + # If they exist, improve scope:benefactor's opinion of you. + if = { + limit = { exists = scope:benefactor } + reverse_add_opinion = { + target = scope:benefactor + modifier = pleased_opinion + opinion = 30 + } + } + # Lose control, but not that much. + scope:target_county = { change_county_control = medium_county_control_loss } + + stress_impact = { + generous = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + greedy = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.25 + ai_vengefulness = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = generous + } + modifier = { # Weight up for stress. + add = 10 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -20 + has_trait = greedy + } + modifier = { # Weight down for stress. + add = -20 + has_trait = vengeful + } + } + } + + # Pay a gafol to stop the attacks. + option = { + name = fp1_jomsvikings.0011.c + # The Jomsvikings will only accept tribute from non-threatening unreformeds. + trigger = { + faith = { has_doctrine_parameter = unreformed } + # As there's gold involved, the character should either be a player or have enough to spend. + OR = { + is_ai = no + short_term_gold >= medium_gold_value + } + } + + # Inform root that they won't lose any control. + custom_tooltip = fp1_jomsvikings.0011.c.tt + # Pay the gold straight to scope:leader. + pay_treasury_or_gold = { + target = scope:leader + value = medium_treasury_or_gold_value + } + + stress_impact = { + generous = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + greedy = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.25 + ai_vengefulness = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = generous + } + modifier = { # Weight up for stress. + add = 10 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -20 + has_trait = greedy + } + modifier = { # Weight down for stress. + add = -20 + has_trait = vengeful + } + } + } + + # How is this anything but a local problem? + option = { + name = fp1_jomsvikings.0011.d + + # Inform root that they let the county burn. + custom_tooltip = fp1_jomsvikings.0011.d.tt + # Reduce control. + scope:target_county = { change_county_control = extreme_county_control_loss } + + stress_impact = { + lazy = medium_stress_impact_loss + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + diligent = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.25 + ai_boldness = -0.25 + ai_honor = -0.5 + ai_vengefulness = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = lazy + } + modifier = { # Weight up for stress. + add = 20 + has_trait = callous + } + modifier = { # Weight up for stress. + add = 20 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -10 + has_trait = diligent + } + modifier = { # Weight down for stress. + add = -20 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -30 + has_trait = vengeful + } + } + } +} + +################################################## +# Jomsvikings send Event Troops +# by Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +# The Jomsvikings offer you a force of loyal pirates. +fp1_jomsvikings.0021 = { + type = character_event + title = fp1_jomsvikings.0021.t + desc = fp1_jomsvikings.0021.desc + theme = faith + right_portrait = { + character = scope:leader + animation = admiration + } + override_background = { reference = fp1_beached_longships } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # The Jomsvikings must exist; check this before the usual standard checks for best efficiency. + fp1_jomsvikings_exist_in_range_trigger = yes + # Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_jomsvikings_0021 } + # You must fulfill their generic piety requirements. + fp1_pious_enough_for_jomsvikings_reward_trigger = yes + } + + weight_multiplier = { + base = 1 + + # Weight up for excess levels of piety & high levels of prestige. + fp1_jomsvikings_approve_of_extra_piety_and_prestige_modifier = yes + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_jomsvikings_0021 + days = 1825 + } + # Grab the Grandmaster. + global_var:jomsvikings_title.holder = { save_scope_as = leader } + } + + # Pirates? In *my* good Asatru household? It's more likely than you'd think! + option = { + name = fp1_jomsvikings.0021.a + + # Spend the piety cost. + add_piety = major_piety_loss + # Explanatory tooltip. + custom_tooltip = fp1_jomsvikings.0021.a.tt + # Give the actual troops. + spawn_army = { + levies = 250 + men_at_arms = { + type = jomsviking_pirates + stacks = 4 + } + location = root.capital_province + origin = scope:leader.capital_province + name = fp1_jomsvikings_event_troops + } + + stress_impact = { + ambitious = medium_stress_impact_loss + zealous = medium_stress_impact_loss + content = medium_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.75 + ai_sociability = 0.25 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = ambitious + } + modifier = { # Weight up for stress. + add = 20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = content + } + modifier = { # Weight down for stress. + add = -30 + has_trait = cynical + } + } + } + + # Perhaps some more reputable volunteers? + option = { + name = fp1_jomsvikings.0021.b + + # Spend the piety cost. + add_piety = major_piety_loss + # Explanatory tooltip. + custom_tooltip = fp1_jomsvikings.0021.b.tt + # Give the actual troops. + spawn_army = { + levies = 250 + men_at_arms = { + type = bondi + stacks = 4 + } + location = root.capital_province + origin = scope:leader.capital_province + name = fp1_jomsvikings_event_troops + } + + stress_impact = { + ambitious = medium_stress_impact_loss + zealous = medium_stress_impact_loss + content = medium_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.75 + ai_sociability = 0.25 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = ambitious + } + modifier = { # Weight up for stress. + add = 20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = content + } + modifier = { # Weight down for stress. + add = -30 + has_trait = cynical + } + } + } + + # I'm fine, thanks. + option = { + name = fp1_jomsvikings.0021.c + + # Gain a little consolation prestige. + add_prestige = minor_prestige_gain + # The Grandmaster considers this an insult. + scope:leader = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -30 + } + hidden_effect = { + if = { + limit = { + can_set_relation_potential_rival_trigger = { CHARACTER = root } + } + set_relation_potential_rival = root + } + } + } + + stress_impact = { + paranoid = medium_stress_impact_loss + cynical = major_stress_impact_loss + trusting = minor_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -0.5 + ai_rationality = -0.25 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = paranoid + } + modifier = { # Weight up for stress. + add = 30 + has_trait = cynical + } + modifier = { # Weight down for stress. + add = -10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -30 + has_trait = zealous + } + } + } +} + +################################################## +# Jomsvikings challenge a Dishonourable Norse Pagan Ruler to Holmgang +# by Ewan Cowhig Croft +# 0041 - 0050 +################################################## + +scripted_trigger fp1_majorly_irked_jomsvikings_trigger = { + OR = { + ## Trucebreaker. + has_character_modifier = broke_truce + ## High tyranny. + tyranny >= high_tyranny + } +} + +# Considering you a blight on the faith, the Grandmaster of the Jomsvikings challenges you to the death. +fp1_jomsvikings.0041 = { + type = character_event + title = fp1_jomsvikings.0041.t + desc = fp1_jomsvikings.0041.desc + theme = death + left_portrait = { + character = root + # Craven characters are terrifed. + triggered_animation = { + trigger = { has_trait = craven } + animation = fear + } + # Everyone else is just shocked. + triggered_animation = { + trigger = { + NOT = { has_trait = craven } + } + animation = shock + } + } + right_portrait = { + character = scope:leader + animation = rage + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # The Jomsvikings must exist; check this before the usual standard checks for best efficiency. + fp1_jomsvikings_exist_in_range_trigger = yes + # Standard checks; make sure that scope:leader is available also. + is_landed = yes + is_available_at_peace_adult = yes + global_var:jomsvikings_title.holder = { is_available_at_peace_adult = yes } + NOT = { has_character_flag = had_event_fp1_jomsvikings_0041 } + # Must be following the unreformed version of Norse paganism. + faith = global_var:jomsvikings_title.holder.faith + # Eligibility checks. + ## For holmgangs in general. + ### Root. + can_start_single_combat_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = global_var:jomsvikings_title.holder } + ### Scope:leader. + global_var:jomsvikings_title.holder = { + can_start_single_combat_trigger = yes + # No need to check whether scope:leader is an eligible warrior, as they're already the head of a warrior order. + } + ## Is scope:leader either actually at all competent in a fight or dumb enough to think they are? + global_var:jomsvikings_title.holder = { + OR = { + prowess >= medium_scsk + has_trait = intellect_bad + } + } + # You must unequivocally a bastard for them to think you need to be removed. + OR = { + # Any serious reason is valid. + fp1_majorly_irked_jomsvikings_trigger = yes + # But a large amount of minor reasons are also good. + calc_true_if = { + amount >= 4 + # The sinful. + num_sinful_traits >= 2 + has_trait = cynical + # The shameful. + prestige_level <= 0 + piety_level <= 0 + tyranny >= medium_tyranny + dread >= high_dread + # Criminals. + ## Kinslayer. + AND = { + has_trait = kinslayer_1 + faith = { has_doctrine_parameter = kinslaying_any_dynasty_member_crime } + } + AND = { + has_trait = kinslayer_2 + faith = { has_doctrine_parameter = kinslaying_extended_family_crime } + } + AND = { + has_trait = kinslayer_3 + faith = { has_doctrine_parameter = kinslaying_close_kin_crime } + } + ## Deviant. + AND = { + has_trait = deviant + faith = { has_doctrine_parameter = deviancy_illegal } + } + ## Cannibal. + AND = { + has_trait = cannibal + NOT = { + faith = { has_doctrine_parameter = cannibalism_legal } + } + } + ## Sodomite. + AND = { + has_trait = sodomite + faith = { has_doctrine_parameter = homosexuality_illegal } + } + ## Incestuous. + AND = { + has_trait = incestuous + NOT = { + faith = { has_doctrine_parameter = consanguinity_unrestricted_incest } + } + } + ## Adulterer/Fornicator + AND = { + OR = { + has_trait = adulterer + has_trait = fornicator + } + trait_is_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:adulterer + GENDER_CHARACTER = this + } + } + ## Murderer. + has_trait = murderer + ## Witch. + AND = { + has_trait = witch + faith = { has_doctrine_parameter = witchcraft_illegal } + } + } + } + } + + weight_multiplier = { + base = 1 + + # We don't want to see this in the wild too much, so weight down against AI. + modifier = { + add = -0.5 + is_ai = yes + } + + # Weight it down a bit more if you lack any of the major reasons. + modifier = { + add = -0.25 + fp1_majorly_irked_jomsvikings_trigger = no + } + } + + immediate = { + play_music_cue = "mx_cue_murder" + add_character_flag = { + flag = had_event_fp1_jomsvikings_0041 + days = 7300 + } + # Grab the Grandmaster. + global_var:jomsvikings_title.holder = { save_scope_as = leader } + # Rip the Grandmaster's shirt off. + scope:leader = { add_character_flag = single_combat_stripped_to_waist } + # Is the Grandmaster hopelessly outmatched? Try to boost them up a little if so. + hidden_effect = { + if = { + limit = { + prowess_diff = { + target = scope:leader + value >= 10 + } + } + scope:leader = { + # Give them berserker. + if = { + limit = { + NOT = { has_trait = berserker } + } + add_trait = berserker + } + # Or, failing that, raider. + else_if = { + limit = { + NOT = { has_trait = viking } + } + add_trait = viking + } + # Or else just a slight base prowess boost. + else = { add_prowess_skill = 4 } + } + } + } + } + + # I'll send you to Valhöll with a smile. + option = { + name = fp1_jomsvikings.0041.a + + # First, strip to the waist. + add_character_flag = single_combat_stripped_to_waist + # It's time to d-d-d-duel! + custom_tooltip = fp1_jomsvikings.0041.a.tt + configure_start_single_combat_effect = { + SC_INITIATOR = scope:leader + SC_ATTACKER = scope:leader + SC_DEFENDER = root + FATALITY = always + FIXED = no + LOCALE = throne_room + OUTPUT_EVENT = fp1_jomsvikings.0043 + INVALIDATION_EVENT = fp1_jomsvikings.0042 + } + # Show possible results. + show_as_tooltip = { + random_list = { + # Root wins. + 50 = { + show_chance = no + desc = fp1_jomsvikings.0041.a.tt_success + scope:leader = { + death = { + killer = root + death_reason = death_duel + } + } + add_prestige = major_prestige_gain + add_kinslayer_trait_or_nothing_effect = { VICTIM = scope:leader } + } + # Scope:leader wins. + 50 = { + show_chance = no + desc = fp1_jomsvikings.0041.a.tt_failure + death = { + killer = scope:leader + death_reason = death_duel + } + scope:leader = { + add_prestige = major_prestige_gain + add_kinslayer_trait_or_nothing_effect = { VICTIM = root } + } + } + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + brave = major_stress_impact_loss + craven = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_vengefulness = 0.25 + ai_boldness = -0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = arrogant + } + modifier = { # Weight up for stress. + add = 30 + has_trait = brave + } + modifier = { # Weight down for stress. + add = -30 + has_trait = craven + } + } + } + + # You were a fool to come alone. Guards! + option = { + name = fp1_jomsvikings.0041.b + + # If possible, scope:leader immediately becomes your nemesis. + if = { + limit = { + NOT = { has_relation_nemesis = scope:leader } + } + # No matter what relationship you had or didn't have, they become your nemesis. + if = { + limit = { has_relation_best_friend = scope:leader } + remove_relation_best_friend = scope:leader + set_relation_nemesis = { + target = scope:leader + reason = nemesis_refused_holmgang + } + } + # If you have no relation or were friends, they become your rival. + else_if = { + limit = { has_relation_friend = scope:leader } + remove_relation_friend = scope:leader + set_relation_nemesis = { + target = scope:leader + reason = nemesis_refused_holmgang + } + } + else = { + set_relation_nemesis = { + target = scope:leader + reason = nemesis_refused_holmgang + } + } + } + else = { + reverse_add_opinion = { + target = scope:leader + modifier = hate_opinion + opinion = -50 + } + } + # You attempt to capture scope:leader. + duel = { + skill = martial + target = scope:leader + # Scope:leader is shackled & hauled off to the dungeon. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -40 + } + desc = fp1_jomsvikings.0041.b.tt_success + send_interface_toast = { + title = fp1_jomsvikings.0041.b.tt_success + left_icon = scope:leader + # Scope:leader is tossed straight into the dungeon. + rightfully_imprison_character_effect = { + TARGET = scope:leader + IMPRISONER = root + } + hidden_effect = { + scope:leader = { change_prison_type = dungeon } + } + # You still lose a prestige level, since you're being an utter bastard. + add_prestige_level = -1 + # But you do gain a good chunk of dread. + add_dread = medium_dread_gain + } + } + # Scope:leader effects a daring escape. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -40 + } + desc = fp1_jomsvikings.0041.b.tt_failure + send_interface_toast = { + title = fp1_jomsvikings.0041.b.tt_failure + left_icon = scope:leader + # You lose a prestige level *and* take heftier penalties for your dishonour. + add_prestige_level = -1 + add_prestige = monumental_prestige_loss + } + } + } + + stress_impact = { + vengeful = medium_stress_impact_loss + arbitrary = major_stress_impact_loss + forgiving = medium_stress_impact_gain + just = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_honor = -0.75 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = vengeful + } + modifier = { # Weight up for stress. + add = 30 + has_trait = arbitrary + } + modifier = { # Weight down for stress. + add = -20 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -30 + has_trait = just + } + } + } + + # Hah, right, because I just fight any random pirate that walks into my castle? + option = { + name = fp1_jomsvikings.0041.c + + # If possible, scope:leader immediately becomes your rival. + if = { + limit = { + NOR = { + has_relation_rival = scope:leader + has_relation_nemesis = scope:leader + } + } + # If you were best friends, they become your nemesis. + if = { + limit = { has_relation_best_friend = scope:leader } + remove_relation_best_friend = scope:leader + set_relation_nemesis = { + target = scope:leader + reason = rival_refused_holmgang + } + } + # If you have no relation or were friends, they become your rival. + else_if = { + limit = { has_relation_friend = scope:leader } + remove_relation_friend = scope:leader + set_relation_rival = { + target = scope:leader + reason = rival_refused_holmgang + } + } + else = { + set_relation_rival = { + target = scope:leader + reason = rival_refused_holmgang + } + } + } + else = { + reverse_add_opinion = { + target = scope:leader + modifier = hate_opinion + opinion = -50 + } + } + # And you take some hefty prestige penalties for your refusal. + add_prestige_level = -1 + add_prestige = massive_prestige_loss + + stress_impact = { + craven = major_stress_impact_loss + arrogant = minor_stress_impact_gain + brave = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.25 + ai_vengefulness = -0.25 + ai_boldness = -0.5 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = craven + } + modifier = { # Weight down for stress. + add = -10 + has_trait = arrogant + } + modifier = { # Weight down for stress. + add = -30 + has_trait = brave + } + } + } +} + +# Bout has invalidated, inform affected parties. +fp1_jomsvikings.0042 = { + hidden = yes + + immediate = { + # Inform root that the duel has invalidated. + root = { + send_interface_toast = { + title = fp1_jomsvikings.0042.trigger_failure + left_icon = scope:leader + } + } + } +} + +# Bout ended, sort after effects. +fp1_jomsvikings.0043 = { + hidden = yes + + immediate = { + # If scope:leader won, give them their prestige/clothes and apply kinslayer stuff. + if = { + limit = { scope:sc_victor = scope:leader } + add_prestige = major_prestige_gain + remove_character_flag = single_combat_stripped_to_waist + single_combat_have_slain_kin_effect = { + ATTACKER = scope:leader + DEFENDER = root + } + } + # Otherwise, root won. + else = { + # Nothing complex here, just put your shirt back on & send out the event after a small delay (for layering). + root = { + remove_character_flag = single_combat_stripped_to_waist + trigger_event = { + id = fp1_jomsvikings.0044 + days = 1 + } + } + } + } +} + +# Root won the bout, process their ending. +fp1_jomsvikings.0044 = { + type = character_event + title = fp1_jomsvikings.0044.t + desc = fp1_jomsvikings.0044.desc + theme = death + left_portrait = { + character = root + animation = personality_bold + } + right_portrait = { + character = scope:leader + animation = fear + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + play_music_cue = "mx_cue_combat_stinger" + # Mention the death of scope:leader. + show_as_tooltip = { + scope:leader = { + death = { + killer = root + death_reason = death_duel + } + } + } + # Hand out root's prestige. + add_prestige = major_prestige_gain + scope:leader = { + add_character_flag = is_naked + } + } + + # Anyone *else* want to have a go? + option = { + name = fp1_jomsvikings.0044.a + + # And a fair amount of stress loss for coming through that. + add_stress = massive_stress_loss + + # No stress impact for the standard option. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_vengefulness = 0.25 + } + } + } + + # And the justness of my rule is proven again. + option = { + name = fp1_jomsvikings.0044.b + # No point reducing tyranny if you don't have any. + trigger = { tyranny >= 1 } + + # Get a decent tyranny reduction for your troubles. + add_tyranny = massive_tyranny_loss + + stress_impact = { + deceitful = major_stress_impact_loss + arbitrary = major_stress_impact_loss + honest = major_stress_impact_gain + just = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_honor = -0.5 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = deceitful + } + modifier = { # Weight up for stress. + add = 30 + has_trait = arbitrary + } + modifier = { # Weight down for stress. + add = 30 + has_trait = honest + } + modifier = { # Weight down for stress. + add = 30 + has_trait = just + } + } + } + + # This simply shows that Asatru is an unworthy faith... + option = { + name = fp1_jomsvikings.0044.c + # AI doesn't use this functionality, so we don't want them taking this option. + trigger = { is_ai = no } + + # Gain a modifier making it substantially cheaper to convert to other faiths. + add_character_modifier = { + modifier = fp1_jomsvikings_caused_faith_crisis_modifier + years = 10 + } + + stress_impact = { + cynical = major_stress_impact_loss + zealous = major_stress_impact_gain + } + ai_chance = { + # AI is banned, so this is unimportant. + base = 0 + } + } + after = { + scope:leader = { + remove_character_flag = is_naked + } + } +} + + +################################################## +# #Special Events + +################################################## +# Jomsvikings Destroyed +# by Ewan Cowhig Croft +# 1001 - 1010 +################################################## + +fp1_jomsvikings.1001 = { + type = character_event + title = fp1_jomsvikings.1001.t + desc = { + desc = fp1_jomsvikings.1001.desc.intro + first_valid = { + # If someone reformed Norse paganism, the Jomsvikings lament it. + triggered_desc = { + trigger = { + religion:germanic_religion = { + any_faith = { + NOT = { has_doctrine_parameter = unreformed } + } + } + } + desc = fp1_jomsvikings.1001.desc.reformed_asatru_exists + } + # Otherwise, just a general big RIP. + desc = fp1_jomsvikings.1001.desc.fallback + } + desc = fp1_jomsvikings.1001.desc.outro + } + theme = faith + override_background = { reference = fp1_tribal_temple } + left_portrait = { + character = scope:leader + animation = shame + } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + # Huehuehue. + play_music_cue = "mx_cue_peace_ensues" + custom_tooltip = fp1_jomsvikings.1001.holy_order_destroyed + } + + # The gods forsake us! + option = { + name = fp1_jomsvikings.1001.a + trigger = { faith = faith:norse_pagan } + + # No more benefits for pious Norse pagans. + custom_tooltip = fp1_jomsvikings.1001.a.tt + + # No stress for a notification event. + ai_chance = { + # Notification event needs no AI chance. + base = 100 + } + } + + # Good riddance to bad rubbish! + option = { + name = fp1_jomsvikings.1001.b + trigger = { + NOT = { faith = faith:norse_pagan } + } + + # No more Jomsviking piracy! + custom_tooltip = fp1_jomsvikings.1001.b.tt + + # No stress for a notification event. + ai_chance = { + # Notification event needs no AI chance. + base = 100 + } + } + + # Yhomz-who? + option = { + name = fp1_jomsvikings.1001.c + trigger = { + NOT = { faith = faith:norse_pagan } + } + + # No more Jomsviking piracy! + custom_tooltip = fp1_jomsvikings.1001.c.tt + + # No stress for a notification event. + ai_chance = { + # Notification event needs no AI chance. + base = 100 + } + } +} + + +################################################## +# Jomsvikings Formed Autonomously +# by Ewan Cowhig Croft +# 1011 - 1020 +################################################## + +# The Jomsvikings are founded automagically. +fp1_jomsvikings.1011 = { + scope = none + hidden = yes + + # Trigger block handled in yearly_on_actions. + + immediate = { + # Collate eligible targets in the region. + every_county_in_region = { + region = dlc_fp1_region_non_scandinavian_southern_baltic + limit = { + holder = { fp1_ruler_eligible_for_jomsviking_coup = yes } + } + add_to_list = jomsvikings_coup_targets_list + } + # Sort through to pick the best. + ordered_in_list = { + list = jomsvikings_coup_targets_list + order_by = fp1_jomsvikings_coup_priority_value + save_scope_as = coup_target + } + ## Grab the soon-to-be former holder for loc. + scope:coup_target.holder = { save_scope_as = victim } + # Transfer the target title to its new owner. + ## First, create said-owner. + create_character = { + template = fp1_jomsviking_bigwig + location = scope:coup_target.title_province + save_scope_as = founder + } + ## Second, give that owner the actual title. + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + scope:coup_target = { + change_title_holder = { + holder = scope:founder + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + ## Third, give scope:founder their independence if they lacked it. + scope:founder = { + if = { + limit = { top_liege != this } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + } + change_liege_or_become_independent = { + CHANGE = scope:change + VASSAL = this + } + resolve_title_and_vassal_change = scope:change + } + } + ## Fourth, give the owner some event troops & cash to keep them afloat. + scope:founder = { + spawn_army = { + levies = { add = 1000 } + inheritable = yes + uses_supply = yes + location = scope:coup_target.title_province + name = fp1_jomsvikings_event_troops + } + forge_the_jomsvikings_maa_reward_effect = yes + } + # Create the Jomsvikings. + scope:founder = { forge_the_jomsvikings_scripted_effect = yes } + # Send out notification events. + save_scope_value_as = { + name = jomsvikings_autofounded + value = yes + } + every_player = { + limit = { + OR = { + religion = religion:germanic_religion + save_temporary_scope_as = neighbouring_players + scope:founder = { + any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:neighbouring_players } + } + } + # No need to exempt scope:founder, as they're always an AI in this variant. + } + trigger_event = fp1_major_decisions.0033 + } + } +} diff --git a/events/dlc/fp1/fp1_major_decision_events.txt b/events/dlc/fp1/fp1_major_decision_events.txt new file mode 100644 index 00000000..6fe9489d --- /dev/null +++ b/events/dlc/fp1/fp1_major_decision_events.txt @@ -0,0 +1,1479 @@ +namespace = fp1_major_decisions + +################################################## +# #Standard Events +# 0001 - 0010 Secure the High Kingdom of the North Sea - Bind England, Denmark, and Norway into one mighty de jure. +# 0011 - 0020 Found the Capital of the Rus' - Semi-dynamic founding of Kiev. +# 0021 - 0030 Elevate the Kingdom of the Isles - Make the Petty Kingdom of Mann & the Isles into the Perfectly Regular Kingdom of Mann & the Isles. +# 0031 - 0040 Forge the Jomsvikings - Sponsor the creation of a conservative Asatru holy fighting force. +# +# +# #Special Events +# 1001 - 1010 Canute-'em-Up +# 1011 - 1020 The True King of Norway - Harald Tanglehair earns his haircut. +################################################## + + + + + +################################################## +# Securing the High Kingdom of the North Sea +# by Ewan Cowhig Croft +# 0001-0010 +################################################## + +# Founder event +fp1_major_decisions.0001 = { + type = character_event + title = fp1_major_decisions.0001.t + desc = fp1_major_decisions.0001.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_ocean_norse } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + #Apply decision effects. + secure_high_kingdom_north_sea_scripted_effect = yes + legend_seed_new_title_effect = yes + } + + #I'm the besterest! + option = { + name = fp1_major_decisions.0001.a + + add_prestige_experience = 1000 + + ai_chance = { + #Only option. + base = 100 + } + } +} + +# Vassal notification event +fp1_major_decisions.0002 = { + type = character_event + title = fp1_major_decisions.0002.t + desc = fp1_major_decisions.0002.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_ocean_norse } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + show_as_tooltip = { secure_high_kingdom_north_sea_scripted_effect = yes } + } + + #Huzzah! + option = { + name = fp1_major_decisions.0002.a + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #This bodes ill... + option = { + name = fp1_major_decisions.0002.b + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +# Distant players notification event +fp1_major_decisions.0003 = { + type = character_event + title = fp1_major_decisions.0003.t + desc = fp1_major_decisions.0003.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_ocean_norse } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + show_as_tooltip = { secure_high_kingdom_north_sea_scripted_effect = yes } + } + + #We're the best! + option = { + name = fp1_major_decisions.0003.a + trigger = { faith = scope:founder.faith } + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #Foul Heathens/Christmen! + option = { + name = fp1_major_decisions.0003.b + trigger = { + faith != scope:founder.faith + } + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #Emperors get antsy. + option = { + name = fp1_major_decisions.0003.c + trigger = { highest_held_title_tier >= tier_empire } + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +################################################## +# Founding the Capital of the Rus' +# by Ewan Cowhig Croft +# 0011-0020 +################################################## + +# Founder event +fp1_major_decisions.0011 = { + type = character_event + title = fp1_major_decisions.0011.t + desc = fp1_major_decisions.0011.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_runestone } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + } + + #Kiev shall be my capital. + option = { + name = fp1_major_decisions.0011.a + + trigger = { + #Must have title:c_kiev in order to make it your capital. + any_sub_realm_county = { this = title:c_kiev } + #And Kiev cannot be held by a player who has _only_ title:c_kiev, unless that player is you. + title:c_kiev.holder = { + OR = { + is_ai = yes + any_held_title = { + count >= 1 + title_tier = county + NOT = { this = title:c_kiev } + } + this = scope:founder + } + } + } + + #Organise the usurpation/capital move of title:c_kiev if appropriate. + if = { + limit = { + NOT = { title:c_kiev.holder = scope:founder } + } + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = yes + } + title:c_kiev = { + change_title_holder = { + holder = root + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + set_realm_capital = title:c_kiev + #Otherwise, set title:c_kiev to be scope:new_rus_capital & go through with the effect. + title:c_kiev = { + save_scope_as = new_rus_capital + found_capital_of_rus_scripted_effect = yes + } + + ai_chance = { + #AI should always take this option if it's available. + base = 100 + } + } + + #My current capital shall be my capital! + option = { + name = fp1_major_decisions.0011.b + + #Not generally necessary, but just to stop some weird loc eventualities. + trigger = { + NOT = { capital_county = title:c_kiev } + } + + #We try to use the player's current capital, but if they've moved it outside of e_russia, then we go with the default set in the standard decision entry. + if = { + limit = { capital_county.empire = title:e_russia } + #Formatted a little inefficiently for readability. + capital_county = { save_scope_as = new_rus_capital } + } + #Then enact the actual effects. + found_capital_of_rus_scripted_effect = yes + + ai_chance = { + #AI will only take this option if they have no other choice (i.e., can't get Kiev). + base = 0 + } + } + + after = { + #Take care of notification events. + every_player = { + limit = { + capital_province = { + OR = { + geographical_region = world_europe_east + geographical_region = world_europe_north + } + } + #Obviously, we exempt scope:founder themselves. + this != scope:founder + } + #Vassal players get a separate event. + if = { + limit = { + any_liege_or_above = { this = scope:founder } + } + trigger_event = fp1_major_decisions.0012 + } + #Everyone else within range gets a less personal version. + else = { trigger_event = fp1_major_decisions.0013 } + } + } +} + +# Vassal notification event +fp1_major_decisions.0012 = { + type = character_event + title = fp1_major_decisions.0012.t + desc = fp1_major_decisions.0012.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_runestone } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + show_as_tooltip = { found_capital_of_rus_scripted_effect = yes } + } + + #A worthy capital! + option = { + name = fp1_major_decisions.0012.a + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #Bah, ain't no city of mine. + option = { + name = fp1_major_decisions.0012.b + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +# Distant players notification event +fp1_major_decisions.0013 = { + type = character_event + title = fp1_major_decisions.0013.t + desc = fp1_major_decisions.0013.desc + theme = realm + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_runestone } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + show_as_tooltip = { found_capital_of_rus_scripted_effect = yes } + } + + #This scope:new_rus_capital sounds intriguingly rich... + option = { + name = fp1_major_decisions.0013.a + trigger = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = { has_cultural_pillar = heritage_east_slavic } + } + } + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #They're still just backwards foreigners. + option = { + name = fp1_major_decisions.0013.b + trigger = { + NOR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = { has_cultural_pillar = heritage_east_slavic } + } + } + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + #I don't really see how this concerns me? + option = { + name = fp1_major_decisions.0013.c + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +################################################## +# Elevating the Kingdom of the Isles +# by Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +# Founder event +fp1_major_decisions.0021 = { + type = character_event + title = fp1_major_decisions.0021.t + desc = fp1_major_decisions.0021.desc + theme = war + left_portrait = { + character = root + animation = personality_honorable + } + override_background = { reference = fp1_beached_longships } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + play_music_cue = "mx_cue_war_declared" + # Apply effects + elevate_mann_and_the_isles_scripted_effect = yes + legend_seed_new_title_effect = yes + } + + # I am the Lady/Lord of Blood and Gold! + option = { + name = fp1_major_decisions.0021.a + + # Add a unique nickname. + give_nickname = nick_the_great_and_terrible + + # No stress impact necessary. + ai_chance = { + # AI should always choose this option. + base = 100 + } + } + + # At last my dream is achieved... + option = { + name = fp1_major_decisions.0021.b + + # Minor stress loss for turning down the nickname. + add_stress = minor_stress_loss + + # No stress impact necessary. + ai_chance = { + # AI should, if it somehow makes it here, never opt out of the nickname. + base = 0 + } + } +} + +# Vassal notification event +fp1_major_decisions.0022 = { + type = character_event + title = fp1_major_decisions.0022.t + desc = fp1_major_decisions.0022.desc + theme = war + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_beached_longships } + + immediate = { + play_music_cue = "mx_cue_war_declared" + # Apply effects + scope:founder = { + show_as_tooltip = { elevate_mann_and_the_isles_scripted_effect = yes } + } + } + + # Just think of all the gold we're going to make! + option = { + name = fp1_major_decisions.0022.a + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + # A _queen/king_? They're little better than a robber baron! + option = { + name = fp1_major_decisions.0022.b + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +# Distant players notification event +fp1_major_decisions.0023 = { + type = character_event + title = fp1_major_decisions.0023.t + desc = fp1_major_decisions.0023.desc + theme = war + left_portrait = { + character = scope:founder + animation = personality_honorable + } + override_background = { reference = fp1_beached_longships } + + immediate = { + play_music_cue = "mx_cue_war_declared" + # Apply effects + scope:founder = { + show_as_tooltip = { elevate_mann_and_the_isles_scripted_effect = yes } + } + } + + # They're not going to raid *us*, right? + option = { + name = fp1_major_decisions.0023.a + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } + + # No more than a Queen/King of Thieves! + option = { + name = fp1_major_decisions.0023.b + + ai_chance = { + #Doesn't especially matter. + base = 100 + } + } +} + +################################################## +# Forge the Jomsvikings +# by Ewan Cowhig Croft +# 0031-0041 +################################################## + +# Founder event +fp1_major_decisions.0031 = { + type = character_event + title = fp1_major_decisions.0031.t + desc = fp1_major_decisions.0031.desc + theme = faith + left_portrait = { + character = scope:founder + animation = personality_honorable + } + right_portrait = { + character = scope:leader + animation = personality_zealous + } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + play_music_cue = "mx_cue_crusade_starts" + # Found the Jomsvikings. + forge_the_jomsvikings_scripted_effect = yes + #Notify other players. + every_player = { + limit = { + OR = { + religion = religion:germanic_religion + save_temporary_scope_as = neighbouring_players + scope:founder = { + any_neighboring_and_across_water_top_liege_realm_owner = { this = scope:neighbouring_players } + } + } + #Obviously, we exempt scope:founder themselves. + this != scope:founder + } + #Vassal players get a separate event. + if = { + limit = { + any_liege_or_above = { this = scope:founder } + } + trigger_event = fp1_major_decisions.0032 + } + #Everyone else within range gets a less personal version. + else = { trigger_event = fp1_major_decisions.0033 } + } + } + + # For our ancestors! + option = { + name = { + trigger = { has_trait = cynical } + text = fp1_major_decisions.0031.a.cynical + } + name = { + trigger = { + NOT = { has_trait = cynical } + } + text = fp1_major_decisions.0031.a.fallback + } + + # Get your bonus troops. + forge_the_jomsvikings_maa_reward_effect = yes + + stress_impact = { + # Usually bad form to give stress impact on single event options, but if you're cynical and taking this option, you *know* you're doing it for purely cynical reasons. + zealous = massive_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + # Single option event doesn't need ai_chance sorted. + base = 100 + } + } +} + +# Vassal notification event +fp1_major_decisions.0032 = { + type = character_event + title = fp1_major_decisions.0032.t + desc = fp1_major_decisions.0032.desc + theme = faith + left_portrait = { + character = scope:founder + animation = personality_honorable + } + right_portrait = { + character = scope:leader + # Same-faith characters see them as zealous. + triggered_animation = { + trigger = { faith = scope:leader.faith } + animation = personality_zealous + } + # Everyone else sees them as pirates. + triggered_animation = { + trigger = { + faith != scope:leader.faith + } + animation = schadenfreude + } + } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + play_music_cue = "mx_cue_crusade_starts" + # Jomsvikings founded. + scope:founder = { + show_as_tooltip = { forge_the_jomsvikings_scripted_effect = yes } + } + } + + # Huzzah! + option = { + name = fp1_major_decisions.0032.a + trigger = { faith = scope:founder.faith } + + # Scope:founder gets a boost. + scope:founder = { + show_as_tooltip = { forge_the_jomsvikings_maa_reward_effect = yes } + } + + # No stress impact for notification event. + ai_chance = { + # Player-only, AI choice irrelevant. + base = 100 + } + } + + # So, they're pirates? + option = { + name = fp1_major_decisions.0032.b + + # Scope:founder gets a boost. + scope:founder = { + show_as_tooltip = { forge_the_jomsvikings_maa_reward_effect = yes } + } + + # No stress impact for notification event. + ai_chance = { + # Player-only, AI choice irrelevant. + base = 100 + } + } +} + +# Distant players notification event +fp1_major_decisions.0033 = { + type = character_event + title = fp1_major_decisions.0033.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:jomsvikings_autofounded } + desc = fp1_major_decisions.0033.desc.autofounded + } + desc = fp1_major_decisions.0033.desc.decision_founded + } + desc = fp1_major_decisions.0033.desc.outro + } + theme = faith + left_portrait = { + character = scope:founder + animation = personality_bold + } + right_portrait = { + character = scope:leader + # Same-faith characters see them as zealous. + triggered_animation = { + trigger = { faith = scope:leader.faith } + animation = personality_zealous + } + # Everyone else sees them as pirates. + triggered_animation = { + trigger = { + faith != scope:leader.faith + } + animation = schadenfreude + } + } + lower_center_portrait = scope:victim + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + play_music_cue = "mx_cue_crusade_starts" + # Jomsvikings founded. + custom_tooltip = fp1_founder_founded_the_jomsviking_tt + show_as_tooltip = { + scope:founder.faith = { + change_fervor = { + value = 10 + desc = fervor_gain_holy_order_founded + } + } + } + } + + # Wonderous news! + option = { + name = fp1_major_decisions.0033.a + trigger = { faith = scope:founder.faith } + + # Scope:founder gets a boost. + scope:founder = { + show_as_tooltip = { forge_the_jomsvikings_maa_reward_effect = yes } + } + + # No stress impact for notification event. + ai_chance = { + # Player-only, AI choice irrelevant. + base = 100 + } + } + + # Just another band of raiders. + option = { + name = { + trigger = { + religion = { is_in_family = rf_pagan } + } + text = fp1_major_decisions.0033.b.competition + } + name = { + trigger = { + NOT = { + religion = { is_in_family = rf_pagan } + } + } + text = fp1_major_decisions.0033.b.heathens + } + + # Scope:founder gets a boost. + scope:founder = { + show_as_tooltip = { forge_the_jomsvikings_maa_reward_effect = yes } + } + + # No stress impact for notification event. + ai_chance = { + # Player-only, AI choice irrelevant. + base = 100 + } + } +} + + + + + +################################################## +# Canute-'em-Up +# by Ewan Cowhig Croft +# 1001-1010 +################################################## + +scripted_trigger fp1_major_decisions_1001_valid_sycophant_trigger = { + # Has to be around. + is_available_ai_adult = yes + # And have an outrageously positive opinion of root... + opinion = { + target = root + value >= very_high_positive_opinion + } + # _Without_ actually having any good reason to. + has_any_good_relationship_with_root_trigger = no + # Plus gotta filter out some general traits. + NOR = { + has_trait = honest + has_trait = brave + has_trait = shy + has_trait = content + has_trait = just + has_trait = zealous + has_trait = trusting + } +} + +# So you think you're _truly_ the High King of the North Sea, eh? +## Ok, so this probably didn't *actually* happen, but we can't have a North Sea title without the myth, right? +fp1_major_decisions.1001 = { + type = character_event + title = fp1_major_decisions.1001.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:type = flag:canute_dumb } + desc = fp1_major_decisions.1001.desc.dumb + } + desc = fp1_major_decisions.1001.desc.smart + } + } + theme = crown + left_portrait = { + character = root + # Smart Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_smart } + animation = disapproval + } + # And, tragically, dumb-Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_dumb } + animation = personality_bold + } + } + right_portrait = { + character = scope:sycophant + animation = admiration + } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Since this is a once-only event for e_north_sea, we can early-out by checking if we're even looking at them. + has_title = title:e_north_sea + # And that this even has never happened before. + NOT = { exists = global_var:had_event_fp1_major_decisions_1001 } + # Then, that we're within -ish the legendary frame. + current_date <= 1050.1.1 + # And might actually have a problem with all this deceit. + NOR = { + has_trait = arrogant + has_trait = trusting + has_trait = deceitful + } + # Finally (for once), standard checks. + is_available_at_peace_adult = yes + # And at least one sycophantic courtier. + any_courtier_or_guest = { fp1_major_decisions_1001_valid_sycophant_trigger = yes } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + set_global_variable = { + name = had_event_fp1_major_decisions_1001 + value = yes + } + # Are we dealing with an idiotic Canute? + if = { + limit = { + OR = { + learning <= low_skill_rating + has_trait = intellect_bad + has_trait = dull + } + } + save_scope_value_as = { + name = type + value = flag:canute_dumb + } + } + # If not, assume they're smart. + else = { + save_scope_value_as = { + name = type + value = flag:canute_smart + } + } + # And grab a chief sycophant. + random_courtier_or_guest = { + limit = { fp1_major_decisions_1001_valid_sycophant_trigger = yes } + save_scope_as = sycophant + } + } + + # To the beach! + option = { + name = fp1_major_decisions.1001.a + + # Onwards! + custom_tooltip = fp1_major_decisions.1001.a.tt + trigger_event = fp1_major_decisions.1002 + + stress_impact = { + humble = major_stress_impact_loss + paranoid = major_stress_impact_loss + honest = major_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_vengefulness = 0.25 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = humble + } + modifier = { # Weight up for stress. + add = 30 + has_trait = paranoid + } + modifier = { # Weight up for stress. + add = 30 + has_trait = honest + } + } + } + + # They're probably correct, right? + option = { + name = fp1_major_decisions.1001.b + + # Gain some very minor stress loss for opting out. + ## Stress loss handled in stress_impact. + + stress_impact = { + base = minor_stress_loss + vengeful = minor_stress_impact_gain + impatient = minor_stress_impact_gain + humble = medium_stress_impact_gain + cynical = medium_stress_impact_gain + zealous = medium_stress_impact_gain + paranoid = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -0.25 + ai_boldness = -0.5 + } + modifier = { # Weight down for stress. + add = -10 + has_trait = vengeful + } + modifier = { # Weight down for stress. + add = -10 + has_trait = impatient + } + modifier = { # Weight down for stress. + add = -20 + has_trait = humble + } + modifier = { # Weight down for stress. + add = -20 + has_trait = cynical + } + modifier = { # Weight down for stress. + add = -20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -30 + has_trait = paranoid + } + } + } +} + +scripted_effect fp1_major_decisions_1002_courtiers_terrified_effect = { + every_courtier_or_guest = { + custom = custom.every_courtier_and_guest + add_opinion = { + target = root + modifier = respect_opinion + opinion = -30 + } + } +} + +fp1_major_decisions.1002 = { + type = character_event + title = fp1_major_decisions.1002.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:type = flag:canute_dumb } + desc = fp1_major_decisions.1002.desc.dumb + } + desc = fp1_major_decisions.1002.desc.smart + } + } + theme = crown + left_portrait = { + character = root + # Smart Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_smart } + animation = disapproval + } + # And, tragically, dumb-Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_dumb } + animation = shock + } + } + right_portrait = { + character = scope:sycophant + # Reacting to smart Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_smart } + animation = shame + } + # And, tragically, reacting to dumb-Canute. + triggered_animation = { + trigger = { scope:type = flag:canute_dumb } + animation = fear + } + } + override_background = { reference = docks } + + # Smart: shame the simpering courtiers. + option = { + name = fp1_major_decisions.1002.a + trigger = { scope:type = flag:canute_smart } + + # Gain a colossal amount of opinion with your court. + every_courtier_or_guest = { + custom = custom.every_courtier_and_guest + add_opinion = { + target = root + modifier = respect_opinion + opinion = 75 + } + } + + stress_impact = { + cynical = medium_stress_impact_loss + humble = major_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_sociability = 0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = cynical + } + modifier = { # Weight up for stress. + add = 30 + has_trait = humble + } + } + } + + # Smart: abase yourself before HighGod. + option = { + name = fp1_major_decisions.1002.b + trigger = { scope:type = flag:canute_smart } + + # Gain a modifier trading piety for prestige. + add_character_modifier = { modifier = fp1_abased_before_highgod_modifier } + # And also a fairly-substantial amount of opinion with your court. + every_courtier_or_guest = { + custom = custom.every_courtier_and_guest + add_opinion = { + target = root + modifier = respect_opinion + opinion = 50 + } + } + + stress_impact = { + humble = major_stress_impact_loss + zealous = massive_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_sociability = 0.5 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = humble + } + modifier = { # Weight up for stress. + add = 40 + has_trait = zealous + } + } + } + + # Dumb: develop crippling thalassaphobia. + option = { + name = fp1_major_decisions.1002.c + trigger = { scope:type = flag:canute_dumb } + + # Gain stress. + ## More stress if you have neither modifier to lose. + if = { + limit = { + NOR = { + has_character_modifier = high_king_of_the_seas_fp1_modifier + has_character_modifier = high_queen_of_the_seas_fp1_modifier + } + } + stress_impact = { + base = massive_stress_gain + paranoid = major_stress_impact_loss + honest = major_stress_impact_gain + } + } + ## Ordinary stress otherwise. + else = { + stress_impact = { + paranoid = major_stress_impact_loss + honest = major_stress_impact_gain + } + } + # If you've got one, lose your beneficial modifier. + if = { + limit = { + OR = { + has_character_modifier = high_king_of_the_seas_fp1_modifier + has_character_modifier = high_queen_of_the_seas_fp1_modifier + } + } + remove_character_modifier = high_king_of_the_seas_fp1_modifier + remove_character_modifier = high_queen_of_the_seas_fp1_modifier + } + # The court is confused and afraid. + fp1_major_decisions_1002_courtiers_terrified_effect = yes + + # Stress impact handled above due to variability. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.25 + ai_rationality = -0.75 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = honest + } + } + } + + # Dumb: have the ocean whipped. No shade, Xerxes. + option = { + name = fp1_major_decisions.1002.d + trigger = { + scope:type = flag:canute_dumb + NOT = { has_trait = lunatic } + } + + # Welp, you're having a bit of a time. + custom_tooltip = fp1_major_decisions.1002.d.tt + add_trait = lunatic_1 + # The court is confused and afraid. + fp1_major_decisions_1002_courtiers_terrified_effect = yes + + stress_impact = { + vengeful = major_stress_impact_loss + forgiving = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_rationality = -0.75 + } + modifier = { # Weight up for stress. + add = 30 + has_trait = vengeful + } + modifier = { # Weight down for stress. + add = -10 + has_trait = forgiving + } + } + } + + # Dumb: dedicate yourself to learning spellcraft. + option = { + name = fp1_major_decisions.1002.e + trigger = { + scope:type = flag:canute_dumb + is_witch_trigger = no + } + + # Become a witch. + give_witch_secret_or_trait_effect = yes + # The court is confused and afraid. + fp1_major_decisions_1002_courtiers_terrified_effect = yes + + stress_impact = { + cynical = medium_stress_impact_loss + craven = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.25 + ai_sociability = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = cynical + } + modifier = { # Weight down for stress. + add = -20 + has_trait = craven + } + modifier = { # Weight down for stress. + add = -20 + has_trait = zealous + } + } + } +} + +################################################## +# The True King of Norway +# by Ewan Cowhig Croft +# 1011-1020 +################################################## + +scripted_effect fp1_1011_gib_pretty_hair_effect = { + # Gain the famous nickname. + give_nickname = nick_fairhair + # And a bit of diplomacy for your long vow. + add_diplomacy_skill = 2 + # Plus that haircut. + remove_character_modifier = harald_tanglehairs_vow_modifier +} + +# Tanglehair becomes Fairhair. +fp1_major_decisions.1011 = { + type = character_event + window = big_event_window + title = fp1_major_decisions.1011.t + desc = { + desc = fp1_major_decisions.1011.desc.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:gyda } + desc = fp1_major_decisions.1011.desc.gyda + } + desc = fp1_major_decisions.1011.desc.oath + } + desc = fp1_major_decisions.1011.desc.outro + } + theme = crown + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:gyda + animation = admiration + } + override_background = { reference = fp1_ocean_norse } + + immediate = { + play_music_cue = "mx_cue_succession" + # Check to see if Gyda is still around and kicking, and if so, treat this as a romance. + character:166044 = { + hidden_effect = { + if = { + limit = { + betrothed ?= { + NOR = { + this = character:144000 + is_ai = no + } + } + } + break_betrothal = betrothed + } + else_if = { + limit = { + is_adult = yes + is_married = yes + any_spouse = { + NOR = { + this = character:144000 + is_ai = no + } + } + } + every_spouse = { + prev = { + divorce = prev + } + } + } + else_if = { + limit = { + exists = concubinist + concubinist = { + NOR = { + this = character:144000 + is_ai = no + } + } + } + concubinist = { + remove_concubine = prev + } + } + if = { + limit = { + is_alive = yes + could_marry_character_trigger = { CHARACTER = root } + has_any_bad_relationship_with_root_trigger = no + is_ai = yes + } + save_scope_as = gyda + } + } + } + } + + # Gyda, my love! + option = { + name = fp1_major_decisions.1011.b + trigger = { + # Gyda must have been valid. + exists = scope:gyda + # And, for MP, remain valid. + could_marry_character_trigger = { CHARACTER = scope:gyda } + } + + if = { + limit = { + is_married = yes + primary_spouse ?= { + NOT = { + this = character:144000 + } + } + } + divorce = primary_spouse + } + else_if = { + limit = { + betrothed ?= { + NOT = { + this = character:144000 + } + } + } + break_betrothal = betrothed + } + + # Apply standard haircut effects. + fp1_1011_gib_pretty_hair_effect = yes + # Harald & Gyda are wed. + if = { + limit = { + scope:gyda = { is_adult = no } + } + create_betrothal = scope:gyda + } + else_if = { + limit = { + has_ep2_dlc_trigger = yes + } + create_grand_wedding_betrothal = { + SPOUSE_1 = root + SPOUSE_2 = scope:gyda + HOST = root + PROMISEE = scope:gyda + } + } + else = { marry = scope:gyda } + # And rather happy about it. + add_opinion = { + target = scope:gyda + modifier = love_opinion + opinion = 150 + } + reverse_add_opinion = { + target = scope:gyda + modifier = love_opinion + opinion = 150 + } + + add_stress = -200 + + ai_chance = { + # AI should always select this option if it's present. + base = 100 + } + } + + # My vow fulfilled! + option = { + name = fp1_major_decisions.1011.a + + # Apply standard haircut effects. + fp1_1011_gib_pretty_hair_effect = yes + + ai_chance = { + # AI should only default to this if Gyda is unavailable. + base = 0 + } + } + + # Leave it; it is a mark of the struggles I have been through. + option = { + name = fp1_major_decisions.1011.c + trigger = { is_ai = no } + + # Harald Tanglehair keeps his wild locks. + custom_tooltip = fp1_major_decisions.1011.c.tt + ## We swap the modifiers out so the copy responds correctly. + hidden_effect = { + remove_character_modifier = harald_tanglehairs_vow_modifier + add_character_modifier = harald_tanglehairs_reminder_modifier + } + # And a bit of learning for the lessons you've endured. + add_learning_skill = 2 + + ai_chance = { + # Option here for player choice. + base = 0 + } + } +} + +# Check Norway's creation status. +fp1_major_decisions.1012 = { + hidden = yes + + # ... flag that. + immediate = { + set_global_variable = { + name = norway_created + value = yes + } + # And if it's not Harald Fairhair who did it, shame him. + if = { + limit = { + exists = character:144000 + NOT = { this = character:144000 } + character:144000 = { is_alive = yes } + } + hidden_effect = { + # Save the current King of Norway. + save_scope_as = king_of_norway + # And message Harald with the bad news. + character:144000 = { + send_interface_toast = { + title = fp1_major_decisions.1012.t + left_icon = scope:king_of_norway + hidden_effect = { remove_character_modifier = harald_tanglehairs_vow_modifier } + add_character_modifier = harald_tanglehairs_vow_broken_modifier + } + } + } + } + } +} diff --git a/events/dlc/fp1/fp1_scandinavian_adventurer_events.txt b/events/dlc/fp1/fp1_scandinavian_adventurer_events.txt new file mode 100644 index 00000000..7c2ab436 --- /dev/null +++ b/events/dlc/fp1/fp1_scandinavian_adventurer_events.txt @@ -0,0 +1,1113 @@ +namespace = fp1_scandinavian_adventurers + +################################################## +# Scandinavian Adventurer Events +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +scripted_trigger valid_scandinavian_adventurer = { + is_available_ai_adult = yes + is_alive = yes + is_ruler = no + any_heir_title = { count = 0 } +} + +scripted_trigger significant_north_germanic_presence_trigger = { + holder = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + has_culture = culture:norman + has_character_modifier = embraced_local_traditions_modifier + dynasty ?= { + has_dynasty_modifier = settled_norse_dynasty_modifier + } + } + OR = { + AND = { + highest_held_title_tier >= tier_duchy + any_held_title = { + count >= 3 + title_tier = county + title_province = { geographical_region = $SCANDI_ADV_TARGET_REGION$ } + } + } + dynasty ?= { + has_dynasty_modifier = settled_norse_dynasty_modifier + } + } + } +} + +scripted_trigger scattered_north_germanic_presence_trigger = { + holder = { + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + has_culture = culture:norman + has_character_modifier = embraced_local_traditions_modifier + dynasty ?= { + has_dynasty_modifier = settled_norse_dynasty_modifier + } + } + } +} + +scripted_trigger valid_adventurer_target_trigger = { + holder = { + NOR = { + #Filter out North Germanics & Normans. + culture = { has_cultural_pillar = heritage_north_germanic } + has_culture = culture:norman + has_character_modifier = embraced_local_traditions_modifier + dynasty ?= { + has_dynasty_modifier = settled_norse_dynasty_modifier + } + #Plus any places already being attacked. + top_liege = { + any_character_war = { using_cb = fp1_scandi_adventurer_conquest } + } + #Or which have already earnt a ceasefire with this particular adventurer. Or any of their liege + OR = { + any_truce_holder = { this = scope:scandi_adventurer } + any_liege_or_above = { + any_truce_holder = { this = scope:scandi_adventurer } + } + } + #And finally anywhere that has earnt a little peace. + OR = { + has_character_modifier = fp1_reprieve_from_sa_modifier + any_liege_or_above = { has_character_modifier = fp1_reprieve_from_sa_modifier } + } + } + OR = { + is_ai = yes + #Filter out players, unless they're large enough to take the hit. + AND = { + is_ai = no + sub_realm_size >= 8 + } + } + } +} + +scripted_trigger valid_scandinavian_county_trigger = { + #Should be simple enough, but might want to make it more complex in future. + culture = { has_cultural_pillar = heritage_north_germanic } +} + +scripted_trigger valid_scandinavian_county_for_embark_trigger = { + is_coastal_county = yes + holder = { fp1_is_norse = yes } +} + +scripted_effect scandinavian_adventurer_start_war_effect = { + #Give the adventurer a dynamic title to tide them over. + create_dynamic_title = { + tier = duchy + name = { + first_valid = { + triggered_desc = { + trigger = { + faith = { has_doctrine = doctrine_gender_male_dominated } + } + desc = VIKING_ARMY_MEN_NAME + } + triggered_desc = { + trigger = { + faith = { has_doctrine = doctrine_gender_female_dominated } + } + desc = VIKING_ARMY_WOMEN_NAME + } + triggered_desc = { + trigger = { + faith = { has_doctrine = doctrine_gender_equal } + } + desc = VIKING_ARMY_NEUTRAL_NAME + } + #Fallback, just in case. + desc = VIKING_ARMY_NEUTRAL_NAME + } + } + adj = VIKING_ARMY_adj + } + create_title_and_vassal_change = { + type = created + save_scope_as = change + add_claim_on_loss = no + } + scope:new_title = { + set_capital_county = scope:adventurer_target + set_landless_title = yes + set_destroy_on_gain_same_tier = yes + set_no_automatic_claims = yes + set_can_be_named_after_dynasty = no + set_can_use_nomadic_naming = no + change_title_holder = { + holder = scope:scandi_adventurer + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + scope:new_title = { + generate_coa = yes + set_variable = { + name = temporary_title + value = yes + } + } + #Declare the war. + scope:scandi_adventurer = { + start_war = { + casus_belli = fp1_scandi_adventurer_conquest + target = scope:adventurer_target.holder.top_liege + target_title = scope:adventurer_target.duchy + } + } + # Setup event troops. + scope:scandi_adventurer = { + # Set a random spawn location. + ## Try to pick a good spot in Scandinavia. + if = { + limit = { + any_county_in_region = { + region = world_europe_north + valid_scandinavian_county_for_embark_trigger = yes + } + } + random_county_in_region = { + region = world_europe_north + limit = { valid_scandinavian_county_for_embark_trigger = yes } + # Weight up according to development, so armies tend to spawn in places where more randos would congregate. + weight = { + modifier = { + add = { + value = development_level + multiply = 10 + } + } + } + save_temporary_scope_as = selected_county + scope:scandi_adventurer = { + set_variable = { + name = random_location + value = scope:selected_county.title_province + days = 365 + } + } + } + } + ## Otherwise, we used our backup of Lister, the last Scandinavian province left alive, three million miles into deep space. + else = { + set_variable = { + name = random_location + value = title:b_lister.title_province + days = 365 + } + } + # Work out how many event troops we should give the adventurer for a 60:40 fight. + spawn_army = { + levies = { + add = { + #Base of 400. + add = scope:adventurer_target.holder.top_liege.max_military_strength + #Multiply that by the realm size of the target's top_liege. + multiply = 1.5 + #Account for allies, adding more without just nullifying them. + scope:adventurer_target.holder.top_liege = { + every_ally = { add = this.max_military_strength } + } + #Cut it off so things don't get too ridiculous. + max = 8000 + #Make sure all adventurers have a moderately respectable force. + min = 1000 + } + } + inheritable = no + location = scope:scandi_adventurer.var:random_location + name = scandi_adventurer_event_troops + } + spawn_army = { + men_at_arms = { + type = huscarl + stacks = { + value = 1 + multiply = scope:adventurer_target.holder.top_liege.primary_title.tier + } + } + inheritable = yes + location = scope:scandi_adventurer.var:random_location + name = scandi_adventurer_event_troops + } + spawn_army = { + men_at_arms = { + type = light_footmen + stacks = { + value = 1 + multiply = scope:adventurer_target.holder.top_liege.primary_title.tier + } + } + inheritable = yes + location = scope:scandi_adventurer.var:random_location + name = scandi_adventurer_event_troops + } + # Suppress startup error false-positive + if = { + limit = { has_variable = random_location } + # Do nothing. + } + } + # Loan a little gold in case they're in debt/to keep them going. + scope:scandi_adventurer = { add_gold = scandinavian_adventurer_efficacy_loan_value } +} + +# Pre-filter event, check to see if we should keep sending out adventurers. +fp1_scandinavian_adventurers.0001 = { + scope = none + hidden = yes + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + NOT = { has_game_rule = fp1_scandi_adventurers_off } + OR = { + culture:norse = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + culture:norwegian = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + culture:danish = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + culture:swedish = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + } + } + + immediate = { + #We prefer to use actual characters, but if there aren't any, we try to generate a fallback. + ##Populate Western list backup. + if = { + limit = { + NOT = { + any_in_global_list = { + variable = western_scandinavian_adventurer_list + count >= 1 + valid_scandinavian_adventurer = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_scandinavia_pool + valid_scandinavian_county_trigger = yes + } + } + random_county_in_region = { + region = dlc_fp1_region_western_scandinavia_pool + limit = { valid_scandinavian_county_trigger = yes } + save_scope_as = scandinavian_county + } + create_character = { + location = scope:scandinavian_county.title_province + template = fp1_western_warrior_character + save_scope_as = backup_adventurer + } + scope:backup_adventurer = { + add_to_global_variable_list = { + name = western_scandinavian_adventurer_list + target = this + } + } + } + ##Populate Eastern list backup. + if = { + limit = { + NOT = { + any_in_global_list = { + variable = eastern_scandinavian_adventurer_list + count >= 1 + valid_scandinavian_adventurer = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_scandinavia_pool + valid_scandinavian_county_trigger = yes + } + } + random_county_in_region = { + region = dlc_fp1_region_eastern_scandinavia_pool + limit = { valid_scandinavian_county_trigger = yes } + save_scope_as = scandinavian_county + } + create_character = { + location = scope:scandinavian_county.title_province + template = fp1_eastern_warrior_character + save_scope_as = backup_adventurer + } + scope:backup_adventurer = { + add_to_global_variable_list = { + name = eastern_scandinavian_adventurer_list + target = this + } + } + } + #Launch the adventurer spawning events. + trigger_event = { + id = fp1_scandinavian_adventurers.0002 + days = { 0 365 } + } + trigger_event = { + id = fp1_scandinavian_adventurers.0003 + days = { 0 365 } + } + #Trigger the next wave of events. + if = { + limit = { has_game_rule = fp1_scandi_adventurers_apocalyptic } + trigger_event = { + id = fp1_scandinavian_adventurers.0001 + days = { 300 420 } + } + } + if = { + limit = { has_game_rule = fp1_scandi_adventurers_frequent } + trigger_event = { + id = fp1_scandinavian_adventurers.0001 + days = { 1725 1910 } + } + } + if = { + limit = { has_game_rule = fp1_scandi_adventurers_occasional } + trigger_event = { + id = fp1_scandinavian_adventurers.0001 + days = { 3540 3725 } + } + } + if = { + limit = { has_game_rule = fp1_scandi_adventurers_rare } + trigger_event = { + id = fp1_scandinavian_adventurers.0001 + days = { 5350 5600 } + } + } + } +} + +# General processing event, Western Europe. +fp1_scandinavian_adventurers.0002 = { + scope = none + hidden = yes + + trigger = { + #At least one valid adventurer. Should always be the case, but just to be sure. + any_in_global_list = { + variable = western_scandinavian_adventurer_list + count >= 1 + valid_scandinavian_adventurer = yes + } + } + + immediate = { + #SORT ACTORS + ##Grab the most eligible candidate from the western list. + ordered_in_global_list = { + variable = western_scandinavian_adventurer_list + limit = { valid_scandinavian_adventurer = yes } + order_by = { value = scandinavian_adventurer_priority_value } + save_scope_as = scandi_adventurer + add_character_modifier = scandinavian_adventurer_fp1_modifier + add_trait = adventurer + } + ##Check through the ordered western targets to see if a region needs a few more Norsemen. + ###Iceland & the Northern Isles + if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_iceland_isles + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_iceland_isles } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_iceland_isles + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_iceland_isles + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_iceland_isles + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Western Scotland & the Isles + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_scotland_isles + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_scotland_isles } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_scotland_isles + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_scotland_isles + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_scotland_isles + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Ireland + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_ireland + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_ireland } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_ireland + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_ireland + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_ireland + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Northern England + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_england + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_northern_england } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_england + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_england + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_england + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Northern France & Brittany + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_france_brittany + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_northern_france_brittany } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_france_brittany + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_france_brittany + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_northern_france_brittany + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Pomerania & Prussia + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_pomerania_prussia + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_pomerania_prussia } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_pomerania_prussia + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_pomerania_prussia + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_pomerania_prussia + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Frisia + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_frisia + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_western_adventure_targets_frisia } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_frisia + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_frisia + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_western_adventure_targets_frisia + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = western_scandi_targets_list + } + random_in_list = { + list = western_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + + #SORT WAR + if = { + limit = { exists = scope:adventurer_target } + scope:scandi_adventurer = { trigger_event = fp1_scandinavian_adventurers.0005 } + } + } +} + +# General processing event, Eastern Europe. +fp1_scandinavian_adventurers.0003 = { + scope = none + hidden = yes + + trigger = { + #At least one valid adventurer. Should always be the case, but just to be sure. + any_in_global_list = { + variable = eastern_scandinavian_adventurer_list + count >= 1 + valid_scandinavian_adventurer = yes + } + } + + immediate = { + #SORT ACTORS + ##Grab the most eligible candidate from the eastern list. + ordered_in_global_list = { + variable = eastern_scandinavian_adventurer_list + limit = { valid_scandinavian_adventurer = yes } + order_by = { value = scandinavian_adventurer_priority_value } + save_scope_as = scandi_adventurer + add_character_modifier = scandinavian_adventurer_fp1_modifier + add_trait = adventurer + } + ##Check through the ordered eastern targets to see if a region needs a few more Norsemen. + ###Novgorod + if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_novgorod + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_novgorod } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_novgorod + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_novgorod + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_novgorod + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###White Rus' + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_white_rus + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_white_rus } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_white_rus + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_white_rus + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_white_rus + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Vladimir + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_vladimir + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_vladimir } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_vladimir + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_vladimir + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_vladimir + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Ruthenia + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_ruthenia + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_ruthenia } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_ruthenia + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_ruthenia + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_ruthenia + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Estonia + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_estonia + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_estonia } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_estonia + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_estonia + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_estonia + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + ###Zaporizhia + else_if = { + limit = { + NOR = { + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_zaporizhia + significant_north_germanic_presence_trigger = { SCANDI_ADV_TARGET_REGION = dlc_fp1_region_eastern_adventure_targets_zaporizhia } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_zaporizhia + count >= 3 + scattered_north_germanic_presence_trigger = yes + } + } + any_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_zaporizhia + valid_adventurer_target_trigger = yes + } + } + every_county_in_region = { + region = dlc_fp1_region_eastern_adventure_targets_zaporizhia + limit = { + NOT = { + holder = { is_in_list = western_scandi_targets_list } + } + valid_adventurer_target_trigger = yes + } + add_to_list = eastern_scandi_targets_list + } + random_in_list = { + list = eastern_scandi_targets_list + weight = { + modifier = { add = scandinavian_adventurer_target_title_priority_value } + } + save_scope_as = adventurer_target + } + } + + #SORT WAR + if = { + limit = { exists = scope:adventurer_target } + scope:scandi_adventurer = { trigger_event = fp1_scandinavian_adventurers.0005 } + } + } +} + +# Startup event, delaying the initial cycle. +fp1_scandinavian_adventurers.0004 = { + scope = none + hidden = yes + + immediate = { + trigger_event = { + id = fp1_scandinavian_adventurers.0001 + years = 5 + } + } +} + +# Start the war (separate event to config scopes correctly). +fp1_scandinavian_adventurers.0005 = { + hidden = yes + + immediate = { scandinavian_adventurer_start_war_effect = yes } +} + +# Drag in famous landless Norse characters if they haven't become landed after twenty years. +fp1_scandinavian_adventurers.0011 = { + scope = none + hidden = yes + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # No point in later starts. + game_start_date = 867.1.1 + } + + immediate = { + trigger_event = { + id = fp1_scandinavian_adventurers.0012 + years = 20 + } + } +} + +scripted_effect scandi_adventurers_grab_famous_character_effect = { + $CHARACTER$ ?= { + if = { + limit = { + # Still kickin'. + is_physically_able_adult = yes + # Shouldn't ever really be an issue, but y'never know. + is_ai = yes + # Hasn't got anything dynastic of note going on. + is_ruler = no + any_heir_title = { count = 0 } + # And is free and clear to go. + is_imprisoned = no + OR = { + is_married = no + AND = { + is_female = yes + matrilinear_marriage = yes + } + AND = { + is_male = yes + patrilinear_marriage = yes + } + } + # And is still North Germanic/not in either of the lists. + culture = { has_cultural_pillar = heritage_north_germanic } + NOR = { + save_temporary_scope_as = character + any_in_global_list = { + variable = western_scandinavian_adventurer_list + this = scope:character + } + any_in_global_list = { + variable = eastern_scandinavian_adventurer_list + this = scope:character + } + } + } + # Norse, Norwegians, & Danes go into the western adventurer list. + if = { + limit = { + OR = { + has_culture = culture:norse + has_culture = culture:norwegian + has_culture = culture:danish + } + } + add_to_global_variable_list = { + name = western_scandinavian_adventurer_list + target = this + } + } + # Norse & Swedes go into the eastern adventurer list. + if = { + limit = { + OR = { + has_culture = culture:norse + has_culture = culture:swedish + } + } + add_to_global_variable_list = { + name = eastern_scandinavian_adventurer_list + target = this + } + } + # Either way, flag 'em for priority in the system. + add_character_flag = prioritised_scandinavian_adventurer + } + } +} + +fp1_scandinavian_adventurers.0012 = { + hidden = yes + scope = none + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # No point in later starts. + game_start_date = 867.1.1 + + OR = { + exists = character:242 + exists = character:163119 + } + + } + + immediate = { + # Nab Rollo. + scandi_adventurers_grab_famous_character_effect = { CHARACTER = character:242 } + # Nab Ubbe. + scandi_adventurers_grab_famous_character_effect = { CHARACTER = character:163119 } + } +} + +fp1_scandinavian_adventurers.0021 = { + hidden = yes + scope = none + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # No point in later starts. + game_start_date = 867.1.1 + } + + immediate = { + # Haesteinn. + character:6878 = { add_character_flag = prioritised_scandinavian_adventurer } + # Ivar the Boneless. + character:163111 = { add_character_flag = prioritised_scandinavian_adventurer } + # Halfdan Whiteshirt. + character:163112 = { add_character_flag = prioritised_scandinavian_adventurer } + # Sigurdr Snake-in-the-Eye. + character:163110 = { add_character_flag = prioritised_scandinavian_adventurer } + # Bjorn Ironside. + character:163108 = { add_character_flag = prioritised_scandinavian_adventurer } + # Rurik the Troublemaker. + character:40605 = { add_character_flag = prioritised_scandinavian_adventurer } + # Dyre the Stranger. + character:6811 = { add_character_flag = prioritised_scandinavian_adventurer } + # Harald Fairhair. + character:144000 = { add_character_flag = prioritised_scandinavian_adventurer } + # Audr the Deep-Minded. + character:168609 = { add_character_flag = prioritised_scandinavian_adventurer } + } +} diff --git a/events/dlc/fp1/fp1_shieldmaiden_events.txt b/events/dlc/fp1/fp1_shieldmaiden_events.txt new file mode 100644 index 00000000..95a1a987 --- /dev/null +++ b/events/dlc/fp1/fp1_shieldmaiden_events.txt @@ -0,0 +1,1426 @@ +namespace = fp1_shieldmaiden + +scripted_trigger wrong_gender_for_fighting_in_faith_trigger = { + #Has access to the appropriate cultural parameter. + culture = { has_cultural_parameter = has_access_to_shieldmaidens } + trigger_if = { # Has the Royal Court and thus can modify pillars + limit = { + has_dlc_feature = diverge_culture # Can modify pillars + } + OR = { + AND = { + culture = { has_cultural_parameter = martial_custom_male_only_combatant } + is_female = yes + } + AND = { + culture = { has_cultural_parameter = martial_custom_female_only_combatant } + is_male = yes + } + } + } + trigger_else = { # Does not have the Royal Court and thus combatant is governed by faith + OR = { + AND = { + faith = { has_doctrine_parameter = combatant_must_be_male_if_no_roco } + is_female = yes + } + AND = { + faith = { has_doctrine_parameter = combatant_must_be_female_if_no_roco } + is_male = yes + } + } + } +} + +################################################## +# Shieldmaiden Challenges You +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +scripted_trigger likely_to_be_offended_list_trigger = { + trigger_if = { # Has the Royal Court and thus can modify pillars + limit = { has_dlc_feature = diverge_culture } + culture = { + NOT = { has_cultural_parameter = martial_custom_equal_combatant } + } + } + trigger_else = { + #Separate religions already think your ways are terrible already, co-religionists think you're making them look bad. + religion = root.religion + #No bias, no problem. + faith = { + NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } + } + } + culture = { + # Warrior by merit, if strong enought you can be a warrior regardless of gender + NOT = { has_cultural_parameter = high_prowess_ignores_knight_restrictions } + } + #Existing shieldmaidens cut slack. + NOT = { has_trait = shieldmaiden } + age >= childhood_education_start_age +} + +scripted_trigger valid_to_become_shieldperson_trigger = { + wrong_gender_for_fighting_in_faith_trigger = yes + is_available_ai_adult = yes + prowess >= decent_skill_rating + NOT = { has_trait = shieldmaiden } + NOT = { has_trait = craven } +} + +scripted_trigger child_dreams_of_shieldpersonhood_trigger = { + valid_to_become_shieldperson_trigger = yes + is_courtier_of = root + location = root.location + has_character_flag = fp1_dreams_of_shieldpersondom +} + +# A wrong-gender courtier wishes to fight for you +fp1_shieldmaiden.0001 = { + type = character_event + title = fp1_shieldmaiden.0001.t + desc = fp1_shieldmaiden.0001.desc + theme = martial + left_portrait = { + character = scope:shieldmaiden + animation = personality_bold + } + right_portrait = { + character = scope:challenged_knight + animation = dismissal + } + override_background = { reference = throne_room } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + #Standard checks. + is_available_at_peace_adult = yes + is_landed = yes + NOT = { has_character_flag = had_event_fp1_shieldmaiden_0001 } + #Has access to the appropriate cultural parameter. + culture = { has_cultural_parameter = has_access_to_shieldmaidens } + #Your society must consider one gender or the other lesser. + trigger_if = { # Has the Royal Court and thus can modify pillars + limit = { has_dlc_feature = diverge_culture } + culture = { NOT = { has_cultural_parameter = martial_custom_equal_combatant } } + } + trigger_else = { + faith = { NOT = { has_doctrine_parameter = combatant_can_be_either_gender_if_no_roco } } + } + #You've got to have at least one suitable courtier or guest. + any_courtier_or_guest = { valid_to_become_shieldperson_trigger = yes } + #Aaaand you need a decent knight to be challenged. + any_knight = { + is_available_ai_adult = yes + is_ruler = no + wrong_gender_for_fighting_in_faith_trigger = no + NOT = { has_trait = shieldmaiden } + } + } + + weight_multiplier = { + base = 1 + + #More likely if you're a ruling wrong-gender person yourself. + modifier = { + add = 1 + wrong_gender_for_fighting_in_faith_trigger = yes + } + #Even more so if you're actually a shieldmaiden yourself. + modifier = { + add = 1 + has_trait = shieldmaiden + } + # Weight up drastically if one of your children wishes to become a shieldmaiden. + modifier = { + add = 10 + any_child = { child_dreams_of_shieldpersonhood_trigger = yes } + } + } + + immediate = { + #Put the event on cooldown for a decade. + add_character_flag = { + flag = had_event_fp1_shieldmaiden_0001 + days = 3650 + } + #Sort the best possible shieldmaiden. + ordered_courtier_or_guest = { + # Grab children who were promised first. + limit = { + is_child_of = root + child_dreams_of_shieldpersonhood_trigger = yes + } + # Otherwise, look down available courtiers. + alternative_limit = { + valid_to_become_shieldperson_trigger = yes + #Check that it makes sense for this character to ask to be your shieldmaiden. + OR = { + #Meaning they should either not be one already... + NOT = { has_trait = shieldmaiden } + #... or be a wandering shieldmaiden. + is_pool_guest = yes + } + } + order_by = { + value = prowess + if = { + limit = { has_trait = brave } + add = 10 + } + if = { + limit = { has_trait = craven } + add = -10 + } + if = { + limit = { has_trait = ambitious } + add = 10 + } + if = { + limit = { has_trait = content } + add = -10 + } + if = { + limit = { has_trait = arrogant } + add = 5 + } + if = { + limit = { has_trait = humble } + add = -5 + } + if = { + limit = { has_trait = gregarious } + add = 5 + } + if = { + limit = { has_trait = shy } + add = -5 + } + } + save_scope_as = shieldmaiden + } + #And a suitable knight. + ordered_knight = { + limit = { + is_available_ai_adult = yes + is_ruler = no + wrong_gender_for_fighting_in_faith_trigger = no + NOT = { has_trait = shieldmaiden } + } + order_by = prowess + save_scope_as = challenged_knight + } + #For reference, add all courtiers & vassals who are likely to be offended if you just let any old wrong-gender human defy societal gender norms. + every_courtier = { + limit = { likely_to_be_offended_list_trigger = yes } + add_to_list = prejudiced_courtiers_list + } + every_vassal = { + limit = { likely_to_be_offended_list_trigger = yes } + add_to_list = prejudiced_courtiers_list + } + #Finally, if scope:shieldmaiden has dreamt of this day, clear the dream. Hopefully it went positively! + scope:shieldmaiden = { + if = { + limit = { has_character_flag = fp1_dreams_of_shieldpersondom } + remove_character_flag = fp1_dreams_of_shieldpersondom + } + } + } + + #You allow them to fight your knight. + option = { + name = fp1_shieldmaiden.0001.a + + scope:challenged_knight = { + #Your knight may hurt the prospective shieldmaiden. + scope:shieldmaiden = { + random = { + chance = scope:challenged_knight.prowess + increase_wounds_no_death_effect = { REASON = duel } + } + } + #And, depending on how fearsome they were, your knight may have been hurt right back. + random = { + chance = scope:shieldmaiden.prowess + increase_wounds_no_death_effect = { REASON = duel } + } + + #Sort the duel. + duel = { + skill = prowess + target = scope:shieldmaiden + #Your knight defeats the prospective shieldmaiden. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp1_shieldmaiden.0001.a.tt_success + root = { + send_interface_toast = { + title = fp1_shieldmaiden.0001.a.tt_success + left_icon = scope:shieldmaiden + scope:shieldmaiden = { + #scope:shieldmaiden is a tad miffed. + add_opinion = { + target = scope:challenged_knight + modifier = angry_opinion + opinion = -20 + } + } + #For your trouble, you and the knight split the prestige. + add_prestige = minor_prestige_gain + scope:challenged_knight = { add_prestige = minor_prestige_gain } + } + } + } + #Your knight is defeated. + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp1_shieldmaiden.0001.a.tt_failure + root = { + send_interface_toast = { + title = fp1_shieldmaiden.0001.a.tt_failure + left_icon = scope:shieldmaiden + scope:shieldmaiden = { + #Officially designated a shieldmaiden! + add_trait = shieldmaiden + #Happy with the outcome of the duel. + add_opinion = { + target = scope:challenged_knight + modifier = pleased_opinion + opinion = 20 + } + #If scope:shieldmaiden is a guest, you get them for free. + if = { + limit = { is_pool_guest = yes } + root = { add_courtier = scope:shieldmaiden } + } + } + } + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.25 + ai_energy = -0.25 + ai_boldness = -0.25 + } + modifier = { #Cowardly shieldmaidens don't see the necessity of a fight. + add = -40 + has_trait = shieldmaiden + has_trait = craven + } + modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it (either way). + add = 20 + has_trait = shieldmaiden + has_trait = brave + } + } + } + + #You take the challenge yourself. + option = { + name = fp1_shieldmaiden.0001.b + + #You may have hurt the prospective shieldmaiden in the duel. + scope:shieldmaiden = { + random = { + chance = root.prowess + increase_wounds_no_death_effect = { REASON = duel } + } + } + #Plus they may have hurt you right back. + random = { + chance = scope:shieldmaiden.prowess + increase_wounds_no_death_effect = { REASON = duel } + } + + #Sort the duel. + duel = { + skill = prowess + target = scope:shieldmaiden + #You defeat the prospective shieldmaiden. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp1_shieldmaiden.0001.b.tt_success + send_interface_toast = { + title = fp1_shieldmaiden.0001.b.tt_success + left_icon = scope:shieldmaiden + scope:shieldmaiden = { + #scope:shieldmaiden is a tad miffed. + add_opinion = { + target = root + modifier = angry_opinion + opinion = -20 + } + } + #Since you fought yourself, you get all the prestige. + add_prestige = medium_prestige_gain + } + } + #You are defeated. + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp1_shieldmaiden.0001.b.tt_failure + send_interface_toast = { + title = fp1_shieldmaiden.0001.b.tt_failure + left_icon = scope:shieldmaiden + scope:shieldmaiden = { + #Officially designated a shieldmaiden! + add_trait = shieldmaiden + #Happy with the outcome of the duel. + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 20 + } + #If scope:shieldmaiden is a guest, you get them for free. + if = { + limit = { is_pool_guest = yes } + root = { add_courtier = scope:shieldmaiden } + } + } + } + } + } + + stress_impact = { + brave = medium_stress_impact_loss + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_vengefulness = 0.25 + } + modifier = { #Weight up for stress. + add = 20 + has_trait = brave + } + modifier = { #Weight down for stress. + add = -20 + has_trait = craven + } + modifier = { #Cowardly shieldmaidens don't see the necessity of a fight. + add = -40 + has_trait = shieldmaiden + has_trait = craven + } + modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it (either way). + add = 20 + has_trait = shieldmaiden + has_trait = brave + } + } + } + + #Accept them outright. + option = { + name = fp1_shieldmaiden.0001.c + + scope:shieldmaiden = { + #Grant the shieldmaiden trait. + add_trait = shieldmaiden + #Opinion gain with new shieldmaiden. + add_opinion = { + target = root + modifier = fp1_accepted_my_sword_opinion + } + #If scope:shieldmaiden is a guest, you get them for free. + if = { + limit = { is_pool_guest = yes } + root = { add_courtier = scope:shieldmaiden } + } + } + #Loyalty hook on the new shieldmaiden for your trust. + if = { + limit = { + NOR = { + has_hook_of_type = { + target = scope:shieldmaiden + type = loyalty_hook + } + has_hook_of_type = { + target = scope:shieldmaiden + type = ritual_best_friend_hook + } + } + } + if = { + limit = { + has_hook = scope:shieldmaiden + } + hidden_effect = { remove_hook = { target = scope:shieldmaiden } } + } + add_hook = { + type = loyalty_hook + target = scope:shieldmaiden + } + } + #Opinion loss with all courtiers who do not feel they should be able to fight. + if = { + limit = { + any_in_list = { + list = prejudiced_courtiers_list + count >= 1 + } + } + every_in_list = { + list = prejudiced_courtiers_list + limit = { + #Exempt shieldmaidens; we do this at this point, otherwise the shieldmaiden themself will objet to their own shieldmaidenry. + NOT = { has_trait = shieldmaiden } + } + custom = fp1_accepted_shieldmaiden_without_question + add_opinion = { + target = root + modifier = fp1_defied_religious_traditions_opinion + } + } + } + + stress_impact = { + arbitrary = minor_stress_impact_loss + just = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_honor = 0.25 + ai_zeal = -0.25 + } + modifier = { #Weight down for stress. + add = 10 + has_trait = arbitrary + } + modifier = { #Weight up for stress. + add = -10 + has_trait = just + } + modifier = { #Weight up for stress. + add = -20 + has_trait = arrogant + } + modifier = { #Cowardly shieldmaidens don't see the necessity of a fight. + add = 40 + has_trait = shieldmaiden + has_trait = craven + } + modifier = { #Brave shieldmaidens, on the other hand, will insist you earn it. + add = -40 + has_trait = shieldmaiden + has_trait = brave + } + } + } + + #Reject them outright. + option = { + name = fp1_shieldmaiden.0001.d + + #Hefty opinion loss. + reverse_add_opinion = { + target = scope:shieldmaiden + modifier = fp1_rejected_my_sword_opinion + } + + #Stepped rivalry between you and the potential shieldmaiden. + progress_towards_rival_effect = { + REASON = rival_shieldmaiden_declined + CHARACTER = scope:shieldmaiden + OPINION = 0 + } + + stress_impact = { + arbitrary = minor_stress_impact_loss + arrogant = medium_stress_impact_loss + just = minor_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.25 + ai_compassion = -0.25 + ai_honor = -0.25 + } + modifier = { #Weight up for stress. + add = 10 + has_trait = arbitrary + } + modifier = { #Weight up for stress. + add = 20 + has_trait = arrogant + } + modifier = { #Weight down for stress. + add = -10 + has_trait = just + } + modifier = { #Weight down for stress. + add = -20 + has_trait = humble + } + modifier = { #Shieldmaidens are, themselves, more likely to give someone a shot. + add = -40 + has_trait = shieldmaiden + } + } + } +} + +################################################## +# Shieldmaiden Stymies an Escape Attempt +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +# A shieldmaiden stops your escape attempt in its tracks. +fp1_shieldmaiden.0011 = { + type = character_event + title = fp1_shieldmaiden.0011.t + desc = fp1_shieldmaiden.0011.desc + theme = prison + left_portrait = { + character = scope:prisoner + animation = fear + } + right_portrait = { + character = scope:shieldmaiden + animation = disapproval + } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + #Requires a shieldmaiden to get going. + imprisoner = { + any_courtier = { suitable_shieldmaiden_gaoler_trigger = yes } + } + } + + immediate = { + play_music_cue = "mx_cue_prison" + save_scope_as = prisoner + imprisoner = { + #Grab an appropriate shieldmaiden. + random_courtier = { + limit = { suitable_shieldmaiden_gaoler_trigger = yes } + save_scope_as = shieldmaiden + } + #Inform the imprisoner so that they're aware they're getting value for money. + trigger_event = fp1_shieldmaiden.0012 + } + scope:imprisoner = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = -20 + } + } + } + + #The shieldmaiden lays the smackdown. + option = { + name = fp1_shieldmaiden.0011.a + increase_wounds_no_death_effect = { REASON = beaten } + } +} + +# A shieldmaiden has stopped one of your prisoners escaping. +fp1_shieldmaiden.0012 = { + type = character_event + title = fp1_shieldmaiden.0012.t + desc = fp1_shieldmaiden.0012.desc + theme = prison + left_portrait = { + character = scope:prisoner + animation = fear + } + right_portrait = { + character = scope:shieldmaiden + animation = disapproval + } + + trigger = { + scope:prisoner = { + is_of_major_or_minor_interest_trigger = { CHARACTER = scope:imprisoner } + } + } + + immediate = { + play_music_cue = "mx_cue_prison" + #Show the wounds. + show_as_tooltip = { + scope:prisoner = { + increase_wounds_effect = { REASON = beaten } + } + } + } + + #Good job! + option = { + name = fp1_shieldmaiden.0012.a + scope:shieldmaiden = { + add_opinion = { + target = scope:imprisoner + modifier = compliment_opinion + opinion = 10 + } + } + } + + #Bad job! [in case this was an overreaction] + option = { + name = fp1_shieldmaiden.0012.b + scope:shieldmaiden = { + add_opinion = { + target = scope:imprisoner + modifier = annoyed_opinion + opinion = -10 + } + } + } +} + +################################################## +# Shieldmaiden saves you from Murder Attempt +# by Petter Vilberg & Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +scripted_trigger suitable_shieldmaiden_savior_trigger = { + has_trait = shieldmaiden + bodyguard_will_actually_do_job_trigger = yes +} + +# Scheme owner: shieldmaiden intervenes in murder. +fp1_shieldmaiden.0021 = { + type = character_event + window = scheme_failed_event + title = fp1_shieldmaiden.0021.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:murder_method = flag:hired_thugs } + desc = fp1_shieldmaiden.0021.desc.thugs + } + triggered_desc = { + trigger = { scope:murder_method = flag:riled_up_mob } + desc = fp1_shieldmaiden.0021.desc.mob + } + triggered_desc = { + trigger = { scope:murder_method = flag:lured_into_forest } + desc = fp1_shieldmaiden.0021.desc.lured_into_forest + } + triggered_desc = { + trigger = { scope:murder_method = flag:child_pushed } + desc = fp1_shieldmaiden.0021.desc.child_pushed + } + desc = fp1_shieldmaiden.0021.desc.assassin + } + triggered_desc = { + trigger = { exists = local_var:shieldmaiden_dies } + desc = fp1_shieldmaiden.0021.shieldmaiden_dies + } + } + theme = murder_scheme + left_portrait = { + character = scope:owner + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + center_portrait = { + character = scope:bodyguard + triggered_animation = { + trigger = { is_alive = no } + animation = map_fear + } + animation = random_weapon_aggressive + camera = camera_event_center_pointing_left + } + right_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + widget = { + gui = "event_window_widget_scheme" + container = "custom_widgets_container" + } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + scope:target = { + any_court_position_holder = { + type = bodyguard_court_position + suitable_shieldmaiden_savior_trigger = yes + } + } + } + + immediate = { + # Select a murder method. + random_list = { + 100 = { + save_scope_value_as = { + name = murder_method + value = flag:hired_assassin + } + } + 100 = { + save_scope_value_as = { + name = murder_method + value = flag:hired_thugs + } + } + 100 = { + save_scope_value_as = { + name = murder_method + value = flag:riled_up_mob + } + } + 100 = { + save_scope_value_as = { + name = murder_method + value = flag:lured_into_forest + } + } + 100 = { + save_scope_value_as = { + name = murder_method + value = flag:child_pushed + } + # Try to grab a suitable thing to lure them in with too. + rooftop_murder_lure_for_child_effect = yes + } + } + # Sort our shieldmaiden + scope:target = { + ordered_court_position_holder = { + type = bodyguard_court_position + limit = { suitable_shieldmaiden_savior_trigger = yes } + order_by = { value = murder_weight_best_bodyguard_value } + save_scope_as = shieldmaiden + } + } + hidden_effect = { + if = { + limit = { + # Shieldmaidens can't die from some murder methods. + NOR = { + scope:murder_method = flag:lured_into_forest + scope:murder_method = flag:child_pushed + } + } + random = { + chance = { + value = 75 + subtract = scope:shieldmaiden.prowess + } + set_local_variable = { + name = shieldmaiden_dies + value = yes + } + } + } + } + if = { + limit = { exists = local_var:shieldmaiden_dies } + show_as_tooltip = { + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:shieldmaiden + REASON = death_murder + } + } + } + random_dummy_gender_assassin_effect = yes + murder_failure_effect = yes + } + + #It's over. + option = { name = fp1_shieldmaiden.0021.a } + + #It's not over till I say it's over! + option = { + name = fp1_shieldmaiden.0021.b + trigger = { + NOT = { exists = scope:scheme_discovered } + } + restart_murder_scheme_effect = yes + } + + # Fire the rest of the outcome. + after = { + scope:target = { trigger_event = fp1_shieldmaiden.0022 } + } +} + +# Shieldmaiden saves you from murder +fp1_shieldmaiden.0022 = { + type = character_event + window = scheme_conclusion_event_no_header + title = fp1_shieldmaiden.0022.t + desc = { + # This block is only for the setup of child_pushed. + first_valid = { + triggered_desc = { + trigger = { + scope:murder_method = flag:child_pushed + exists = scope:child_pushed_dog + } + desc = murder_outcome.5001.child_pushed_dog + } + triggered_desc = { + trigger = { + scope:murder_method = flag:child_pushed + exists = scope:child_pushed_cat + } + desc = murder_outcome.5001.child_pushed_cat + } + triggered_desc = { + trigger = { + scope:murder_method = flag:child_pushed + exists = scope:child_pushed_toy + } + desc = murder_outcome.5001.child_pushed_toy + } + triggered_desc = { + trigger = { + scope:murder_method = flag:child_pushed + } + desc = murder_outcome.5001.child_pushed + } + } + # Shieldmaided saves you! + first_valid = { + triggered_desc = { + trigger = { scope:murder_method = flag:hired_thugs } + desc = fp1_shieldmaiden.0022.desc.thugs + } + triggered_desc = { + trigger = { scope:murder_method = flag:riled_up_mob } + desc = fp1_shieldmaiden.0022.desc.mob + } + triggered_desc = { + trigger = { scope:murder_method = flag:lured_into_forest } + desc = fp1_shieldmaiden.0022.desc.lured_into_forest + } + triggered_desc = { + trigger = { scope:murder_method = flag:child_pushed } + desc = fp1_shieldmaiden.0022.desc.child_pushed + } + desc = fp1_shieldmaiden.0022.desc.assassin + } + # ...but did they pay the ultimate price? + first_valid = { + triggered_desc = { + trigger = { + exists = local_var:shieldmaiden_dies + scope:murder_method = flag:hired_assassin + } + desc = fp1_shieldmaiden.0022.desc.assassin.shieldmaiden_dies + } + triggered_desc = { + trigger = { + exists = local_var:shieldmaiden_dies + scope:murder_method = flag:hired_thugs + } + desc = fp1_shieldmaiden.0022.desc.thugs.shieldmaiden_dies + } + triggered_desc = { + trigger = { + exists = local_var:shieldmaiden_dies + scope:murder_method = flag:riled_up_mob + } + desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_dies + } + triggered_desc = { + trigger = { + NOT = { exists = local_var:shieldmaiden_dies } + scope:murder_method = flag:riled_up_mob + } + desc = fp1_shieldmaiden.0022.desc.mob.shieldmaiden_lives + } + } + # And who was responsible!? + triggered_desc = { + trigger = { exists = scope:scheme_discovered } + desc = fp1_shieldmaiden.0022.owner_discovered + } + } + theme = murder_scheme + override_background = { + trigger = { scope:murder_method = flag:hired_thugs } + reference = wilderness_scope + } + override_background = { + trigger = { + OR = { + scope:murder_method = flag:riled_up_mob + scope:murder_method = flag:child_pushed + } + } + reference = courtyard + } + override_background = { + trigger = { scope:murder_method = flag:lured_into_forest } + reference = wilderness_forest + } + left_portrait = { + character = scope:target + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = rage + } + animation = paranoia + } + center_portrait = { + character = scope:bodyguard + triggered_animation = { + trigger = { is_alive = no } + animation = map_fear + } + animation = random_weapon_aggressive + } + right_portrait = { + character = scope:owner_to_reveal + triggered_animation = { + trigger = { exists = scope:scheme_discovered } + animation = fear + } + animation = stress + } + + immediate = { + if = { + limit = { scope:murder_method = flag:hired_thugs } + scope:home_province = { save_scope_as = background_wilderness_scope } + } + # Handle the death of the Shieldmaiden if necessary + if = { + limit = { exists = local_var:shieldmaiden_dies } + murder_interception_handle_extra_deaths_effect = { + VICTIM = scope:shieldmaiden + REASON = death_murder + } + } + } + + #Who could do such a thing? + option = { + name = fp1_shieldmaiden.0022.a + trigger = { + NOT = { exists = scope:scheme_discovered } + } + custom_tooltip = murder_save.failure_unknown_owner_tt + } + + #Vengeance! + option = { + name = fp1_shieldmaiden.0022.b + trigger = { exists = scope:scheme_discovered } + custom_tooltip = murder_save.failure_known_owner_tt + } + + after = { + add_character_modifier = { + modifier = watchful_modifier + days = watchful_modifier_duration + } + } +} + +################################################## +# Shieldmaiden has Developed Mad Skills +# by Ewan Cowhig Croft +# 0031 - 0040 +################################################## + +scripted_trigger valid_for_shieldmaiden_veterancy = { + # Must actually have the shieldmaiden trait. + has_trait = shieldmaiden + # Must still be in a situation where shieldmaidenhood is exceptional. + wrong_gender_for_fighting_in_faith_trigger = yes +} + +scripted_trigger valid_for_shieldmaiden_level_up = { + # Are they an eligible shieldmaiden? + valid_for_shieldmaiden_veterancy = yes + # Have they met the level up requirements? + has_variable = shieldmaiden_veterancy + this.var:shieldmaiden_veterancy >= shieldmaiden_veterancy_cap + # Already checked for a root shieldmaiden, but we re-check for courtiers. + is_available_at_peace_adult = yes + # Finally, they mustn't have all the shieldmaiden modifiers maxed out already. + NAND = { + has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier + has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier + has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier + } +} + +# Track the number of valid battles as a shieldmaiden a character has been in. +fp1_shieldmaiden.0031 = { + hidden = yes + scope = combat_side + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + OR = { + any_side_commander = { valid_for_shieldmaiden_veterancy = yes } + any_side_knight = { valid_for_shieldmaiden_veterancy = yes } + } + } + + immediate = { + # Sort side commander shieldmaidens. + every_side_commander = { + limit = { valid_for_shieldmaiden_veterancy = yes } + # Boost their veterancy if they already have it. + if = { + limit = { exists = var:shieldmaiden_veterancy } + change_variable = { + name = shieldmaiden_veterancy + add = 1 + } + } + # Or else set it up otherwise. + else = { + set_variable = { + name = shieldmaiden_veterancy + value = 1 + } + } + } + # Sort side knight shieldmaidens. + every_side_knight = { + limit = { valid_for_shieldmaiden_veterancy = yes } + if = { + limit = { exists = var:shieldmaiden_veterancy } + change_variable = { + name = shieldmaiden_veterancy + add = 1 + } + } + else = { + set_variable = { + name = shieldmaiden_veterancy + value = 1 + } + } + } + } +} + +# Your shieldmaiden improves their skills. +fp1_shieldmaiden.0032 = { + type = character_event + title = fp1_shieldmaiden.0032.t + desc = { + first_valid = { + # Am *I* the shieldmaiden in question? + triggered_desc = { + trigger = { scope:shieldmaiden = root } + desc = fp1_shieldmaiden.0032.desc.root + } + # Or is it a courtier? + desc = fp1_shieldmaiden.0032.desc.courtier + } + } + theme = martial + left_portrait = { + character = scope:shieldmaiden + animation = rage + } + override_background = { reference = army_camp } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_shieldmaiden_0032 } + # Must either be or have a shieldmaiden who's at veterancy cap. + OR = { + valid_for_shieldmaiden_level_up = yes + any_courtier = { valid_for_shieldmaiden_level_up = yes } + } + } + + weight_multiplier = { + base = 1 + + # Much more likely if you're a shieldmaiden yourself. + modifier = { + add = 2 + has_trait = shieldmaiden + } + } + + immediate = { + play_music_cue = "mx_cue_positive_effect" + add_character_flag = { + flag = had_event_fp1_shieldmaiden_0032 + days = 1825 + } + # Designate a valid shieldmaiden. + ## First, we always level up root, if possible. + if = { + limit = { valid_for_shieldmaiden_level_up = yes } + save_scope_as = shieldmaiden + } + ## Otherwise, we grab all relevant courtiers. + else = { + every_courtier = { + limit = { valid_for_shieldmaiden_level_up = yes } + add_to_list = veteran_shieldmaidens + } + } + ## Select a suitable one from the list to be scope:shieldmaiden, prioritising the most veteran. + if = { + limit = { + NOT = { exists = scope:shieldmaiden } + } + ordered_in_list = { + list = veteran_shieldmaidens + order_by = var:shieldmaiden_veterancy + save_scope_as = shieldmaiden + } + } + # Next, we reduce scope:shieldmaiden's veterancy, as they'll be levelling it up in the event. + scope:shieldmaiden = { + change_variable = { + name = shieldmaiden_veterancy + subtract = shieldmaiden_veterancy_cap + } + } + } + + # Martial: look how they command the shieldwall! + option = { + # Separate loc for first person POV. + name = { + trigger = { scope:shieldmaiden = root } + text = fp1_shieldmaiden.0032.a.root + } + # Aaaaand third person POV. + name = { + trigger = { + scope:shieldmaiden != root + } + text = fp1_shieldmaiden.0032.a.courtier + } + # Can't have the max-level version of this modifier. + trigger = { + NOT = { + scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier } + } + } + + # Process the level-up modifier for this stat block. + scope:shieldmaiden = { + # If we have no level on this path, give us the first rank. + if = { + limit = { + NOR = { + has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier + has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier + has_character_modifier = shieldmaiden_level_martial_3_fp1_modifier + } + } + add_character_modifier = shieldmaiden_level_martial_1_fp1_modifier + } + # If have the first level, quietly remove it and add the second. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_martial_1_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_1_fp1_modifier } + add_character_modifier = shieldmaiden_level_martial_2_fp1_modifier + } + # If we have the second level, quietly remove it and add the third. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_martial_2_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_martial_2_fp1_modifier } + add_character_modifier = shieldmaiden_level_martial_3_fp1_modifier + } + + } + + # No stress involved. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.25 + ai_rationality = 0.25 + } + } + } + + # Prowess: see how they swing that sword! + option = { + # Separate loc for first person POV. + name = { + trigger = { scope:shieldmaiden = root } + text = fp1_shieldmaiden.0032.b.root + } + # Aaaaand third person POV. + name = { + trigger = { + scope:shieldmaiden != root + } + text = fp1_shieldmaiden.0032.b.courtier + } + # Can't have the max-level version of this modifier. + trigger = { + NOT = { + scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier } + } + } + + # Process the level-up modifier for this stat block. + scope:shieldmaiden = { + # If we have no level on this path, give us the first rank. + if = { + limit = { + NOR = { + has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier + has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier + has_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier + } + } + add_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier + } + # If have the first level, quietly remove it and add the second. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_1_fp1_modifier } + add_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier + } + # If we have the second level, quietly remove it and add the third. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_prowess_2_fp1_modifier } + add_character_modifier = shieldmaiden_level_prowess_3_fp1_modifier + } + + } + + # No stress involved. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.25 + ai_honor = 0.25 + } + } + } + + # Intrigue: never a finer backstabber! + option = { + # Separate loc for first person POV. + name = { + trigger = { scope:shieldmaiden = root } + text = fp1_shieldmaiden.0032.c.root + } + # Aaaaand third person POV. + name = { + trigger = { + scope:shieldmaiden != root + } + text = fp1_shieldmaiden.0032.c.courtier + } + # Can't have the max-level version of this modifier. + trigger = { + NOT = { + scope:shieldmaiden = { has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier } + } + } + + # Process the level-up modifier for this stat block. + scope:shieldmaiden = { + # If we have no level on this path, give us the first rank. + if = { + limit = { + NOR = { + has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier + has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier + has_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier + } + } + add_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier + } + # If have the first level, quietly remove it and add the second. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_1_fp1_modifier } + add_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier + } + # If we have the second level, quietly remove it and add the third. + else_if = { + limit = { has_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier } + hidden_effect = { remove_character_modifier = shieldmaiden_level_intrigue_2_fp1_modifier } + add_character_modifier = shieldmaiden_level_intrigue_3_fp1_modifier + } + } + + # Minor stress revolving around paranoia: what if they backstab *YOU*, after all? + if = { + limit = { + scope:shieldmaiden != root + } + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_vengefulness = -0.5 + } + modifier = { #Weight up for stress. + add = 10 + scope:shieldmaiden != root + has_trait = trusting + } + modifier = { #Weight down for stress. + add = -10 + scope:shieldmaiden != root + has_trait = paranoid + } + } + } +} diff --git a/events/dlc/fp1/fp1_trade_events.txt b/events/dlc/fp1/fp1_trade_events.txt new file mode 100644 index 00000000..57665dbe --- /dev/null +++ b/events/dlc/fp1/fp1_trade_events.txt @@ -0,0 +1,2505 @@ +namespace = fp1_trade_events + +################################################## +# #Standard Trade Events +# 0001 - 0010 Raid or Trade - a raid potentially becomes a trading mission instead +# 0011 - 0020 A Comfortable Accomodation - a trade ceasefire has expired and can be renewed. +# 0021 - 0040 Visitors from Afar - courtiers swap between two places that trade with each other. +# 0041 - 0060 Belligerents with Benefits - beneficial modifiers are swapped between the capital and a foreign trade location. +# +# #Special Trade Events +# 1101 - 1130 An Alternative Arrangement - offer land to a raid-trade partner +# 1131 - 1170 The Northerner Menace - you buy off an SA's troops, or offer them a position under you. +# 1171 - 1180 A Holy Helping Hand - someone you have a raid-trade agreement with offers the hand of a child and conversion aid. +################################################## + + + + + + + + + + +################################################## +# STANDARD TRADE EVENTS + +################################################## +# Take or Trade? +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +# Hidden setup: could this raid become a trade mission instead? +fp1_trade_events.0001 = { + hidden = yes + scope = army + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Make sure that the army hasn't landed straight into combat or w/e. + is_army_in_combat = no + # Various checks related to scope:raider, including most of the stuff for fp1_trade_events.0002's trigger block. + scope:raider = { + #You must be leading your own forces. + this = root.army_commander + # Standard checks. + is_available_adult_or_is_commanding = yes + NOT = { has_character_flag = had_event_fp1_trade_events_0002 } + # Must be either river-capable raiders, or have invested in a suitable dynasty legacy. + OR = { + culture = { has_innovation = innovation_longboats } + dynasty ?= { has_dynasty_perk = fp1_adventure_legacy_2 } + } + # Must be at peace; not strictly, but this is the easiest way to reduce edge cases. + is_at_war = no + # Shouldn't hypothetically need to check whether or not scope:raider can actually raid the target, since that should be handled code-side before the on_action even fires. + } + # Is the target intimidating to this raid army? + army_size < fp1_trade_events_eligible_settlement_value + } + + immediate = { + random = { + chance = 20 + modifier = { + add = 20 + scope:raider = { + culture = { has_cultural_pillar = heritage_north_germanic } + dynasty = { has_dynasty_perk = fp1_adventure_legacy_2 } + } + } + save_scope_as = raid_army + scope:raider = { trigger_event = fp1_trade_events.0002 } + } + } +} + +scripted_effect fp1_trade_events_offer_trade_deal_raider_perspective_effect = { + # Add the truce. + add_truce_both_ways = { + character = scope:raider + days = fp1_trade_events_truce_length_value + name = TRUCE_TRADE_DEAL + } + # Add some mutual opinion gain. + add_opinion = { + target = scope:raider + modifier = pleased_opinion + opinion = 20 + } + # Raid loot for the army. + scope:raid_army = { add_loot = fp1_trade_events_cash_settlement_value } +} + +scripted_effect fp1_trade_events_offer_trade_deal_defender_perspective_effect = { + # Add the truce. + show_as_tooltip = { + add_truce_both_ways = { + character = scope:raider + days = fp1_trade_events_truce_length_value + name = TRUCE_TRADE_DEAL + } + } + # Add some mutual opinion gain. + reverse_add_opinion = { + target = scope:raider + modifier = pleased_opinion + opinion = 20 + } + # Minor beneficial modifier gain for the county. + scope:county = { + add_county_modifier = { + modifier = trade_instead_of_raid_fp1_modifier + days = fp1_trade_events_truce_length_value + } + } +} + +# You have the chance to trade peacefully instead of raiding. +fp1_trade_events.0002 = { + type = character_event + title = fp1_trade_events.0002.t + desc = fp1_trade_events.0002.desc + theme = raid + left_portrait = { + character = scope:raider + animation = personality_honorable + } + right_portrait = { + character = scope:county.holder + animation = disapproval + } + lower_right_portrait = scope:top_liege + override_background = { reference = burning_building } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_trade_events_0002 + days = 365 + } + # Grab top_liege, if they're a separate character. + if = { + limit = { + scope:county.holder != scope:county.holder.top_liege + } + scope:county.holder.top_liege = { save_scope_as = top_liege } + } + } + + # Offer trade: local holder. + option = { + name = fp1_trade_events.0002.a + + # Show offer results. + show_as_tooltip = { + random_list = { + # We only want to show the two possibilities, actual percentages don't matter, since the results are decided in the recipient's event. + 100 = { + show_chance = no + desc = fp1_trade_events.0002.a.accepted + scope:county.holder = { fp1_trade_events_offer_trade_deal_raider_perspective_effect = yes } + } + 100 = { + show_chance = no + desc = fp1_trade_events.0002.a.rejected + custom_tooltip = fp1_trade_events.0002.a.tt + } + } + } + # Send the actual offer. + scope:county.holder = { trigger_event = fp1_trade_events.0003 } + # Charge a little prestige to make it a trade-off. + add_prestige = minor_prestige_loss + + stress_impact = { + calm = medium_stress_impact_loss + compassionate = major_stress_impact_loss + wrathful = medium_stress_impact_gain + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_greed = -0.5 + } + opinion_modifier = { opinion_target = scope:county.holder.top_liege } + modifier = { # Weight up for stress. + add = 20 + has_trait = calm + } + modifier = { # Weight up for stress. + add = 30 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -20 + has_trait = wrathful + } + modifier = { # Weight down for stress. + add = -20 + has_trait = callous + } + modifier = { # Weight down for stress. + add = -30 + has_trait = sadistic + } + } + } + + # Offer trade: top liege. + option = { + name = fp1_trade_events.0002.b + trigger = { + scope:county.holder != scope:county.holder.top_liege + } + + # Show offer results. + show_as_tooltip = { + random_list = { + # We only want to show the two possibilities, actual percentages don't matter, since the results are decided in the recipient's event. + 100 = { + show_chance = no + desc = fp1_trade_events.0002.a.accepted + scope:county.holder.top_liege = { fp1_trade_events_offer_trade_deal_raider_perspective_effect = yes } + } + 100 = { + show_chance = no + desc = fp1_trade_events.0002.a.rejected + custom_tooltip = fp1_trade_events.0002.a.tt + } + } + } + # Send the actual offer. + scope:county.holder.top_liege = { trigger_event = fp1_trade_events.0003 } + # Charge a little prestige to make it a trade-off. + add_prestige = minor_prestige_loss + + stress_impact = { + calm = medium_stress_impact_loss + compassionate = major_stress_impact_loss + wrathful = medium_stress_impact_gain + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_greed = -0.5 + } + opinion_modifier = { opinion_target = scope:county.holder.top_liege } + modifier = { # Weight up for stress. + add = 20 + has_trait = calm + } + modifier = { # Weight up for stress. + add = 30 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -20 + has_trait = wrathful + } + modifier = { # Weight down for stress. + add = -20 + has_trait = callous + } + modifier = { # Weight down for stress. + add = -30 + has_trait = sadistic + } + } + } + + # Pillage it anyway. + option = { + name = fp1_trade_events.0002.c + + # Nahhhhh, screw it. + custom_tooltip = fp1_trade_events.0002.c.tt + + stress_impact = { + wrathful = medium_stress_impact_loss + callous = major_stress_impact_loss + sadistic = major_stress_impact_loss + calm = medium_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_compassion = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = wrathful + } + modifier = { # Weight up for stress. + add = 20 + has_trait = callous + } + modifier = { # Weight up for stress. + add = 30 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -20 + has_trait = calm + } + modifier = { # Weight down for stress. + add = -30 + has_trait = compassionate + } + } + } + + # Pillage & don't poke me about this again. + option = { + name = fp1_trade_events.0002.d + # AI don't need an opt-out. + trigger = { is_ai = no } + + # Furthermore, screw it for a very long time. + custom_tooltip = fp1_trade_events.0002.d.tt + add_character_flag = { flag = had_event_fp1_trade_events_0002 } + + stress_impact = { + wrathful = medium_stress_impact_loss + callous = major_stress_impact_loss + sadistic = major_stress_impact_loss + calm = medium_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_compassion = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = wrathful + } + modifier = { # Weight up for stress. + add = 20 + has_trait = callous + } + modifier = { # Weight up for stress. + add = 30 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -20 + has_trait = calm + } + modifier = { # Weight down for stress. + add = -30 + has_trait = compassionate + } + } + } +} + +scripted_effect fp1_set_prime_trade_partner_effect = { + # Store the variable for general tracking. + set_variable = { + name = fp1_prime_trade_deal + value = scope:recipient + days = fp1_trade_events_truce_length_value + } + # Fire off the renewal event from the date of expiry. + trigger_event = { + id = fp1_trade_events.0011 + days = fp1_trade_events_truce_renewal_date_value + } + # Trigger the on_action. + if = { + limit = { + NOT = { has_character_flag = fp1_trade_events_cycle_start } + } + add_character_flag = fp1_trade_events_cycle_start + trigger_event = { on_action = fp1_trade_events_cycle } + } +} + +# A raider in your lands would prefer commerce to pillage. +fp1_trade_events.0003 = { + type = character_event + title = fp1_trade_events.0003.t + desc = fp1_trade_events.0003.desc + theme = raid + left_portrait = { + character = scope:raider + animation = personality_bold + } + right_portrait = { + character = scope:recipient + animation = disapproval + } + override_background = { reference = burning_building } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + } + + immediate = { + # Grab a scope:recipient for the portraits, since this may have gone to two different characters. + save_scope_as = recipient + } + + # Unexpected, but highly welcome. + option = { + name = fp1_trade_events.0003.a + + # Apply effects & inform scope:raider. + hidden_effect = { + scope:raider = { + send_interface_toast = { + title = fp1_trade_events.0003.a.tt_success + left_icon = scope:recipient + scope:recipient = { fp1_trade_events_offer_trade_deal_raider_perspective_effect = yes } + } + # Quietly work out if this would become their pre-eminent trade deal. + ## Due to no existing prime trade deal. + if = { + limit = { + NOT = { has_variable = fp1_prime_trade_deal } + } + fp1_set_prime_trade_partner_effect = yes + } + ## Due to a dead/landless prime trade deal or cancelled truces. + else_if = { + limit = { + has_variable = fp1_prime_trade_deal + var:fp1_prime_trade_deal = { + OR = { + is_alive = no + is_landed = no + NOR = { + has_truce = scope:raider + scope:raider = { has_truce = var:fp1_prime_trade_deal } + } + } + } + } + fp1_set_prime_trade_partner_effect = yes + } + ## Due to scope:recipient being of a higher tier than their current one. + else_if = { + limit = { + has_variable = fp1_prime_trade_deal + scope:recipient.primary_title.tier > var:fp1_prime_trade_deal.primary_title.tier + } + fp1_set_prime_trade_partner_effect = yes + } + } + } + fp1_trade_events_offer_trade_deal_defender_perspective_effect = yes + + stress_impact = { + compassionate = medium_stress_impact_loss + forgiving = major_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_vengefulness = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = compassionate + } + modifier = { # Weight up for stress. + add = 30 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -20 + has_trait = callous + } + modifier = { # Weight down for stress. + add = -30 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -40 + has_trait = vengeful + } + } + } + + # *Trade*? With these murderers?! + option = { + name = fp1_trade_events.0003.b + + # Gain some prestige for turning down these marauders. + add_prestige = minor_prestige_gain + # Inform scope:raider that negotiations have failed. + hidden_effect = { + scope:raider = { + send_interface_toast = { + title = fp1_trade_events.0003.b.tt_failure + left_icon = scope:recipient + custom_tooltip = fp1_trade_events.0003.b.tt_failure + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = major_stress_impact_gain + callous = medium_stress_impact_loss + sadistic = major_stress_impact_loss + vengeful = major_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_vengefulness = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = callous + } + modifier = { # Weight up for stress. + add = 30 + has_trait = sadistic + } + modifier = { # Weight up for stress. + add = 40 + has_trait = vengeful + } + modifier = { # Weight down for stress. + add = -20 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -30 + has_trait = forgiving + } + } + } +} + +################################################## +# Comfortable Accomodation +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +scripted_trigger fp1_prime_trade_partner_still_valid_trigger = { + exists = $RAIDER$.var:fp1_prime_trade_deal + $RAIDER$.var:fp1_prime_trade_deal = { + this = $RECIPIENT$ + is_alive = yes + is_landed = yes + # Make sure the truce hasn't been cancelled. + has_truce = $RAIDER$ + $RAIDER$ = { has_truce = var:fp1_prime_trade_deal } + # And that the characters haven't wound up in the same realm somehow. + NOT = { top_liege = $RAIDER$.top_liege } + } +} + +scripted_effect fp1_trade_events_trade_renewed_raider_perspective_effect = { + # Add the truce. + add_truce_both_ways = { + character = scope:recipient + days = fp1_trade_events_truce_length_value + name = TRUCE_TRADE_DEAL + } + # Nudge towards friendship. + progress_towards_friend_effect = { + CHARACTER = scope:recipient + OPINION = 30 + REASON = friend_fp1_renewed_trade_deal + } + # Gain some prestige. + add_prestige = major_prestige_gain + # Sort deal veterancy. + set_variable = { + name = fp1_renewed_trade_deal + value = scope:recipient + days = fp1_trade_events_truce_length_value + } +} + +scripted_effect fp1_trade_events_trade_renewed_defender_perspective_effect = { + # Truce added in scope:raider's perspective. + show_as_tooltip = { + add_truce_both_ways = { + character = scope:raider + days = fp1_trade_events_truce_length_value + name = TRUCE_TRADE_DEAL + } + } + # Nudge towards friendship. + show_as_tooltip = { + progress_towards_friend_effect = { + CHARACTER = scope:raider + OPINION = 30 + REASON = friend_fp1_renewed_trade_deal + } + } + # Since prestige is the independence reward, we give a little bit of static cash. + add_gold = 50 +} + +scripted_effect fp1_trade_events_trade_renewal_rejected_effect = { + add_prestige = minor_prestige_loss + custom_tooltip = fp1_trade_events.0011.b.tt +} + +# A trade ceasefire has expired and can be renewed. +fp1_trade_events.0011 = { + type = character_event + title = fp1_trade_events.0011.t + desc = { + first_valid = { + # Not your first renewal. + triggered_desc = { + trigger = { + exists = var:fp1_renewed_trade_deal + var:fp1_renewed_trade_deal = var:fp1_prime_trade_deal + } + desc = fp1_trade_events.0011.desc.subsequent_renewal + } + # First time renewing this particular deal. + desc = fp1_trade_events.0011.desc.first_renewal + } + desc = fp1_trade_events.0011.desc.outro + } + theme = stewardship + left_portrait = { + character = scope:raider + animation = personality_rational + } + right_portrait = { + character = scope:recipient + animation = personality_bold + } + override_background = { reference = market } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks. + is_landed = yes + # Scope:raider's prime trade deal must still be valid. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:recipient + RAIDER = scope:raider + } + } + + # A grand offer! + option = { + name = fp1_trade_events.0011.a + # Make sure players in MP don't cheese anything. + trigger = { + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:recipient + RAIDER = scope:raider + } + } + + # You offer a renewal to scope:recipient. + random_list = { + 100 = { + show_chance = no + desc = fp1_trade_events.0011.a.accepted + show_as_tooltip = { fp1_trade_events_trade_renewed_raider_perspective_effect = yes } + } + 100 = { + show_chance = no + desc = fp1_trade_events.0011.a.rejected + show_as_tooltip = { fp1_trade_events_trade_renewal_rejected_effect = yes } + } + } + scope:recipient = { trigger_event = fp1_trade_events.0012 } + + stress_impact = { + honest = minor_stress_impact_loss + arbitrary = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_sociability = 0.25 + ai_rationality = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = honest + } + modifier = { # Weight down for stress. + add = -20 + has_trait = arbitrary + } + modifier = { # Weight down for stress. + add = -20 + has_trait = fickle + } + } + } + + # This has run its course... + option = { + name = fp1_trade_events.0011.b + + # A bit of consolation prestige for your hard-work. + add_prestige = minor_prestige_gain + # Confirm that the deal will lapse as expected. + custom_tooltip = fp1_trade_events.0011.b.tt + + stress_impact = { + arbitrary = minor_stress_impact_loss + fickle = minor_stress_impact_loss + honest = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.25 + ai_sociability = -0.25 + ai_rationality = -0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = arbitrary + } + modifier = { # Weight up for stress. + add = 10 + has_trait = fickle + } + modifier = { # Weight down for stress. + add = -10 + has_trait = honest + } + } + } +} + +# A trading partner proposes an extension. +fp1_trade_events.0012 = { + type = character_event + title = fp1_trade_events.0012.t + desc = { + first_valid = { + # Not your first renewal. + triggered_desc = { + trigger = { + exists = var:fp1_renewed_trade_deal + var:fp1_renewed_trade_deal = var:fp1_prime_trade_deal + } + desc = fp1_trade_events.0012.desc.subsequent_renewal + } + # First time renewing this particular deal. + desc = fp1_trade_events.0012.desc.first_renewal + } + desc = fp1_trade_events.0012.desc.outro + } + theme = stewardship + left_portrait = { + character = scope:recipient + animation = personality_rational + } + right_portrait = { + character = scope:raider + animation = admiration + } + override_background = { reference = market } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Scope:raider's prime trade deal must still be valid. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:recipient + RAIDER = scope:raider + } + } + + # A most agreeable proposal. + option = { + name = fp1_trade_events.0012.a + # Make sure players in MP don't cheese anything. + trigger = { + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:recipient + RAIDER = scope:raider + } + } + + # You agree to a renewal with scope:raider. + fp1_trade_events_trade_renewed_defender_perspective_effect = yes + # Inform scope:raider. + scope:raider = { + hidden_effect = { + send_interface_toast = { + title = fp1_trade_events.0012.a.tt_success + left_icon = scope:recipient + fp1_trade_events_trade_renewed_raider_perspective_effect = yes + } + } + } + + stress_impact = { + honest = minor_stress_impact_loss + arbitrary = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + ai_chance = { + base = 100 + opinion_modifier = { opinion_target = scope:raider} + ai_value_modifier = { + ai_honor = 0.5 + ai_sociability = 0.25 + ai_rationality = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = honest + } + modifier = { # Weight down for stress. + add = -20 + has_trait = arbitrary + } + modifier = { # Weight down for stress. + add = -20 + has_trait = fickle + } + } + } + + # I'm done with this GetWomanMan. + option = { + name = fp1_trade_events.0012.b + + # A bit of consolation prestige for your independence. + add_prestige = minor_prestige_gain + # Confirm that the deal will lapse as expected. + custom_tooltip = fp1_trade_events.0012.b.tt + # Inform scope:raider, who is disappointed. + scope:raider = { + add_opinion = { + target = scope:recipient + modifier = disappointed_opinion + opinion = -20 + } + hidden_effect = { + send_interface_toast = { + title = fp1_trade_events.0012.b.tt_failure + left_icon = scope:recipient + fp1_trade_events_trade_renewal_rejected_effect = yes + } + } + } + + stress_impact = { + arbitrary = minor_stress_impact_loss + fickle = minor_stress_impact_loss + honest = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.25 + ai_sociability = -0.25 + ai_rationality = -0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = arbitrary + } + modifier = { # Weight up for stress. + add = 10 + has_trait = fickle + } + modifier = { # Weight down for stress. + add = -10 + has_trait = honest + } + } + } +} + +################################################## +# Visitors from Afar +# by Ewan Cowhig Croft +# 0021 - 0040 +################################################## + +scripted_effect fp1_trade_events_0021_acquire_courtier_effect = { + # Acquire selection and boost opinion. + add_courtier = $SELECTION$ + progress_towards_friend_effect = { + CHARACTER = $SELECTION$ + OPINION = 100 + REASON = friend_accepted_courtier + } + # Ditch the rest. + hidden_effect = { + scope:merchant = { + if = { + limit = { + NOT = { this = $SELECTION$ } + } + death = { death_reason = death_vanished } + } + } + scope:priest = { + if = { + limit = { + NOT = { this = $SELECTION$ } + } + death = { death_reason = death_vanished } + } + } + if = { + limit = { + exists = scope:spy + NOT = { scope:spy = $SELECTION$ } + } + scope:spy = { + death = { death_reason = death_vanished } + } + } + } +} + +# Courtiers swap between two places that trade with each other. +fp1_trade_events.0021 = { + type = character_event + title = fp1_trade_events.0021.t + desc = fp1_trade_events.0021.desc + theme = alliance + left_portrait = { + character = scope:merchant + animation = personality_greedy + } + right_portrait = { + character = scope:priest + animation = personality_zealous + } + lower_center_portrait = scope:spy + lower_right_portrait = var:fp1_prime_trade_deal + override_background = { reference = docks } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks. + ## Allow when commanding to be fairer to people out raiding, which we incentivise you to do personally to get pacts to begin with. + is_available_adult_or_is_commanding = yes + NOT = { has_character_flag = had_event_fp1_trade_events_0021 } + is_landed = yes + # Scope:raider's prime trade deal must still be valid. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = root.var:fp1_prime_trade_deal + RAIDER = root + } + } + + weight_multiplier = { + base = 1 + + # Weight up a little for certain lifestyle traits, as these spread stories of your success and accomplishments. + modifier = { + add = 0.25 + has_trait = diplomat + } + modifier = { + add = 0.25 + has_trait = avaricious + } + # Weight up for this being a renewed treaty. + modifier = { + add = 1 + exists = root.var:fp1_renewed_trade_deal + exists = root.var:fp1_prime_trade_deal + root.var:fp1_prime_trade_deal = root.var:fp1_renewed_trade_deal + } + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_trade_events_0021 + days = 1825 + } + # Save some things for loc & future events. + save_scope_as = raider + var:fp1_prime_trade_deal = { save_scope_as = partner } + # Create our players. + ## A merchant. + create_character = { + template = fp1_trade_partner_merchant + location = root.capital_province + save_scope_as = merchant + } + ## A priest. + create_character = { + template = fp1_trade_partner_priest + location = root.capital_province + save_scope_as = priest + } + ## And a spy, if appropriate. + if = { + limit = { + NOT = { has_trait = trusting } + intrigue >= high_skill_rating + } + create_character = { + template = fp1_trade_partner_spy + location = root.capital_province + save_scope_as = spy + } + } + } + + # I could use someone to count my coin... + option = { + name = fp1_trade_events.0021.a + + # Select the merchant. + fp1_trade_events_0021_acquire_courtier_effect = { SELECTION = scope:merchant } + + stress_impact = { + trusting = minor_stress_impact_loss + generous = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + ai_sociability = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -20 + has_trait = generous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + } + } + + # Welcome to my service, [priest.GetFirstName]! + option = { + name = fp1_trade_events.0021.b + + # Select the priest. + fp1_trade_events_0021_acquire_courtier_effect = { SELECTION = scope:priest } + + stress_impact = { + trusting = minor_stress_impact_loss + zealous = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.25 + ai_zeal = -0.5 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -20 + has_trait = zealous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + } + } + + # And who is this accompanying you? + option = { + name = fp1_trade_events.0021.c + trigger = { exists = scope:spy } + skill = intrigue + + fp1_trade_events_0021_acquire_courtier_effect = { SELECTION = scope:spy } + + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_boldness = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + } + } + + # Move along, foreigners, my agreement is with [recipient.GetFirstName]. + option = { + name = fp1_trade_events.0021.d + + # Gain some prestige for your haughtiness. + add_prestige = medium_prestige_gain + # But annoy your trading partner. + reverse_add_opinion = { + target = var:fp1_prime_trade_deal + modifier = annoyed_opinion + opinion = -40 + } + # Dispose of the guests. + hidden_effect = { + scope:merchant = { + death = { death_reason = death_vanished } + } + scope:priest = { + death = { death_reason = death_vanished } + } + if = { + limit = { exists = scope:spy } + scope:spy = { + death = { death_reason = death_vanished } + } + } + } + + stress_impact = { + paranoid = medium_stress_impact_loss + shy = medium_stress_impact_loss + compassionate = minor_stress_impact_gain + gregarious = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.25 + ai_sociability = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = paranoid + } + modifier = { # Weight up for stress. + add = 20 + has_trait = shy + } + modifier = { # Weight down for stress. + add = -10 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -30 + has_trait = gregarious + } + } + } + + after = { + # Send a companion event to var:fp1_prime_trade_deal. + #var:fp1_prime_trade_deal = { trigger_event = fp1_trade_events.0031 } + var:fp1_prime_trade_deal = { + trigger_event = { + id = fp1_trade_events.0031 + days = 1 + } + } + } +} + +fp1_trade_events.0031 = { + type = character_event + title = fp1_trade_events.0031.t + desc = fp1_trade_events.0031.desc + theme = alliance + left_portrait = { + character = scope:warrior + animation = personality_bold + } + lower_right_portrait = scope:raider + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks. + ## Allow when commanding - we want to make trading compacts a bit more equal. + is_available_adult = yes + NOT = { has_character_flag = had_event_fp1_trade_events_0031 } + is_landed = yes + # Scope:raider's prime trade deal must still be valid. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:raider.var:fp1_prime_trade_deal + RAIDER = scope:raider + } + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_trade_events_0031 + days = 1825 + } + # Create scope:warrior. + create_character = { + template = fp1_trade_partner_warrior + location = scope:raider.var:fp1_prime_trade_deal.capital_province + save_scope_as = warrior + } + } + + # We can always use another sword! + option = { + name = fp1_trade_events.0031.a + + # Gain the warrior, who's understandably pretty hyped. + add_courtier = scope:warrior + progress_towards_friend_effect = { + CHARACTER = scope:warrior + OPINION = 100 + REASON = friend_accepted_courtier + } + + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_boldness = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + } + } + + # Be gone, bandit. + option = { + name = fp1_trade_events.0031.b + + # Gain some prestige for your haughtiness. + add_prestige = medium_prestige_gain + # But annoy your trading partner, though not as much as snubbing an open delegation on the inverse. + reverse_add_opinion = { + target = scope:raider + modifier = annoyed_opinion + opinion = -20 + } + # Dispose of the guest. + hidden_effect = { + scope:warrior = { + death = { death_reason = death_vanished } + } + } + + stress_impact = { + paranoid = medium_stress_impact_loss + shy = medium_stress_impact_loss + compassionate = minor_stress_impact_gain + gregarious = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.25 + ai_sociability = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = paranoid + } + modifier = { # Weight up for stress. + add = 20 + has_trait = shy + } + modifier = { # Weight down for stress. + add = -10 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -30 + has_trait = gregarious + } + } + } +} + +################################################## +# Belligerents with Benefits +# by Ewan Cowhig Croft +# 0041 - 0060 +################################################## + +scripted_trigger fp1_trade_events_0041_advanced_culture_comparison_trigger = { + scope:raider.culture = { + # Must have separate cultures for one to be more advanced. + this != scope:partner.culture + # And scope:partner's must be in a later era than scope:raider's. + ## Tribal. + trigger_if = { + limit = { + NOT = { has_cultural_era_or_later = culture_era_early_medieval } + } + scope:partner.culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + ## Early Medieval. + trigger_if = { + limit = { + NOT = { has_cultural_era_or_later = culture_era_high_medieval } + } + scope:partner.culture = { has_cultural_era_or_later = culture_era_high_medieval } + } + ## High Medieval. + trigger_if = { + limit = { + NOT = { has_cultural_era_or_later = culture_era_late_medieval } + } + scope:partner.culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + ## And you can't be later than the Late Medieval, so we ignore that'un. + } +} + +scripted_trigger fp1_trade_events_0041_valid_partner_counties_trigger = { + has_county_modifier = recently_looted_modifier + NOT = { has_county_modifier = fp1_trade_events_raid_consultants_modifier } +} + +scripted_effect fp1_trade_events_0041_offer_consultation_deal_raider_perspective_effect = { + # You pay coin and get discounts to construction in your domain. + remove_treasury_or_gold = massive_gold_value + # Give a modifier with development growth to underdeveloped holdings. + every_held_title = { + title_tier = county + limit = { + development_level <= 15 + } + custom = fp1_trade_events.0041.foreign_architects_growth.tt + add_county_modifier = { + modifier = fp1_trade_events_foreign_architects_modifier + years = 20 + } + } + # And one without it to holdings that are adequately developed. + every_held_title = { + title_tier = county + limit = { + development_level >= 16 + } + custom = fp1_trade_events.0041.foreign_architects_no_growth.tt + add_county_modifier = { + modifier = fp1_trade_events_foreign_architects_no_growth_modifier + years = 20 + } + } + # Plus stepped friendship with scope:partner. + progress_towards_friend_effect = { + CHARACTER = scope:partner + OPINION = 30 + REASON = friend_fp1_renewed_trade_deal + } + # Scope:partner gets some help with raiding. + custom_tooltip = fp1_trade_events.0041.partner_gets_raid_aid.tt +} + +scripted_effect fp1_trade_events_0041_offer_consultation_deal_partner_perspective_effect = { + # You pay coin and get raid protection increases in one duchy. + remove_treasury_or_gold = scandinavian_adventurer_fp1_0041_gold_value + # Give modifiers that make that duchy better able to withstand raids. + $TARGET_DUCHY$ = { + save_scope_as = target_duchy + every_in_de_jure_hierarchy = { + limit = { + tier = tier_county + holder = { + OR = { + any_liege_or_above = { this = scope:partner } + this = scope:partner + } + } + } + custom = fp1_trade_events.0041.partner.benefiting_counties.tt + add_county_modifier = { + modifier = fp1_trade_events_raid_consultants_modifier + years = 20 + } + # Grab the holders for happiness purposes. + holder = { + if = { + limit = { + this != scope:partner + } + add_to_list = happy_with_raid_proofing_list + } + } + } + } + # Anyone who holds lands here other than you is duly grateful. + every_in_list = { + list = happy_with_raid_proofing_list + add_opinion = { + target = scope:partner + modifier = grateful_opinion + opinion = 30 + } + } + # Plus, stepped friendship with scope:raider (actual effect handled scope:raider-side). + show_as_tooltip = { + progress_towards_friend_effect = { + CHARACTER = scope:raider + OPINION = 30 + REASON = friend_fp1_renewed_trade_deal + } + } + # Scope:raider gets help with civic works. + custom_tooltip = fp1_trade_events.0041.raider_gets_civic_aid.tt +} + +scripted_effect fp1_trade_events_0041_consultation_rejected_effect = { + # Lose a fair bit of prestige. + add_prestige = medium_prestige_loss +} + +# Beneficial modifiers are swapped between the capital and a foreign trade location. +fp1_trade_events.0041 = { + type = character_event + title = fp1_trade_events.0041.t + desc = fp1_trade_events.0041.desc + theme = alliance + left_portrait = { + character = scope:raider + animation = personality_forgiving + } + right_portrait = { + character = scope:partner + animation = personality_content + } + override_background = { reference = docks } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks. + ## Allow when commanding to be fairer to people out raiding, which we incentivise you to do personally to get pacts to begin with. + is_available_adult_or_is_commanding = yes + NOT = { has_character_flag = had_event_fp1_trade_events_0041 } + is_landed = yes + # Scope:raider's prime trade deal must still be valid & available. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = root.var:fp1_prime_trade_deal + RAIDER = root + } + root.var:fp1_prime_trade_deal = { is_available_adult_or_is_commanding = yes } + # And they've gotta be able to take the deal in some fashion. + root.var:fp1_prime_trade_deal = { + any_sub_realm_county = { fp1_trade_events_0041_valid_partner_counties_trigger = yes } + } + # Plus, there must be a trade to be made. + ## Meaning one must be tribal, the other feudal. + government_has_flag = government_is_tribal + root.var:fp1_prime_trade_deal = { + NOT = { government_has_flag = government_is_tribal } + } + ## And that scope:partner can't raid for some other reason. + root.var:fp1_prime_trade_deal = { can_raid_trigger = no } + } + + weight_multiplier = { + base = 1 + + # Weight up a little for certain lifestyle traits, as these spread stories of your success and accomplishments. + modifier = { + add = 0.25 + has_trait = diplomat + } + modifier = { + add = 0.25 + has_trait = avaricious + } + # Weight up for this being a renewed treaty. + modifier = { + add = 1 + exists = root.var:fp1_renewed_trade_deal + exists = root.var:fp1_prime_trade_deal + root.var:fp1_prime_trade_deal = root.var:fp1_renewed_trade_deal + } + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_trade_events_0041 + days = 3625 + } + # Save some things for loc & future events. + save_scope_as = raider + var:fp1_prime_trade_deal = { save_scope_as = partner } + } + + # Could they build me a palace in the [partner.GetCulture] style? + option = { + name = { + trigger = { fp1_trade_events_0041_advanced_culture_comparison_trigger = yes } + text = fp1_trade_events.0041.a.advanced + } + name = { + trigger = { fp1_trade_events_0041_advanced_culture_comparison_trigger = no } + text = fp1_trade_events.0041.a.fallback + } + trigger = { + can_make_expensive_purchase_trigger = { PRICE = scandinavian_adventurer_fp1_0041_gold_value } + } + + # Show possible results depending on scope:partner's response. + random_list = { + 100 = { + show_chance = no + desc = fp1_trade_events.0041.a.offer_accepted + show_as_tooltip = { fp1_trade_events_0041_offer_consultation_deal_raider_perspective_effect = yes } + } + 100 = { + show_chance = no + desc = fp1_trade_events.0041.a.offer_rejected + show_as_tooltip = { fp1_trade_events_0041_consultation_rejected_effect = yes } + } + } + # And send scope:partner their event. + scope:partner = { trigger_event = fp1_trade_events.0051 } + + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_boldness = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + } + } + + # Let's keep this informal. + option = { + name = fp1_trade_events.0041.b + + # Stress loss; handled in stress_impact block. + + stress_impact = { + base = medium_stress_impact_loss + paranoid = medium_stress_impact_loss + gregarious = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -0.25 + ai_sociability = -0.5 + } + modifier = { # Weight up for stress. + add = 20 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = gregarious + } + } + } +} + +scripted_effect fp1_trade_events_0051_inform_scope_raider_effect = { + hidden_effect = { + scope:raider = { + send_interface_toast = { + title = fp1_trade_events.0051.offer_accepted + left_icon = scope:partner + fp1_trade_events_0041_offer_consultation_deal_raider_perspective_effect = yes + } + } + } +} + +fp1_trade_events.0051 = { + type = character_event + title = fp1_trade_events.0051.t + desc = fp1_trade_events.0051.desc + theme = alliance + left_portrait = { + character = scope:partner + animation = personality_forgiving + } + right_portrait = { + character = scope:raider + animation = personality_content + } + override_background = { reference = docks } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks done scope:raider's side. + # Scope:raider's prime trade deal must still be valid. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = scope:raider.var:fp1_prime_trade_deal + RAIDER = scope:raider + } + } + + immediate = { + # Build a list of valid duchies. + ## First, we sort through all valid counties and add their duchies to a list. + every_sub_realm_county = { + limit = { fp1_trade_events_0041_valid_partner_counties_trigger = yes } + duchy = { add_to_list = duchies_valid_for_raid_proofing_list } + } + ## Then we order the list to pick the largest duchies. + ordered_in_list = { + list = duchies_valid_for_raid_proofing_list + max = 3 + order_by = { + value = 0 + + # Then we add a point for every de jure county that's also de facto part of the sub-realm. + every_in_de_jure_hierarchy = { + limit = { + tier = tier_county + holder = { + OR = { + this = scope:partner + any_liege_or_above = { this = scope:partner } + } + } + } + add = 1 + + # And again for every one that has _also_ been raided recently, since that's a good indicator of raid-density. + if = { + limit = { + any_county_province = { has_province_modifier = recently_looted_modifier } + } + add = 1 + } + } + } + if = { + limit = { + NOT = { exists = scope:option_1 } + } + save_scope_as = option_1 + } + if = { + limit = { + NOT = { + this = scope:option_1 + exists = scope:option_2 + } + } + save_scope_as = option_2 + } + if = { + limit = { + NOT = { + this = scope:option_1 + this = scope:option_2 + exists = scope:option_3 + } + } + save_scope_as = option_3 + } + } + } + + # Scope:option_1 could use some experts... + option = { + name = fp1_trade_events.0051.a + + # Apply effects to scope:option_1. + fp1_trade_events_0041_offer_consultation_deal_partner_perspective_effect = { TARGET_DUCHY = scope:option_1 } + # Inform scope:raider of the decision. + fp1_trade_events_0051_inform_scope_raider_effect = yes + + stress_impact = { + compassionate = minor_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + greedy = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_rationality = 0.5 + ai_greed = -0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = compassionate + } + modifier = { # Weight down for stress. + add = -20 + has_trait = callous + } + modifier = { # Weight down for stress. + add = -20 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -30 + has_trait = greedy + } + } + } + + # Scope:option_2 might be a good place for them? + option = { + name = fp1_trade_events.0051.b + trigger = { exists = scope:option_2 } + + # Apply effects to scope:option_2. + fp1_trade_events_0041_offer_consultation_deal_partner_perspective_effect = { TARGET_DUCHY = scope:option_2 } + # Inform scope:raider of the decision. + fp1_trade_events_0051_inform_scope_raider_effect = yes + + stress_impact = { + compassionate = minor_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + greedy = major_stress_impact_gain + } + ai_chance = { + # AI should always pick the first & mostly-best option. + base = 0 + } + } + + # I think I'd prefer to shore up scope:option_3. + option = { + name = fp1_trade_events.0051.c + trigger = { exists = scope:option_3 } + + # Apply effects to scope:option_3. + fp1_trade_events_0041_offer_consultation_deal_partner_perspective_effect = { TARGET_DUCHY = scope:option_3 } + # Inform scope:raider of the decision. + fp1_trade_events_0051_inform_scope_raider_effect = yes + + stress_impact = { + compassionate = minor_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + greedy = major_stress_impact_gain + } + ai_chance = { + # AI should always pick the first & mostly-best option. + base = 0 + } + } + + # What an outrageous proposal! + option = { + name = fp1_trade_events.0051.d + + # Gain a little consolation prestige. + add_prestige = minor_prestige_gain + # Inform scope:raider of the decision. + hidden_effect = { + scope:raider = { + send_interface_toast = { + title = fp1_trade_events.0051.offer_rejected + left_icon = scope:partner + fp1_trade_events_0041_consultation_rejected_effect = yes + } + } + } + + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.25 + ai_rationality = -0.25 + ai_compassion = -0.5 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = callous + } + modifier = { # Weight up for stress. + add = 10 + has_trait = sadistic + } + modifier = { # Weight down for stress. + add = -30 + has_trait = compassionate + } + } + } +} + + + + + + + + + + +################################################## +# SPECIAL TRADE EVENTS + +################################################## +# The Northerner Menace +# by Ewan Cowhig Croft +# 1131 - 1170 +################################################## + +# You buy off an SA's troops, or offer them a position under you. +fp1_trade_events.1131 = { + type = character_event + title = fp1_trade_events.1131.t + desc = fp1_trade_events.1131.desc + theme = war + left_portrait = { + character = scope:defender + animation = worry + } + right_portrait = { + character = scope:attacker + animation = personality_greedy + } + override_background = { reference = fp1_beached_longships } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Make sure the war is still ongoing + any_character_war = { + using_cb = fp1_scandi_adventurer_conquest + primary_attacker = scope:attacker + primary_defender = scope:defender + } + } + + immediate = { + # Grab the CB for general reference. + random_character_war = { + limit = { + using_cb = fp1_scandi_adventurer_conquest + primary_attacker = scope:attacker + primary_defender = scope:defender + } + save_scope_as = sa_war + } + } + + # Never! Back to your frozen hellscape of a home, scum! + option = { + name = fp1_trade_events.1131.a + + # Gain a bit of prestige for your boasting. + add_prestige = medium_prestige_gain + # Stress gain trade-off handled in stress impact. + # Clarify that this is merely another trade-off option. + custom_tooltip = fp1_trade_events.1131.d.tt + + stress_impact = { + base = medium_stress_gain + arrogant = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + fickle = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_energy = 0.25 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = arrogant + } + modifier = { # Weight up for stress. + add = 10 + has_trait = ambitious + } + modifier = { # Weight up for stress. + add = 10 + has_trait = stubborn + } + modifier = { # Weight up for stress. + add = 10 + has_trait = vengeful + } + modifier = { # Weight down for stress. + add = -20 + has_trait = humble + } + modifier = { # Weight down for stress. + add = -20 + has_trait = content + } + modifier = { # Weight down for stress. + add = -20 + has_trait = fickle + } + modifier = { # Weight down for stress. + add = -20 + has_trait = forgiving + } + } + } + + # Well, if it's land they want... + option = { + name = fp1_trade_events.1131.b + trigger = { + # Must be able to vassalise a duke. + highest_held_title_tier >= tier_kingdom + # Target duchy doesn't contain a player that isn't scope:defender. + NOT = { + any_player = { + # First, see if they're a vassal of scope:defender. + any_liege_or_above = { this = scope:defender } + # And if they are, make sure they have no titles held within the appropriate lands. + save_temporary_scope_as = vassal_player + any_in_list = { + list = target_titles + holder = scope:vassal_player + } + } + } + # Scope:defender must control at least some lands outside of the target duchy. + any_held_title = { + NOT = { is_in_list = target_titles } + } + } + + # You allow them to win the war... + scope:sa_war = { end_war = attacker } + add_prestige = major_prestige_loss + # ... but then immediately vassalise them. + create_title_and_vassal_change = { + type = swear_fealty + save_scope_as = change + } + scope:attacker = { + change_liege = { + liege = scope:defender + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + # This also gives a nice long truce so that they can't immediately usurp you. + hidden_effect = { + cancel_truce_both_ways = scope:attacker + } + add_truce_both_ways = { + character = scope:attacker + days = 7300 + name = FP1_SCANDINAVIAN_ADVENTURER_VASSAL_TRUCE_NAME + } + # Plus we whack some opinion in there for good measure. + progress_towards_friend_effect = { + CHARACTER = scope:attacker + OPINION = 50 + REASON = friend_fp1_renewed_trade_deal + } + # Finally, add a breather before the next SA. + fp1_add_realm_size_appropriate_sa_reprieve_effect = yes + + stress_impact = { + generous = minor_stress_impact_loss + humble = minor_stress_impact_loss + content = minor_stress_impact_loss + fickle = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + greedy = major_stress_impact_gain + arrogant = major_stress_impact_gain + ambitious = major_stress_impact_gain + stubborn = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + # Base 0 so that only a particular kind of AI will go for this. + base = 0 + ai_value_modifier = { + ai_rationality = 0.25 + ai_greed = -0.5 + ai_vengefulness = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = generous + } + modifier = { # Weight up for stress. + add = 10 + has_trait = humble + } + modifier = { # Weight up for stress. + add = 10 + has_trait = content + } + modifier = { # Weight up for stress. + add = 10 + has_trait = fickle + } + modifier = { # Weight up for stress. + add = 10 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -30 + has_trait = greedy + } + modifier = { # Weight down for stress. + add = -30 + has_trait = arrogant + } + modifier = { # Weight down for stress. + add = -30 + has_trait = ambitious + } + modifier = { # Weight down for stress. + add = -30 + has_trait = stubborn + } + modifier = { # Weight down for stress. + add = -30 + has_trait = vengeful + } + } + } + + # In my experience, soldiers prefer gold to glory. + option = { + name = fp1_trade_events.1131.c + trigger = { + can_make_expensive_purchase_trigger = { PRICE = monumental_gold_value } + } + + # Pay scope:attacker's troops to sod off... + custom_tooltip = fp1_trade_events.1131.c.tt + remove_treasury_or_gold = monumental_treasury_or_gold_value + # ... thereby winning the war. + scope:sa_war = { + set_variable = no_gold_reparations + end_war = defender + } + reverse_add_opinion = { + target = scope:attacker + modifier = humiliated_opinion + opinion = -50 + } + # Add a breather before the next SA. + fp1_add_realm_size_appropriate_sa_reprieve_effect = yes + + stress_impact = { + generous = minor_stress_impact_loss + humble = minor_stress_impact_loss + content = minor_stress_impact_loss + fickle = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + greedy = major_stress_impact_gain + arrogant = major_stress_impact_gain + ambitious = major_stress_impact_gain + stubborn = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + # Base allowed to stay high, since the fiscal purchase here is pretty high and the AI usually won't make it anyway. + base = 100 + ai_value_modifier = { + ai_rationality = 0.25 + ai_greed = -0.5 + ai_vengefulness = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = generous + } + modifier = { # Weight up for stress. + add = 10 + has_trait = humble + } + modifier = { # Weight up for stress. + add = 10 + has_trait = content + } + modifier = { # Weight up for stress. + add = 10 + has_trait = fickle + } + modifier = { # Weight up for stress. + add = 10 + has_trait = forgiving + } + modifier = { # Weight down for stress. + add = -30 + has_trait = greedy + } + modifier = { # Weight down for stress. + add = -30 + has_trait = arrogant + } + modifier = { # Weight down for stress. + add = -30 + has_trait = ambitious + } + modifier = { # Weight down for stress. + add = -30 + has_trait = stubborn + } + modifier = { # Weight down for stress. + add = -30 + has_trait = vengeful + } + } + } + + # Then we'll banish these Nords to the sea. + option = { + name = fp1_trade_events.1131.d + + # Opt-out. + custom_tooltip = fp1_trade_events.1131.d.tt + + # No stress impact for the opt-out. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.25 + ai_vengefulness = -0.25 + } + } + } +} + +################################################## +# A Holy Helping Hand +# by Ewan Cowhig Croft +# 1171 - 1180 +################################################## + +scripted_trigger fp1_trade_events_1171_child_can_marry_trigger = { + # Rule out some unlikely candidates. + is_available_healthy_ai_adult = yes + is_ruler = no + OR = { + is_courtier_of = root.var:fp1_prime_trade_deal + host ?= root.var:fp1_prime_trade_deal + + } + # Make sure they're compatible. + could_marry_character_trigger = { CHARACTER = root } +} + +scripted_effect fp1_trade_events_1171_marry_partner_child_effect = { + # Marry scope:prospective_spouse. + ## First, we divorce the old one. No need for checks, since we're basically regarding that marriage as invalid under the new faith. + if = { + limit = { is_married = yes } + every_spouse = { + save_temporary_scope_as = current_spouse + scope:raider = { + divorce_effect = { + DIVORCER = scope:raider + DIVORCEE = scope:current_spouse + } + } + } + } + ## Then we perform the new marriage. + if = { + limit = { + has_ep2_dlc_trigger = yes + } + create_grand_wedding_betrothal = { + SPOUSE_1 = root + SPOUSE_2 = scope:prospective_spouse + HOST = root + PROMISEE = scope:partner + } + } + else = { marry = scope:prospective_spouse } + create_alliance = { + target = scope:partner + allied_through_owner = scope:raider + allied_through_target = scope:prospective_spouse + } + # Convert to scope:partner's faith. + set_character_faith_with_conversion = scope:partner.faith + if = { + limit = { + scope:partner.faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + # Do so in a very public and celebrated manner, gaining piety. + add_piety = massive_piety_gain + # Paid a dowry by scope:partner. + scope:partner = { + pay_short_term_gold = { + target = scope:raider + gold = massive_gold_value + } + } +} + +# Someone you have a raid-trade agreement with offers the hand of a child and conversion aid. +fp1_trade_events.1171 = { + type = character_event + title = fp1_trade_events.1171.t + desc = fp1_trade_events.1171.desc + theme = alliance + left_portrait = { + character = scope:raider + animation = personality_rational + } + right_portrait = { + character = scope:partner + animation = admiration + } + lower_center_portrait = scope:prospective_spouse + override_background = { reference = docks } + + trigger = { + # DLC check. + has_fp1_dlc_trigger = yes + # Standard checks. + ## Allow when commanding to be fairer to people out raiding, which we incentivise you to do personally to get pacts to begin with. + is_available_adult_or_is_commanding = yes + NOT = { has_character_flag = had_event_fp1_trade_events_1171 } + is_landed = yes + # Scope:raider's prime trade deal must still be valid & available. + fp1_prime_trade_partner_still_valid_trigger = { + RECIPIENT = root.var:fp1_prime_trade_deal + RAIDER = root + } + root.var:fp1_prime_trade_deal = { is_available_adult_or_is_commanding = yes } + # Must be of a disorganised faith and separate religion. + faith = { + has_doctrine_parameter = unreformed + NOT = { religion = root.var:fp1_prime_trade_deal.religion } + # For that matter, either root must be unmarried, or scope:partner can't have syncretic folk traditions (and so respect for their marriage.) + OR = { + root = { is_married = no } + NOT = { has_doctrine = tenet_unreformed_syncretism } + } + } + # Plus, general considerations. + root.var:fp1_prime_trade_deal = { + # They must really like scope:raider. + opinion = { + target = root + value >= high_positive_opinion + } + # Have a free child. + any_child = { fp1_trade_events_1171_child_can_marry_trigger = yes } + # Not be cynical, so they may care about souls. + NOT = { has_trait = cynical } + # For the sake of sanity, filter out players. + is_ai = yes + # Since it's AI, and specific enough already, we're happy to let them plunge into debt over this. + } + # Finally, just double check the + NAND = { + has_variable_list = humsacd_hofs + is_target_in_variable_list = { + name = humsacd_hofs + target = root.var:fp1_prime_trade_deal.faith + } + } + } + weight_multiplier = { + base = 1 + + # Weight up a little for certain lifestyle traits, as these spread stories of your success and accomplishments. + modifier = { + add = 0.25 + has_trait = diplomat + } + modifier = { + add = 0.25 + has_trait = avaricious + } + # Weight up for this being a renewed treaty. + modifier = { + add = 1 + exists = root.var:fp1_renewed_trade_deal + exists = root.var:fp1_prime_trade_deal + root.var:fp1_prime_trade_deal = root.var:fp1_renewed_trade_deal + } + } + + immediate = { + # Once per lifetime. + add_character_flag = { flag = had_event_fp1_trade_events_1171 } + # Grab our actors. + save_scope_as = raider + var:fp1_prime_trade_deal = { save_scope_as = partner } + ## Including a suitable spouse. + scope:partner = { + random_child = { + limit = { fp1_trade_events_1171_child_can_marry_trigger = yes } + save_scope_as = prospective_spouse + } + } + } + + # SheHe _does_ make quite a compelling case... + option = { + name = fp1_trade_events.1171.a + + # Gain assorted mixed awesome benefits. + fp1_trade_events_1171_marry_partner_child_effect = yes + # Step friendship. + progress_towards_friend_effect = { + CHARACTER = scope:partner + OPINION = 50 + REASON = friend_fp1_converted_faith_married + } + + stress_impact = { + cynical = minor_stress_impact_loss + trusting = minor_stress_impact_loss + greedy = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_greed = 0.5 + ai_zeal = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = cynical + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight up for stress. + add = 10 + has_trait = greedy + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = zealous + } + } + } + + # Let us swear an oath of fraternity! + option = { + name = fp1_trade_events.1171.b + trigger = { + can_set_relation_best_friend_trigger = { CHARACTER = scope:partner } + } + + # Gain assorted mixed awesome benefits. + hidden_effect = { fp1_trade_events_1171_marry_partner_child_effect = yes } + custom_tooltip = fp1_trade_events.1171.b.tt + # Also, become best friends. + set_relation_best_friend = { reason = best_friend_coverted_and_saved_my_soul copy_reason = friend target = scope:partner } + + stress_impact = { + cynical = minor_stress_impact_loss + trusting = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + shy = major_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_boldness = 0.5 + ai_zeal = -0.75 + } + modifier = { # Weight up for stress. + add = 10 + has_trait = cynical + } + modifier = { # Weight up for stress. + add = 10 + has_trait = trusting + } + modifier = { # Weight up for stress. + add = 10 + has_trait = gregarious + } + modifier = { # Weight down for stress. + add = -20 + has_trait = paranoid + } + modifier = { # Weight down for stress. + add = -30 + has_trait = shy + } + modifier = { # Weight down for stress. + add = -30 + has_trait = zealous + } + } + } + + # No manner of bribes can tempt me away. + option = { + name = { + trigger = { has_trait = cynical } + text = fp1_trade_events.1171.c.cynical + } + name = { + trigger = { + NOT = { has_trait = cynical } + } + text = fp1_trade_events.1171.c.fallback + } + + # Needless to say, scope:partner is offended. + reverse_add_opinion = { + target = scope:partner + modifier = insulted_opinion + opinion = -40 + } + # But hey, what a thing to turn down, amirite? + add_prestige = major_prestige_gain + + # No stress for the opt-out. + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 0.5 + ai_sociability = -0.5 + } + } + } +} + diff --git a/events/dlc/fp1/fp1_yearly_events_oltner.txt b/events/dlc/fp1/fp1_yearly_events_oltner.txt new file mode 100644 index 00000000..26496be8 --- /dev/null +++ b/events/dlc/fp1/fp1_yearly_events_oltner.txt @@ -0,0 +1,2687 @@ +namespace = fp1_yearly + +################################################## +# #Standard Yearlies +# 2000 - 2004 A Child wants to run away to marry their beloved +# 2100 - 2101 Two lovers duel for your love +# 2200 - 2204 Berserker rampages though court +# 2300 - 2300 Convince a group of soldiers to join you +# 2400 - 2400 Invest in something that'll aid in your hunts +# 2500 - 2500 What's that deviant up to this time!? +# 2600 - 2601 Become a Berserker +################################################## + +# A Child wants to run away to marry their beloved + +scripted_trigger suitable_child_to_leave = { + is_physically_able_adult = yes + has_personality_introverted_trigger = no + is_courtier_of = root + age <= 40 + is_concubine = no + NOR = { + has_trait = celibate + has_trait = chaste + has_sexuality = asexual + has_character_modifier = mellowed_spirit + root = { + has_strong_hook = prev + } + } + can_be_knight_trigger = { + ARMY_OWNER = root + } +} + +scripted_trigger suitable_lover_for_child = { + is_physically_able_adult = yes + allowed_to_marry_character_gender_trigger = { CHARACTER = scope:child_to_leave } + scope:child_to_leave = { allowed_to_marry_character_gender_trigger = { CHARACTER = prev } } + is_physically_able_adult = yes + age <= 35 + is_married = no + can_marry_trigger = yes + is_concubine = no + is_attracted_to_gender_of = scope:child_to_leave + OR = { + can_set_relation_lover_trigger = { CHARACTER = scope:child_to_leave } + has_relation_lover = scope:child_to_leave + } +} + +scripted_effect child_leaves_effect = { + hidden_effect = { + if = { + limit = { + is_betrothed = yes + } + break_betrothal = betrothed + } + scope:lover_of_child = { + if = { + limit = { + is_betrothed = yes + } + break_betrothal = scope:lover_of_child.betrothed + } + } + } + if = { + limit = { + scope:lover_of_child = { + is_alive = yes + } + is_married = yes + exists = scope:child_to_leave.primary_spouse + NOT = { + is_spouse_of = scope:lover_of_child + } + } + scope:child_to_leave.primary_spouse = { + save_scope_as = child_to_leave_divorcee + } + less_verbose_divorce_effect = { + DIVORCER = scope:child_to_leave + DIVORCEE = scope:child_to_leave_divorcee + } + } + if = { + limit = { + scope:child_to_leave = { + is_alive = yes + } + scope:lover_of_child = { + is_alive = yes + is_married = yes + exists = scope:lover_of_child.primary_spouse + NOT = { + is_spouse_of = scope:child_to_leave + } + } + } + hidden_effect = { + scope:lover_of_child.primary_spouse = { + save_scope_as = lover_of_child_divorcee + } + scope:lover_of_child = { + less_verbose_divorce_effect = { + DIVORCER = scope:lover_of_child + DIVORCEE = scope:lover_of_child_divorcee + } + } + } + } + if = { + limit = { + is_female = yes + is_lowborn = no + scope:lover_of_child = { + is_lowborn = yes + } + } + marry_matrilineal = scope:lover_of_child + } + else_if = { + limit = { + is_male = yes + is_lowborn = yes + scope:lover_of_child = { + is_lowborn = no + } + } + marry_matrilineal = scope:lover_of_child + } + else = { + marry = scope:lover_of_child + } + move_to_pool_at = scope:somewhere_else + hidden_effect = { + scope:lover_of_child = { + move_to_pool_at = scope:somewhere_else + } + } + scope:parent = { + if = { + limit = { + has_hook = scope:child_to_leave + } + remove_hook = { + target = scope:child_to_leave + } + } + } + add_character_modifier = { + modifier = lust_for_adventure + years = 20 + } +} + +# A Child wants to run away to marry their beloved +fp1_yearly.2000 = { + type = character_event + title = fp1_yearly.2000.t + desc = fp1_yearly.2000.desc + theme = family + left_portrait = { + character = scope:child_to_leave + animation = personality_bold + } + right_portrait = { + character = scope:lover_of_child + animation = flirtation + } + override_background = { reference = market } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2000 } + is_landed_or_landless_administrative = yes + + any_child = { + suitable_child_to_leave = yes + save_temporary_scope_as = child_to_leave + } + any_pool_character = { + province = root.capital_province + suitable_lover_for_child = yes + } + + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_yearly_2000 + days = 1825 + } + random_child = { + limit = { + suitable_child_to_leave = yes + has_personality_dominant_trigger = yes + is_primary_heir_of = root + } + alternative_limit = { + suitable_child_to_leave = yes + has_personality_dominant_trigger = yes + } + alternative_limit = { + suitable_child_to_leave = yes + } + save_scope_as = child_to_leave + } + random_pool_character = { + province = root.capital_province + limit = { + suitable_lover_for_child = yes + } + if = { + limit = { + NOT = { + has_relation_lover = scope:child_to_leave + } + } + hidden_effect = { + set_random_lover_reason = { TARGET = scope:child_to_leave } + } + } + save_scope_as = lover_of_child + } + random_independent_ruler = { + limit = { + is_landed_or_landless_administrative = yes + in_diplomatic_range = root + } + capital_province = { + save_scope_as = somewhere_else + } + } + save_scope_as = parent + } + + option = { # Fight them to make them stay + name = fp1_yearly.2000.a + + trigger = { + can_start_single_combat_trigger = yes + scope:child_to_leave = { + can_start_single_combat_trigger = yes + } + } + custom_tooltip = fp1_yearly.2000.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:parent + SC_ATTACKER = scope:parent + SC_DEFENDER = scope:child_to_leave + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = fp1_yearly.2001 + INVALIDATION_EVENT = fp1_yearly.2002 + } + + stress_impact = { + craven = major_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = medium_stress_impact_gain + temperate = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + + modifier = { + factor = 2 + prowess > scope:child_to_leave.prowess + } + + modifier = { + factor = 0.1 + ai_compassion >= medium_positive_ai_value + } + + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = forgiving + has_trait = calm + } + } + } + } + + option = { # Remind them of their duties + name = fp1_yearly.2000.b + + stress_impact = { + impatient = major_stress_impact_gain + wrathful = major_stress_impact_gain + arrogant = medium_stress_impact_gain + fickle = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + + duel = { + skill = diplomacy + value = scope:child_to_leave.diplomacy + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = fp1_yearly.2000.b.success + send_interface_toast = { + title = fp1_yearly.2000.b.success + left_icon = scope:child_to_leave + + + add_prestige = medium_prestige_gain + + scope:child_to_leave = { + custom_tooltip = fp1_yearly.2000.b.tt + add_character_modifier = { + modifier = mellowed_spirit + years = 20 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp1_yearly.2000.b.failure + send_interface_toast = { + title = fp1_yearly.2000.b.failure + left_icon = scope:child_to_leave + + add_prestige = major_prestige_loss + + scope:child_to_leave = { + child_leaves_effect = yes + } + } + } + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + diplomacy > scope:child_to_leave.diplomacy + } + + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = forgiving + has_trait = calm + } + } + } + } + + option = { # Bribe them + name = fp1_yearly.2000.c + + stress_impact = { + greedy = major_stress_impact_gain + wrathful = major_stress_impact_gain + arrogant = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + + custom_tooltip = fp1_yearly.2000.c.tt + pay_short_term_gold = { + target = scope:child_to_leave + gold = minor_gold_value + } + + add_prestige = minor_prestige_loss + + + ai_chance = { + base = 100 + + modifier = { + factor = 0 + has_trait = greedy + } + } + } + + option = { # Let them go, the fool... + name = fp1_yearly.2000.d + + stress_impact = { + arrogant = medium_stress_impact_gain + stubborn = major_stress_impact_gain + wrathful = major_stress_impact_gain + vengeful = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + } + custom_tooltip = fp1_yearly.2000.d.tt + + add_prestige = medium_prestige_loss + + scope:child_to_leave = { + child_leaves_effect = yes + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + ai_compassion >= medium_positive_ai_value + } + + modifier = { + factor = 0 + OR = { + has_trait = stubborn + has_trait = wrathful + } + } + } + } +} + +fp1_yearly.2001 = { + hidden = yes + + immediate = { + if = { + limit = { + scope:parent = scope:sc_victor + } + trigger_event = { id = fp1_yearly.2003 days = 1 } + } + else = { + trigger_event = { id = fp1_yearly.2004 days = 1 } + } + } +} + +# Bout has invalidated, inform affected parties. +fp1_yearly.2002 = { + hidden = yes + + immediate = { + # Inform both parties that the duel has invalidated. + scope:parent = { + send_interface_toast = { + title = fp1_yearly.2000.trigger_failure + left_icon = scope:child_to_leave + } + } + } +} + +# Beat child in combat +fp1_yearly.2003 = { + type = character_event + title = fp1_yearly.2003.t + desc = fp1_yearly.2003.desc + theme = family + left_portrait = { + character = scope:child_to_leave + animation = pain + } + right_portrait = { + character = scope:lover_of_child + animation = disapproval + } + override_background = { reference = market_tribal } + + trigger = { + + } + + immediate = { + + } + + option = { # Father/Mother knows best! + name = fp1_yearly.2003.a + + add_prestige = medium_prestige_gain + scope:child_to_leave = { + add_character_modifier = { + modifier = mellowed_spirit + years = 20 + } + } + + ai_chance = { + base = 100 + } + } + + option = { # Break it off! + name = fp1_yearly.2003.b + + add_prestige = medium_prestige_gain + + scope:child_to_leave = { + add_character_modifier = { + modifier = mellowed_spirit + years = 20 + } + remove_relation_lover = scope:lover_of_child + } + + ai_chance = { + base = 100 + } + } +} + +# Beaten by child in combat +fp1_yearly.2004 = { + type = character_event + title = fp1_yearly.2004.t + desc = fp1_yearly.2004.desc + theme = family + left_portrait = { + character = scope:child_to_leave + animation = personality_honorable + } + right_portrait = { + character = scope:lover_of_child + animation = ecstasy + } + override_background = { reference = market_tribal } + + trigger = { + + } + + immediate = { + + } + + option = { # Ouch... + name = fp1_yearly.2004.a + + pay_short_term_gold = { + target = scope:child_to_leave + gold = minor_gold_value + } + + add_prestige = medium_prestige_loss + + scope:child_to_leave = { + child_leaves_effect = yes + } + + ai_chance = { + base = 100 + } + } +} + +scripted_trigger fighting_lover_trigger = { + is_ai = yes + has_personality_introverted_trigger = no + is_physically_able_adult = yes + NOT = { + any_consort = { + is_ai = no + this != root + } + } + OR = { + is_ruler = no + top_liege = root.top_liege + } +} + +# Two lovers duel for your love +fp1_yearly.2100 = { + type = character_event + title = fp1_yearly.2100.t + desc = fp1_yearly.2100.desc + theme = seduction + left_portrait = { + character = scope:lover_2 + animation = aggressive_sword + } + right_portrait = { + character = scope:lover_1 + animation = rage + } + override_background = { reference = market } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2100 } + is_playable_character = yes + + # You need two lovers + any_relation = { + type = lover + fighting_lover_trigger = yes + count >= 2 + } + + # Only one needs to be of a fighty culture + any_relation = { + type = lover + fighting_lover_trigger = yes + basic_can_have_trial_by_combat_trigger = yes + } + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_yearly_2100 + days = 1825 + } + + random_relation = { + type = lover + limit = { + fighting_lover_trigger = yes + } + save_scope_as = lover_2 + set_signature_weapon_effect = yes + } + + random_relation = { + type = lover + limit = { + fighting_lover_trigger = yes + this != scope:lover_2 + } + save_scope_as = lover_1 + set_signature_weapon_effect = yes + } + + save_scope_as = lover_quarrel_target + + hidden_effect = { + scope:lover_1 = { + if = { + limit = { + any_known_secret = { + secret_type = secret_lover + secret_target = scope:lover_quarrel_target + NOT = { is_known_by = scope:lover_2 } + } + } + + random_known_secret = { + limit = { + secret_type = secret_lover + secret_target = scope:lover_quarrel_target + NOT = { is_known_by = scope:lover_2 } + } + save_scope_as = secret + reveal_to_without_events_effect = { + CHARACTER = scope:lover_2 + } + } + } + } + + scope:lover_2 = { + if = { + limit = { + any_known_secret = { + secret_type = secret_lover + secret_target = scope:lover_quarrel_target + NOT = { is_known_by = scope:lover_1 } + } + } + + random_known_secret = { + limit = { + secret_type = secret_lover + secret_target = scope:lover_quarrel_target + NOT = { is_known_by = scope:lover_1 } + } + save_scope_as = secret + reveal_to_without_events_effect = { + CHARACTER = scope:lover_1 + } + } + } + if = { + limit = { + has_relation_friend = scope:lover_1 + } + remove_relation_friend = scope:lover_1 + } + else_if = { + limit = { + has_relation_best_friend = scope:lover_1 + } + remove_relation_best_friend = scope:lover_1 + } + if = { + limit = { + NOR = { + has_relation_rival = scope:lover_1 + has_relation_nemesis = scope:lover_1 + } + } + if = { + limit = { + can_set_relation_nemesis_trigger = { CHARACTER = scope:lover_1 } + } + set_relation_nemesis = { + target = scope:lover_1 + reason = rival_competing_lovers + } + } + else = { + set_relation_rival = { + target = scope:lover_1 + reason = rival_competing_lovers + } + } + } + } + } + } + + option = { + name = fp1_yearly.2100.a + + custom_tooltip = fp1_yearly.2100.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:lover_quarrel_target + SC_ATTACKER = scope:lover_1 + SC_DEFENDER = scope:lover_2 + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = fp1_yearly.2002 + OUTPUT_EVENT = fp1_yearly.2101 + } + + stress_impact = { + forgiving = medium_stress_impact_gain + compassionate = major_stress_impact_gain + calm = medium_stress_impact_gain + content = medium_stress_impact_gain + just = medium_stress_impact_gain + humble = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_honor = -1 + } + } + } + + option = { + name = fp1_yearly.2100.b + + duel = { + skill = diplomacy + value = 12 + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = fp1_yearly.2100.b.success + send_interface_toast = { + title = fp1_yearly.2100.b.success + left_icon = scope:child_to_leave + + custom_tooltip = fp1_yearly.2100.b.tt + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp1_yearly.2100.b.failure + send_interface_toast = { + title = fp1_yearly.2100.b.failure + left_icon = scope:lover_1 + right_icon = scope:lover_2 + + custom_tooltip = fp1_yearly.2100.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:lover_quarrel_target + SC_ATTACKER = scope:lover_1 + SC_DEFENDER = scope:lover_2 + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = fp1_yearly.2002 + OUTPUT_EVENT = fp1_yearly.2101 + } + } + } + } + + stress_impact = { + arrogant = major_stress_impact_gain + sadistic = major_stress_impact_gain + callous = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_rationality = 0.5 + } + } + } + + option = { + name = fp1_yearly.2100.c + + duel = { + skill = prowess + value = { + add = scope:lover_1.prowess + add = scope:lover_2.prowess + divide = 2 + } + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = fp1_yearly.2100.c.success + send_interface_toast = { + title = fp1_yearly.2100.c.success + left_icon = scope:child_to_leave + + custom_tooltip = fp1_yearly.2100.c.tt + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp1_yearly.2100.c.failure + send_interface_toast = { + title = fp1_yearly.2100.c.failure + left_icon = scope:lover_1 + right_icon = scope:lover_2 + + custom_tooltip = fp1_yearly.2100.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:lover_quarrel_target + SC_ATTACKER = scope:lover_1 + SC_DEFENDER = scope:lover_2 + FATALITY = always + FIXED = no + LOCALE = terrain_scope + INVALIDATION_EVENT = fp1_yearly.2002 + OUTPUT_EVENT = fp1_yearly.2101 + } + } + } + } + + stress_impact = { + craven = major_stress_impact_gain + arrogant = minor_stress_impact_gain + sadistic = major_stress_impact_gain + callous = medium_stress_impact_gain + arbitrary = medium_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = 0.5 + } + } + } +} + +fp1_yearly.2101 = { + type = character_event + title = fp1_yearly.2101.t + desc = fp1_yearly.2101.desc + theme = seduction + left_portrait = { + character = scope:lover_1 + triggered_animation = { + trigger = { is_alive = yes } + animation = flirtation + } + triggered_animation = { + trigger = { is_alive = no } + animation = shock + } + } + right_portrait = { + character = scope:lover_2 + triggered_animation = { + trigger = { is_alive = yes } + animation = flirtation + } + triggered_animation = { + trigger = { is_alive = no } + animation = shock + } + } + override_background = { reference = market_tribal } + + immediate = { + if = { + limit = { + scope:lover_1 = { + is_alive = yes + } + } + scope:lover_1 = { + save_scope_as = winning_lover + } + scope:lover_2 = { + save_scope_as = losing_lover + } + } + else = { + scope:lover_2 = { + save_scope_as = winning_lover + } + scope:lover_1 = { + save_scope_as = losing_lover + } + } + } + + option = { + name = fp1_yearly.2101.a + + if = { + limit = { + num_of_relation_soulmate <= 0 + } + hidden_effect = { + scope:winning_lover = { + every_relation = { + type = soulmate + remove_relation_soulmate = scope:winning_lover + } + } + } + set_relation_soulmate = { reason = soulmate_won_love_in_duel_2 copy_reason = lover target = scope:winning_lover } + } + else = { + scope:winning_lover = { + add_opinion = { + target = scope:lover_quarrel_target + modifier = love_opinion + opinion = 30 + } + } + } + + had_sex_with_effect = { + CHARACTER = scope:winning_lover + PREGNANCY_CHANCE = pregnancy_chance + } + + stress_impact = { + forgiving = major_stress_impact_gain + compassionate = major_stress_impact_gain + humble = major_stress_impact_gain + just = medium_stress_impact_gain + chaste = major_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2101.b + + remove_relation_lover = scope:winning_lover + + scope:winning_lover = { + add_opinion = { + target = scope:lover_quarrel_target + modifier = lover_hurt_me_opinion + years = 30 + } + } + + add_opinion = { + target = scope:winning_lover + modifier = murdered_someone_close_to_me_crime + years = 30 + } + + stress_impact = { + forgiving = major_stress_impact_gain + vengeful = major_stress_impact_gain + arbitrary = medium_stress_impact_gain + trusting = medium_stress_impact_gain + lustful = major_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2101.c + + scope:winning_lover = { + add_opinion = { + target = scope:lover_quarrel_target + modifier = pleased_opinion + opinion = 10 + } + } + + stress_impact = { + forgiving = major_stress_impact_gain + compassionate = major_stress_impact_gain + humble = major_stress_impact_gain + just = medium_stress_impact_gain + chaste = major_stress_impact_gain + } + + had_sex_with_effect = { + CHARACTER = scope:winning_lover + PREGNANCY_CHANCE = pregnancy_chance + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2101.d + + scope:winning_lover = { + add_opinion = { + target = scope:lover_quarrel_target + modifier = lover_being_mean_opinion + years = 10 + } + } + + stress_impact = { + vengeful = major_stress_impact_gain + arbitrary = medium_stress_impact_gain + trusting = medium_stress_impact_gain + lustful = major_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } +} + +scripted_effect court_berserkergang_effect = { + custom_tooltip = fp1_yearly.2200.fail.tt + hidden_effect = { + scope:potential_victim = { + increase_wounds_effect = { REASON = duel } + } + } + add_opinion = { + target = scope:new_berserker + modifier = hurt_someone_close_to_me_crime + years = 30 + } +} + +# Berserker rampages though court +fp1_yearly.2200 = { + type = character_event + title = fp1_yearly.2200.t + desc = fp1_yearly.2200.desc + theme = battle + left_portrait = { + character = scope:new_berserker + animation = rage + } + override_background = { reference = market_tribal } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2200 } + + is_landed_or_landless_administrative = yes + + faith = { + has_doctrine = tenet_warmonger + } + + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + religion = religion:germanic_religion + } + + OR = { + is_ai = no + number_of_knights < max_number_of_knights + } + + any_courtier = { + is_of_major_interest_to_root_trigger = yes + age > 12 + } + } + + immediate = { + hidden_effect = { + add_character_flag = { + flag = had_event_fp1_yearly_2200 + days = 1825 + } + + create_character = { + gender_female_chance = root_soldier_female_chance + template = new_berserker_character + faith = root.faith + culture = root.culture + dynasty = none + location = root.location + save_scope_as = new_berserker + } + + scope:new_berserker = { + set_favorite_treat_effect = yes + random_list = { + 10 = { + change_current_weight = 150 + } + 10 = { + change_current_weight = 100 + } + 10 = { + change_current_weight = 50 + } + } + if = { + limit = { + has_sexuality = asexual + } + random_list = { + 10 = { + set_sexuality = heterosexual + } + 10 = { + set_sexuality = bisexual + } + 10 = { + set_sexuality = homosexual + } + } + } + } + } + random_courtier = { + limit = { + is_of_major_interest_to_root_trigger = yes + age > 12 + prowess < scope:new_berserker.prowess + } + alternative_limit = { + is_of_major_interest_to_root_trigger = yes + age > 12 + } + save_scope_as = potential_victim + } + save_scope_as = potential_employer + } + + option = { + name = fp1_yearly.2200.a + + trigger = { + can_start_single_combat_trigger = yes + scope:new_berserker = { + can_start_single_combat_trigger = yes + } + } + custom_tooltip = fp1_yearly.2200.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = scope:new_berserker + SC_DEFENDER = root + FATALITY = no + FIXED = no + LOCALE = market + OUTPUT_EVENT = fp1_yearly.2201 + INVALIDATION_EVENT = fp1_yearly.2202 + } + + stress_impact = { + forgiving = medium_stress_impact_gain + calm = medium_stress_impact_gain + patient = medium_stress_impact_gain + humble = minor_stress_impact_gain + shy = minor_stress_impact_gain + craven = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = 1 + } + } + } + + option = { + name = fp1_yearly.2200.b + + stress_impact = { + brave = major_stress_impact_gain + arrogant = medium_stress_impact_gain + greedy = major_stress_impact_gain + gluttonous = minor_stress_impact_gain + } + + pay_short_term_gold = { + target = scope:new_berserker + gold = minor_gold_value + } + + add_courtier = scope:new_berserker + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_greed = -1 + } + } + } + + option = { + name = fp1_yearly.2200.c + + duel = { + skill = diplomacy + value = 10 + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + + desc = fp1_yearly.2200.c.success + send_interface_toast = { + title = fp1_yearly.2200.c.success + left_icon = scope:new_berserker + + add_courtier = scope:new_berserker + add_prestige = minor_prestige_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp1_yearly.2200.c.failure + send_interface_toast = { + title = fp1_yearly.2200.c.failure + left_icon = scope:new_berserker + right_icon = scope:potential_victim + + court_berserkergang_effect = yes + } + } + } + + stress_impact = { + brave = major_stress_impact_gain + wrathful = major_stress_impact_gain + impatient = major_stress_impact_gain + arbitrary = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + } + } + + option = { + name = fp1_yearly.2200.d + + duel = { + skill = martial + value = scope:new_berserker.martial + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + + desc = fp1_yearly.2200.d.success + send_interface_toast = { + title = fp1_yearly.2200.d.success + left_icon = scope:new_berserker + + scope:new_berserker = { + death = { death_reason = death_attacked } + } + add_prestige = major_prestige_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp1_yearly.2200.c.failure + send_interface_toast = { + title = fp1_yearly.2200.c.failure + left_icon = scope:new_berserker + right_icon = scope:potential_victim + + court_berserkergang_effect = yes + } + } + } + + stress_impact = { + brave = major_stress_impact_gain + trusting = medium_stress_impact_gain + patient = medium_stress_impact_gain + calm = medium_stress_impact_gain + } + ai_chance = { + base = 0 + } + } +} + +fp1_yearly.2201 = { + hidden = yes + + immediate = { + if = { + limit = { + scope:potential_employer = scope:sc_victor + } + trigger_event = { id = fp1_yearly.2203 days = 1 } + } + else = { + trigger_event = { id = fp1_yearly.2204 days = 1 } + } + } +} + +# Bout has invalidated, inform affected parties. +fp1_yearly.2202 = { + hidden = yes + + immediate = { + # Inform both parties that the duel has invalidated. + scope:potential_employer = { + send_interface_toast = { + title = fp1_yearly.2200.trigger_failure + left_icon = scope:new_berserker + } + } + } +} + +fp1_yearly.2203 = { + type = character_event + title = fp1_yearly.2203.t + desc = fp1_yearly.2203.desc + theme = battle + left_portrait = { + character = scope:new_berserker + animation = fear + } + override_background = { reference = market_tribal } + + trigger = { + scope:new_berserker = { + is_alive = yes + } + } + + option = { + name = fp1_yearly.2203.a + + add_dread = major_dread_gain + add_prestige = medium_prestige_gain + add_prowess_skill = 2 + + scope:new_berserker = { + death = { + death_reason = death_duel + killer = scope:potential_employer + } + } + + stress_impact = { + trusting = major_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = major_stress_impact_gain + calm = medium_stress_impact_gain + content = medium_stress_impact_gain + just = medium_stress_impact_gain + humble = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = -1 + } + modifier = { + factor = 0 + prowess < scope:new_berserker.prowess + } + } + } + + option = { + name = fp1_yearly.2203.b + + stress_impact = { + arrogant = major_stress_impact_gain + vengeful = major_stress_impact_gain + cynical = major_stress_impact_gain + } + + add_prestige = medium_prestige_gain + add_prowess_skill = 2 + add_courtier = scope:new_berserker + set_relation_potential_friend = scope:new_berserker + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2203.c + + stress_impact = { + arrogant = major_stress_impact_gain + vengeful = major_stress_impact_gain + trusting = major_stress_impact_gain + } + + add_prestige = medium_prestige_gain + add_prowess_skill = 2 + + ai_chance = { + base = 0 + } + } +} + +fp1_yearly.2204 = { + type = character_event + title = fp1_yearly.2204.t + desc = fp1_yearly.2204.desc + theme = battle + left_portrait = { + character = scope:new_berserker + animation = worry + } + override_background = { reference = market_tribal } + + trigger = { + scope:new_berserker = { + is_alive = yes + } + } + + option = { + name = fp1_yearly.2204.a + + add_prestige = medium_prestige_loss + add_courtier = scope:new_berserker + set_relation_friend = { reason = friend_rousing_fight target = scope:new_berserker } + + stress_impact = { + arrogant = major_stress_impact_gain + vengeful = major_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 1 + } + } + } + + option = { + name = fp1_yearly.2204.b + + stress_impact = { + trusting = major_stress_impact_gain + forgiving = major_stress_impact_gain + humble = major_stress_impact_gain + compassionate = medium_stress_impact_gain + } + + add_prestige = medium_prestige_loss + + ai_chance = { + base = 0 + } + } +} + +# Convince a group of soldiers to join you +fp1_yearly.2300 = { + type = character_event + title = fp1_yearly.2300.t + desc = fp1_yearly.2300.desc + theme = feast_activity + left_portrait = { + character = scope:recruiting_character + animation = personality_rational + } + override_background = { reference = tavern } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2300 } + + is_landed_or_landless_administrative = yes + + any_sub_realm_barony = { + title_province = { + is_coastal = yes + } + } + } + + weight_multiplier = { + base = 1 + + modifier = { + add = 0.5 + prestige_level > 2 + } + + modifier = { + add = 0.5 + prestige_level > 4 + } + + modifier = { + add = -1 + prestige_level < 0 + } + } + + immediate = { + hidden_effect = { + add_character_flag = { + flag = had_event_fp1_yearly_2300 + days = 1825 + } + } + + random_sub_realm_barony = { + limit = { + title_province = { + is_coastal = yes + } + } + save_scope_as = tavern_location + } + save_scope_as = recruiting_character + } + + option = { + name = fp1_yearly.2300.a + + flavor = huscarls_tt + + remove_short_term_gold = huscarls_gold_value + + spawn_army = { + levies = 25 + men_at_arms = { + type = huscarl + men = number_of_huscarls + } + location = scope:recruiting_character.capital_province + inheritable = no + name = grizzled_veterans + } + + custom_tooltip = MILITARY_VIEW_EVENT_TROOPS_NOT_INHERITABLE + + stress_impact = { + humble = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + } + } + } + + option = { + name = fp1_yearly.2300.b + + flavor = bondi_tt + + remove_short_term_gold = bondi_gold_value + + spawn_army = { + levies = 50 + men_at_arms = { + type = bondi + men = number_of_bondi + } + location = scope:recruiting_character.capital_province + inheritable = no + name = glory_seekers + } + + custom_tooltip = MILITARY_VIEW_EVENT_TROOPS_NOT_INHERITABLE + + stress_impact = { + humble = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2300.c + + add_gold = medium_gold_value + + stress_impact = { + generous = major_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + option = { + name = fp1_yearly.2300.d + + trigger = { + has_trait = viking + } + trait = viking + + spawn_army = { + levies = 25 + men_at_arms = { + type = huscarl + men = number_of_huscarls + } + location = scope:recruiting_character.capital_province + inheritable = no + name = grizzled_veterans + } + + spawn_army = { + levies = 50 + men_at_arms = { + type = bondi + men = number_of_bondi + } + location = scope:recruiting_character.capital_province + inheritable = no + name = glory_seekers + } + + custom_tooltip = MILITARY_VIEW_EVENT_TROOPS_NOT_INHERITABLE + + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +# Invest in something that'll aid in your hunts +fp1_yearly.2400 = { + type = character_event + title = fp1_yearly.2400.t + desc = fp1_yearly.2400.desc + theme = hunt_activity + left_portrait = { + character = root + animation = personality_rational + } + override_background = { reference = fp1_runestone } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2400 } + + is_landed_or_landless_administrative = yes + + NOR = { + has_trait = lazy + } + } + + immediate = { + hidden_effect = { + add_character_flag = { + flag = had_event_fp1_yearly_2400 + days = 1825 + } + } + + select_local_animal_effect = { TYPE = any } # Save scope to limit possible animals: any/big/small/dangerous/harmless/prowling + + capital_province = { + save_scope_as = hunting_province + } + } + + option = { + name = fp1_yearly.2400.a + trigger = { + NOT = { location = { geographical_region = world_steppe } } + NOT = { + any_owned_story = { + story_type = story_cycle_pet_dog + } + } + } + + start_dog_story_cycle_effect = yes + remove_short_term_gold = minor_gold_value + + stress_impact = { + greedy = major_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + option = { + name = fp1_yearly.2400.eagle + trigger = { + location = { geographical_region = world_steppe } + NOT = { + any_owned_story = { + story_type = story_cycle_pet_eagle + } + } + } + + start_eagle_story_cycle_effect = yes + remove_short_term_gold = minor_gold_value + + stress_impact = { + greedy = major_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + option = { + name = fp1_yearly.2400.b + + add_character_modifier = { + modifier = brand_new_hunting_tools + years = 25 + } + remove_short_term_gold = minor_gold_value + + stress_impact = { + greedy = major_stress_impact_gain + temperate = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + option = { + name = fp1_yearly.2400.c + + custom_tooltip = fp1_yearly.2400.free_hunt + hidden_effect = { + add_character_flag = { + flag = free_hunt + } + } + + stress_impact = { + impatient = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + after = { remove_variable = animal_type } +} + +scripted_trigger fp1_yearly_2500_guest_trigger = { + is_available_ai_adult = yes + is_pool_guest = yes + NOR = { + has_trait = deviant + any_secret = { + type = secret_deviant + is_known_by = root + } + } + save_temporary_scope_as = deviant_guest + trait_is_criminal_in_faith_trigger = { TRAIT = trait:deviant FAITH = scope:deviant_guest.faith GENDER_CHARACTER = scope:deviant_guest } +} + +scripted_trigger fp1_yearly_2500_court_target_trigger = { + exists = capital_province + OR = { + any_targeting_scheme = { + OR = { + scheme_type = murder + scheme_type = abduct + } + scheme_owner = root + } + has_relation_rival = root + } +} + +# What's that deviant up to this time!? +fp1_yearly.2500 = { + type = character_event + title = fp1_yearly.2500.t + desc = fp1_yearly.2500.desc + theme = seduction + left_portrait = { + character = scope:deviant_guest + animation = shock + } + override_background = { reference = fp1_runestone } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_landed = yes + is_available_at_peace_adult = yes + + NOT = { has_character_flag = had_event_fp1_yearly_2500 } + is_capable_adult = yes + + any_courtier_or_guest = { + fp1_yearly_2500_guest_trigger = yes + } + + trait_is_criminal_in_faith_trigger = { TRAIT = trait:deviant FAITH = root.faith GENDER_CHARACTER = scope:deviant_guest } + + any_held_title = { + title_tier = county + 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 + } + } + } + + weight_multiplier = { + base = 1 + } + + immediate = { + add_character_flag = { + flag = had_event_fp1_yearly_2500 + } + random_held_title = { + title_tier = county + limit = { + 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 + } + } + save_scope_as = runestone_location + } + hidden_effect = { + random_courtier_or_guest = { + limit = { + fp1_yearly_2500_guest_trigger = yes + } + if = { + limit = { + NOT = { + any_secret = { + type = secret_deviant + } + } + } + give_deviant_secret_or_trait_effect = yes + } + save_scope_as = deviant_guest + random_secret = { + type = secret_deviant + limit = { + NOT = { is_known_by = root } + } + save_scope_as = deviant_guest_secret + } + if = { + limit = { + root = { is_ai = no } + } + add_character_flag = is_naked + } + } + } + + if = { + limit = { + is_ai = no + } + if = { + limit = { + any_ruler = { + fp1_yearly_2500_court_target_trigger = yes + } + } + random_ruler = { + limit = { + fp1_yearly_2500_court_target_trigger = yes + } + save_scope_as = appropriate_court_target_owner + } + } + } + create_character_memory = { + type = deviant_defiled_my_object + participants = { deviant = scope:deviant_guest } + } + } + + option = { # Learn of the secret and force them to leave + name = { + trigger = { NOT = { exists = scope:appropriate_court_target_owner } } + text = yearly.8400.a + } + name = { + trigger = { exists = scope:appropriate_court_target_owner } + text = yearly.8400.special + } + + scope:deviant_guest_secret = { + reveal_to = root + } + + scope:deviant_guest = { + if = { + limit = { + exists = scope:appropriate_court_target_owner + } + hidden_effect = { + visit_court_of = scope:appropriate_court_target_owner + } + custom_tooltip = yearly.8400.a.tt + } + else = { + select_and_move_to_pool_effect = yes + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = compassionate + has_trait = just + } + } + } + + stress_impact = { + forgiving = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + just = medium_stress_impact_gain + } + } + + option = { # Expose and throw them in jail + name = yearly.8400.b + + add_piety = major_piety_gain + + scope:deviant_guest_secret = { + expose_secret = root + } + + rightfully_imprison_character_effect = { + TARGET = scope:deviant_guest + IMPRISONER = root + } + + ai_chance = { + base = 25 + + modifier = { + factor = 0 + ai_zeal < 0 + } + + modifier = { + factor = 0 + has_trait = forgiving + } + + modifier = { + factor = 5 + ai_zeal >= medium_positive_ai_value + } + } + + stress_impact = { + forgiving = major_stress_impact_gain + deviant = massive_stress_impact_gain + } + } + + option = { # Learn of the secret and let them stay + name = yearly.8400.c + + scope:deviant_guest_secret = { + reveal_to = root + } + + scope:deviant_guest = { + add_opinion = { + modifier = kindness_opinion + target = root + opinion = 25 + } + } + + ai_chance = { + base = 100 + } + + stress_impact = { + zealous = major_stress_impact_gain + just = medium_stress_impact_gain + } + } + + option = { # Learn of the secret, and... join in on the fun + name = yearly.8400.d + + scope:deviant_guest_secret = { + reveal_to = root + } + + give_deviant_secret_or_trait_effect = yes + + if = { + limit = { + stress > 0 + } + add_stress = monumental_stress_loss + } + + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:deviant_guest } + } + set_relation_friend = { reason = friend_deviant_fun target = scope:deviant_guest } + } + + ai_chance = { + base = 5 + modifier = { + add = 995 + has_trait = lustful + } + } + + stress_impact = { + chaste = major_stress_impact_gain + temperate = major_stress_impact_gain + } + } + + after = { + scope:deviant_guest = { + if = { + limit = { has_character_flag = is_naked } + remove_character_flag = is_naked + } + } + } +} + +# Become a Berserker +fp1_yearly.2600 = { + type = character_event + title = fp1_yearly.2600.t + desc = fp1_yearly.2600.desc + theme = war + left_portrait = { + character = scope:berserker_teacher + animation = marshal + } + override_background = { reference = fp1_tribal_temple } + + trigger = { + #DLC check. + has_fp1_dlc_trigger = yes + + #Standard checks. + is_available_at_peace_adult = yes + NOT = { has_character_flag = had_event_fp1_yearly_2600 } + + OR = { + culture = { has_cultural_pillar = heritage_north_germanic } + religion = religion:germanic_religion + } + + faith = { + has_doctrine = tenet_warmonger + } + + NOR = { + has_trait = craven + has_trait = berserker + } + + prowess >= 8 + + any_knight = { + is_ai = yes + is_physically_able_adult = yes + has_trait = berserker + NOT = { + has_relation_rival = root + } + } + } + + weight_multiplier = { + base = 1 + + modifier = { + add = 0.5 + has_trait = impatient + } + modifier = { + add = 0.5 + has_trait = wrathful + } + modifier = { + add = 0.5 + prowess >= 12 + } + } + + immediate = { + hidden_effect = { + add_character_flag = { + flag = had_event_fp1_yearly_2600 + days = 1825 + } + } + + random_knight = { + limit = { + is_ai = yes + is_physically_able_adult = yes + has_trait = berserker + NOT = { + has_relation_rival = root + } + } + save_scope_as = berserker_teacher + } + } + + option = { + name = fp1_yearly.2600.a + + custom_tooltip = fp1_yearly.2600.a.tt + + hidden_effect = { + random_list = { + 10 = { # Succeed, no one harmed + set_variable = { + name = success_no_one_harmed + value = yes + } + } + 5 = { # Succeed, harm someone close to you + trigger = { + any_courtier = { + is_of_major_interest_to_root_trigger = yes + is_ai = yes + age > 12 + this != scope:berserker_teacher + } + } + set_variable = { + name = success_harm_close_one + value = yes + } + } + 3 = { # Succeed, kill the berserker who taught you + set_variable = { + name = success_kill_berserker + value = yes + } + } + 1 = { # Succeed, kill everyone at court + trigger = { + is_ai = no + any_courtier = { + is_of_major_interest_to_root_trigger = yes + is_ai = yes + age > 12 + } + } + set_variable = { + name = success_kill_everyone + value = yes + } + } + 3 = { # Fail, fall asleep + set_variable = { + name = fail_fall_asleep + value = yes + } + modifier = { + add = 10 + has_trait = lazy + } + } + } + trigger_event = fp1_yearly.2601 + } + + stress_impact = { + calm = massive_stress_impact_gain + lazy = massive_stress_impact_gain + patient = major_stress_impact_gain + temperate = major_stress_impact_gain + } + ai_chance = { + base = 90 + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = patient + has_trait = lazy + } + } + } + } + + option = { + name = fp1_yearly.2600.b + + custom_tooltip = fp1_yearly.2600.b.tt + + stress_impact = { + impatient = massive_stress_impact_gain + wrathful = massive_stress_impact_gain + sadistic = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 10 + } + } +} + +scripted_effect berserker_killing_spree_effect = { + random_list = { + 10 = { + death = { + death_reason = death_head_ripped_off + killer = root + } + } + 10 = { + death = { + death_reason = death_cloven_in_half + killer = root + } + } + 10 = { + death = { + death_reason = death_viciously_dismembered + killer = root + } + } + 10 = { + death = { + death_reason = death_ripped_apart_limb_by_limb + killer = root + } + } + 10 = { + death = { + death_reason = death_chopped_to_pieces + killer = root + } + } + 10 = { + death = { + death_reason = death_heart_ripped_out + killer = root + } + } + 1 = { + trigger = { + NOT = { + has_trait = brave + } + } + death = { + death_reason = death_fear + killer = root + } + } + 10 = { + death = { + death_reason = death_skull_cracked_open + killer = root + } + } + 10 = { + death = { + death_reason = death_strangled_with_own_intestines + killer = root + } + } + } +} + +fp1_yearly.2601 = { + type = character_event + title = fp1_yearly.2600.t + desc = { + desc = fp1_yearly.2601.desc + first_valid = { + triggered_desc = { + trigger = { + exists = var:success_no_one_harmed + } + desc = fp1_yearly.2601.success_no_one_harmed + } + triggered_desc = { + trigger = { + exists = var:success_harm_close_one + } + desc = fp1_yearly.2601.success_harm_close_one + } + triggered_desc = { + trigger = { + exists = var:success_kill_berserker + } + desc = fp1_yearly.2601.success_kill_berserker + } + triggered_desc = { + trigger = { + exists = var:success_kill_everyone + } + desc = fp1_yearly.2601.success_kill_everyone + } + triggered_desc = { + trigger = { + exists = var:fail_fall_asleep + } + desc = fp1_yearly.2601.fail_fall_asleep + } + } + } + theme = war + left_portrait = { + character = root + triggered_animation = { + trigger = { + exists = var:success_no_one_harmed + } + animation = rage + } + triggered_animation = { + trigger = { + OR = { + exists = var:success_harm_close_one + exists = var:success_kill_berserker + exists = var:success_kill_everyone + } + } + animation = shock + } + triggered_animation = { + trigger = { + exists = var:fail_fall_asleep + } + animation = personality_irrational + } + } + right_portrait = { + character = scope:harmed_victim + triggered_animation = { + trigger = { + root = { + exists = var:success_no_one_harmed + } + } + animation = happiness + } + triggered_animation = { + trigger = { + root = { + OR = { + exists = var:success_harm_close_one + exists = var:success_kill_berserker + exists = var:success_kill_everyone + } + } + } + animation = fear + } + triggered_animation = { + trigger = { + root = { + exists = var:fail_fall_asleep + } + } + animation = disapproval + } + } + override_background = { reference = fp1_tribal_temple } + + trigger = { + + } + + immediate = { + scope:berserker_teacher = { + save_scope_as = harmed_victim + } + if = { + limit = { + exists = var:success_no_one_harmed + } + add_trait = berserker + } + else_if = { + limit = { + exists = var:success_harm_close_one + } + random_courtier = { + limit = { + is_of_major_interest_to_root_trigger = yes + is_ai = yes + age > 12 + this != scope:berserker_teacher + } + increase_wounds_effect = { REASON = duel } + add_opinion = { + modifier = cruelty_opinion + target = root + opinion = -20 + } + save_scope_as = harmed_victim + } + add_trait = berserker + add_dread = minor_dread_gain + + create_character_memory = { + type = hurt_someone_close_to_me + participants = { close_relation = scope:harmed_victim } + } + } + else_if = { + limit = { + exists = var:success_kill_berserker + } + scope:berserker_teacher = { + berserker_killing_spree_effect = yes + } + add_trait = berserker + add_dread = minor_dread_gain + + create_character_memory = { + type = hurt_someone_close_to_me + participants = { close_relation = scope:berserker_teacher } + } + } + else_if = { + limit = { + exists = var:success_kill_everyone + } + every_courtier = { + limit = { + is_ai = yes + } + berserker_killing_spree_effect = yes + } + add_trait = berserker + add_dread = 100 + + create_character_memory = { + type = killed_everyone + } + } + } + + option = { + name = fp1_yearly.2601.a + + trigger = { + exists = var:success_no_one_harmed + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2601.b + + trigger = { + OR = { + exists = var:success_harm_close_one + exists = var:success_kill_berserker + exists = var:success_kill_everyone + } + } + + if = { + limit = { + NOT = { + has_trait = sadistic + } + } + add_stress = massive_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = fp1_yearly.2601.c + + trigger = { + exists = var:fail_fall_asleep + } + + add_prestige = minor_prestige_loss + add_stress = minor_stress_loss + + ai_chance = { + base = 100 + } + } + + after = { + remove_variable = success_no_one_harmed + remove_variable = success_harm_close_one + remove_variable = success_kill_berserker + remove_variable = success_kill_everyone + remove_variable = fail_fall_asleep + } +} diff --git a/events/dlc/fp2/fp2_el_cid_events.txt b/events/dlc/fp2/fp2_el_cid_events.txt new file mode 100644 index 00000000..0804a832 --- /dev/null +++ b/events/dlc/fp2/fp2_el_cid_events.txt @@ -0,0 +1,552 @@ +namespace = fp2_struggle + +###################################### +# EL CID'S BIZARRE ADVENTURE SYSTEM +# By Hugo Cortell +###################################### +fp2_struggle.2045 = { + hidden = yes + + trigger = { + is_landless_adventurer = no + } + + immediate = { + if = { # Startup changes (give the cid his full nickname when he starts adventuring) + limit = { NOT = { has_character_flag = has_already_begun_travelling } } + + remove_nickname = yes + give_nickname = nick_the_cid_campeador + add_character_flag = has_already_begun_travelling # Prevents yearly pulse from stacking up requests + add_character_flag = blocked_from_leaving # Prevents el cid from vacationing in far away lands + } + + if = { + limit = { NOT = { has_character_flag = finished_el_cids_travels } } # In case several requests for the event are stacked up + if = { # Being a guest is used as a boolean to check if the character is in an "evaluation" phase or already in a court. DO NOT USE THE GUEST SYSTEM FOR THIS. + limit = { + OR = { + is_pool_guest = yes + is_pool_character = yes + is_foreign_court_guest = yes + } + } + random_county_in_region = { # Naturally biased in favor of larger states + limit = { exists = holder.liege } + weight = { + base = 1 + modifier = { + add = 10 + holder.liege = { has_relation_friend = root } + } + modifier = { + add = 30 + holder.liege = { has_relation_best_friend = root } + } + compare_modifier = { + value = holder.prestige_level + multiplier = 1.5 + } + } + region = world_europe_west_iberia # Locks el cid's forced travels to iberia + holder.liege = { trigger_event = fp2_struggle.2051 } + } + } + else = { + if = { + limit = { exists = liege } + liege = { trigger_event = fp2_struggle.2050 } # This is you, you get the event, while el cid gets the "system event" + } + else = { + employer = { trigger_event = fp2_struggle.2050 } # ditto + } + } + } + } +} + + +############################################################# +# Unease About El Sidi +# By The Content Design Team (And scripted by Hugo Cortell) +############################################################# + +scripted_trigger el_cid_too_important_trigger = { + OR = { + any_extended_family_member = { this = scope:fp2_2050_el_cid } + scope:fp2_2050_el_cid = { is_vassal_of = ROOT } + has_relation_best_friend = scope:fp2_2050_el_cid + is_spouse_of = scope:fp2_2050_el_cid + } +} + +fp2_struggle.2050 = { + type = character_event + title = { + random_valid = { + triggered_desc = { # Muslim Titles + trigger = { religion = religion:islam_religion } + desc = { + random_valid = { + desc = fp2_struggle.2050.t_muslim_one + desc = fp2_struggle.2050.t_muslim_two + desc = fp2_struggle.2050.t_muslim_three + desc = fp2_struggle.2050.t_muslim_four + } + } + } + + triggered_desc = { # Generic (Christian, nickname-like) Titles + trigger = { NOT = { religion = religion:islam_religion } } + desc = { + random_valid = { + desc = fp2_struggle.2050.t_generic_one + desc = fp2_struggle.2050.t_generic_two + desc = fp2_struggle.2050.t_generic_three + desc = fp2_struggle.2050.t_generic_four + } + } + } + } + } + desc = { # See immediate for flags + first_valid = { + triggered_desc = { + trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:generic_court } + desc = fp2_struggle.2050.desc_court + } + triggered_desc = { + trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:jelly_knights } + desc = fp2_struggle.2050.desc_knights + } + triggered_desc = { + trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:upset_nobles } + desc = fp2_struggle.2050.desc_nobles + } + triggered_desc = { + trigger = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:faith_discomfort } + desc = fp2_struggle.2050.desc_faith + } + desc = board_games.0001.desc.i_am_winning.trait.rowdy # Theoretically impossible to trigger, but if something breaks, players will see this and report it for sure + } + } + + theme = corruption + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:fp2_2050_el_cid + animation = throne_room_two_handed_passive_1 + } + + immediate = { + character:107590 = { save_scope_as = fp2_2050_el_cid } + + random_list = { # Spin the wheel to decide who and why wishes ill on el cid + 10 = { # Generic "the court thinks he is bad" + save_scope_value_as = { + name = fp2_2050_reason_for_kicking_out_el_cid + value = flag:generic_court + } + } + 10 = { # Your knights are all sore losers + modifier = { + add = 30 + any_knight = { + OR = { + has_relation_rival = scope:fp2_2050_el_cid + has_relation_nemesis = scope:fp2_2050_el_cid + } + } + } + save_scope_value_as = { + name = fp2_2050_reason_for_kicking_out_el_cid + value = flag:jelly_knights + } + } + 10 = { # Nobles dislike upstart poor people + modifier = { + add = 30 + any_vassal = { + OR = { + has_relation_rival = scope:fp2_2050_el_cid + has_relation_nemesis = scope:fp2_2050_el_cid + } + } + } + save_scope_value_as = { + name = fp2_2050_reason_for_kicking_out_el_cid + value = flag:upset_nobles + } + } + 10 = { # Generic faith concerns from your bishop + save_scope_value_as = { + name = fp2_2050_reason_for_kicking_out_el_cid + value = flag:faith_discomfort + } + } + } + } + + option = { # Family, Friend or Vassal + name = fp2_struggle.2050.a + + trigger = { el_cid_too_important_trigger = yes } + + hidden_effect = { + scope:fp2_2050_el_cid = { add_character_flag = finished_el_cids_travels } # At this point we can imagine that this character has settled, this stops the cycle to prevent spam + } + + custom_tooltip = fp2_struggle.2050.a.serve_tooltip + send_interface_toast = { + type = event_toast_effect_good + title = fp2_struggle.2050.a.notif.t + right_icon = scope:fp2_2050_el_cid + + reverse_add_opinion = { + target = scope:fp2_2050_el_cid + modifier = stood_by_me_opinion + opinion = 10 + years = 20 + } + } + + stress_impact = { + fickle = minor_stress_impact_gain + } + + ai_chance = { base = 1000 } + } + + option = { # No, I stand by my knight and he can stay! + name = fp2_struggle.2050.b + + trigger = { + is_ai = no + NOT = { scope:fp2_2050_el_cid = { is_vassal_of = ROOT } } + } + + custom_tooltip = fp2_struggle.2050.a.serve_tooltip + send_interface_toast = { + type = event_toast_effect_good + title = fp2_struggle.2050.a.notif.t + right_icon = scope:fp2_2050_el_cid + + if = { + limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:generic_court } + add_character_modifier = { + modifier = fp2_kept_accused_traitor_in_court_modifier + years = 10 + } + } + else_if = { + limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:jelly_knights } + add_character_modifier = { + modifier = fp2_kept_op_knight_in_court_modifier + years = 10 + } + } + else_if = { + limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:upset_nobles } + add_character_modifier = { + modifier = fp2_kept_upstart_knight_in_court_modifier + years = 10 + } + } + else_if = { + limit = { scope:fp2_2050_reason_for_kicking_out_el_cid = flag:faith_discomfort } + add_character_modifier = { + modifier = fp2_kept_godless_mercenary_in_court_modifier + years = 10 + } + } + + reverse_add_opinion = { + target = scope:fp2_2050_el_cid + modifier = stood_by_me_opinion + opinion = 10 + years = 20 + } + scope:fp2_2050_el_cid = { + trigger_event = { + id = fp2_struggle.2045 + years = { 4 12 } + } + } + } + + stress_impact = { + fickle = minor_stress_impact_gain + } + } + + option = { # Okay, please do not give me malus + name = fp2_struggle.2050.c + + trigger = { + NOT = { scope:fp2_2050_el_cid = { is_vassal_of = ROOT } } + } + + send_interface_toast = { + type = event_toast_effect_bad + title = fp2_struggle.2051.t + right_icon = scope:fp2_2050_el_cid + + scope:fp2_2050_el_cid = { + move_to_pool = yes + trigger_event = { + id = fp2_struggle.2045 + days = { 1 4 } + } + } + } + + stress_impact = { + generous = minor_stress_impact_gain + } + + ai_chance = { base = 1 } + } + + option = { # Vanish el cid, even though he is your vassal (suggested by Max) + name = fp2_struggle.2050.c + + trigger = { + is_ai = no + scope:fp2_2050_el_cid = { is_vassal_of = ROOT } + } + + # The only reason to ever select this option is to gain those "repossessed" lands, but it is very mean. + # It will give you tyranny, but it won't directly anger your vassals as they are *narratively* the reason why this is happening. + # The primary reason this exists is to prevent ludonarrative dissonance with the event's description. It is less resource intensive than making new loc. + + # We set the tyranny and opinion loss based on how much was lost (Placed outside the toast to prevent clutter) + add_tyranny = { + value = medium_tyranny_gain + multiply = scope:fp2_2050_el_cid.primary_title.tier + } + + if = { + limit = { can_set_relation_rival_trigger = { CHARACTER = scope:fp2_2050_el_cid } } + set_relation_rival = scope:fp2_2050_el_cid + } + if = { # This is not out of order, it is WAD. If can_set_relation_rival_trigger fails, you just lose a friend but not gain a rival. + limit = { has_relation_friend = scope:fp2_2050_el_cid } + remove_relation_friend = scope:fp2_2050_el_cid + } + + if = { + limit = { scope:fp2_2050_el_cid.primary_title.tier < tier_kingdom } + scope:fp2_2050_el_cid = { + add_opinion = { + modifier = betrayed_me_opinion + target = root + opinion = -100 + } + } + } + else = { + scope:fp2_2050_el_cid = { + add_opinion = { + modifier = betrayed_me_opinion + target = root + opinion = -200 + } + } + } + + create_title_and_vassal_change = { # This tells the engine to start paying closer attention to title changes (and not butt in) + type = revoked + save_scope_as = change + } + scope:fp2_2050_el_cid = { + every_held_title = { + change_title_holder = { + holder = root + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change # Tells the engine that it is safe to go about its buisness with titles + + show_as_tooltip = { scope:fp2_2050_el_cid = { move_to_pool = yes } } # Just jomini things~ + hidden_effect = { # Prevents rendering of toast on option highlight + send_interface_toast = { + type = event_toast_effect_bad + title = fp2_struggle.2051.t + right_icon = scope:fp2_2050_el_cid + + show_as_tooltip = { # Condensed version to fit into the toast + if = { + limit = { scope:fp2_2050_el_cid.primary_title.tier > tier_duchy } + scope:fp2_2050_el_cid = { + if = { + limit = { has_relation_nemesis = ROOT } + set_relation_nemesis = ROOT + } + add_opinion = { + modifier = betrayed_me_opinion + target = root + opinion = -200 + } + } + } + else = { + if = { + limit = { has_relation_rival = ROOT } + set_relation_rival = ROOT + } + add_opinion = { + modifier = betrayed_me_opinion + target = root + opinion = -100 + } + } + } + + # Standard stuff + scope:fp2_2050_el_cid = { + move_to_pool = yes + trigger_event = { + id = fp2_struggle.2045 + days = { 1 4 } + } + } + } + } + + stress_impact = { # This kind of action comes with quite a bit of stress + generous = minor_stress_impact_gain + brave = medium_stress_impact_gain + forgiving = major_stress_impact_gain + gregarious = medium_stress_impact_gain + honest = minor_stress_impact_gain + humble = medium_stress_impact_gain + just = major_stress_impact_gain + trusting = medium_stress_impact_gain + compassionate = major_stress_impact_gain + august = minor_stress_impact_gain + gallant = medium_stress_impact_gain + } + } +} + + +############################################################ +# El Cid Arrives At Your Court +# By The Content Design Team (And scripted by Hugo Cortell) +############################################################ +fp2_struggle.2051 = { + type = character_event + title = fp2_struggle.2051.t + desc = fp2_struggle.2051.desc + + theme = vassal + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:fp2_2050_el_cid + animation = throne_room_one_handed_passive_1 + } + + immediate = { + character:107590 = { save_scope_as = fp2_2050_el_cid } + add_visiting_courtier = scope:fp2_2050_el_cid + } + + option = { # You will enjoy a high position at my court! + name = fp2_struggle.2051.a + + send_interface_toast = { + type = event_toast_effect_good + title = fp2_struggle.2050.a.notif.t + right_icon = scope:fp2_2050_el_cid + + pay_treasury_or_gold = { + target = scope:fp2_2050_el_cid + value = medium_treasury_or_gold_value + } + add_courtier = scope:fp2_2050_el_cid + } + + if = { + limit = { exists = cp:councillor_marshal } + fire_councillor = cp:councillor_marshal + } + assign_councillor_type = { + type = councillor_marshal + target = scope:fp2_2050_el_cid + } + + scope:fp2_2050_el_cid = { + add_opinion = { + target = root + modifier = hired_me_opinion + opinion = 20 + } + add_opinion = { + target = root + modifier = given_luxuries_opinion + opinion = 10 + } + + trigger_event = { + id = fp2_struggle.2045 + years = { 4 12 } + } + } + + trigger = { is_ai = no } + } + + option = { # Welcome or whatever + name = fp2_struggle.2051.b + + send_interface_toast = { + type = event_toast_effect_good + title = fp2_struggle.2050.a.notif.t + right_icon = scope:fp2_2050_el_cid + + pay_treasury_or_gold = { + target = scope:fp2_2050_el_cid + value = minor_treasury_or_gold_value + } + add_courtier = scope:fp2_2050_el_cid + } + scope:fp2_2050_el_cid = { + trigger_event = { + id = fp2_struggle.2045 + years = { 4 10 } + } + } + + ai_chance = { base = 65 } + } + + option = { # Away with you vile beggar! + name = fp2_struggle.2051.c + + send_interface_toast = { + type = event_toast_effect_bad + title = fp2_struggle.2051.t + right_icon = scope:fp2_2050_el_cid + + custom_tooltip = fp2_struggle.2050.c.notif + scope:fp2_2050_el_cid = { + move_to_pool = yes + trigger_event = { + id = fp2_struggle.2045 + days = { 1 4 } + } + } + } + + ai_chance = { base = 45 } + } +} diff --git a/events/dlc/fp2/fp2_lyonese_monk_events.txt b/events/dlc/fp2/fp2_lyonese_monk_events.txt new file mode 100644 index 00000000..9e543e9f --- /dev/null +++ b/events/dlc/fp2/fp2_lyonese_monk_events.txt @@ -0,0 +1,4806 @@ +namespace = fp2_lyonese_monk + +################################################## +# #Setup & Misc +# We're starting, invalidating, or prematurely ending the chain. +# 0001 - 0010 A Storm-Tossed Night - a learned holy person arrives at court, begging for succour. +# 0011 - 0020 A Former Friend - you have died, and scope:acolyte wishes to continue. +# 0021 - 0030 Gone and Done - scope:acolyte has died or is no longer your courtier. +# 0031 - 0040 Shattered Faith - you or scope:acolyte are no longer the correct faith. +# 0041 - 0050 # - # +# +# #Private Teachings +# The event chain is in stealth mode, with no continuation tooltips. +# 0201 - 0210 Just a Few Friends - scope:acolyte asks for permission to start a study group. +# 0211 - 0220 But Why? - one of your barons retires to become a monk spontaneously. +# 0221 - 0230 A Rictus Grin - a courtier is looking dopey and happy due to how at peace with themselves they are. +# 0231 - 0240 Booing the Bishop - a bishop in your realm is booed by a crowd of people. +# 0241 - 0250 All HerHis Fault - your court chaplain comes to you complaining, begging for an end to all of this. +# +# #Public Controversy +# Something is afoot! Important figures are getting involved, and you get continuation tooltips to let you know something is up. +# 0401 - 0410 Scope:pope's Epistle - the Pope writes you an advisory, reprimanding you and asking you to boot the monk. +# 0411 - 0420 Space to Teach - scope:acolyte asks you for a county (or barony, if you're still a count) in which to spread HerHis teachings. +# 0421 - 0430 High Tempers - your court chaplain and scope:acolyte get into a fight. +# 0431 - 0440 Scope:pope's Second Epistle - the Pope writes you *another* advisory, demanding that you boot scope:acolyte plus veiled threats. +# 0441 - 0450 The Council of scope:bishopric - the clergy of the region gather for a minor church council, featuring scope:acolyte defending their claims. +# +# #Schism +# Ho-boi, time for a shake-up! You recant or you suffer. +# 0601 - 0610 Scope:pope's Third Epistle - whatever the council's results, the Pope condemns it. You are given a final demand to repent & turn over scope:acolyte or face excommunication. +# 0611 - 0620 High Tensions - an angry mob in your capital turn up to demand scope:acolyte's head, countered by *another* angry mob that hates the first mob. +# 0621 - 0630 A Formal Complaint - zealous vassals protest your heresy. +# 0631 - 0640 Just Church Business - a neighbouring ruler has purchased claims on your land from your HoF. +# 0641 - 0650 No More than a Man - scope:acolyte suggests you embrace the heresy. +# +# #Council +# You've stuck with things, and now it's time to decide the course of your faith. +# 0801 - 0810 The Second Council of scope:bishopric - clergy from all over your realm gather, wanting to contribute their thoughts and notes. +# 0811 - 0820 Elipandics - clergy argue over whether you're all really adoptionists or just nuanced Catholics. +# 0821 - 0830 Felicians - clergy argue over the degree to which expedience is required. +# 0831 - 0840 Radicals - clergy argue over *how* monotheistic to be. +# 0841 - 0850 From the Ashes - the church council arrives at their final important doctrinal conclusions. +################################################## + + + + + + + + + + +################################################## +# GENERAL SCRIPTED TRIGGERS & EFFECTS + +scripted_trigger fp2_suitable_base_convert_trigger = { + # We only want same-faith characters. + faith = scope:story.var:base_faith + # They should be old enough to attend a meeting. + age >= 14 + # Cynics, non-believers, and the chronically short of zeal don't attend such meetings voluntarily. + NOR = { + has_trait = cynical + ai_zeal <= high_negative_ai_value + any_secret = { type = secret_non_believer } + } + # Exclude characters that might turn up as scope:irate_theocrat. + NOR = { + # Court chaplains. + AND = { + exists = scope:acolyte_host.cp:councillor_court_chaplain + this = scope:acolyte_host.cp:councillor_court_chaplain + } + # Landed theocrats - we've already pre-filtered for faith. + government_has_flag = government_is_theocracy + # Landless monks at court - we've already pre-filtered for faith. + AND = { + is_courtier_of = scope:acolyte + has_trait = devoted + } + } + # And not already players or the the heir of a player. + is_ai = yes + NOT = { is_player_heir_of = scope:acolyte_host } +} + +scripted_trigger fp2_suitable_strict_convert_trigger = { + fp2_suitable_base_convert_trigger = yes + # Plus exclude both characters already in the list & the landed. + NOR = { + is_landed = yes + save_temporary_scope_as = current_temp + any_in_list = { + list = hidden_converts + this = scope:current_temp + } + } +} + +scripted_trigger fp2_suitable_semi_strict_convert_trigger = { + fp2_suitable_base_convert_trigger = yes + # Plus exclude characters already in the list. + NOT = { + save_temporary_scope_as = current_temp + any_in_list = { + list = hidden_converts + this = scope:current_temp + } + } +} + +scripted_trigger fp2_lyonese_monk_suitable_annoyed_theocrat_landed_vassal_trigger = { + government_has_flag = government_is_theocracy + faith = scope:story.var:base_faith + is_available_ai_adult = yes +} + +scripted_trigger fp2_lyonese_monk_suitable_annoyed_theocrat_landless_monk_trigger = { + has_trait = devoted + faith = scope:story.var:base_faith + is_available_ai_adult = yes + this != scope:acolyte +} + +scripted_trigger fp2_lyonese_monk_has_suitable_annoyed_theocrat_trigger = { + # This should always be synced with fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect. + OR = { + AND = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { is_available_ai_adult = yes } + } + any_vassal = { fp2_lyonese_monk_suitable_annoyed_theocrat_landed_vassal_trigger = yes } + any_courtier_or_guest = { fp2_lyonese_monk_suitable_annoyed_theocrat_landless_monk_trigger = yes } + } +} + +scripted_effect fp2_add_random_characters_to_converts_list_effect = { + hidden_effect = { + $COURT$ = { + while = { + count = 5 + limit = { + any_courtier_or_guest = { fp2_suitable_strict_convert_trigger = yes } + } + random_courtier_or_guest = { + limit = { fp2_suitable_strict_convert_trigger = yes } + add_to_list = hidden_converts + } + } + } + } +} + +scripted_effect fp2_add_random_vassals_to_converts_list_effect = { + hidden_effect = { + $LIEGE$ = { + while = { + count = 3 + limit = { + any_vassal = { fp2_suitable_semi_strict_convert_trigger = yes } + } + random_vassal = { + limit = { fp2_suitable_semi_strict_convert_trigger = yes } + add_to_list = hidden_converts + } + } + } + } +} + +scripted_effect fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect = { + # This should always be synced with fp2_lyonese_monk_has_suitable_annoyed_theocrat_trigger. + # Grab a suitable annoyed var:base_faith character. + ## We prefer the chaplain... + if = { + limit = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { is_available_ai_adult = yes } + } + cp:councillor_court_chaplain = { save_scope_as = irate_theocrat } + } + ## ... or else a landed theocrat... + else_if = { + limit = { + any_vassal = { fp2_lyonese_monk_suitable_annoyed_theocrat_landed_vassal_trigger = yes } + } + random_vassal = { + limit = { fp2_lyonese_monk_suitable_annoyed_theocrat_landed_vassal_trigger = yes } + save_scope_as = irate_theocrat + } + } + ## ... but in a pinch a monk will do. + ### We should know from the sync'd trigger that we've definitely got one of these hanging about if we've gotten to this point, so no need to check twice. + else_if = { + limit = { + any_courtier_or_guest = { fp2_lyonese_monk_suitable_annoyed_theocrat_landless_monk_trigger = yes } + } + random_courtier_or_guest = { + limit = { fp2_lyonese_monk_suitable_annoyed_theocrat_landless_monk_trigger = yes } + save_scope_as = irate_theocrat + } + } + ## And, in an emergency, a backup. + else = { + create_character = { + location = scope:acolyte_host.capital_province + template = monk_character_template + culture = scope:acolyte_host.culture + faith = scope:story.var:base_faith + save_scope_as = irate_theocrat + } + } +} + +scripted_effect fp2_lyonese_monk_make_acolyte_and_irate_theocrat_rivals_effect = { + scope:acolyte = { + if = { + limit = { + NOT = { has_relation_rival = scope:irate_theocrat } + } + set_relation_rival = { + target= scope:irate_theocrat + reason = rival_blamed_by_mentor + } + } + } +} + +scripted_effect fp2_lyonese_monk_grab_and_update_pope_effect = { + # If this is our first time, just nab the current one. + if = { + limit = { + NOT = { exists = scope:pope } + } + scope:story.var:base_faith.religious_head = { save_scope_as = pope } + } + # Otherwise, check to see if the current Pope is the same as the last Pope. + else_if = { + limit = { + scope:story.var:base_faith.religious_head != scope:pope + } + scope:pope = { save_scope_as = old_pope } + scope:story.var:base_faith.religious_head = { save_scope_as = pope } + } + # Update the capital. + ## If scope:pope has a specific one, take that. + if = { + limit = { + scope:pope = { is_landed = yes } + } + scope:pope.capital_barony = { save_scope_as = papal_capital } + } + ## Otherwise, we default to Rome on principal. + else = { + title:b_roma = { save_scope_as = papal_capital } + } +} + + + + + + + + + + + +################################################## +# SETUP & MISC + +################################################## +# A Storm-Tossed Night +# by Ewan Cowhig Croft +# 0001 - 0010 +################################################## + +# A learned holy person arrives at court, begging for succour. +fp2_lyonese_monk.0001 = { + type = character_event + title = fp2_lyonese_monk.0001.t + desc = fp2_lyonese_monk.0001.desc + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = personality_rational + } + right_portrait = { + character = scope:acolyte + animation = chaplain + } + override_background = { reference = corridor_night } + cooldown = { years = 100 } + + trigger = { + #Not for landless + is_landed = yes + } + + immediate = { + play_music_cue = "mx_cue_general_crusade_event_3" + # Create scope:acolyte. + ## A pupil of Felix of Urgell, acting as a sort of do-over for the character. + create_character = { + location = root.capital_province + #General + age = fp2_lyonese_monk_age_value + faith = root.faith + culture = culture:french + dynasty = generate + #Education + trait = education_learning_4 + #Personality + trait = deceitful + trait = stubborn + trait = zealous + trait = brave + #Misc + trait = theologian + trait = scholar + trait = whole_of_body + trait = devoted + health = 5 + random_traits = no + gender_female_chance = root_faith_clergy_gender_female_chance + #Skills + ## These include the two "hidden" traits of scope:acolyte's buffs - heresiarch & education_intrigue_4. + diplomacy = 14 + martial = 2 + stewardship = 7 + intrigue = 12 + learning = 8 + prowess = 2 + save_scope_as = acolyte + } + scope:acolyte.house = { set_house_name = "dynn_d__Lyon" } + scope:acolyte.dynasty = { set_dynasty_name = "dynn_d__Lyon" } + } + + # Of course, what's mine is yours! + option = { + name = fp2_lyonese_monk.0001.a + + # Sort scope:acolyte. + ## Add them as a courtier. + add_courtier = scope:acolyte + ## & tell 'em to stay put. + scope:acolyte = { add_character_flag = blocked_from_leaving } + # Set up our tracking stuff. + ## Including a story cycle. + create_story = { + type = story_lyonese_monk + save_scope_as = story + } + ## A variable within that cycle that wants to be special. + if = { + limit = { exists = scope:story } + scope:story = { + # Set our one true OG faith. Till the other one. + set_variable = { + name = base_faith + value = scope:acolyte.faith + } + } + } + ## And, in case of death, a back-up scope:acolyte. + if = { + limit = { exists = scope:story } + scope:story = { + set_variable = { + name = acolyte + value = scope:acolyte + } + } + } + # Start the chain. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + days = 7 + } + + stress_impact = { + generous = miniscule_stress_impact_loss + greedy = minor_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = -1 + } + } + } + + # We have no room, but you can stay for a night. + option = { + name = fp2_lyonese_monk.0001.b + + # Opt out, with some consolation currency. + add_piety = minor_piety_gain + scope:acolyte = { silent_disappearance_effect = yes } + + stress_impact = { + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = 0.5 + ai_compassion = 0.5 + ai_sociability = -0.25 + } + } + } + + # No beggars in GetPrimaryTitle. *Out*. + option = { + name = fp2_lyonese_monk.0001.c + + # Opt out, with some consolation currency. + add_prestige = miniscule_prestige_gain + scope:acolyte = { silent_disappearance_effect = yes } + + stress_impact = { + callous = miniscule_stress_impact_loss + sadistic = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + generous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 0.25 + ai_sociability = -0.5 + ai_compassion = -1 + } + } + } +} + +# Select a candidate. +fp2_lyonese_monk.0002 = { + scope = none + hidden = yes + + trigger = { + # DLC check. + has_fp2_dlc_trigger = yes + } + + immediate = { + # First, mark this as done. + add_to_global_variable_list = { + name = unavailable_unique_events + target = flag:lyonese_monk_event + } + # Now we try to grab eligible candidates. + every_county_in_region = { + region = dlc_fp2_lyonese_monk_region + holder = { + if = { + limit = { fp2_lyonese_monk_0002_valid_court_trigger = yes } + add_to_list = potential_monk_court_list + } + } + } + # Then sort within them. + random_in_list = { + list = potential_monk_court_list + # Prioritise scholastic Iberian players. + limit = { + is_ai = no + capital_province = { geographical_region = world_europe_west_iberia } + } + # Otherwise, random roll it. + alternative_limit = { always = yes } + # We want to weight up a few things. + weight = { + base = 0 + # Learning gives our basic order, since it's reflective of how stimulating a theologian you are. + modifier = { add = learning } + # Weight up a bit for certain traits, those that make it more likely to allow shenanigans. + modifier = { + add = 10 + has_trait = trusting + } + modifier = { + add = 10 + has_trait = stubborn + } + modifier = { + add = 10 + has_trait = arrogant + } + # Weight up a bit for characters who are actively impious, as they're less likely to heed the Pope's demands. + modifier = { + add = 30 + piety_level <= 0 + } + # We want an Iberian pick over an Aquitanian one, ideally. + modifier = { + add = 50 + capital_province = { geographical_region = world_europe_west_iberia } + } + } + save_scope_as = acolyte_host + trigger_event = fp2_lyonese_monk.0001 + } + } +} + +################################################## +# A Former Friend +# by Ewan Cowhig Croft +# 0011 - 0020 +################################################## + +# You have died, and scope:acolyte wishes to continue. +fp2_lyonese_monk.0011 = { + type = character_event + title = fp2_lyonese_monk.0011.t + desc = fp2_lyonese_monk.0011.desc + theme = faith + left_portrait = { + character = scope:acolyte + animation = flirtation + } + override_background = { reference = sitting_room } + + trigger = { + is_imprisoned = no + is_adult = yes + exists = faith.religious_head + faith.religious_head = scope:story.var:base_faith.religious_head + } + + on_trigger_fail = { + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + } + + immediate = { + # Nab scope:acolyte a-fresh. + scope:story.var:acolyte = { save_scope_as = acolyte } + } + + # Well, I suppose... + option = { + name = fp2_lyonese_monk.0011.a + + # Notify scope:acolyte_host that they're opting in. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + # Give the story cycle its new host. + scope:story = { make_story_owner = scope:acolyte_host } + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = 1 + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_sociability = 0.5 + } + } + } + + # Pack your belongings, vagrant. + option = { + name = fp2_lyonese_monk.0011.b + + # Clean house. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + + stress_impact = { + paranoid = miniscule_stress_impact_loss + shy = miniscule_stress_impact_loss + trusting = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = -0.5 + ai_zeal = -1 + } + } + } +} + +################################################## +# Gone and Done +# by Ewan Cowhig Croft +# 0021 - 0030 +################################################## + +# Scope:acolyte has died or is no longer your courtier or vassal. +fp2_lyonese_monk.0021 = { + type = character_event + title = fp2_lyonese_monk.0021.t + desc = { + desc = fp2_lyonese_monk.0021.desc.intro + first_valid = { + triggered_desc = { + trigger = { + scope:acolyte = { is_alive = no } + } + desc = fp2_lyonese_monk.0021.desc.dead + } + triggered_desc = { + trigger = { + scope:acolyte = { is_imprisoned = yes } + } + desc = fp2_lyonese_monk.0021.desc.imprisoned + } + desc = fp2_lyonese_monk.0021.desc.gone + } + } + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = disapproval + } + right_portrait = { + character = scope:acolyte + animation = disbelief + } + override_background = { reference = throne_room } + + # Private Teachings: they can't have been that important... + option = { + name = fp2_lyonese_monk.0021.a + trigger = { + NOR = { + has_character_flag = fp2_lyonese_monk_entered_controversy_flag + has_character_flag = fp2_lyonese_monk_entered_schism_flag + } + } + + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + # Clean house. + scope:story = { end_story = yes } + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } + + # Public Controversy: they were clearly more trouble than they're worth... + option = { + name = fp2_lyonese_monk.0021.b + trigger = { + has_character_flag = fp2_lyonese_monk_entered_controversy_flag + NOT = { has_character_flag = fp2_lyonese_monk_entered_schism_flag } + } + + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + # Clean house. + scope:story = { end_story = yes } + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } + + # Schism: all this for nothing? + option = { + name = fp2_lyonese_monk.0021.c + trigger = { has_character_flag = fp2_lyonese_monk_entered_schism_flag } + + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + # Clean house. + scope:story = { end_story = yes } + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } + + # Is scope:acolyte still alive somewhere? SheHe shouldn't be. + after = { + # ... so let's just clean that up. + scope:acolyte = { + if = { + limit = { is_alive = yes } + silent_disappearance_effect = yes + } + } + } +} + +################################################## +# Shattered Faith +# by Ewan Cowhig Croft +# 0031 - 0040 +################################################## + +# You or scope:acolyte are no longer the correct faith. +fp2_lyonese_monk.0031 = { + type = character_event + title = fp2_lyonese_monk.0031.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:acolyte.faith = scope:story.var:base_faith } + desc = fp2_lyonese_monk.0031.desc.acolyte_host + } + desc = fp2_lyonese_monk.0031.desc.acolyte + } + } + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = disapproval + } + right_portrait = { + character = scope:acolyte + animation = shame + } + override_background = { reference = temple } + + # Me: I don't need scope:acolyte when I have HighGodName. + option = { + name = fp2_lyonese_monk.0031.a + trigger = { + faith != scope:story.var:base_faith + } + + # Clean house. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } + + # Them: they clearly weren't all that committed. + option = { + name = fp2_lyonese_monk.0031.b + trigger = { + scope:acolyte.faith != scope:story.var:base_faith + } + + # Clean house. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } +} + +################################################## +# Bigger Crises +# by Ewan Cowhig Croft +# 0041 - 0050 +################################################## + +# The destruction of the Papacy leaves little room in everyone's hearts for the minutiae of doctrine. +fp2_lyonese_monk.0041 = { + type = character_event + title = fp2_lyonese_monk.0041.t + desc = { + first_valid = { + # Either Rome is gone... + triggered_desc = { + trigger = { + NOT = { exists = title:k_papal_state.holder } + } + desc = fp2_lyonese_monk.0041.desc.pope_hope_is_nope + } + # ... or else we've likely just split off from them, probably due to Mozarab shenanigans. + desc = fp2_lyonese_monk.0041.desc.schism + } + } + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = disbelief + } + right_portrait = { + character = scope:acolyte + animation = stress + } + override_background = { reference = burning_building } + + # We are all alone without the Vicar of Christ! + option = { + name = { + trigger = { + NOT = { exists = title:k_papal_state.holder } + } + text = fp2_lyonese_monk.0041.a.pope_hope_is_nope + } + name = { + trigger = { always = yes } + text = fp2_lyonese_monk.0041.a.backup + } + + # Clean house. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } +} + +################################################## +# It Is a Mystery +# by Ewan Cowhig Croft +# 0051 - 0060 +################################################## + +# Your incarceration causes scope:acolyte to disappear - and the story along with HerHim. +fp2_lyonese_monk.0051 = { + type = character_event + title = fp2_lyonese_monk.0051.t + desc = fp2_lyonese_monk.0051.desc + theme = faith + left_portrait = { + character = scope:acolyte_host + triggered_animation = { + trigger = { is_in_prison_type = house_arrest } + animation = prisonhouse + } + triggered_animation = { + trigger = { is_in_prison_type = dungeon } + animation = prisondungeon + } + } + right_portrait = { + character = scope:acolyte + animation = dismissal + } + override_background = { reference = dungeon } + + # What could have happened to HerHim? + option = { + name = fp2_lyonese_monk.0051.a + + # Clean house. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + scope:story = { end_story = yes } + # Everything ends. + custom_tooltip = fp2_lyonese_monk.0000.tt.teachings_fade + + # No stress impact for notification option. + ai_chance = { + # Every option's a good option. + base = 100 + } + } +} + + + + + + + + + + +################################################## +# PRIVATE TEACHINGS + +################################################## +# Just a Few Friends +# by Ewan Cowhig Croft +# 0201 - 0210 +################################################## + +# Scope:acolyte asks for permission to start a study group. +fp2_lyonese_monk.0201 = { + type = character_event + title = fp2_lyonese_monk.0201.t + desc = fp2_lyonese_monk.0201.desc + theme = learning_theology_focus + left_portrait = { + character = scope:acolyte_host + animation = personality_rational + } + right_portrait = { + character = scope:acolyte + animation = flirtation + } + override_background = { reference = sitting_room } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + } + + # I guess it couldn't hurt... + option = { + name = fp2_lyonese_monk.0201.a + + # Scope:acolyte is happy. + reverse_add_opinion = { + target = scope:acolyte + modifier = pleased_opinion + opinion = 25 + } + # We nab a few early adopters. + fp2_add_random_characters_to_converts_list_effect = { COURT = scope:acolyte_host } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0201.a.tt + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 4 8 } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + paranoid = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_sociability = 0.5 + } + } + } + + # A group of conspirators? I don't think so! + option = { + name = fp2_lyonese_monk.0201.b + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Stress loss applied in the stress impact. + + stress_impact = { + base = medium_stress_loss + paranoid = minor_stress_impact_loss + trusting = medium_stress_impact_gain + zealous = medium_stress_impact_gain + eccentric = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = -0.5 + ai_rationality = -1 + } + } + } + + # I think you've outstayed your welcome, scope:acolyte. + option = { + name = fp2_lyonese_monk.0201.c + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Lil bit o'consolation prestige. + add_prestige = miniscule_prestige_gain + + stress_impact = { + shy = miniscule_stress_impact_loss + gregarious = minor_stress_impact_gain + zealous = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = -0.5 + ai_energy = -0.5 + } + } + } +} + +################################################## +# But Why? +# by Ewan Cowhig Croft +# 0211 - 0220 +################################################## + +scripted_trigger fp2_lyonese_monk_0211_suitable_baron_trigger = { + # Meets the basic requirements. + fp2_suitable_base_convert_trigger = yes + # Plus: is only a baron. + highest_held_title_tier = tier_barony +} + +# One of your barons retires to become a monk spontaneously. +fp2_lyonese_monk.0211 = { + type = letter_event + sender = scope:baron + opening = fp2_lyonese_monk.0211.t + desc = fp2_lyonese_monk.0211.desc + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + # Must have a suitable baron. + any_vassal = { fp2_lyonese_monk_0211_suitable_baron_trigger = yes } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Select a suitable baron. + random_vassal = { + # Try to nab a councillor, to make it more impactful. + limit = { + is_councillor_of = scope:acolyte_host + fp2_lyonese_monk_0211_suitable_baron_trigger = yes + } + # But otherwise yeah, just anyone is fine. + alternative_limit = { fp2_lyonese_monk_0211_suitable_baron_trigger = yes } + add_to_list = hidden_converts + save_scope_as = baron + primary_title = { save_scope_as = baron_holding} + } + # Now, they resign and become a NunMonk. + scope:baron = { + depose = yes # depose_effect not used for opted abdication + add_trait = devoted + } + # Nab some more converts. + fp2_add_random_characters_to_converts_list_effect = { COURT = scope:acolyte_host } + } + + # Can SheHe #EMP do#! that? + option = { + name = fp2_lyonese_monk.0211.a + + # No extra effects. + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 4 8 } + } + + # No extra stress for a single-option event. + ai_chance = { + # Not relevant for a single-option event. + base = 100 + } + } +} + +################################################## +# A Rictus Grin +# by Ewan Cowhig Croft +# 0221 - 0230 +################################################## + +scripted_trigger fp2_lyonese_monk_0221_suitable_courtier_trigger = { + # We use the base version because we don't care if they're already a secret convert. + fp2_suitable_base_convert_trigger = yes + # Now, we want to make sure they're not already zealous and have room for an extra personality trait. + number_of_personality_traits < personality_trait_limit + NOR = { + has_trait = zealous + # They also should generally be precluded from cynical, but hey, just in case... + has_trait = cynical + } +} + +# A courtier is looking dopey and happy due to how at peace with themselves they are. +fp2_lyonese_monk.0221 = { + type = character_event + title = fp2_lyonese_monk.0221.t + desc = fp2_lyonese_monk.0221.desc + theme = friendly + left_portrait = { + character = scope:acolyte_host + animation = worry + } + right_portrait = { + character = scope:courtier + animation = admiration + } + override_background = { reference = corridor_day } + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + any_courtier = { fp2_lyonese_monk_0221_suitable_courtier_trigger = yes } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Select a suitable courtier. + random_courtier = { + limit = { fp2_lyonese_monk_0221_suitable_courtier_trigger = yes } + add_to_list = hidden_converts + save_scope_as = courtier + } + # Give 'em a new lease on life. + scope:courtier = { add_trait = zealous } + # Nab some more converts. + fp2_add_random_characters_to_converts_list_effect = { COURT = scope:acolyte_host } + } + + # Glad you're doing well, scope:courtier! + option = { + name = fp2_lyonese_monk.0221.a + + # They like you a little more. + reverse_add_opinion = { + target = scope:courtier + modifier = compliment_opinion + opinion = 20 + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + compassionate = miniscule_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + # I've got a bad feeling about this... + option = { + name = fp2_lyonese_monk.0221.b + + # They like you a little less. + reverse_add_opinion = { + target = scope:courtier + modifier = disappointed_opinion + opinion = -20 + } + + stress_impact = { + paranoid = miniscule_stress_impact_loss + trusting = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } + + after = { + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 4 8 } + } + } +} + +################################################## +# Booing the Bishop +# by Ewan Cowhig Croft +# 0231 - 0240 +################################################## + +# A bishop in your realm is booed by a crowd of people. +fp2_lyonese_monk.0231 = { + type = character_event + title = fp2_lyonese_monk.0231.t + desc = fp2_lyonese_monk.0231.desc + theme = faith + left_portrait = { + character = scope:irate_theocrat + animation = fear + } + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + fp2_lyonese_monk_has_suitable_annoyed_theocrat_trigger = yes + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Process a suitable annoyed theocrat. + fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect = yes + scope:irate_theocrat = { add_stress = major_stress_gain } + # Nab some more converts. + fp2_add_random_characters_to_converts_list_effect = { COURT = scope:acolyte_host } + } + + # People need to show the Church more *respect*. + option = { + name = fp2_lyonese_monk.0231.a + + # Scope:irate_theocrat appreciates your kind words. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = pious_opinion + opinion = 20 + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_compassion = -1 + } + } + } + + # Clearly SheHe's got to work on HerHis sermons. + option = { + name = fp2_lyonese_monk.0231.b + + # You gain a little piety. + add_piety = minor_piety_gain + # But you frustrate and hurt scope:irate_theocrat. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = cruelty_opinion + opinion = -10 + } + scope:irate_theocrat = { add_stress = minor_stress_gain } + + stress_impact = { + cynical = miniscule_stress_impact_loss + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -0.5 + ai_zeal = -1 + } + } + } + + after = { + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 4 8 } + } + } +} + +################################################## +# All HerHis Fault +# by Ewan Cowhig Croft +# 0241 - 0250 +################################################## + +# Your court chaplain comes to you complaining, begging for an end to all of this. +fp2_lyonese_monk.0241 = { + type = character_event + title = fp2_lyonese_monk.0241.t + desc = fp2_lyonese_monk.0241.desc + theme = rival_relation + left_portrait = { + character = scope:irate_theocrat + animation = rage + } + right_portrait = { + character = scope:acolyte + animation = shock + } + override_background = { reference = council_chamber } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Process a suitable annoyed theocrat. + fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect = yes + # Make it clear they're pissed. + fp2_lyonese_monk_make_acolyte_and_irate_theocrat_rivals_effect = yes + } + + # Very well — pack your things, scope:acolyte. + option = { + name = fp2_lyonese_monk.0241.a + + # Opinion gain with scope:irate_theocrat. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = pleased_opinion + opinion = 20 + } + # Scope:acolyte leaves. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = -0.5 + } + } + } + + # GUARDS! Seize the heterodox bastard! + option = { + name = fp2_lyonese_monk.0241.b + + # A sprinkle of piety for your orthodoxy! + add_piety = minor_piety_gain + # Scope:acolyte is dispatched. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = scuffle } + # Scope:irate_theocrat is horrified though. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = overreaction_opinion + opinion = -10 + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_vengefulness = 1 + } + } + } + + # You're the troublemaker here, scope:irate_theocrat + option = { + name = fp2_lyonese_monk.0241.c + + # Scope:irate_theocrat is *not* happy. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = refusal_opinion + opinion = -30 + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0241.c.tt + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 4 8 } + } + + stress_impact = { + cynical = miniscule_stress_impact_loss + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 0.5 + ai_zeal = -1 + } + } + } +} + + + + + + + + + + + +################################################## +# PUBLIC CONTROVERSY + +################################################## +# Scope:pope's Epistle +# by Ewan Cowhig Croft +# 0401 - 0410 +################################################## + +# The Pope writes you an advisory, reprimanding you and asking you to boot the monk. +fp2_lyonese_monk.0401 = { + type = letter_event + sender = scope:pope + opening = fp2_lyonese_monk.0401.t + desc = fp2_lyonese_monk.0401.desc + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + play_music_cue = "mx_cue_general_crusade_event_1" + # Sort our Pope scope. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + # Mark that we've entered the second phase. + add_character_flag = fp2_lyonese_monk_entered_controversy_flag + } + + # The Holy See compels me. + option = { + name = fp2_lyonese_monk.0401.a + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Gain a favour hook on scope:pope. + add_hook = { + type = favor_hook + target = scope:pope + } + # Plus some opinion. + reverse_add_opinion = { + target = scope:pope + modifier = pious_opinion + opinion = 20 + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + arrogant = medium_stress_impact_gain + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 0.5 + } + } + } + + # I don't remember asking for Rome's permission. + option = { + name = fp2_lyonese_monk.0401.b + + # Scope:pope is more upset. + reverse_add_opinion = { + target = scope:pope + modifier = impious_opinion + opinion = -15 + } + # Plus - lose a little piety. + add_piety = minor_piety_loss + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + cynical = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 0.75 + ai_zeal = -1 + } + } + } +} + +################################################## +# Space to Teach +# by Ewan Cowhig Croft +# 0411 - 0420 +################################################## + +scripted_trigger fp2_lyonese_monk_0411_county_to_give_trigger = { + tier = tier_county + is_landless_type_title = no + NOT = { this = scope:acolyte_host.capital_county } + # Within the prime region. + title_province = { geographical_region = dlc_fp2_lyonese_monk_region } +} + +# Scope:acolyte asks you for a county in which to spread HerHis teachings. +fp2_lyonese_monk.0411 = { + type = character_event + title = fp2_lyonese_monk.0411.t + desc = fp2_lyonese_monk.0411.desc + theme = learning_theology_focus + left_portrait = { + character = scope:acolyte_host + animation = disbelief + } + right_portrait = { + character = scope:acolyte + animation = admiration + } + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + # If you're just a count yourself, this isn't relevant for you. + highest_held_title_tier >= tier_duchy + # Must have a suitable county to hand over. + any_held_title = { fp2_lyonese_monk_0411_county_to_give_trigger = yes } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Pick a county to ask for. + ordered_held_title = { + limit = { fp2_lyonese_monk_0411_county_to_give_trigger = yes } + # Pick the least valuable county. + order_by = { + value = development_level + multiply = -1 + } + save_scope_as = acolyte_fief + } + } + + # I suppose... I suppose I could allow this... + option = { + name = fp2_lyonese_monk.0411.a + + # You turn over the county. + create_title_and_vassal_change = { + type = granted + save_scope_as = change + } + scope:acolyte_fief = { + change_title_holder = { + holder = scope:acolyte + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + # Make sure the place spawns as a theocracy. + hidden_effect = { + scope:acolyte = { change_government = theocracy_government } + } + # Nab some converts. + fp2_add_random_vassals_to_converts_list_effect = { LIEGE = scope:acolyte_host } + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + generous = minor_stress_impact_loss + greedy = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 0.5 + ai_greed = -2 + } + } + } + + # Don't be ridiculous! + option = { + name = fp2_lyonese_monk.0411.b + flavor = fp2_lyonese_monk.0411.b.tt + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Gain a little prestige for putting your foot down. + add_prestige = minor_prestige_gain + + stress_impact = { + greedy = miniscule_stress_impact_loss + generous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_greed = 2 + ai_zeal = -0.5 + } + } + } +} + +################################################## +# High Tempers +# by Ewan Cowhig Croft +# 0421 - 0430 +################################################## + +# Your court chaplain and scope:acolyte get into a fight. +fp2_lyonese_monk.0421 = { + type = character_event + title = fp2_lyonese_monk.0421.t + desc = fp2_lyonese_monk.0421.desc + theme = unfriendly + left_portrait = { + character = scope:irate_theocrat + animation = war_attacker + } + right_portrait = { + character = scope:acolyte + animation = war_over_win + } + override_background = { reference = feast } + cooldown = { years = 100 } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Grab a theocrat. + fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect = yes + # Piss them off. + fp2_lyonese_monk_make_acolyte_and_irate_theocrat_rivals_effect = yes + } + + # Scope:irate_theocrat, show some decorum! + option = { + name = fp2_lyonese_monk.0421.a + + # Lose opinion with scope:irate_theocrat. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = humiliated_opinion + opinion = -10 + } + # Gain opinion with scope:acolyte. + reverse_add_opinion = { + target = scope:acolyte + modifier = trust_opinion + opinion = 20 + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_emboldened + scope:story = { + change_variable = { + name = school_radical + add = 1 + } + } + + stress_impact = { + cynical = miniscule_stress_impact_loss + zealous = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 1 + ai_zeal = -1 + } + } + } + + # Scope:acolyte, you *will* respect HerHis authority! + option = { + name = fp2_lyonese_monk.0421.b + + # Gain opinion with scope:irate_theocrat. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = trust_opinion + opinion = 20 + } + # Lose opinion with scope:acolyte. + reverse_add_opinion = { + target = scope:acolyte + modifier = humiliated_opinion + opinion = -10 + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_paused + scope:story = { + change_variable = { + name = school_felicitous + add = 1 + } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_sociability = -1 + } + } + } + + # Don't you two have more in common than not? + option = { + name = fp2_lyonese_monk.0421.c + + # Lose opinion with scope:irate_theocrat. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = annoyed_opinion + opinion = -5 + } + # Lose opinion with scope:acolyte. + reverse_add_opinion = { + target = scope:acolyte + modifier = annoyed_opinion + opinion = -5 + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_humbled + scope:story = { + change_variable = { + name = school_elipandic + add = 1 + } + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + zealous = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + } + } + + after = { + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + } +} + +################################################## +# Scope:pope's Second Epistle +# by Ewan Cowhig Croft +# 0431 - 0440 +################################################## + +# The Pope writes you *another* advisory, demanding that you boot scope:acolyte plus +fp2_lyonese_monk.0431 = { + type = letter_event + sender = scope:pope + opening = fp2_lyonese_monk.0431.t + desc = { + # Check whether the Pope has switched. + first_valid = { + triggered_desc = { + trigger = { + exists = scope:old_pope + scope:old_pope != scope:pope + } + desc = fp2_lyonese_monk.0431.desc.pope.different + } + desc = fp2_lyonese_monk.0431.desc.pope.same + } + desc = fp2_lyonese_monk.0431.desc.outro + } + cooldown = { years = 100 } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Sort our Pope scope. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + } + + # It's not wise to aggravate the throne of St. Peter... + option = { + name = fp2_lyonese_monk.0431.a + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # A bit less opinion now, as you've had one chance. + reverse_add_opinion = { + target = scope:pope + modifier = pious_opinion + opinion = 10 + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_vengefulness = -1 + } + } + } + + # Perhaps there's a middle ground here. + option = { + name = fp2_lyonese_monk.0431.b + + # You try to argue for a better result. + duel = { + skill = diplomacy + value = very_high_skill_rating + # You mollify scope:pope. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0431.b.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0431.b.tt.success + left_icon = scope:pope + reverse_add_opinion = { + target = scope:pope + modifier = impious_opinion + opinion = -5 + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_humbled + scope:story = { + change_variable = { + name = school_elipandic + add = 1 + } + } + } + } + # Scope:pope is even *more* angry. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0431.b.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0431.b.tt.failure + left_icon = scope:pope + ## We use the same value as last time since, by definition, this is now stacking. + reverse_add_opinion = { + target = scope:pope + modifier = angry_opinion + opinion = -30 + } + # And some *more* piety loss! + add_piety = medium_piety_loss + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_paused + scope:story = { + change_variable = { + name = school_felicitous + add = 1 + } + } + } + } + } + + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + zealous = medium_stress_impact_gain + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_sociability = 0.75 + ai_zeal = 0.5 + ai_vengefulness = -0.5 + } + } + } + + # Damn it, I'm the GetTitleAsName! + option = { + name = fp2_lyonese_monk.0431.c + + # Scope:pope is more upset. + ## We use the same value as last time since, by definition, this is now stacking. + reverse_add_opinion = { + target = scope:pope + modifier = impious_opinion + opinion = -15 + } + # And some *more* piety loss! + add_piety = medium_piety_loss + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_emboldened + scope:story = { + change_variable = { + name = school_radical + add = 1 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + cynical = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_sociability = -0.5 + ai_zeal = -1 + } + } + } +} + +################################################## +# The Council of scope:bishopric +# by Ewan Cowhig Croft +# 0441 - 0450 +################################################## + +# The clergy of the region gather for a minor church council, featuring scope:acolyte defending their claims. +fp2_lyonese_monk.0441 = { + type = character_event + title = fp2_lyonese_monk.0441.t + desc = fp2_lyonese_monk.0441.desc + theme = faith + left_portrait = { + character = scope:acolyte + animation = schadenfreude + } + right_portrait = { + character = scope:irate_theocrat + animation = stress + } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Grab a theocrat. + fp2_lyonese_monk_select_suitable_annoyed_theocrat_effect = yes + # Escalate the scope:acolyte - scope:irate_theocrat relationship if we can. + scope:acolyte = { + # We should become rivals if we're not already. + if = { + limit = { + NOT = { has_relation_rival = scope:irate_theocrat } + } + scope:irate_theocrat = { + set_relation_rival = { + target = scope:acolyte + reason = rival_blamed_by_mentor + } + } + } + # But if we _are_, then it's nemesis time. + else_if = { + limit = { has_relation_rival = scope:irate_theocrat } + set_relation_nemesis = { + target = scope:irate_theocrat + copy_reason = rival + reason = rival_blamed_by_mentor + } + } + # Plus, this shows off their ecclesiastic chops! + add_piety_level = 2 + } + # Pick a venue. + scope:acolyte = { + if = { + limit = { is_landed = yes } + capital_barony = { save_scope_as = council_1_venue } + } + else = { + scope:acolyte_host.capital_barony = { save_scope_as = council_1_venue } + } + } + # The whole event preemptively gives scope:acolyte a fresh audience. + fp2_add_random_vassals_to_converts_list_effect = { LIEGE = scope:acolyte_host } + } + + # This council has my full support. + option = { + name = fp2_lyonese_monk.0441.a + + # Gain piety. + add_piety = medium_piety_gain + # Scope:irate_theocrat has a bad time. + scope:irate_theocrat = { + add_opinion = { + target = scope:acolyte_host + modifier = humiliated_opinion + opinion = -50 + } + add_stress = major_stress_gain + } + # Scope:acolyte is happy. + scope:acolyte = { + add_opinion = { + target = scope:acolyte_host + modifier = pious_opinion + opinion = 20 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_vengefulness = 1 + } + } + } + + # Matters of theology are not my concern. + option = { + name = fp2_lyonese_monk.0441.b + + # Gain prestige. + add_prestige = medium_prestige_gain + # Scope:irate_theocrat has a less-bad time. + scope:irate_theocrat = { + add_opinion = { + target = scope:acolyte_host + modifier = abandoned_me_opinion + opinion = -20 + } + add_stress = medium_stress_gain + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + humble = miniscule_stress_impact_loss + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_rationality = 0.5 + ai_zeal = -1 + } + } + } + + # I've let this go too far! + option = { + name = fp2_lyonese_monk.0441.c + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Scope:irate_theocrat is incredibly thankful. + reverse_add_opinion = { + target = scope:irate_theocrat + modifier = relieved_opinion + opinion = 75 + } + scope:irate_theocrat = { add_stress = major_stress_loss } + # Gain some piety out of it. Even though you're likely at a net loss by this point. + add_piety = medium_piety_gain + + stress_impact = { + zealous = miniscule_stress_impact_loss + cynical = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_zeal = 1 + ai_compassion = 0.25 + } + } + } +} + + + + + + + + + + + +################################################## +# SCHISM + +################################################## +# Scope:pope's Third Epistle +# by Ewan Cowhig Croft +# 0601 - 0610 +################################################## + +# Whatever the council's results, the Pope condemns it. You are given a final demand demand to repent & turn over scope:acolyte or face excommunication. +fp2_lyonese_monk.0601 = { + type = letter_event + sender = scope:pope + opening = fp2_lyonese_monk.0601.t + desc = fp2_lyonese_monk.0601.desc + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + play_music_cue = "mx_cue_combat_stinger" + # Sort our Pope scope. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + # Mark that we've entered the second phase. + remove_character_flag = fp2_lyonese_monk_entered_controversy_flag + add_character_flag = fp2_lyonese_monk_entered_schism_flag + } + + # I can only beg for St. Peter's forgiveness. + option = { + name = fp2_lyonese_monk.0601.a + + # Hand the monk over to Rome. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = pope } + # Scope:pope forgives you your trespasses. + add_piety = medium_piety_gain + reverse_add_opinion = { + target = scope:pope + modifier = relieved_opinion + opinion = 50 + } + + stress_impact = { + zealous = miniscule_stress_impact_loss + humble = miniscule_stress_impact_loss + cynical = major_stress_impact_gain + arrogant = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 0 + } + } + + # I am appointed by HighGodName! + option = { + name = fp2_lyonese_monk.0601.b + + # Welp, don't say you weren't warned. + excommunicate_character = { + REQUESTING_CHARACTER = scope:pope + TARGET_CHARACTER = scope:acolyte_host + } + add_piety_level = -2 + + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + cynical = miniscule_stress_impact_loss + arrogant = miniscule_stress_impact_loss + zealous = major_stress_impact_gain + humble = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 100 + } + } +} + +################################################## +# High Tensions +# by Ewan Cowhig Croft +# 0611 - 0620 +################################################## + +scripted_effect fp2_lyonese_monk_0611_diplomatic_defusal_effect = { + scope:rioting_county = { + add_county_modifier = { + modifier = fp2_religious_riots_defused_modifier + years = 10 + } + } +} + +# An angry mob in your capital turn up to demand scope:acolyte's head, countered by *another* angry mob that hates the first mob. +fp2_lyonese_monk.0611 = { + type = character_event + title = fp2_lyonese_monk.0611.t + desc = fp2_lyonese_monk.0611.desc + theme = war + left_portrait = { + character = scope:peasant_1 + animation = aggressive_spear + outfit_tags = { beggar_rags } + hide_info = yes + } + right_portrait = { + character = scope:peasant_2 + animation = aggressive_axe + outfit_tags = { beggar_rags } + hide_info = yes + } + lower_center_portrait = scope:acolyte + override_background = { reference = courtyard } + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + any_held_title = { + title_tier = county + faith = scope:story.var:base_faith + } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Pick a suitable county. + if = { + limit = { capital_county.faith = scope:story.var:base_faith } + capital_county = { save_scope_as = rioting_county } + } + else = { + random_held_title = { + title_tier = county + limit = { + faith = scope:story.var:base_faith + } + save_scope_as = rioting_county + } + } + # Create some peasants. + create_character = { + template = generic_peasant_character + location = scope:rioting_county.title_province + save_scope_as = peasant_1 + } + create_character = { + template = generic_peasant_character + location = scope:rioting_county.title_province + save_scope_as = peasant_2 + } + } + + # Diplomacy: I can defuse this situation. + option = { + name = fp2_lyonese_monk.0611.a + trigger = { diplomacy >= very_high_skill_rating } + skill = diplomacy + + # Apply defusal effect immediately. + fp2_lyonese_monk_0611_diplomatic_defusal_effect = yes + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_humbled + scope:story = { + change_variable = { + name = school_elipandic + add = 1 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + wrathful = medium_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + # Please, my subjects, calm! + option = { + name = fp2_lyonese_monk.0611.b + trigger = { diplomacy < very_high_skill_rating } + + # You try to talk things out. + duel = { + skill = diplomacy + value = high_skill_rating + # You defuse the situation. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0611.b.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0611.b.tt.success + left_icon = scope:rioting_county + fp2_lyonese_monk_0611_diplomatic_defusal_effect = yes + } + } + # Violence erupts anyway. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0611.b.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0611.b.tt.failure + left_icon = scope:rioting_county + scope:rioting_county = { + add_county_modifier = { + modifier = fp2_religious_riots_modifier + years = 20 + } + } + } + } + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_humbled + scope:story = { + change_variable = { + name = school_elipandic + add = 1 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + calm = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + wrathful = medium_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + # Fetch my sword, we'll disperse these *rebels*. + option = { + name = fp2_lyonese_monk.0611.c + flavor = fp2_lyonese_monk.0611.c.tt + + # You choose violence. + scope:rioting_county = { + add_county_modifier = { + modifier = fp2_religious_riots_suppressed_modifier + years = 20 + } + } + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_emboldened + scope:story = { + change_variable = { + name = school_radical + add = 1 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + wrathful = miniscule_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + } + } + + # Heretics? At my very *door*? + option = { + name = fp2_lyonese_monk.0611.d + flavor = fp2_lyonese_monk.0611.d.tt + + # You've had enough of this event chain. + scope:rioting_county = { + add_county_modifier = { + modifier = fp2_religious_riots_suppressed_modifier + years = 20 + } + } + # Scope:acolyte is dispatched. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = scuffle } + # Take a nice chunk o'piety for your zeal! + add_piety = major_piety_gain + + stress_impact = { + wrathful = miniscule_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 0 + } + } + + # Lock the gates. + option = { + name = fp2_lyonese_monk.0611.e + + # Riots outside, not your problem. + scope:rioting_county = { + add_county_modifier = { + modifier = fp2_religious_riots_modifier + years = 20 + } + } + # Stress loss in the stress_impact block. + # Mark this for school calcs later. + custom_tooltip = fp2_lyonese_monk.0000.tt.is_paused + scope:story = { + change_variable = { + name = school_felicitous + add = 1 + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + base = major_stress_loss + shy = minor_stress_impact_loss + gregarious = minor_stress_impact_gain + wrathful = major_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_compassion = -1 + ai_sociability = -1 + } + } + } + + after = { + # Clean up the peasants. + scope:peasant_1 = { silent_disappearance_effect = yes } + scope:peasant_2 = { silent_disappearance_effect = yes } + } +} + +################################################## +# A Formal Complaint +# by Ewan Cowhig Croft +# 0621 - 0630 +################################################## + +scripted_trigger fp2_lyonese_monk_0621_suitable_vassal_trigger = { + # Same faith. + faith = scope:acolyte_host.faith + # Not a cynic. + NOT = { has_trait = cynical } + # Available for narrative purposes. + is_available_ai_adult = yes + # And uhhh... make sure they don't nab themselves. + this != scope:acolyte +} + +# Zealous vassals protest your heresy. +fp2_lyonese_monk.0621 = { + type = character_event + title = fp2_lyonese_monk.0621.t + desc = fp2_lyonese_monk.0621.desc + theme = vassal + left_portrait = { + character = scope:acolyte_host + animation = worry + } + right_portrait = { + character = scope:zealous_vassal + animation = anger + } + lower_left_portrait = scope:acolyte + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + any_vassal = { fp2_lyonese_monk_0621_suitable_vassal_trigger = yes } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # Nab a suitable vassal. + ordered_vassal = { + limit = { fp2_lyonese_monk_0621_suitable_vassal_trigger = yes } + order_by = { value = max_military_strength } + save_scope_as = zealous_vassal + } + # Sort the Pope. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + } + + # Scope:pope couldn't persuade me, what makes you think you can? + option = { + name = fp2_lyonese_monk.0621.a + + # You engage them in serious debate. + duel = { + skill = learning + target = scope:zealous_vassal + # You shatter their world view. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0621.a.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0621.a.tt.success + left_icon = scope:zealous_vassal + scope:zealous_vassal = { + add_opinion = { + target = scope:acolyte_host + modifier = impious_opinion + opinion = -25 + } + add_stress = major_stress_gain + } + } + } + # They're even *more* infuriated with you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0621.a.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0621.a.tt.failure + left_icon = scope:zealous_vassal + reverse_add_opinion = { + target = scope:zealous_vassal + modifier = respect_opinion + opinion = -50 + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:zealous_vassal } + } + set_relation_rival = { + target = scope:zealous_vassal + reason = rival_refused_to_see_reason + } + } + } + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + stubborn = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + fickle = major_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_rationality = 1 + ai_zeal = -0.5 + } + } + } + + # Vassal? You're naught but a malcontent! + option = { + name = fp2_lyonese_monk.0621.b + + # Scope:zealous_vassal is annoyed. + reverse_add_opinion = { + target = scope:zealous_vassal + modifier = respect_opinion + opinion = -25 + } + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:zealous_vassal } + } + set_relation_rival = { + target = scope:zealous_vassal + reason = rival_refused_to_see_reason + } + } + # Spawn the next event in the cycle. + custom_tooltip = fp2_lyonese_monk.0000.tt.continues_to_teach + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + stubborn = miniscule_stress_impact_loss + humble = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_vengefulness = 0.75 + ai_compassion = -0.5 + } + } + } + + # Scope:vassal is right, this has gone too far. + option = { + name = fp2_lyonese_monk.0621.c + + # Boot the monk. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = banished } + # Gain some piety. + add_piety = medium_piety_gain + # Scope:zealous_vassal is very happy! + reverse_add_opinion = { + target = scope:zealous_vassal + modifier = pleased_opinion + opinion = 50 + } + + stress_impact = { + humble = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + arrogant = minor_stress_impact_gain + stubborn = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 0 + } + } +} + +################################################## +# Just Church Business +# by Ewan Cowhig Croft +# 0631 - 0640 +################################################## + +scripted_trigger fp2_lyonese_monk_0631_valid_neighbour_trigger = { + # Same religious head. + faith.religious_head = scope:story.var:base_faith.religious_head + # Neither allied nor has a ceasefire. + NOR = { + any_ally = { this = scope:acolyte_host } + any_truce_target = { this = scope:acolyte_host } + } + # Doesn't *already* have a claim. + NOT = { + any_claim = { this = scope:acolyte_host.primary_title } + } +} + +# A neighbouring ruler has purchased claims on your land from your HoF. +fp2_lyonese_monk.0631 = { + type = letter_event + sender = scope:neighbouring_ruler + opening = fp2_lyonese_monk.0631.t + desc = fp2_lyonese_monk.0631.desc + cooldown = { years = 100 } + + trigger = { + fp2_lyonese_monk_0000_valid_for_events_trigger = yes + any_neighboring_and_across_water_realm_same_rank_owner = { fp2_lyonese_monk_0631_valid_neighbour_trigger = yes } + } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + # Boost the tallied events score by +1. + scope:story = { + change_variable = { + name = lm_phase_tally + add = 1 + } + } + # First, we'll need to make sure our HoF is up to date. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + # Now let's pick a solid neighbour. + ## First gathering candidates. + every_neighboring_and_across_water_realm_same_rank_owner = { + limit = { fp2_lyonese_monk_0631_valid_neighbour_trigger = yes } + add_to_list = claims_donated_neighbouring_ruler_list + } + ## Then processing them. + ordered_in_list = { + list = claims_donated_neighbouring_ruler_list + # Scope:pope, naturally, has a type. + limit = { has_trait = zealous } + alternative_limit = { always = yes } + order_by = { value = max_military_strength } + save_scope_as = neighbouring_ruler + } + # Now we fork over a claim on scope:acolyte_host's primary title. + scope:neighbouring_ruler = { add_pressed_claim = scope:acolyte_host.primary_title } + } + + # Outrageous! + option = { + name = fp2_lyonese_monk.0631.a + + # Well, that's a sure sign of an escalation. + ## Stress gain handled in stress_impact block. + + # Spawn the next event in the cycle. + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle + months = { 6 12 } + } + + stress_impact = { + base = medium_stress_gain + greedy = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + # Single option event, AI chance irrelevant. + base = 100 + } + } +} + +################################################## +# No More than a Man +# by Ewan Cowhig Croft +# 0641 - 0650 +################################################## + +# Scope:acolyte suggests you embrace the heresy. +fp2_lyonese_monk.0641 = { + type = character_event + title = fp2_lyonese_monk.0641.t + desc = fp2_lyonese_monk.0641.desc + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = stress + } + right_portrait = { + character = scope:acolyte + animation = scheme + } + lower_center_portrait = scope:pope + override_background = { reference = study } + + trigger = { fp2_lyonese_monk_0000_valid_for_events_trigger = yes } + + on_trigger_fail = { + trigger_event = { + on_action = fp2_lyonese_monk_events_cycle_no_valid_events_fallback + months = { 4 8 } + } + } + + immediate = { + play_music_cue = "mx_cue_faith_conversion" + # Scope:acolyte's *real* traits & faith are revealed. + ## These include the two "hidden" traits of scope:acolyte's buffs - heresiarch & education_intrigue_4. + scope:acolyte = { + set_character_faith = faith:adoptionist + hidden_effect = { + # Swap educations & adjust stats to match. + remove_trait = education_learning_4 + add_learning_skill = 8 + add_trait = education_intrigue_4 + add_intrigue_skill = -8 + # Reduce down the stats that'll increased by heresiarch. + add_martial_skill = -2 + add_learning_skill = -2 + add_prowess_skill = -2 + } + add_heresiarch_trait_effect = yes + # Make this clear too. + hidden_effect = { force_character_skill_recalculation = yes } + # _Small_ diplo-immunity. + add_character_flag = { + flag = flag_hostile_actions_disabled_delay + days = 10 + } + } + # Nab a scope:pope, so that they can welcome you back. + fp2_lyonese_monk_grab_and_update_pope_effect = yes + } + + # Yes... yes, why not, if they're so set on accusing us? + option = { + name = fp2_lyonese_monk.0641.a + + # Conversion time! + ## You switch faith. + add_character_flag = { + flag = delay_player_faith_conversion_notification_event + days = 1 + } + set_character_faith_with_conversion = faith:adoptionist + if = { + limit = { + faith:adoptionist = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + add_heresiarch_trait_effect = yes + ## The hidden character's list gets used. + every_in_list = { + list = hidden_converts + limit = { fp2_suitable_base_convert_trigger = yes } + custom = fp2_lyonese_monk.0641.a.tt.hidden_convert.character + set_character_faith_with_conversion = faith:adoptionist + } + ## Every county in your realm bordering scope:acolyte's stronghold converts. + ### We don't just give you everything scope:acolyte holds plus _their_ neighbours so that you can't game-convert half of Europe with some clever pimpling. + scope:acolyte_fief = { + if = { + limit = { holder = scope:acolyte } + set_county_faith = faith:adoptionist + # Plus nab the neighbours. + every_neighboring_county = { + limit = { + faith = scope:story.var:base_faith + holder = { + any_liege_or_above = { this = scope:acolyte_host } + } + } + set_county_faith = faith:adoptionist + } + } + } + # We unblock adoptionism being converted to from this point onwards. + ## No need to notify the player; it's not strictly relevant for them for gameplay purposes. + faith:adoptionist = { remove_variable = block_conversion_till_nebulous_circumstances } + # And a large gathering of nerds is held. + custom_tooltip = fp2_lyonese_monk.0641.a.tt + # Trigger the conclave. + trigger_event = { + id = fp2_lyonese_monk.0801 + months = 1 + } + + stress_impact = { + trusting = miniscule_stress_impact_loss + cynical = miniscule_stress_impact_loss + paranoid = medium_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 100 + } + } + + # Snake! You've been planning this all along! + option = { + name = fp2_lyonese_monk.0641.b + + # Scope:acolyte is dispatched. + fp2_lyonese_monk_cancel_chain_effect = { REMOVAL = scuffle } + # Scope:pope is happy. + reverse_add_opinion = { + target = scope:pope + modifier = relieved_opinion + opinion = 50 + } + ## If you're still excommunicated (which: let's face it), then SheHe'll recommunicate you. + if = { + limit = { has_trait = excommunicated } + lift_character_excommunication_effect = { + TARGET_CHARACTER = scope:acolyte_host + REQUESTING_CHARACTER = scope:pope + } + } + + stress_impact = { + paranoid = miniscule_stress_impact_loss + zealous = miniscule_stress_impact_loss + cynical = medium_stress_impact_gain + trusting = major_stress_impact_gain + } + ai_chance = { + # If we've made it to this point, the AI should be committed to backing scope:acolyte. + base = 0 + } + } +} + + + + + + + + + + + +################################################## +# COUNCIL + +################################################## +# The Second Council of scope:bishopric +# by Ewan Cowhig Croft +# 0801 - 0810 +################################################## + +# Clergy from all over your realm gather, wanting to contribute their thoughts and notes. +fp2_lyonese_monk.0801 = { + type = character_event + title = { + first_valid = { + # Is this our second council here? + triggered_desc = { + trigger = { scope:council_1_venue = scope:council_2_venue } + desc = fp2_lyonese_monk.0801.t.second + } + # Or our first? + desc = fp2_lyonese_monk.0801.t.first + } + } + desc = { + desc = fp2_lyonese_monk.0801.desc.intro + first_valid = { + triggered_desc = { + trigger = { scope:acolyte_stance = flag:school_elipandic } + desc = fp2_lyonese_monk.0801.desc.elipandic + } + triggered_desc = { + trigger = { scope:acolyte_stance = flag:school_felicitous } + desc = fp2_lyonese_monk.0801.desc.felicitous + } + triggered_desc = { + trigger = { scope:acolyte_stance = flag:school_radical } + desc = fp2_lyonese_monk.0801.desc.radical + } + } + } + theme = learning + left_portrait = { + character = scope:acolyte_host + animation = personality_rational + } + right_portrait = { + character = scope:acolyte_at_council + animation = chancellor + } + override_background = { reference = temple_scope } + + immediate = { + # Refund the piety levels you lost earlier. + add_piety_level = 2 + # Give you a fun trait because... I mean, well. + add_heresiarch_trait_effect = yes + # Sort our locale. + ## First, whether this is a repeater. + scope:council_1_venue = { + ## Preferring to chill at scope:acolyte's place. + if = { + limit = { holder = scope:acolyte } + save_scope_as = council_2_venue + } + ## But otherwise we take your capital. + else = { + scope:acolyte_host.capital_barony = { save_scope_as = council_2_venue } + } + } + ## Then the background scope. + scope:council_2_venue = { save_scope_as = background_temple_scope } + # Work out what scope:acolyte's stance is. + scope:story = { + # They're an Elipandic. + if = { + limit = { + var:school_elipandic > var:school_felicitous + var:school_elipandic > var:school_radical + } + save_scope_value_as = { + name = acolyte_stance + value = flag:school_elipandic + } + } + # They're Felicitous. + else_if = { + limit = { + var:school_felicitous > var:school_elipandic + var:school_felicitous > var:school_radical + } + save_scope_value_as = { + name = acolyte_stance + value = flag:school_felicitous + } + } + # They're a Radical. + else_if = { + limit = { + var:school_radical > var:school_elipandic + var:school_radical > var:school_felicitous + } + save_scope_value_as = { + name = acolyte_stance + value = flag:school_radical + } + } + # If we've somehow ended up with a draw, we have a Felicitous base, so we go with that for the tie-breaker. + else = { + save_scope_value_as = { + name = acolyte_stance + value = flag:school_felicitous + } + } + } + # Aaaaand is scope:acolyte around for the pictures. + scope:acolyte = { + if = { + limit = { is_physically_able = yes } + save_scope_as = acolyte_at_council + } + } + } + + # Naturally, I'll take a leading role in the discussions. + option = { + name = fp2_lyonese_monk.0801.a + + # You'll engage in learning debates. + custom_tooltip = fp2_lyonese_monk.0801.a.tt + save_scope_value_as = { + name = conclave_engagement + value = flag:debate + } + # Progress the conclave. + custom_tooltip = fp2_lyonese_monk.0801.tt.invalidation_warning + trigger_event = { + id = fp2_lyonese_monk.0811 + months = 2 + } + + stress_impact = { + gregarious = miniscule_stress_impact_loss + shy = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # My influence will be more felt than seen... + option = { + name = fp2_lyonese_monk.0801.b + + # You'll spend piety. + custom_tooltip = fp2_lyonese_monk.0801.b.tt + save_scope_value_as = { + name = conclave_engagement + value = flag:piety + } + # Progress the conclave. + custom_tooltip = fp2_lyonese_monk.0801.tt.invalidation_warning + trigger_event = { + id = fp2_lyonese_monk.0811 + months = 2 + } + + stress_impact = { + shy = miniscule_stress_impact_loss + gregarious = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # This is a matter for the clergy alone. + option = { + name = fp2_lyonese_monk.0801.c + + # You leave the clergy to their discussions. + custom_tooltip = fp2_lyonese_monk.0801.c.tt + # Gain a decent chunk of piety for letting this go ahead. + add_piety = major_piety_gain + # Progress the chain. + save_scope_value_as = { + name = defaulted_on_conclave + value = yes + } + trigger_event = { + id = fp2_lyonese_monk.0841 + months = 2 + } + + stress_impact = { + humble = miniscule_stress_impact_loss + arrogant = major_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 100 + } + } +} + +################################################## +# Council: Father & Son +# by Ewan Cowhig Croft +# 0811 - 0820 +################################################## + +# Become Righteous. +scripted_effect fp2_lyonese_monk_0811_elipandic_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_elipandics + faith:adoptionist = { + hidden_effect = { remove_doctrine = doctrine_pluralism_fundamentalist } + add_doctrine = doctrine_pluralism_righteous + } +} + +# Become Pluralist. +scripted_effect fp2_lyonese_monk_0811_felicitous_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_felicians + faith:adoptionist = { + hidden_effect = { remove_doctrine = doctrine_pluralism_fundamentalist } + add_doctrine = doctrine_pluralism_pluralistic + } +} + +# Stay Fundamentalist. +scripted_effect fp2_lyonese_monk_0811_radical_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_radicals + show_as_tooltip = { + faith:adoptionist = { + add_doctrine = doctrine_pluralism_fundamentalist + } + } +} + +# Clergy argue over whether you're all really adoptionists or just nuanced Catholics. +fp2_lyonese_monk.0811 = { + type = character_event + title = fp2_lyonese_monk.0811.t + desc = fp2_lyonese_monk.0811.desc + theme = diplomacy + left_portrait = { + character = scope:acolyte_host + animation = personality_bold + } + right_portrait = { + character = scope:acolyte_at_council + animation = personality_bold + } + override_background = { reference = temple_scope } + + trigger = { is_imprisoned = no } + + on_trigger_fail = { + # Progress the chain. + save_scope_value_as = { + name = defaulted_on_conclave + value = yes + } + trigger_event = { + id = fp2_lyonese_monk.0841 + months = 2 + } + } + + immediate = { + # Check to see if scope:acolyte around for the pictures. + ## Clear the old scope if applicable. + if = { + limit = { exists = scope:acolyte_at_council } + clear_saved_scope = acolyte_at_council + } + ## Now try to refresh it. + scope:acolyte = { + if = { + limit = { is_physically_able = yes } + save_scope_as = acolyte_at_council + } + } + } + + # Elipandic: the situation is nuanced... + option = { + name = fp2_lyonese_monk.0811.a + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0811_elipandic_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.a.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0811.a.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0811_elipandic_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.a.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0811.a.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0811_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0811_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + stubborn = miniscule_stress_impact_loss + deceitful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Felician: it is no mark of shame to be chosen by HighGodName. + option = { + name = fp2_lyonese_monk.0811.b + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0811_felicitous_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.b.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0811.b.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0811_felicitous_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.b.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0811.b.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0811_elipandic_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0811_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + deceitful = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Radical: once a man, never fully God. + option = { + name = fp2_lyonese_monk.0811.c + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0811_radical_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.c.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0811.c.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0811_radical_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0811.c.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0811.c.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0811_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0811_felicitous_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + arrogant = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # I have no opinion on this matter. + option = { + name = fp2_lyonese_monk.0811.d + + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0811_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0811_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0811_radical_school_effect = yes + } + + # We don't charge stress for the opt-outs, not least because their results are variable. + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 100 + } + } + + after = { + # Progress the conclave. + trigger_event = { + id = fp2_lyonese_monk.0821 + months = 2 + } + } +} + +################################################## +# Council: Practicality vs. Principle +# by Ewan Cowhig Croft +# 0821 - 0830 +################################################## + +# Keep Religious Law. +scripted_effect fp2_lyonese_monk_0821_elipandic_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_elipandics + show_as_tooltip = { + faith:adoptionist = { add_doctrine = tenet_religious_legal_pronouncements } + } +} + +# Gain Sanctioned False Conversions. +scripted_effect fp2_lyonese_monk_0821_felicitous_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_felicians + faith:adoptionist = { + remove_doctrine = tenet_religious_legal_pronouncements + add_doctrine = tenet_false_conversion_sanction + } +} + +# Gain Pursuit of Power. +scripted_effect fp2_lyonese_monk_0821_radical_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_radicals + faith:adoptionist = { + remove_doctrine = tenet_religious_legal_pronouncements + add_doctrine = tenet_pursuit_of_power + } +} + +# Clergy argue over the degree to which expedience is required. +fp2_lyonese_monk.0821 = { + type = character_event + title = fp2_lyonese_monk.0821.t + desc = fp2_lyonese_monk.0821.desc + theme = intrigue + left_portrait = { + character = scope:acolyte_host + animation = personality_cynical + } + right_portrait = { + character = scope:acolyte_at_council + animation = personality_honorable + } + override_background = { reference = temple_scope } + + trigger = { is_imprisoned = no } + + on_trigger_fail = { + # Progress the chain. + save_scope_value_as = { + name = defaulted_on_conclave + value = yes + } + trigger_event = { + id = fp2_lyonese_monk.0841 + months = 2 + } + } + + immediate = { + # Check to see if scope:acolyte around for the pictures. + ## Clear the old scope if applicable. + if = { + limit = { exists = scope:acolyte_at_council } + clear_saved_scope = acolyte_at_council + } + ## Now try to refresh it. + scope:acolyte = { + if = { + limit = { is_physically_able = yes } + save_scope_as = acolyte_at_council + } + } + } + + # Elipandic: accommodation with the rest of Christendom is vital. + option = { + name = fp2_lyonese_monk.0821.a + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0821_elipandic_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.a.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0821.a.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0821_elipandic_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.a.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0821.a.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0821_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0821_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + stubborn = miniscule_stress_impact_loss + deceitful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Felician: practicality is innately principled. + option = { + name = fp2_lyonese_monk.0821.b + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0821_felicitous_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.b.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0821.b.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0821_felicitous_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.b.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0821.b.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0821_elipandic_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0821_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + deceitful = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Radical: hidden faith is faith without fire! + option = { + name = fp2_lyonese_monk.0821.c + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0821_radical_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.c.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0821.c.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0821_radical_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0821.c.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0821.c.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0821_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0821_felicitous_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + arrogant = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # This seems circumstantial. + option = { + name = fp2_lyonese_monk.0821.d + + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0821_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0821_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0821_radical_school_effect = yes + } + + # We don't charge stress for the opt-outs, not least because their results are variable. + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 100 + } + } + + after = { + # Progress the conclave. + trigger_event = { + id = fp2_lyonese_monk.0831 + months = 2 + } + } +} + +################################################## +# Council: One God +# by Ewan Cowhig Croft +# 0831 - 0840 +################################################## + +# Follow the Elipandic school. +scripted_effect fp2_lyonese_monk_0831_elipandic_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_elipandics + faith:adoptionist = { add_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine } +} + +# Follow the Felicitous school. +scripted_effect fp2_lyonese_monk_0831_felicitous_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_felicians + faith:adoptionist = { add_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine } +} + +# Follow the Radical school. +scripted_effect fp2_lyonese_monk_0831_radical_school_effect = { + custom_tooltip = fp2_lyonese_monk.0000.tt.favour_radicals + faith:adoptionist = { add_doctrine = special_doctrine_adoptionist_school_radical_doctrine } +} + +# Clergy argue over *how* monotheistic to be. +fp2_lyonese_monk.0831 = { + type = character_event + title = fp2_lyonese_monk.0831.t + desc = fp2_lyonese_monk.0831.desc + theme = martial + left_portrait = { + character = scope:acolyte_host + animation = personality_honorable + } + right_portrait = { + character = scope:acolyte_at_council + animation = chaplain + } + override_background = { reference = temple_scope } + + trigger = { is_imprisoned = no } + + on_trigger_fail = { + # Progress the chain. + save_scope_value_as = { + name = defaulted_on_conclave + value = yes + } + trigger_event = { + id = fp2_lyonese_monk.0841 + months = 2 + } + } + + immediate = { + # Check to see if scope:acolyte around for the pictures. + ## Clear the old scope if applicable. + if = { + limit = { exists = scope:acolyte_at_council } + clear_saved_scope = acolyte_at_council + } + ## Now try to refresh it. + scope:acolyte = { + if = { + limit = { is_physically_able = yes } + save_scope_as = acolyte_at_council + } + } + } + + # Elipandic: the Father, the Son, and the Holy Ghost are still one being. + option = { + name = fp2_lyonese_monk.0831.a + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0831_elipandic_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.a.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0831.a.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0831_elipandic_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.a.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0831.a.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0831_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0831_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + stubborn = miniscule_stress_impact_loss + deceitful = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Felician: a separation between Father and Son does not diminish either. + option = { + name = fp2_lyonese_monk.0831.b + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0831_felicitous_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.b.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0831.b.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0831_felicitous_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.b.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0831.b.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0831_elipandic_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0831_radical_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + deceitful = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Radical: the primacy of the Father is immutable. + option = { + name = fp2_lyonese_monk.0831.c + trigger = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety >= fp2_lyonese_monk_conclave_cost_value + } + } + show_as_unavailable = { + # Piety path costing. + trigger_if = { + limit = { scope:conclave_engagement = flag:piety } + piety < fp2_lyonese_monk_conclave_cost_value + } + } + + # Piety path. + if = { + limit = { scope:conclave_engagement = flag:piety } + # Pay the piety tax. + add_piety = { + value = fp2_lyonese_monk_conclave_cost_value + multiply = -1 + } + # Get your results. + fp2_lyonese_monk_0831_radical_school_effect = yes + } + # Debate path. + if = { + limit = { scope:conclave_engagement = flag:debate } + duel = { + skill = learning + value = high_skill_rating + # You sway the priests. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.c.tt.success + send_interface_toast = { + title = fp2_lyonese_monk.0831.c.tt.success + left_icon = scope:council_1_venue + fp2_lyonese_monk_0831_radical_school_effect = yes + } + } + # The clergy ignore you. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp2_lyonese_monk.0831.c.tt.failure + send_interface_toast = { + title = fp2_lyonese_monk.0831.c.tt.failure + left_icon = scope:council_1_venue + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0831_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0831_felicitous_school_effect = yes + } + } + } + } + } + + # Stress impacts here based on the virtues lionised by each school. + stress_impact = { + arrogant = miniscule_stress_impact_loss + stubborn = medium_stress_impact_gain + deceitful = medium_stress_impact_gain + } + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 0 + } + } + + # Have we shattered on dogma already? + option = { + name = fp2_lyonese_monk.0831.d + + # We take scope:acolyte's preference. + ## Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + fp2_lyonese_monk_0831_elipandic_school_effect = yes + } + ## Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + fp2_lyonese_monk_0831_felicitous_school_effect = yes + } + ## Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + fp2_lyonese_monk_0831_radical_school_effect = yes + } + + # We don't charge stress for the opt-outs, not least because their results are variable. + ai_chance = { + # The AI should just let the scope:acolyte pick. + base = 100 + } + } + + after = { + # Progress the conclave. + trigger_event = { + id = fp2_lyonese_monk.0841 + months = 2 + } + } +} + +################################################## +# From the Ashes +# by Ewan Cowhig Croft +# 0841 - 0850 +################################################## + +# The church council arrives at their final important doctrinal conclusions. +fp2_lyonese_monk.0841 = { + type = character_event + title = fp2_lyonese_monk.0841.t + desc = { + desc = fp2_lyonese_monk.0841.desc.intro + # Pluralism. + first_valid = { + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = doctrine_pluralism_pluralistic } + } + desc = fp2_lyonese_monk.0841.desc.pluralist + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = doctrine_pluralism_righteous } + } + desc = fp2_lyonese_monk.0841.desc.righteous + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = doctrine_pluralism_fundamentalist } + } + desc = fp2_lyonese_monk.0841.desc.fundamentalist + } + } + # Tenets. + first_valid = { + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = tenet_false_conversion_sanction } + } + desc = fp2_lyonese_monk.0841.desc.sanctioned_false_conversions + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = tenet_religious_legal_pronouncements } + } + desc = fp2_lyonese_monk.0841.desc.religious_law + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = tenet_pursuit_of_power } + } + desc = fp2_lyonese_monk.0841.desc.pursuit_of_power + } + } + # School. + first_valid = { + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine } + } + desc = fp2_lyonese_monk.0841.desc.felicitous + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine } + } + desc = fp2_lyonese_monk.0841.desc.elipandic + } + triggered_desc = { + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_radical_doctrine } + } + desc = fp2_lyonese_monk.0841.desc.radical + } + } + # Outro. + desc = fp2_lyonese_monk.0841.desc.outro + } + theme = faith + left_portrait = { + character = scope:acolyte_host + animation = personality_bold + } + right_portrait = { + character = scope:acolyte_at_council + animation = chancellor + } + override_background = { reference = temple_scope } + + immediate = { + # Music! + ## Elipandics won out. + if = { + limit = { + faith = { has_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine } + } + play_music_cue = "mx_cue_sacredrite" + } + ## Felicians won out. + if = { + limit = { + faith = { has_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine } + } + play_music_cue = "mx_cue_murder" + } + ## Radicals won out. + if = { + limit = { + faith = { has_doctrine = special_doctrine_adoptionist_school_radical_doctrine } + } + play_music_cue = "mx_cue_war_declared" + } + # Now let's display our choices. + faith:adoptionist = { + # If we defaulted, then we need to work these out. + if = { + limit = { exists = scope:defaulted_on_conclave } + # Elipandics. + if = { + limit = { scope:acolyte_stance = flag:school_elipandic } + # The one we've already got. + show_as_tooltip = { add_doctrine = tenet_religious_legal_pronouncements } + # And the two we can genuinely add. + add_doctrine = doctrine_pluralism_righteous + add_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine + } + # Felicians. + if = { + limit = { scope:acolyte_stance = flag:school_felicitous } + # Remove some inappropriate ones. + hidden_effect = { remove_doctrine = doctrine_pluralism_fundamentalist } + remove_doctrine = tenet_religious_legal_pronouncements + # Add our new ones. + add_doctrine = doctrine_pluralism_pluralistic + add_doctrine = tenet_false_conversion_sanction + add_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine + } + # Radicals. + if = { + limit = { scope:acolyte_stance = flag:school_radical } + # Remove the inappropriate ones. + remove_doctrine = tenet_religious_legal_pronouncements + # Add our new ones. + show_as_tooltip = { add_doctrine = doctrine_pluralism_fundamentalist } + # Add our new ones. + add_doctrine = tenet_pursuit_of_power + add_doctrine = special_doctrine_adoptionist_school_radical_doctrine + } + } + # Otherwise, we can use a tooltip. + else = { + show_as_tooltip = { + # Pluralism. + ## Elipandics - + if = { + limit = { has_doctrine = doctrine_pluralism_fundamentalist } + add_doctrine = doctrine_pluralism_fundamentalist + } + ## Felicians - + if = { + limit = { has_doctrine = doctrine_pluralism_pluralistic } + add_doctrine = doctrine_pluralism_pluralistic + } + ## Radicals - + if = { + limit = { has_doctrine = doctrine_pluralism_righteous } + add_doctrine = doctrine_pluralism_righteous + } + # Tenets. + ## Elipandics - + if = { + limit = { has_doctrine = tenet_religious_legal_pronouncements } + add_doctrine = tenet_religious_legal_pronouncements + } + ## Felicians - + if = { + limit = { has_doctrine = tenet_false_conversion_sanction } + add_doctrine = tenet_false_conversion_sanction + } + ## Radicals - + if = { + limit = { has_doctrine = tenet_pursuit_of_power } + add_doctrine = tenet_pursuit_of_power + } + # School. + ## Elipandics - + if = { + limit = { has_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine } + add_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine + } + ## Felicians - + if = { + limit = { has_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine } + add_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine + } + ## Radicals - + if = { + limit = { has_doctrine = special_doctrine_adoptionist_school_radical_doctrine } + add_doctrine = special_doctrine_adoptionist_school_radical_doctrine + } + } + } + } + # And try to create a HoF. + ## Assuming you've not shenaniganed, this should generally grab scope:acolyte. + if = { + limit = { scope:acolyte_host.highest_held_title_tier >= tier_kingdom } + set_up_dynamic_spiritual_hof_title_effect = { CREATOR = scope:acolyte_host } + } + } + + # Elipandic: let them call us heretics. We simply have nuance they lack. + option = { + name = fp2_lyonese_monk.0841.a + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_elipandic_doctrine } + } + + # You choose piety. + add_piety = major_piety_gain + + # No stress impact for choosing a flavour option. + ai_chance = { + # Any option is as good as any other here. + base = 100 + } + } + + # Felician: our words are sensible, our actions likewise. + option = { + name = fp2_lyonese_monk.0841.b + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_felicitous_doctrine } + } + + # You choose piety. + add_piety = major_piety_gain + + # No stress impact for choosing a flavour option. + ai_chance = { + # Any option is as good as any other here. + base = 100 + } + } + + # Radical: see these false Christians and their polytheism laid bare! + option = { + name = fp2_lyonese_monk.0841.c + trigger = { + faith:adoptionist = { has_doctrine = special_doctrine_adoptionist_school_radical_doctrine } + } + + # You choose piety. + add_piety = major_piety_gain + + # No stress impact for choosing a flavour option. + ai_chance = { + # Any option is as good as any other here. + base = 100 + } + } + + # I only hope we've made the right choice. + option = { + name = fp2_lyonese_monk.0841.d + + # You choose prestige. + add_prestige = medium_prestige_gain + + # No stress impact for choosing a flavour option. + ai_chance = { + # Any option is as good as any other here. + base = 100 + } + } + + after = { + # Clean up the story. + scope:story = { end_story = yes } + } +} diff --git a/events/dlc/fp2/fp2_other_decision_events.txt b/events/dlc/fp2/fp2_other_decision_events.txt new file mode 100644 index 00000000..e29b674b --- /dev/null +++ b/events/dlc/fp2/fp2_other_decision_events.txt @@ -0,0 +1,2569 @@ +namespace = fp2_other_decisions + +################################################## +# #Dynasty Decision Events +# 0001 - manage invite following the Celebration Decision +# 0002 - Feedback on the festival +################################################## + + + + + +################################################## +# Celebration - Inviting guests +# by Maxence Voleau +# 0001 Invite guest in the background +################################################## + +#Inviting guest from Celebration +fp2_other_decisions.0001 = { + hidden = yes + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + # Standard check + exists = var:number_prestigious_new_guests + } + + immediate = { + save_scope_as = host #Must be permanent for courtier_guest_management.1001 + + # create list of available faith / culture + every_sub_realm_county = { + faith = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_faiths + } + } + } + add_to_list = potential_faiths + } + } + culture = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_cultures + } + } + } + add_to_list = potential_cultures + } + } + } + + # If the festival is grandiose, add faith / culture from neighbouring realms + if = { + limit = { + exists = var:holding_quality + var:holding_quality > 1 + } + every_neighboring_and_across_water_realm_same_rank_owner = { + every_sub_realm_county = { + faith = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_faiths + } + } + } + add_to_list = potential_faiths + } + } + culture = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_cultures + } + } + } + add_to_list = potential_cultures + } + } + } + } + } + + + # If the festival is at max level, add faith and culture from the whole diplomatic range + if = { + limit = { + exists = var:holding_quality + var:holding_quality > 2 + } + every_ruler = { + limit = { + in_diplomatic_range = scope:host + } + every_sub_realm_county = { + faith = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_faiths + } + } + } + add_to_list = potential_faiths + } + } + culture = { + if = { + limit = { + NOT = { + any_in_list = { + list = potential_cultures + } + } + } + add_to_list = potential_cultures + } + } + } + } + } + + # Pick a faith and a culture from the list to forward it to the template + random_in_list = { + list = potential_faiths + save_scope_as = guest_faith + } + + random_in_list = { + list = potential_cultures + save_scope_as = guest_culture + } + + + #Randomly select a type of character and generate it + random_list = { + # Skilled Martial / Commander + 100 = { + # lower the value for each commander already generated + modifier = { + exists = var:nb_commander_generated + add = { + value = var:nb_commander_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_commander_generated } + change_variable = { + name = nb_commander_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_commander_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_martial_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Diplomat + 100 = { + + # lower the value for each diplomat already generated + modifier = { + exists = var:nb_diplomat_generated + add = { + value = var:nb_diplomat_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_diplomat_generated } + change_variable = { + name = nb_diplomat_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_diplomat_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_diplomat_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Spy + 100 = { + + # lower the value for each spy already generated + modifier = { + exists = var:nb_spy_generated + add = { + value = var:nb_spy_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_spy_generated } + change_variable = { + name = nb_spy_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_spy_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_spy_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Steward + 100 = { + + # lower the value for each spy already generated + modifier = { + exists = var:nb_steward_generated + add = { + value = var:nb_steward_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_steward_generated } + change_variable = { + name = nb_steward_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_steward_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_steward_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Hunter + 100 = { + # lower the value for each hunter already generated + modifier = { + exists = var:nb_hunter_generated + add = { + value = var:nb_hunter_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_hunter_generated } + change_variable = { + name = nb_hunter_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_hunter_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_hunter_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Priest + 100 = { + trigger = { + # can replace the court chaplain + faith = { + has_doctrine_parameter = clerical_appointment_fixed + } + } + + # lower the value for each priest already generated + modifier = { + exists = var:nb_priest_generated + add = { + value = var:nb_priest_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_priest_generated } + change_variable = { + name = nb_priest_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_priest_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_martial_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Scholar + 100 = { + # lower the value for each scholar already generated + modifier = { + exists = var:nb_scholar_generated + add = { + value = var:nb_scholar_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_scholar_generated } + change_variable = { + name = nb_scholar_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_scholar_generated + value = 1 + } + } + + create_character = { + template = celebration_scholar_character + location = root.capital_province + save_scope_as = new_guest + } + } + + # Skilled Artisan - default wait is lower has they are going to be inspired + 50 = { + trigger = { + # Only for RoCo owners + has_ep1_dlc_trigger = yes + # has_royal_court = yes # Should check royal court? + } + + # lower the value for each artisan already generated + modifier = { + exists = var:nb_artisan_generated + add = { + value = var:nb_artisan_generated + multiply = -20 + } + } + + if = { + limit = { exists = var:nb_artisan_generated } + change_variable = { + name = nb_artisan_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_artisan_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_artisan_character + location = root.capital_province + save_scope_as = new_guest + } + } + + + # Chess Master + 100 = { + trigger = { + # As the Strategy game tradition + } + + # lower the value for each priest already generated + modifier = { + exists = var:nb_chessmaster_generated + add = { + value = var:nb_chessmaster_generated + multiply = -5 + } + } + + if = { + limit = { exists = var:nb_chessmaster_generated } + change_variable = { + name = nb_chessmaster_generated + add = 1 + } + } + else = { + set_variable = { + name = nb_chessmaster_generated + value = 1 + } + } + + # Generate the actual character + create_character = { + template = celebration_chessmaster_character + location = root.capital_province + save_scope_as = new_guest + } + } + } + + + #Does claimant exist? Send it my way and count down the variable + if = { + limit = { exists = scope:new_guest } + + add_visiting_courtier = scope:new_guest + + scope:new_guest = { + save_scope_as = guest #For courtier_guest_management.1001 + trigger_event = courtier_guest_management.1001 #For message + } + change_variable = { + name = number_prestigious_new_guests + subtract = 1 + } + } + + #Either end the chain or resend this event + if = { + limit = { var:number_prestigious_new_guests = 0 } + remove_variable = number_prestigious_new_guests + remove_variable = holding_quality + + if = { limit = { exists = var:nb_commander_generated } remove_variable = nb_commander_generated } + if = { limit = { exists = var:nb_diplomat_generated } remove_variable = nb_diplomat_generated } + if = { limit = { exists = var:nb_spy_generated } remove_variable = nb_spy_generated } + if = { limit = { exists = var:nb_steward_generated } remove_variable = nb_steward_generated } + if = { limit = { exists = var:nb_hunter_generated } remove_variable = nb_hunter_generated } + if = { limit = { exists = var:nb_priest_generated } remove_variable = nb_priest_generated } + if = { limit = { exists = var:nb_scholar_generated } remove_variable = nb_scholar_generated } + if = { limit = { exists = var:nb_artisan_generated } remove_variable = nb_artisan_generated } + if = { limit = { exists = var:nb_chessmaster_generated } remove_variable = nb_chessmaster_generated } + } + else = { + trigger_event = { + id = fp2_other_decisions.0001 + days = { 10 20 } + } + } + } +} + +################################################## +# Council of Toledo - Organization +# by Joe Parkin and Ola Jentzsch +# 0700 Decide who to invite +################################################## + +scripted_effect fetch_council_toledo_priest_effect = { + if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { save_scope_as = council_priest } + } + else = { + random_vassal_or_below = { + limit = { + NOR = { + government_has_flag = government_is_republic + government_has_flag = government_is_feudal + } + OR = { + has_trait = devoted + has_education_learning_trigger = yes + } + } + save_scope_as = council_priest + } + } +} + +scripted_effect fp2_struggle_council_toledo_attendee_effect = { + hidden_effect = { + if = { + limit = { government_has_flag = government_is_theocracy } + random = { + chance = 25 + fp2_council_toledo_attendee_modifier = yes + add_to_list = $LIST$ + } + } + if = { + limit = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { fp2_struggle_council_toledo_attendee_trigger = yes } + } + cp:councillor_court_chaplain = { + random = { + chance = 25 + fp2_council_toledo_attendee_modifier = yes + add_to_list = $LIST$ + } + } + } + } +} + +scripted_effect fp2_council_toledo_guest_populate_effect = { + while = { + limit = { + any_in_list = { + list = $LIST$ + NOT = { is_in_list = council_toledo_guest_list } + } + any_in_list = { + list = $LIST$ + count < 10 + is_in_list = council_toledo_guest_list + } + } + random_in_list = { + list = $LIST$ + limit = { + NOT = { is_in_list = council_toledo_guest_list } + } + weight = { + modifier = { factor = learning } + modifier = { + factor = 10 + is_landed = yes + } + modifier = { + factor = 10 + has_trait = theologian + } + } + add_to_list = council_toledo_guest_list + } + } +} + +fp2_other_decisions.0700 = { + type = character_event + title = fp2_other_decisions.0700.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = global_var:council_of_toledo_counter + global_var:council_of_toledo_counter = 19 + } + desc = fp2_other_decisions.0700.19 + } + desc = fp2_other_decisions.0700.desc + } + } + theme = faith + override_background = { reference = temple_church } + left_portrait = { + character = scope:council_priest + animation = chaplain + } + lower_right_portrait = { + trigger = { + exists = faith.religious_head + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + religious_head != root + } + } + character = faith.religious_head + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + # Decision triggers + fp2_struggle_council_toledo_decision_trigger = yes + + } + + immediate = { + save_scope_as = council_toledo_host + fetch_council_toledo_priest_effect = yes + scope:council_priest = { add_to_list = council_toledo_guest_list } + hidden_effect = { + religion = { + every_faith = { + limit = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + every_faith_ruler = { + limit = { + primary_title.tier >= tier_county + exists = capital_county + capital_county.title_province = { geographical_region = world_europe_west_iberia } + } + fp2_struggle_council_toledo_attendee_effect = { LIST = council_toledo_mozarab_list } + } + } + every_faith = { + limit = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + every_faith_ruler = { + limit = { + in_diplomatic_range = root + primary_title.tier >= tier_county + faith = { + OR = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:catholic } + } + } + } + fp2_struggle_council_toledo_attendee_effect = { LIST = council_toledo_regional_list } + } + } + } + } + custom_tooltip = fp2_other_decisions.0700.tt + } + + # Default option: Local council + option = { + name = fp2_other_decisions.0700.a + # Attendees + show_as_tooltip = { + title:c_toledo = { + add_county_modifier = { + modifier = fp2_small_council_modifier + years = 5 + } + } + } + religion = { + every_faith = { + limit = { + this != root.faith + religious_head ?= { in_diplomatic_range = root } + } + religious_head = { add_to_list = hof_list } + } + } + every_in_list = { + list = hof_list + custom = excluded_from_council_toledo_tt + add_opinion = { + target = root + modifier = fp2_excluded_from_council_toledo_opinion + opinion = -10 + } + } + ai_chance = { + base = 100 + } + } + + # Default option: Regional council + option = { + name = fp2_other_decisions.0700.b + add_character_flag = { + flag = regional_toledo_council + months = 2 + } + remove_treasury_or_gold = medium_treasury_or_gold_value + hidden_effect = { + while = { + count = 10 + random_in_list = { + list = council_toledo_regional_list + limit = { + NOT = { is_in_list = council_toledo_guest_list } + } + weight = { + modifier = { factor = learning } + modifier = { + factor = 10 + is_landed = yes + } + modifier = { + factor = 10 + has_trait = theologian + } + } + add_to_list = council_toledo_guest_list + } + } + } + show_as_tooltip = { + title:c_toledo = { + random_list = { + 1 = { + desc = fp2_other_decisions.0700.b.success + show_chance = no + add_county_modifier = { + modifier = fp2_big_council_modifier + years = 5 + } + } + 1 = { + desc = fp2_other_decisions.0700.b.failure + show_chance = no + add_county_modifier = { + modifier = fp2_disappointing_council_modifier + years = 5 + } + } + } + } + } + stress_impact = { + zealous = medium_stress_impact_gain + greedy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 50 + } + } + + after = { + # Attendees + # Populate guest list + hidden_effect = { + while = { + count = 10 + random_in_list = { + list = council_toledo_mozarab_list + limit = { + NOT = { is_in_list = council_toledo_guest_list } + } + weight = { + modifier = { factor = learning } + modifier = { + factor = 10 + is_landed = yes + } + modifier = { + factor = 10 + has_trait = theologian + } + } + add_to_list = council_toledo_guest_list + } + } + if = { + limit = { + any_in_list = { list = council_toledo_mozarab_list } + } + every_in_list = { + list = council_toledo_mozarab_list + remove_from_list = council_toledo_mozarab_list + } + } + if = { + limit = { + any_in_list = { list = council_toledo_regional_list } + } + every_in_list = { + list = council_toledo_regional_list + remove_from_list = council_toledo_regional_list + } + } + } + trigger_event = { + on_action = fp2_struggle_council_toledo_attend + days = { 14 21 } + } + } +} + +################################################## +# Council of Toledo - Arrival +# by Joe Parkin and Ola Jentzsch +# 0701 See who turned up +################################################## + +scripted_trigger fp2_council_toledo_successful_regional_trigger = { + has_character_flag = regional_toledo_council + any_in_list = { + list = council_toledo_guest_list + count > council_toledo_success_guest_value + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } +} + +scripted_trigger fp2_council_toledo_failure_regional_trigger = { + has_character_flag = regional_toledo_council + any_in_list = { + list = council_toledo_guest_list + count <= council_toledo_success_guest_value + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } +} + +scripted_trigger fp2_council_toledo_flavor_bishop_trigger = { + exists = scope:portrait_bishop + exists = scope:$TYPE$_bishop + scope:portrait_bishop = scope:$TYPE$_bishop +} + +fp2_other_decisions.0701 = { + type = character_event + title = fp2_other_decisions.0701.t + desc = { + first_valid = { + triggered_desc = { + trigger = { fp2_council_toledo_successful_regional_trigger = yes } + desc = fp2_other_decisions.0701.opening.success + } + triggered_desc = { + trigger = { fp2_council_toledo_failure_regional_trigger = yes } + desc = fp2_other_decisions.0701.opening.failure + } + triggered_desc = { + trigger = { has_character_flag = regional_toledo_council } + desc = fp2_other_decisions.0701.opening.catastrophe + } + desc = fp2_other_decisions.0701.opening + } + # Attendee flavor + random_valid = { + triggered_desc = { + trigger = { + exists = scope:portrait_bishop + scope:portrait_bishop = root.faith.religious_head + } + desc = fp2_other_decisions.0701.religious_head_bishop + } + triggered_desc = { + trigger = { + fp2_council_toledo_flavor_bishop_trigger = { TYPE = powerful } + } + desc = fp2_other_decisions.0701.powerful_bishop + } + triggered_desc = { + trigger = { + fp2_council_toledo_flavor_bishop_trigger = { TYPE = saint } + } + desc = fp2_other_decisions.0701.saint_bishop + } + triggered_desc = { + trigger = { + fp2_council_toledo_flavor_bishop_trigger = { TYPE = theologian } + } + desc = fp2_other_decisions.0701.theologian_bishop + } + triggered_desc = { + trigger = { + fp2_council_toledo_flavor_bishop_trigger = { TYPE = bad } + } + desc = fp2_other_decisions.0701.bad_bishop + } + triggered_desc = { + trigger = { + fp2_council_toledo_flavor_bishop_trigger = { TYPE = senior } + } + desc = fp2_other_decisions.0701.senior_bishop + } + } + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = regional_toledo_council + any_in_list = { + list = council_toledo_guest_list + count < council_toledo_success_guest_value + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + } + desc = fp2_other_decisions.0701.failure + } + desc = fp2_other_decisions.0701.desc + } + } + theme = faith + override_background = { reference = temple_church } + left_portrait = scope:portrait_bishop + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + # Decision triggers + fp2_struggle_council_toledo_decision_trigger = yes + } + + immediate = { + # Attendee flavor + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + this = root.faith.religious_head + } + } + random_in_list = { + list = council_toledo_guest_list + limit = { this = root.faith.religious_head } + save_scope_as = religious_head_bishop + } + } + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + primary_title.tier > tier_county + } + } + ordered_in_list = { + list = council_toledo_guest_list + limit = { primary_title.tier > tier_county } + order_by = primary_title.tier + save_scope_as = powerful_bishop + } + } + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + has_trait = saint + } + } + ordered_in_list = { + list = council_toledo_guest_list + limit = { has_trait = saint } + order_by = piety_level + save_scope_as = saint_bishop + } + } + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + has_trait = theologian + } + } + ordered_in_list = { + list = council_toledo_guest_list + limit = { has_trait = theologian } + order_by = learning + save_scope_as = theologian_bishop + } + } + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + num_sinful_traits > 0 + } + } + ordered_in_list = { + list = council_toledo_guest_list + limit = { num_sinful_traits > 1 } + order_by = num_sinful_traits + save_scope_as = bad_bishop + } + } + if = { + limit = { + OR = { + exists = scope:powerful_bishop + exists = scope:saint_bishop + exists = scope:theologian_bishop + exists = scope:bad_bishop + } + } + hidden_effect = { + random_list = { + 10 = { + trigger = { exists = scope:religious_head_bishop } + scope:religious_head_bishop = { save_scope_as = portrait_bishop } + } + 1 = { + trigger = { exists = scope:powerful_bishop } + modifier = { + add = 4 + scope:powerful_bishop.primary_title.tier >= tier_kingdom + } + scope:powerful_bishop = { save_scope_as = portrait_bishop } + } + 5 = { + trigger = { exists = scope:saint_bishop } + scope:saint_bishop = { save_scope_as = portrait_bishop } + } + 5 = { + trigger = { exists = scope:theologian_bishop } + scope:theologian_bishop = { save_scope_as = portrait_bishop } + } + 1 = { + trigger = { exists = scope:bad_bishop } + scope:bad_bishop = { save_scope_as = portrait_bishop } + } + } + } + } + else = { + ordered_in_list = { + list = council_toledo_guest_list + order_by = age + save_scope_as = senior_bishop + save_scope_as = portrait_bishop + } + } + } + + # Default option: Local council + option = { + name = { + trigger = { fp2_council_toledo_successful_regional_trigger = yes } + text = fp2_other_decisions.0701.a + } + name = { + trigger = { fp2_council_toledo_failure_regional_trigger = yes } + text = fp2_other_decisions.0701.b + } + name = { + trigger = { + NOT = { has_character_flag = regional_toledo_council } + } + text = fp2_other_decisions.0701.c + } + if = { + limit = { fp2_council_toledo_successful_regional_trigger = yes } + title:c_toledo = { + add_county_modifier = { + modifier = fp2_big_council_modifier + years = 5 + } + } + } + else_if = { + limit = { has_character_flag = regional_toledo_council } + title:c_toledo = { + add_county_modifier = { + modifier = fp2_disappointing_council_modifier + years = 5 + } + } + } + else = { + title:c_toledo = { + add_county_modifier = { + modifier = fp2_small_council_modifier + years = 5 + } + } + } + } + + after = { + custom_tooltip = fp2_other_decisions.0701.tt + trigger_event = { + on_action = fp2_struggle_council_toledo_debate + days = { 3 6 } + } + } +} + +################################################## +# Council of Toledo - Debate +# by Joe Parkin and Ola Jentzsch +# 0702 Bicker with them +################################################## + +scripted_effect fp2_council_toledo_debate_bishop_effect = { + save_scope_value_as = { + name = mozarabic + value = flag:$MOZARABIC$ + } + random_in_list = { + list = council_toledo_guest_list + limit = { + this != scope:council_priest + faith = { + trigger_if = { + limit = { scope:mozarabic = flag:yes } + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + trigger_else = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + } + weight = { + modifier = { + factor = 4 + has_trait = theologian + } + } + save_scope_as = debate_bishop + } + if = { + limit = { + NOT = { + exists = scope:debate_bishop + } + } + create_character = { + age = { 35 75 } + location = root.capital_province + gender_female_chance = root_faith_dominant_gender_female_chance + trait = zealous + faith = faith:mozarabic_church + culture = root.culture + learning = { + min_template_high_skill + max_template_high_skill + } + + save_scope_as = debate_bishop + + after_creation = { + add_character_flag = { + flag = need_priest_outfit + } + add_character_flag = { + flag = need_a_ruler + } + } + } + } + random_in_list = { + list = council_toledo_guest_list + limit = { + trigger_if = { + limit = { + exists = scope:debate_bishop + } + this != scope:debate_bishop + trigger_if = { + limit = { + scope:debate_bishop.faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + NOT = { + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + trigger_else = { + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + } + alternative_limit = { + NOR = { + this = scope:council_priest + trigger_if = { + limit = { + exists = scope:debate_bishop + } + this = scope:debate_bishop + } + } + } + weight = { + modifier = { + factor = 4 + has_trait = theologian + } + } + save_scope_as = counter_bishop + } +} + +scripted_effect fp2_council_opinion_mozarabic_effect = { + hidden_effect = { + every_in_list = { + list = council_toledo_guest_list + limit = { + NOR = { + this = scope:debate_bishop + this = scope:counter_bishop + } + liege = root + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = $VALUE$ + } + } + every_in_list = { + list = council_toledo_guest_list + limit = { + NOR = { + this = scope:debate_bishop + this = scope:counter_bishop + liege = root + } + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + custom = fp2_council_opinion_mozarabic_effect_tt + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = $VALUE$ + } + } + } +} + +scripted_effect fp2_council_opinion_other_effect = { + if = { + limit = { + any_in_list = { + list = council_toledo_guest_list + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + } + hidden_effect = { + every_in_list = { + list = council_toledo_guest_list + limit = { + NOR = { + this = scope:debate_bishop + this = scope:counter_bishop + } + liege = root + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = $VALUE$ + } + } + every_in_list = { + list = council_toledo_guest_list + limit = { + NOR = { + this = scope:debate_bishop + this = scope:counter_bishop + liege = root + } + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + custom = fp2_council_opinion_other_effect_tt + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = $VALUE$ + } + } + } + } +} + +scripted_effect fp2_council_modifier_effect = { + scope:council_toledo_faith = { + every_faith_ruler = { + limit = { primary_title.tier >= tier_county } + custom = council_of_toledo_ruler_effect_tt + add_character_modifier = { + modifier = $MODIFIER$ + years = council_toledo_modifier_duration_value + } + if = { + limit = { + is_ai = no + this != root + } + trigger_event = fp2_other_decisions.0704 + } + } + } +} + +scripted_effect fp2_council_strife_catalyst_effect = { + struggle:iberian_struggle = { + if = { + limit = { is_struggle_phase = struggle_iberia_phase_compromise } + change_struggle_phase = struggle_iberia_phase_opportunity + } + else_if = { + limit = { + is_struggle_phase = struggle_iberia_phase_opportunity + + } + change_struggle_phase = struggle_iberia_phase_hostility + } + } +} + +scripted_effect fp2_council_peace_catalyst_effect = { + struggle:iberian_struggle = { + if = { + limit = { is_struggle_phase = struggle_iberia_phase_compromise } + change_struggle_phase = struggle_iberia_phase_conciliation + } + else_if = { + limit = { + is_struggle_phase = struggle_iberia_phase_hostility + + } + change_struggle_phase = struggle_iberia_phase_compromise + } + } +} + +fp2_other_decisions.0702 = { + type = character_event + title = fp2_other_decisions.0702.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = global_var:council_of_toledo_counter + global_var:council_of_toledo_counter = 19 + } + desc = fp2_other_decisions.0702.19 + } + desc = fp2_other_decisions.0702.opening + } + first_valid = { # Conversion + triggered_desc = { + trigger = { var:council_toledo_issue = 1 } + desc = fp2_other_decisions.0702.conversion + } + triggered_desc = { # Reform + trigger = { var:council_toledo_issue = 2 } + desc = fp2_other_decisions.0702.reform + } + triggered_desc = { # Tolerance + trigger = { var:council_toledo_issue = 3 } + desc = fp2_other_decisions.0702.tolerance + } + triggered_desc = { # Clergy Rights + trigger = { var:council_toledo_issue = 4 } + desc = fp2_other_decisions.0702.rights + } + triggered_desc = { # New HoF + trigger = { var:council_toledo_issue = 5 } + desc = fp2_other_decisions.0702.hof + } + triggered_desc = { # Closer to Pope + trigger = { var:council_toledo_issue = 6 } + desc = fp2_other_decisions.0702.pope + } + triggered_desc = { # Target Heresy + trigger = { var:council_toledo_issue = 7 } + desc = fp2_other_decisions.0702.heresy + } + } + first_valid = { + triggered_desc = { + trigger = { + faith = { has_doctrine = doctrine_theocracy_lay_clergy } + } + desc = fp2_other_decisions.0702.present + } + desc = fp2_other_decisions.0702.second_hand + } + } + theme = faith + override_background = { reference = temple_church } + left_portrait = scope:debate_bishop + right_portrait = scope:counter_bishop + lower_right_portrait = scope:rival_scope + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + # Decision triggers + fp2_struggle_council_toledo_decision_trigger = yes + } + + immediate = { + fetch_council_toledo_priest_effect = yes + faith = { save_scope_as = council_toledo_faith } + hidden_effect = { + random_list = { + 10 = { # Conversion + trigger = { + NOT = { + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + root = { + any_realm_county = { + religion != root.religion + } + } + } + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + set_variable = { + name = council_toledo_issue + value = 1 + } + } + 5 = { # Reform + trigger = { + NOT = { exists = faith.var:foundational_faith } # set on reform + } + modifier = { + factor = 2 + has_perk = prophet_perk + } + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + set_variable = { + name = council_toledo_issue + value = 2 + } + } + 10 = { # Tolerance + trigger = { + NOT = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + } + } + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + every_culture_global = { + limit = { + this != root.culture + NOT = { has_same_culture_heritage = root.culture } + save_temporary_scope_as = this_culture + trigger_if = { + limit = { + struggle:iberian_struggle = { is_culture_involved_in_struggle = scope:this_culture } + } + struggle:iberian_struggle = { is_culture_involved_in_struggle = scope:this_culture } + } + trigger_else = { + any_culture_duchy = { + title_province ?= { geographical_region = world_europe_west_iberia } + } + } + culture_number_of_counties > 0 + } + add_to_list = fp2_council_culture_list + } + set_variable = { + name = council_toledo_issue + value = 3 + } + } + 5 = { # Clergy Opinion + modifier = { + factor = 2 + any_vassal = { + count >= 2 + government_has_flag = government_is_theocracy + } + } + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + set_variable = { + name = council_toledo_issue + value = 4 + } + } + 5 = { # New HoF + trigger = { + any_in_list = { + list = council_toledo_guest_list + percent >= 0.5 + is_in_list = council_toledo_mozarab_list + } + faith != faith.religious_head.faith + } + modifier = { + factor = 2 + faith.religious_head.faith.num_county_followers < root.faith.num_county_followers + } + modifier = { + factor = 2 + has_trait = excommunicated + } + modifier = { + factor = 2 + reverse_opinion = { + target = faith.religious_head + value < -25 + } + } + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + set_variable = { + name = council_toledo_issue + value = 5 + } + } + 5 = { # Closer to Pope + trigger = { + faith = { has_doctrine = special_doctrine_ecumenical_christian } + NOT = { has_trait = excommunicated } + faith != faith.religious_head.faith + } + modifier = { + factor = 2 + reverse_opinion = { + target = title:k_papal_state.holder + value > 25 + } + } + modifier = { + factor = 2 + faith.religious_head.faith.num_county_followers > root.faith.num_county_followers + } + random_list = { + 1 = { + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + } + 50 = { + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = no } + } + } + # if the priest is in no court + if = { + limit = { + exists = scope:debate_bishop + scope:debate_bishop = { + has_character_flag = need_a_ruler + } + } + root = { add_courtier = scope:debate_bishop } + } + set_variable = { + name = council_toledo_issue + value = 6 + } + } + 10 = { # Target Heresy + trigger = { + any_county_in_region = { + region = world_europe_west_iberia + faith = { + religion = root.faith.religion + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + NOT = { exists = religious_head } + } + } + } + random_county_in_region = { + region = world_europe_west_iberia + limit = { + faith = { + religion = root.faith.religion + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + NOT = { exists = religious_head } + } + } + faith = { save_scope_as = heretic_faith } + } + random_list = { + 1 = { + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = yes } + } + 1 = { + fp2_council_toledo_debate_bishop_effect = { MOZARABIC = no } + } + } + set_variable = { + name = council_toledo_issue + value = 7 + } + } + } + } + if = { + limit = { + any_relation = { + type = rival + faith = root.faith + } + } + save_scope_as = rival_scope + } + custom_tooltip = fp2_council_end_tt + } + + option = { # Accept + name = fp2_other_decisions.0702.a + add_piety = medium_piety_value + scope:debate_bishop = { + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = { + value = 10 + multiply = 2 + } + } + } + scope:counter_bishop = { + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = { + value = -10 + multiply = 2 + } + } + } + switch = { + trigger = var:council_toledo_issue + 1 = { # Conversion + fp2_council_modifier_effect = { MODIFIER = fp2_council_conversion_modifier } + custom_tooltip = fp2_council_conversion_modifier_tt + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = 5 } + fp2_council_strife_catalyst_effect = yes + stress_impact = { + cynical = minor_stress_impact_gain + } + } + 2 = { # Reform + fp2_council_modifier_effect = { MODIFIER = fp2_council_reform_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = -10 } + stress_impact = { + zealous = minor_stress_impact_gain + } + } + 3 = { # Tolerance + fp2_council_modifier_effect = { MODIFIER = fp2_council_tolerance_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = 10 } + hidden_effect = { + every_in_list = { + list = fp2_council_culture_list + root.culture = { + change_cultural_acceptance = { + target = prev + value = council_toledo_culture_acceptance_value + desc = fp2_council_toledo_culture_acceptance_desc + } + } + } + } + custom_tooltip = fp2_council_culture_tt + fp2_council_peace_catalyst_effect = yes + stress_impact = { + arrogant = minor_stress_impact_gain + } + } + 4 = { # Clergy Rights + fp2_council_modifier_effect = { MODIFIER = fp2_council_rights_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = 5 } + stress_impact = { + greedy = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + } + 5 = { # New HoF + reverse_add_opinion = { + target = faith.religious_head + modifier = fp2_council_toledo_new_hof_opinion + } + fp2_council_modifier_effect = { MODIFIER = fp2_council_hof_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = -10 } + stress_impact = { + humble = minor_stress_impact_gain + } + } + 6 = { # Closer to Pope + reverse_add_opinion = { + target = faith.religious_head + modifier = fp2_council_toledo_pope_opinion + } + fp2_council_modifier_effect = { MODIFIER = fp2_council_pope_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = 10 } + stress_impact = { + arrogant = minor_stress_impact_gain + } + } + 7 = { # Target Heresy + custom_tooltip = fp2_council_heresies_modifier_tt + fp2_council_modifier_effect = { MODIFIER = fp2_council_heresy_modifier } + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = 10 } + stress_impact = { + cynical = minor_stress_impact_gain + } + } + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + var:council_toledo_issue = 1 + var:council_toledo_issue = 4 + var:council_toledo_issue = 7 + } + has_trait = cynical + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 2 + has_trait = zealous + } + modifier = { + factor = 0.5 + OR = { + var:council_toledo_issue = 3 + var:council_toledo_issue = 6 + } + has_trait = arrogant + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 4 + has_trait = greedy + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 5 + has_trait = humble + } + } + } + + option = { # Veto + name = { + trigger = { faith.religious_head = root } + text = fp2_other_decisions.0702.b.hof + } + name = { + trigger = { + faith.religious_head != root + } + text = fp2_other_decisions.0702.b + } + add_piety = minor_piety_loss + add_character_modifier = { + modifier = fp2_stifled_council_modifier + years = 5 + } + scope:debate_bishop = { + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = { + value = -10 + multiply = 2 + } + } + } + scope:counter_bishop = { + add_opinion = { + target = root + modifier = fp2_council_toledo_opinion + opinion = { + value = 10 + multiply = 2 + } + } + } + switch = { + trigger = var:council_toledo_issue + 1 = { # Conversion + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = -5 } + fp2_council_peace_catalyst_effect = yes + stress_impact = { + zealous = minor_stress_impact_gain + } + } + 2 = { # Reform + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = 10 } + stress_impact = { + cynical = minor_stress_impact_gain + } + } + 3 = { # Tolerance + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = -10 } + fp2_council_strife_catalyst_effect = yes + stress_impact = { + humble = minor_stress_impact_gain + } + } + 4 = { # Clergy Rights + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = -5 } + stress_impact = { + zealous = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + } + 5 = { # New HoF + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = 10 } + stress_impact = { + arrogant = minor_stress_impact_gain + } + } + 6 = { # Closer to Pope + fp2_council_opinion_mozarabic_effect = { VALUE = 10 } + fp2_council_opinion_other_effect = { VALUE = -10 } + stress_impact = { + humble = minor_stress_impact_gain + } + } + 7 = { # Target Heresy + fp2_council_opinion_mozarabic_effect = { VALUE = -10 } + fp2_council_opinion_other_effect = { VALUE = -10 } + stress_impact = { + zealous = minor_stress_impact_gain + } + } + } + stress_impact = { + just = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + var:council_toledo_issue = 1 + var:council_toledo_issue = 4 + var:council_toledo_issue = 7 + } + has_trait = zealous + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 2 + has_trait = cynical + } + modifier = { + factor = 0.5 + OR = { + var:council_toledo_issue = 3 + var:council_toledo_issue = 6 + } + has_trait = humble + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 4 + has_trait = generous + } + modifier = { + factor = 0.5 + var:council_toledo_issue = 5 + has_trait = arrogant + } + } + } + + after = { remove_variable = council_toledo_issue } +} + +# Cancellation due to loss of control or war +fp2_other_decisions.0703 = { + type = character_event + title = fp2_other_decisions.0703.t + desc = { + first_valid = { + triggered_desc = { + trigger = { is_at_war = yes } + desc = fp2_other_decisions.0703.war + } + desc = fp2_other_decisions.0703.control + } + desc = fp2_other_decisions.0703.desc + } + theme = learning_theology_focus + override_background = { reference = temple_church } + left_portrait = { + character = root + animation = personality_zealous + } + right_portrait = { + character = scope:council_priest + animation = chaplain + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + # Decision triggers + fp2_struggle_council_toledo_decision_trigger = no + } + + immediate = { + fetch_council_toledo_priest_effect = yes + change_global_variable = { + name = council_of_toledo_counter + add = -1 + } + if = { + limit = { is_at_war = yes } + ordered_character_war = { + order_by = { + value = 0 + subtract = war_days + } + save_scope_as = council_war + } + } + title:c_toledo = { + if = { + limit = { has_county_modifier = fp2_small_council_modifier } + remove_county_modifier = fp2_small_council_modifier + } + else_if = { + limit = { has_county_modifier = fp2_big_council_modifier } + remove_county_modifier = fp2_big_council_modifier + } + else_if = { + limit = { has_county_modifier = fp2_disappointing_council_modifier } + remove_county_modifier = fp2_disappointing_council_modifier + } + } + add_gold = council_of_toledo_gold_cost_value + add_piety = council_of_toledo_piety_cost_value + } + + option = { + name = fp2_other_decisions.0703.a + remove_decision_cooldown = council_of_toledo_decision + } +} + +fp2_other_decisions.0704 = { + type = character_event + title = fp2_other_decisions.0704.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = global_var:council_of_toledo_counter + global_var:council_of_toledo_counter = 19 + } + desc = fp2_other_decisions.0702.19 + } + desc = fp2_other_decisions.0702.opening + } + first_valid = { + triggered_desc = { # Conversion + trigger = { has_character_modifier = fp2_council_conversion_modifier } + desc = fp2_other_decisions.0702.conversion + } + triggered_desc = { # Reform + trigger = { has_character_modifier = fp2_council_tolerance_modifier } + desc = fp2_other_decisions.0702.reform + } + triggered_desc = { # Tolerance + trigger = { has_character_modifier = fp2_council_reform_modifier } + desc = fp2_other_decisions.0702.tolerance + } + triggered_desc = { # Clergy Rights + trigger = { has_character_modifier = fp2_council_rights_modifier } + desc = fp2_other_decisions.0702.rights + } + triggered_desc = { # Ecumenical dialogue + trigger = { has_character_modifier = fp2_council_pope_modifier } + desc = fp2_other_decisions.0702.pope + } + triggered_desc = { # New HoF + trigger = { has_character_modifier = fp2_council_hof_modifier } + desc = fp2_other_decisions.0702.hof + } + triggered_desc = { # Target Heresy + trigger = { has_character_modifier = fp2_council_heresy_modifier } + desc = fp2_other_decisions.0702.heresy + } + } + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_character_modifier = fp2_council_conversion_modifier + has_character_modifier = fp2_council_tolerance_modifier + has_character_modifier = fp2_council_reform_modifier + has_character_modifier = fp2_council_rights_modifier + has_character_modifier = fp2_council_hof_modifier + has_character_modifier = fp2_council_pope_modifier + has_character_modifier = fp2_council_heresy_modifier + } + } + desc = fp2_other_decisions.0704.success + } + desc = fp2_other_decisions.0704.failure + } + } + theme = learning_theology_focus + override_background = { reference = temple_church } + left_portrait = { + character = scope:council_toledo_host + triggered_animation = { + trigger = { + NOT = { has_character_modifier = fp2_stifled_council_modifier } + } + animation = personality_zealous + } + triggered_animation = { + trigger = { has_character_modifier = fp2_stifled_council_modifier } + animation = anger + } + } + right_portrait = { + character = scope:council_priest + animation = chaplain + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + } + + option = { + name = fp2_other_decisions.0704.a + show_as_tooltip = { + if = { + limit = { + OR = { + has_character_modifier = fp2_council_conversion_modifier + has_character_modifier = fp2_council_tolerance_modifier + has_character_modifier = fp2_council_reform_modifier + has_character_modifier = fp2_council_rights_modifier + has_character_modifier = fp2_council_hof_modifier + has_character_modifier = fp2_council_pope_modifier + has_character_modifier = fp2_council_heresy_modifier + } + } + switch = { + trigger = has_character_modifier + fp2_council_conversion_modifier = { + custom_tooltip = fp2_council_conversion_modifier_tt + add_character_modifier = { + modifier = fp2_council_conversion_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_tolerance_modifier = { + add_character_modifier = { + modifier = fp2_council_tolerance_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_reform_modifier = { + add_character_modifier = { + modifier = fp2_council_reform_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_rights_modifier = { + add_character_modifier = { + modifier = fp2_council_rights_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_pope_modifier = { + add_character_modifier = { + modifier = fp2_council_pope_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_hof_modifier = { + add_character_modifier = { + modifier = fp2_council_hof_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_pope_modifier = { + add_character_modifier = { + modifier = fp2_council_pope_modifier + years = council_toledo_modifier_duration_value + } + } + fp2_council_heresy_modifier = { + custom_tooltip = fp2_council_heresies_modifier_tt + add_character_modifier = { + modifier = fp2_council_heresy_modifier + years = council_toledo_modifier_duration_value + } + } + } + } + else = { + scope:council_toledo_host = { + add_character_modifier = { + modifier = fp2_stifled_council_modifier + years = council_toledo_modifier_duration_value + } + } + } + } + } +} +################################################## +# Secure Iberian Foothold - Notification +# by Joe Parkin and Ola Jentzsch +# 1000 Decision taker event +################################################## + +fp2_other_decisions.1000 = { + type = character_event + title = fp2_other_decisions.1000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + religion = { + any_faith = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = prev } + } + } + } + desc = fp2_other_decisions.1000.involved_religion + } + desc = fp2_other_decisions.1000.desc + } + first_valid = { + triggered_desc = { + trigger = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = root.faith } + } + desc = fp2_other_decisions.1000.involved_faith + } + triggered_desc = { + trigger = { + religion = { + any_faith = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = prev } + } + } + } + desc = fp2_other_decisions.1000.uninvolved_faith + } + desc = fp2_other_decisions.1000.closing + } + } + theme = realm + left_portrait = { + character = root + animation = war_over_win + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + } + + immediate = { + save_scope_as = iberian_footholder + every_held_title = { + limit = { + # Any de jure kingdom of Iberia is completely controlled + fp2_struggle_secure_iberian_foothold_iberian_kingdom_trigger = yes + # That kingdom is mostly my faith + fp2_struggle_secure_iberian_foothold_faith_trigger = yes + scope:iberian_kingdom_temp = { title_held_years >= fp2_struggle_secure_iberian_foothold_years_value } + } + add_to_list = iberian_footholder_list + } + hidden_effect = { + while = { + limit = { + any_in_list = { + list = iberian_footholder_list + # Borders held lands in a non-Iberian kingdom you hold + any_de_jure_county = { + any_title_to_title_neighboring_and_across_water_county = { fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = yes } + } + NOT = { is_in_list = iberian_footholder_transfer_list } + } + } + random_in_list = { + list = iberian_footholder_list + limit = { + # Borders held lands in a non-Iberian kingdom you hold + any_de_jure_county = { + any_title_to_title_neighboring_and_across_water_county = { fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = yes } + } + NOT = { is_in_list = iberian_footholder_transfer_list } + } + random_de_jure_county = { + limit = { + any_title_to_title_neighboring_and_across_water_county = { fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = yes } + } + random_title_to_title_neighboring_and_across_water_county = { + limit = { fp2_struggle_secure_iberian_foothold_outsider_kingdom_trigger = yes } + empire = { save_scope_as = transfer_empire } + } + } + add_to_list = iberian_footholder_transfer_list + set_de_jure_liege_title = scope:transfer_empire + custom_tooltip = iberian_footholder_transfer_tt + } + } + } + show_as_tooltip = { + every_in_list = { + list = iberian_footholder_transfer_list + set_de_jure_liege_title = scope:transfer_empire + } + } + } + + option = { + name = fp2_other_decisions.1000.a + } + + after = { + struggle:iberian_struggle = { + every_involved_ruler = { + limit = { is_ai = no } + trigger_event = fp2_other_decisions.1001 + } + } + # End Struggle + struggle:iberian_struggle = { + end_struggle = secure_iberian_foothold_decision_title + } + } +} + +################################################## +# Secure Iberian Foothold - Notification +# by Joe Parkin and Ola Jentzsch +# 1001 Info event +################################################## + +fp2_other_decisions.1001 = { + type = character_event + title = fp2_other_decisions.1000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:iberian_footholder.religion = { + any_faith = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = prev } + } + } + } + desc = fp2_other_decisions.1001.involved_religion + } + desc = fp2_other_decisions.1001.desc + } + first_valid = { + triggered_desc = { + trigger = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = scope:iberian_footholder.faith } + } + desc = fp2_other_decisions.1001.involved_faith + } + triggered_desc = { + trigger = { + scope:iberian_footholder.religion = { + any_faith = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = prev } + } + } + religion = scope:iberian_footholder.religion + } + desc = fp2_other_decisions.1001.same_uninvolved_faith + } + triggered_desc = { + trigger = { + scope:iberian_footholder.religion = { + any_faith = { + struggle:iberian_struggle = { is_faith_involved_in_struggle = prev } + } + } + } + desc = fp2_other_decisions.1001.uninvolved_faith + } + desc = fp2_other_decisions.1001.closing + } + } + theme = realm + left_portrait = { + character = scope:iberian_footholder + animation = war_over_win + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + } + + immediate = { + show_as_tooltip = { + every_in_list = { + list = iberian_footholder_transfer_list + set_de_jure_liege_title = scope:transfer_empire + } + } + } + + option = { + name = fp2_other_decisions.1001.a + + } +} + + +################################################## +# Found Kingdom of Toledo +# by Joe Parkin +# 1100 Decision taker event +################################################## + +fp2_other_decisions.1100 = { + type = character_event + title = fp2_other_decisions.1100.t + desc = fp2_other_decisions.1100.desc + theme = realm + left_portrait = { + character = root + animation = war_over_win + } + lower_right_portrait = scope:de_jure_anger_1 + lower_center_portrait = scope:de_jure_anger_2 + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + } + + immediate = { + show_as_tooltip = { fp2_struggle_found_kingdom_toledo_empire_effect = yes } + hidden_effect = { + if = { + limit = { + any_in_list = { list = kingdom_toledo_opinion_list } + } + while = { + count = 2 + ordered_in_list = { + list = kingdom_toledo_opinion_list + limit = { + trigger_if = { + limit = { exists = scope:de_jure_anger_1 } + this != scope:de_jure_anger_1 + } + } + if = { + limit = { + NOT = { exists = scope:de_jure_anger_1 } + } + save_scope_as = de_jure_anger_1 + } + else = { save_scope_as = de_jure_anger_2 } + } + } + } + } + legend_seed_new_title_effect = yes + } + + option = { + name = fp2_other_decisions.1100.a + } + + after = { + every_player = { + limit = { + this != scope:toledo_former + is_within_diplo_range = { CHARACTER = scope:toledo_former } + } + trigger_event = fp2_other_decisions.1101 + } + } +} + +fp2_other_decisions.1101 = { + type = character_event + title = fp2_other_decisions.1100.t + desc = { + desc = fp2_other_decisions.1101.desc + first_valid = { + triggered_desc = { + trigger = { + trigger_if = { + limit = { exists = scope:de_jure_anger_1 } + this = scope:de_jure_anger_1 + } + trigger_else_if = { + limit = { exists = scope:de_jure_anger_2 } + this = scope:de_jure_anger_2 + } + trigger_else = { always = no } + } + desc = fp2_other_decisions.1101.stolen + } + triggered_desc = { + trigger = { + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + desc = fp2_other_decisions.1101.mozarab + } + } + } + theme = realm + override_background = { reference = throne_room_scope } + left_portrait = { + character = scope:toledo_former + animation = war_over_win + } + + trigger = { + # DLC checking + has_fp2_dlc_trigger = yes + } + + immediate = { + scope:toledo_former = { save_scope_as = background_throne_room_scope } + show_as_tooltip = { + scope:toledo_former = { get_title = title:k_toledo } + title:k_toledo = { + every_in_de_jure_hierarchy = { + limit = { tier = tier_duchy } + set_de_jure_liege_title = title:k_toledo + } + } + } + } + + option = { + name = { + trigger = { + trigger_if = { + limit = { exists = scope:de_jure_anger_1 } + this = scope:de_jure_anger_1 + } + trigger_else_if = { + limit = { exists = scope:de_jure_anger_2 } + this = scope:de_jure_anger_2 + } + trigger_else = { always = no } + } + text = fp2_other_decisions.1101.a + } + name = { + trigger = { + trigger_if = { + limit = { exists = scope:de_jure_anger_1 } + this != scope:de_jure_anger_1 + } + trigger_if = { + limit = { exists = scope:de_jure_anger_2 } + this != scope:de_jure_anger_2 + } + faith = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + text = fp2_other_decisions.1101.b + } + name = { + trigger = { + trigger_if = { + limit = { exists = scope:de_jure_anger_1 } + this != scope:de_jure_anger_1 + } + trigger_if = { + limit = { exists = scope:de_jure_anger_2 } + this != scope:de_jure_anger_2 + } + faith = { + NOT = { + portrait_religious_faith_or_foundational_trigger = { FAITH = faith:mozarabic_church } + } + } + } + text = fp2_other_decisions.1101.c + } + } +} diff --git a/events/dlc/fp3/fp3_misc_decision_events.txt b/events/dlc/fp3/fp3_misc_decision_events.txt new file mode 100644 index 00000000..2aa13e37 --- /dev/null +++ b/events/dlc/fp3/fp3_misc_decision_events.txt @@ -0,0 +1,2906 @@ +namespace = fp3_misc_decisions + +### EVENT LIST #################################################################### +## 0005 - 0009 Request Invasion by Hugo Cortell +## 0010 - 0014 Demand Submission letter events +## 0015 - 0015 Embrace Zoroastrianism faith selection event +## 0020 - 0030 Challenge House Head Events by Hugo Cortell +## 0031 - 0040 Favor Skilled Outsiders events by Ewan Cowhig Croft +## 0041 - 0050 Extra Challenge House Head Events +################################################################################### + +################################### +# Request Invasion +# By Hugo Cortell +################################### +fp3_misc_decisions.0005 = { + hidden = yes + + immediate = { + random_character_war = { # We need to locate the war we just created, since we can't save it on creation + limit = { + using_cb = fp3_turkic_invasion_cb + primary_attacker = scope:secondary_recipient # root + primary_defender = scope:recipient + } + add_attacker = scope:actor + } + } +} +fp3_misc_decisions.0006 = { + hidden = yes + + immediate = { + random_character_war = { # We need to locate the war we just created, since we can't save it on creation + limit = { + using_cb = fp3_turkic_invasion_cb + primary_attacker = scope:secondary_recipient # root + primary_defender = scope:recipient + } + save_scope_as = turkic_war + } + if = { + limit = { + has_mpo_dlc_trigger = yes + } + 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 = nomadic_riders + stacks = fp3_request_invasion_troop_value_bonus_levy_nomads + } + location = capital_province + uses_supply = yes + war = scope:turkic_war + inheritable = no + name = turkic_tribal_event_troops + } + } + else = { + 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 + war = scope:turkic_war + inheritable = no + name = turkic_tribal_event_troops + } + } + } +} + +# Demand Submission Letter Events +fp3_misc_decisions.0010 = { + type = letter_event + opening = fp3_misc_decisions.0010.opening + desc = { + desc = fp3_misc_decisions.0010.desc_intro + # If the Persian Struggle is still ongoing, comment on that + triggered_desc = { + trigger = { + exists = struggle:persian_struggle + scope:actor ?= title:d_sunni.holder + } + desc = fp3_misc_decisions.0010.desc_struggle + } + } + sender = scope:recipient + + immediate = { + show_as_tooltip = { + if = { + limit = { scope:piety_cost_reduction ?= yes } + add_piety = massive_piety_loss + } + add_hook = { + target = scope:recipient + type = caliphal_submission_hook + } + # Remove "rejected my authority" negative opinion, if valid + if = { + limit = { + has_opinion_modifier = { + modifier = fp3_rejected_my_authority_opinion + target = scope:recipient + } + } + remove_opinion = { + modifier = fp3_rejected_my_authority_opinion + target = scope:recipient + } + } + } + } + + option = { + name = fp3_misc_decisions.0010.a + } +} + +fp3_misc_decisions.0011 = { + type = letter_event + opening = fp3_misc_decisions.0010.opening + desc = fp3_misc_decisions.0011.desc + sender = scope:recipient + + immediate = { + show_as_tooltip = { + scope:recipient = { + add_piety = medium_piety_loss + reverse_add_opinion = { + target = scope:actor + modifier = fp3_rejected_my_authority_opinion + years = 30 + } + } + } + } + + option = { + name = fp3_misc_decisions.0011.a + } +} + +# Embrace Zoroastrianism faith selection event +fp3_misc_decisions.0015 = { + type = character_event + title = fp3_misc_decisions.0015.t + desc = fp3_misc_decisions.0015.desc + left_portrait = { + character = root + animation = worry + } + theme = faith + + immediate = { + # Gather what faiths we can choose to convert to (Zoroastrian faiths practiced by counties in our realm) + every_sub_realm_county = { + faith = { + if = { + limit = { + # Don't add the same faith to a list more than once + NOT = { + any_in_list = { + list = realm_zoroastrian_faiths + this = prev + } + } + religion = religion:zoroastrianism_religion + } + add_to_list = realm_zoroastrian_faiths + } + } + } + # Save the faiths with the most, 2nd most, and 3rd most fervor + # These are the faiths that we will be allowed to convert to + ordered_in_list = { + list = realm_zoroastrian_faiths + order_by = fervor + position = 0 + save_scope_as = zoroastrian_faith_1 + } + if = { + limit = { + list_size = { + name = realm_zoroastrian_faiths + value > 1 + } + } + ordered_in_list = { + list = realm_zoroastrian_faiths + order_by = fervor + position = 0 + save_scope_as = zoroastrian_faith_2 + } + } + if = { + limit = { + list_size = { + name = realm_zoroastrian_faiths + value > 2 + } + } + ordered_in_list = { + list = realm_zoroastrian_faiths + order_by = fervor + position = 2 + save_scope_as = zoroastrian_faith_3 + } + } + } + + option = { # Zoroastrian faith option 1 (faith with the most fervor) + name = fp3_misc_decisions.0015.a + make_character_crypto_religionist_effect = { CRYPTO_RELIGION = scope:zoroastrian_faith_1 } + } + + option = { # Zoroastrian faith option 2 + name = fp3_misc_decisions.0015.b + trigger = { + list_size = { + name = realm_zoroastrian_faiths + value > 1 + } + } + make_character_crypto_religionist_effect = { CRYPTO_RELIGION = scope:zoroastrian_faith_2 } + } + + option = { # Zoroastrian faith option 3 + name = fp3_misc_decisions.0015.c + trigger = { + list_size = { + name = realm_zoroastrian_faiths + value > 2 + } + } + make_character_crypto_religionist_effect = { CRYPTO_RELIGION = scope:zoroastrian_faith_3 } + } + + option = { # Don't switch to any secret faith + name = false_conversion.0020.b # "No, no, the time is not yet right." + add_piety = miniscule_piety_gain # Refund piety + } +} + +################################### +# Challenge House Head Events +# By Hugo Cortell +# 0020 - 0030 + 0041 - 0050 +################################### + +scripted_trigger fp3_clan_challenge_negotiate_age_health_trigger = { + OR = { + AND = { + scope:recipient.health < fine_health + scope:recipient.health < scope:actor.health + } + AND = { + scope:recipient.age >= 50 + scope:recipient.age >= root.age_plus_25 + } + OR = { + scope:recipient.age <= scope:actor.age_minus_10 + AND = { + scope:recipient = { is_sibling_of = scope:actor } + scope:recipient.age < scope:actor.age + } + } + } +} + +scripted_effect fp3_clan_challenge_negotiate_success_effect = { + save_scope_as = negotiate_success + save_scope_value_as = { + name = negotiate_reason + value = flag:$REASON$ + } + show_as_tooltip = { + scope:actor = { + add_prestige = medium_prestige_gain + house = { set_house_head = root } + } + } +} + +scripted_effect fp3_clan_challenge_negotiate_bargain_effect = { + save_scope_as = negotiate_bargain + save_scope_value_as = { + name = negotiate_reason + value = flag:$REASON$ + } + custom_tooltip = fp3_misc_decisions.0027.bargain.tt +} + +scripted_effect fp3_clan_challenge_negotiate_fail_effect = { + save_scope_as = negotiate_fail + save_scope_value_as = { + name = negotiate_reason + value = flag:$REASON$ + } + show_as_tooltip = { + scope:actor = { add_prestige = medium_prestige_loss } + scope:recipient = { + add_prestige = medium_piety_value + add_hook_no_toast = { + type = trial_by_combat_hook + target = scope:actor + } + } + } +} + +fp3_misc_decisions.0020 = { # Actor Duel Outcome(s) + type = character_event + title = fp3_misc_decisions.0020.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:sc_victor = scope:house_challenger + scope:sc_loser = { is_alive = no } + } + desc = fp3_misc_decisions.0020.desc.a.lethal + } + triggered_desc = { + trigger = { scope:sc_victor = scope:house_challenger } + desc = fp3_misc_decisions.0020.desc.a + } + desc = fp3_misc_decisions.0020.desc.b + } + } + + theme = dynasty + override_background = { reference = throne_room } + left_portrait = { + character = scope:house_challenger + animation = war_over_loss + + triggered_animation = { + trigger = { this = scope:sc_victor } + animation = war_over_win + } + } + right_portrait = { + character = scope:house_head + animation = war_over_loss + + triggered_animation = { + trigger = { is_alive = no } + animation = loss_1 + } + triggered_animation = { + trigger = { this = scope:sc_victor } + animation = war_over_win + } + } + + immediate = { + # Challenger lost + if = { + limit = { scope:sc_victor = scope:house_head } + show_as_tooltip = { fp3_challenge_house_head_duel_challenger_loss_effect = yes } # Prestige and hooks + } + # Challenger won + else = { + show_as_tooltip = { fp3_challenge_house_head_duel_challenger_win_prestige_effect = yes } # Prestige gain + } + } + + # OPTIONS FOR LOSER + option = { # Default option (goes on top, against design conventions) + name = fp3_misc_decisions.0020.lose.a + trigger = { scope:sc_loser = scope:house_challenger } + } + + option = { # Slay them to take the mantle + name = fp3_misc_decisions.0020.lose.b + trigger = { scope:sc_loser = root } + show_as_tooltip ={ + #Lose a ton of prestige for being so backhanded + add_prestige = massive_prestige_loss + add_prestige_level = -1 + } + duel = { + skills = { intrigue prowess } + target = scope:house_head + 1 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 1 + show_as_tooltip = { + known_murder_hidden_opinion_effect = { VICTIM = scope:house_head MURDERER = scope:house_challenger EXPOSER = scope:house_challenger } + house = { set_house_head = root } + } + save_scope_as = challenge_murder_success + } + 9 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + scope:house_head = { + hidden_effect = { + random = { + chance = 50 + save_scope_as = challenge_wound + } + } + show_as_tooltip = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:house_challenger } + } + set_relation_rival = { + target = scope:house_challenger + reason = rival_tried_to_kill_me + } + } + add_opinion = { + target = scope:house_challenger + modifier = attempted_murder_me_crime + } + imprison = { + target = scope:house_challenger + type = house_arrest + } + } + } + } + } + trigger_event = fp3_misc_decisions.0041 + stress_impact = { + content = major_stress_impact_gain + just = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + honest = medium_stress_impact_gain + } + ai_chance = { + base = 0 + } + } + + option = { + name = fp3_misc_decisions.0025.b + trigger = { + can_set_relation_rival_trigger = { CHARACTER = scope:recipient } + scope:recipient = { is_alive = yes } + } + progress_towards_rival_effect = { + REASON = rival_house_head_rejected_challenge + CHARACTER = scope:recipient + OPINION = default_rival_opinion + } + ai_chance = { + base = 5 + ai_value_modifier = { + ai_boldness = 0.25 + ai_vengefulness = 0.5 + } + } + } + + # OPTIONS FOR WINNER + option = { # Default option + name = fp3_misc_decisions.0020.win.a + trigger = { scope:sc_victor = scope:house_challenger } + fp3_challenge_house_head_duel_challenger_win_house_effect = yes + ai_chance = { + base = 25 + } + } + + option = { # You fought well and deserve to be house head + name = fp3_misc_decisions.0020.win.b + trigger = { + scope:sc_victor = scope:house_challenger + has_trait = gallant + scope:lethal != yes + } + add_prestige = massive_prestige_gain + reverse_add_opinion = { + target = scope:recipient + modifier = honored_opinion + } + house = { + add_clan_unity_interaction_effect = { + CHARACTER = scope:actor + TARGET = scope:recipient + VALUE = miniscule_unity_gain # recover half of what was lost by challenge itself + DESC = clan_unity_gallant_after_duel.desc + REVERSE_NON_HOUSE_TARGET = yes + } + } + stress_impact = { + greedy = major_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 10 + ai_value_modifier = { + ai_honor = 0.5 + ai_compassion = 0.25 + ai_greed = -1 + } + opinion_modifier = { + opinion_target = scope:recipient + multiplier = 0.25 + } + } + } +} + +# Bout has ended, inform affected parties. +fp3_misc_decisions.0021 = { + hidden = yes + + immediate = { + if = { + limit = { scope:sc_victor = scope:house_challenger } + fp3_challenge_house_head_duel_challenger_win_prestige_effect = yes + } + else = { fp3_challenge_house_head_duel_challenger_loss_effect = yes } + scope:house_challenger = { + trigger_event = { + id = fp3_misc_decisions.0020 + days = 1 + } + } + scope:house_head = { + trigger_event = { + id = fp3_misc_decisions.0023 + days = 1 + } + # allow challenges again + if = { + limit = { is_alive = yes } + remove_character_flag = ongoing_house_head_challenge_flag + } + } + # If both parties are alive, and aren't good losers/don't have good reasons to forgive each other, then we mark them as potential rivals. + if = { + limit = { + scope:house_challenger = { + is_alive = yes + NOR = { + has_trait = humble + has_trait = content + has_trait = just + has_trait = forgiving + } + } + scope:house_head = { + is_alive = yes + NOR = { + has_trait = humble + has_trait = content + has_trait = just + has_trait = forgiving + } + can_set_relation_potential_rival_trigger = { CHARACTER = scope:house_challenger } + } + } + scope:house_challenger = { set_relation_potential_rival = scope:house_head } + } + } +} + +fp3_misc_decisions.0022 = { # Actor Duel opening + type = character_event + window = duel_event + title = fp3_misc_decisions.0022.t + desc = { + desc = fp3_misc_decisions.0022.desc.intro + desc = fp1_tbc.0001.desc.outro + desc = fp3_misc_decisions.0022.desc.body + } + theme = dynasty + left_portrait = { + character = scope:actor + animation = throne_room_one_handed_passive_1 + } + right_portrait = { + character = scope:recipient + animation = war_over_win + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # If, for any reason, scope:recipient has died or been imprisoned, then the bout is cancelled. + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + on_trigger_fail = { + # Inform both parties that the duel has invalidated. + scope:actor = { + send_interface_toast = { + title = fp3_misc_decisions.0022.trigger_failure.actor + left_icon = scope:recipient + } + } + scope:recipient = { + send_interface_toast = { + title = fp3_misc_decisions.0022.trigger_failure.recipient + left_icon = scope:actor + } + } + # Reset scope:actor's cooldowns against scope:recipient. + scope:actor = { + remove_interaction_cooldown = challenge_to_trial_by_combat_interaction + remove_interaction_cooldown_against = { + interaction = fp3_challenge_house_head_interaction + target = scope:recipient + } + } + scope:recipient = { + # allow challenges again + remove_character_flag = ongoing_house_head_challenge_flag + } + } + + immediate = { + play_music_cue = "mx_cue_combat_stinger" + # Nab scope:champion's location for terrain. + scope:recipient = { + # And scope:champion's location name for loc. + location.barony = { save_scope_as = duel_location } + } + } + + # Almost there. + option = { + name = fp3_misc_decisions.0022.a + + # Inform scope:actor that the bout will begin immediately. + custom_tooltip = fp3_misc_decisions.0022.a.tt + # Configure the bout. + switch = { + trigger = scope:lethal + yes = { + configure_start_single_combat_effect = { + SC_INITIATOR = scope:actor + SC_ATTACKER = scope:actor + SC_DEFENDER = scope:recipient + FATALITY = always + FIXED = no + LOCALE = throne_room + OUTPUT_EVENT = fp3_misc_decisions.0021 + INVALIDATION_EVENT = single_combat.1006 + } + } + no = { + configure_start_single_combat_effect = { + SC_INITIATOR = scope:actor + SC_ATTACKER = scope:actor + SC_DEFENDER = scope:recipient + FATALITY = no + FIXED = no + LOCALE = throne_room + OUTPUT_EVENT = fp3_misc_decisions.0021 + INVALIDATION_EVENT = single_combat.1006 + } + } + } + # No stress for single-option events. + ai_chance = { + # AI will always choose single option. + base = 100 + } + } +} + +fp3_misc_decisions.0023 = { # Recipient Duel Outcome(s) + type = character_event + title = fp3_misc_decisions.0020.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:sc_loser = { is_alive = no } + scope:sc_victor = scope:house_head + } + desc = fp3_misc_decisions.0023.desc.a.lethal + } + triggered_desc = { + trigger = { scope:sc_victor = scope:house_head } + desc = fp3_misc_decisions.0023.desc.a + } + desc = fp3_misc_decisions.0023.desc.b + } + } + + theme = dynasty + override_background = { reference = throne_room } + left_portrait = { + character = scope:house_head + animation = war_over_loss + + triggered_animation = { + trigger = { this = scope:sc_victor } + animation = war_over_win + } + } + right_portrait = { + character = scope:house_challenger + animation = war_over_loss + + triggered_animation = { + trigger = { is_alive = no } + animation = loss_1 + } + triggered_animation = { + trigger = { this = scope:sc_victor } + animation = war_over_win + } + } + + immediate = { + if = { + limit = { scope:sc_victor = scope:house_head } + show_as_tooltip = { fp3_challenge_house_head_duel_challenger_loss_effect = yes } # Prestige and hooks + } + else = { + show_as_tooltip = { + fp3_challenge_house_head_duel_challenger_win_prestige_effect = yes # Prestige gain + fp3_challenge_house_head_duel_challenger_win_house_effect = yes # House head change + } + } + } + + # OPTIONS FOR WINNER + option = { # Default option (goes on top, against design conventions) + name = fp3_misc_decisions.0023.win.a + trigger = { scope:sc_victor = scope:house_head } + } + + # OPTIONS FOR LOSER + option = { # Default option + name = fp3_misc_decisions.0023.lose.a + trigger = { scope:sc_victor = scope:house_challenger } + } +} + +fp3_misc_decisions.0025 = { # Interaction declined + type = letter_event + sender = scope:recipient + opening = fp3_misc_decisions.0025.t + desc = fp3_misc_decisions.0025.desc + + immediate = { + show_as_tooltip = { scope:recipient = { add_prestige = major_prestige_loss } } + } + + option = { + name = fp3_misc_decisions.0025.a + ai_chance = { + base = 25 + ai_value_modifier = { + ai_honor = 0.25 + } + } + } + + option = { + name = fp3_misc_decisions.0025.b + trigger = { + can_set_relation_rival_trigger = { CHARACTER = scope:recipient } + } + progress_towards_rival_effect = { + REASON = rival_house_head_rejected_challenge + CHARACTER = scope:recipient + OPINION = default_rival_opinion + } + ai_chance = { + base = 5 + ai_value_modifier = { + ai_boldness = 0.25 + ai_vengefulness = 0.5 + } + } + } +} + +fp3_misc_decisions.0026 = { # Actor Diplomacy opening + type = character_event + title = fp3_misc_decisions.0022.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_governor = yes + tgp_realm_has_ceremonial_liege_trigger = yes + } + } + desc = fp3_misc_decisions.0026.desc.no_court + } + desc = fp3_misc_decisions.0026.desc + } + } + theme = dynasty + left_portrait = { + character = scope:actor + animation = worry + } + right_portrait = { + character = scope:recipient + animation = war_over_win + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # If, for any reason, scope:recipient has died or been imprisoned, then the bout is cancelled. + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + on_trigger_fail = { + # Inform both parties that the duel has invalidated. + scope:actor = { + send_interface_toast = { + title = fp3_misc_decisions.0022.trigger_failure.actor + left_icon = scope:recipient + } + } + scope:recipient = { + send_interface_toast = { + title = fp3_misc_decisions.0022.trigger_failure.recipient + left_icon = scope:actor + } + } + # Reset scope:actor's cooldowns against scope:recipient. + scope:actor = { + remove_interaction_cooldown = challenge_to_trial_by_combat_interaction + remove_interaction_cooldown_against = { + interaction = fp3_challenge_house_head_interaction + target = scope:recipient + } + } + scope:recipient = { + # allow challenges again + remove_character_flag = ongoing_house_head_challenge_flag + } + } + + immediate = { + play_music_cue = "mx_cue_combat_stinger" + # Nab scope:champion's location for terrain. + scope:recipient = { + # And scope:champion's location name for loc. + location.barony = { save_scope_as = duel_location } + } + } + + # Almost there. + option = { + name = fp3_misc_decisions.0026.a + custom_tooltip = fp3_misc_decisions.0026.a.tt + trigger_event = { + id = fp3_misc_decisions.0027 + days = 1 + } + # No stress for single-option events. + ai_chance = { + # AI will always choose single option. + base = 100 + } + } +} + +fp3_misc_decisions.0027 = { # Actor reason choice + type = character_event + title = fp3_misc_decisions.0022.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:recipient.house.house_founder = scope:recipient } + desc = fp3_misc_decisions.0027.desc.founder + } + desc = fp3_misc_decisions.0027.desc + } + } + theme = dynasty + left_portrait = { + character = scope:actor + animation = admiration + } + right_portrait = { + character = scope:recipient + animation = thinking + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + save_scope_value_as = { + name = recipient_skill_sum_75 + value = { + value = scope:recipient.sum_of_all_skills_value + multiply = 0.75 + round = yes + } + } + } + + # Age/health, a rational option + option = { + name = { + trigger = { + scope:recipient.health < fine_health + scope:recipient.health < scope:actor.health + } + text = fp3_misc_decisions.0027.a.sick + } + name = { + trigger = { + scope:recipient.age >= 50 + scope:recipient.age >= root.age_plus_25 + } + text = fp3_misc_decisions.0027.a.old + } + name = { + trigger = { + NOR = { + scope:recipient.age > scope:actor.age + AND = { + scope:recipient.health < fine_health + scope:recipient.health < scope:actor.health + } + AND = { + scope:recipient.age >= 50 + scope:recipient.age >= root.age_plus_25 + } + } + } + text = fp3_misc_decisions.0027.a.young + } + trigger = { + custom_tooltip = { + text = fp3_misc_decisions.0027.a.trigger + fp3_clan_challenge_negotiate_age_health_trigger = yes + } + } + show_as_unavailable = { always = yes } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + scope:recipient.health < fine_health + scope:recipient.health < scope:actor.health + } + desc = fp3_misc_decisions.0027.a.sick.tt + } + triggered_desc = { + trigger = { scope:recipient.age > scope:recipient.age } + desc = fp3_misc_decisions.0027.a.old.tt + } + triggered_desc = { + trigger = { scope:recipient.age < scope:actor.age } + desc = fp3_misc_decisions.0027.a.young.tt + } + } + } + duel = { + skills = { learning } + target = scope:recipient + 1 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.accept + fp3_clan_challenge_negotiate_success_effect = { REASON = age } + } + 5 = { + # Personality + fp3_challenge_house_head_negotiation_bargain_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.bargain + fp3_clan_challenge_negotiate_bargain_effect = { REASON = age } + } + 20 = { + # Personality + fp3_challenge_house_head_negotiation_reject_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1 + min = -49 + } + # Age + modifier = { + scope:recipient.age <= scope:actor.age_minus_10 + scope:recipient = { has_trait = arrogant } + add = 10 + } + # Health + modifier = { + add = { + value = scope:recipient.health + multiply = 2 + } + } + min = 15 + desc = fp3_misc_decisions.0027.reject + fp3_clan_challenge_negotiate_fail_effect = { REASON = age } + } + } + ai_chance = { + base = 100 + } + } + + # Strength, might makes right + option = { + name = { + trigger = { + scope:recipient = { is_vassal_or_below_of = scope:actor } + } + text = fp3_misc_decisions.0027.b.vassal + } + name = { + trigger = { scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier } + text = fp3_misc_decisions.0027.b.tier + } + name = { + trigger = { scope:recipient.current_military_strength < scope:actor.current_strength_seventy_five_percent_value } + text = fp3_misc_decisions.0027.b.military + } + name = { + trigger = { + NOR = { + scope:recipient = { is_vassal_or_below_of = scope:actor } + scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier + scope:recipient.current_military_strength < scope:actor.current_strength_seventy_five_percent_value + } + } + text = fp3_misc_decisions.0027.b.dread + } + trigger = { + custom_tooltip = { + text = fp3_misc_decisions.0027.b.trigger + OR = { + scope:recipient = { is_vassal_or_below_of = scope:actor } + scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier + scope:recipient.current_military_strength < scope:actor.current_strength_seventy_five_percent_value + scope:recipient = { + has_dread_level_towards = { + target = scope:actor + level >= 1 + } + } + } + } + } + show_as_unavailable = { always = yes } + flavor = { + first_valid = { + triggered_desc = { + trigger = { + scope:recipient = { is_vassal_or_below_of = scope:actor } + } + desc = fp3_misc_decisions.0027.b.vassal.tt + } + triggered_desc = { + trigger = { scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier } + desc = fp3_misc_decisions.0027.b.tier.tt + } + triggered_desc = { + trigger = { scope:recipient.current_military_strength < scope:actor.current_strength_seventy_five_percent_value } + desc = fp3_misc_decisions.0027.b.military.tt + } + desc = fp3_misc_decisions.0027.b.dread.tt + } + } + duel = { + skills = { martial } + target = scope:recipient + 1 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.accept + fp3_clan_challenge_negotiate_success_effect = { REASON = strength } + } + 5 = { + # Personality + fp3_challenge_house_head_negotiation_bargain_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.bargain + fp3_clan_challenge_negotiate_bargain_effect = { REASON = strength } + } + 20 = { + fp3_challenge_house_head_negotiation_reject_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 15 + desc = fp3_misc_decisions.0027.reject + fp3_clan_challenge_negotiate_fail_effect = { REASON = strength } + } + } + ai_chance = { + base = 100 + } + } + + # Skill, just more qualified + option = { + name = fp3_misc_decisions.0027.c + trigger = { + custom_tooltip = { + text = fp3_misc_decisions.0027.c.trigger + scope:actor.sum_of_all_skills_value >= scope:recipient.sum_of_all_skills_value + } + } + show_as_unavailable = { always = yes } + flavor = fp3_misc_decisions.0027.c.tt + duel = { + skills = { diplomacy martial stewardship intrigue learning } + target = scope:recipient + 1 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.accept + fp3_clan_challenge_negotiate_success_effect = { REASON = strength } + } + 5 = { + # Personality + fp3_challenge_house_head_negotiation_bargain_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.bargain + fp3_clan_challenge_negotiate_bargain_effect = { REASON = strength } + } + 20 = { + fp3_challenge_house_head_negotiation_reject_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 15 + desc = fp3_misc_decisions.0027.reject + fp3_clan_challenge_negotiate_fail_effect = { REASON = strength } + } + } + ai_chance = { + base = 100 + } + } + + # Fallback, pure charisma + option = { + name = fp3_misc_decisions.0027.d + duel = { + skills = { diplomacy intrigue } + target = scope:recipient + 1 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.accept + fp3_clan_challenge_negotiate_success_effect = { REASON = fallback } + } + 5 = { + fp3_challenge_house_head_negotiation_bargain_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = 1 + min = -49 + } + min = 2 + desc = fp3_misc_decisions.0027.bargain + fp3_clan_challenge_negotiate_bargain_effect = { REASON = fallback } + } + 20 = { + fp3_challenge_house_head_negotiation_reject_modifier = yes + compare_modifier = { + value = scope:duel_value + multiplier = -5 + min = -49 + } + min = 15 + desc = fp3_misc_decisions.0027.reject + fp3_clan_challenge_negotiate_fail_effect = { REASON = fallback } + } + } + ai_chance = { + base = 25 + } + } + + after = { + scope:recipient = { + trigger_event = { + id = fp3_misc_decisions.0028 + days = 1 + } + } + } +} + +fp3_misc_decisions.0028 = { # Recipient response + type = character_event + title = fp3_misc_decisions.0022.t + desc = { + desc = fp3_misc_decisions.0028.desc + first_valid = { + triggered_desc = { + trigger = { scope:recipient.house.house_head = scope:recipient } + desc = fp3_misc_decisions.0028.desc.founder + } + desc = fp3_misc_decisions.0028.desc + } + first_valid = { + # Age + triggered_desc = { # Sick + trigger = { + scope:negotiate_reason = flag:age + scope:recipient.health < fine_health + scope:recipient.health < scope:actor.health + } + desc = fp3_misc_decisions.0028.sick + } + triggered_desc = { # Old + trigger = { + scope:negotiate_reason = flag:age + scope:recipient.age > scope:recipient.age + } + desc = fp3_misc_decisions.0028.old + } + triggered_desc = { # Young + trigger = { scope:negotiate_reason = flag:age } + desc = fp3_misc_decisions.0028.young + } + # Strength + triggered_desc = { + trigger = { + scope:negotiate_reason = flag:strength + scope:recipient = { is_vassal_or_below_of = scope:actor } + } + desc = fp3_misc_decisions.0028.vassal + } + triggered_desc = { + trigger = { + scope:negotiate_reason = flag:strength + scope:recipient.highest_held_title_tier < scope:actor.highest_held_title_tier + } + desc = fp3_misc_decisions.0028.tier + } + triggered_desc = { + trigger = { + scope:negotiate_reason = flag:strength + scope:recipient.current_military_strength < scope:actor.current_strength_seventy_five_percent_value + } + desc = fp3_misc_decisions.0028.military + } + triggered_desc = { + trigger = { scope:negotiate_reason = flag:strength } + desc = fp3_misc_decisions.0028.dread + } + # Skill + triggered_desc = { + trigger = { scope:negotiate_reason = flag:skill } + desc = fp3_misc_decisions.0028.skill + } + # Fallback + triggered_desc = { + trigger = { scope:negotiate_reason = flag:fallback } + desc = fp3_misc_decisions.0028.fallback + } + } + } + theme = dynasty + left_portrait = { + character = scope:recipient + animation = thinking + } + right_portrait = { + character = scope:actor + animation = admiration + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + # Accept + option = { + name = fp3_misc_decisions.0028.a + save_scope_as = negotiate_accept + show_as_tooltip = { + house = { set_house_head = scope:actor } + } + add_character_flag = { + flag = accepted_house_head_challenge_flag + years = 10 + } + ai_chance = { + base = 0 + modifier = { + exists = scope:negotiate_success + add = 100 + } + modifier = { + exists = scope:negotiate_fail + factor = 0 + } + } + } + + # Bargain gold + option = { + name = fp3_misc_decisions.0028.c + save_scope_as = negotiate_gold + custom_tooltip = fp3_misc_decisions.0028.bargain.tt + show_as_tooltip = { + scope:actor = { + pay_short_term_gold = { + gold = scope:actor.medium_gold_value + target = scope:recipient + } + } + house = { set_house_head = scope:actor } + } + ai_chance = { + base = 0 + modifier = { + exists = scope:negotiate_bargain + add = 100 + } + modifier = { + exists = scope:negotiate_fail + factor = 0 + } + } + } + + # Bargain hook + option = { + name = fp3_misc_decisions.0028.d + save_scope_as = negotiate_hook + custom_tooltip = fp3_misc_decisions.0028.bargain.tt + show_as_tooltip = { + scope:recipient = { + add_hook_no_toast = { + target = scope:actor + type = predecessor_loyalty_hook + } + } + house = { set_house_head = scope:actor } + } + ai_chance = { + base = 0 + modifier = { + exists = scope:negotiate_bargain + add = 100 + } + modifier = { + exists = scope:negotiate_fail + factor = 0 + } + } + } + + # Reject + option = { + name = fp3_misc_decisions.0028.e + reverse_add_opinion = { + target = scope:actor + modifier = annoyed_opinion + opinion = -20 + } + ai_chance = { + base = 0 + modifier = { + exists = scope:negotiate_fail + add = 100 + } + } + } + + after = { + scope:actor = { + trigger_event = { + id = fp3_misc_decisions.0029 + days = 1 + } + } + } +} + +fp3_misc_decisions.0029 = { # Actor response + type = character_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { + calc_true_if = { + amount >= 1 + exists = scope:negotiate_gold + exists = scope:negotiate_hook + } + } + desc = fp3_misc_decisions.0022.t + } + desc = fp3_misc_decisions.0020.t + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_governor = yes + tgp_realm_has_ceremonial_liege_trigger = yes + } + } + desc = fp3_misc_decisions.0029.desc.no_court + } + desc = fp3_misc_decisions.0029.desc + } + first_valid = { + triggered_desc = { + trigger = { exists = scope:negotiate_accept } + desc = fp3_misc_decisions.0029.accept + } + triggered_desc = { + trigger = { exists = scope:negotiate_gold } + desc = fp3_misc_decisions.0029.gold + } + triggered_desc = { + trigger = { exists = scope:negotiate_hook } + desc = fp3_misc_decisions.0029.hook + } + desc = fp3_misc_decisions.0029.fail + } + } + theme = dynasty + left_portrait = { + character = scope:actor + animation = war_over_loss + triggered_animation = { + trigger = { + OR = { + exists = scope:negotiate_gold + exists = scope:negotiate_hook + } + } + animation = war_over_tie + } + triggered_animation = { + trigger = { exists = scope:negotiate_accept } + animation = war_over_win + } + animation = war_over_loss + } + right_portrait = { + character = scope:recipient + animation = thinking + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + if = { + limit = { + calc_true_if = { + amount = 0 + exists = scope:negotiate_gold + exists = scope:negotiate_hook + } + } + play_music_cue = "mx_cue_negative" + } + else_if = { + limit = { exists = scope:negotiate_accept } + play_music_cue = "mx_cue_positive_effect" + } + } + + # Accepted + option = { + name = fp3_misc_decisions.0029.a + trigger = { exists = scope:negotiate_accept } + save_scope_as = negotiate_accept + set_house_head_effect = { + NEW_HEAD = scope:actor + OLD_HEAD = scope:recipient + } + } + + # Accept bargain + option = { + name = fp3_misc_decisions.0029.b + trigger = { + calc_true_if = { + amount >= 1 + exists = scope:negotiate_gold + exists = scope:negotiate_hook + } + } + show_as_tooltip = { + switch = { + trigger = exists + scope:negotiate_gold = { + scope:actor = { + pay_short_term_gold = { + gold = scope:recipient.medium_gold_value + target = scope:recipient + } + } + } + scope:negotiate_hook = { + scope:recipient = { + add_hook_no_toast = { + target = scope:actor + type = predecessor_loyalty_hook + } + } + } + } + house = { set_house_head = scope:actor } + } + save_scope_as = negotiate_bargain_accept + scope:recipient = { trigger_event = fp3_misc_decisions.0030 } + stress_impact = { + greedy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + content = minor_stress_impact_gain + } + } + + # Reject bargain + option = { + name = fp3_misc_decisions.0029.c + trigger = { + calc_true_if = { + amount >= 1 + exists = scope:negotiate_gold + exists = scope:negotiate_hook + } + } + save_scope_as = negotiate_bargain_reject + scope:recipient = { trigger_event = fp3_misc_decisions.0030 } + stress_impact = { + generous = minor_stress_impact_gain + humble = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + + # Reject + option = { + name = fp3_misc_decisions.0029.d + trigger = { + calc_true_if = { + amount = 0 + exists = scope:negotiate_gold + exists = scope:negotiate_hook + exists = scope:negotiate_accept + } + } + stress_impact = { + arrogant = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + } + ai_chance = { + base = 0 + modifier = { + exists = scope:negotiate_fail + add = 100 + } + } + } +} + +fp3_misc_decisions.0030 = { # Actor response + type = character_event + title = fp3_misc_decisions.0022.t + desc = { + desc = fp3_misc_decisions.0030.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:negotiate_bargain_accept } + desc = fp3_misc_decisions.0030.accept + } + desc = fp3_misc_decisions.0030.reject + } + } + theme = dynasty + left_portrait = { + character = scope:recipient + animation = war_over_win + } + right_portrait = { + character = scope:actor + animation = dismissal + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + if = { + limit = { exists = scope:negotiate_bargain_accept } + switch = { + trigger = exists + scope:negotiate_gold = { + scope:actor = { + pay_short_term_gold = { + gold = scope:recipient.medium_gold_value + target = scope:recipient + } + } + } + scope:negotiate_hook = { + scope:recipient = { + add_hook_no_toast = { + target = scope:actor + type = predecessor_loyalty_hook + } + } + } + } + set_house_head_effect = { + NEW_HEAD = scope:actor + OLD_HEAD = scope:recipient + } + } + } + + # Accepted + option = { + name = fp3_misc_decisions.0030.a + trigger = { exists = scope:negotiate_bargain_accept } + } + + # Rejected + option = { + name = fp3_misc_decisions.0030.b + trigger = { exists = scope:negotiate_bargain_reject } + } +} + +fp3_misc_decisions.0041 = { # Murder attempt outcome + type = character_event + title = fp3_misc_decisions.0020.t + desc = { + desc = fp3_misc_decisions.0041.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:challenge_murder_success } + desc = fp3_misc_decisions.0041.desc.success + } + desc = fp3_misc_decisions.0041.desc.failure + } + } + theme = dynasty + left_portrait = { + character = scope:house_challenger + animation = loss_1 + triggered_animation = { + trigger = { exists = scope:challenge_murder_success } + animation = assassin + } + } + right_portrait = { + character = scope:house_head + animation = anger + triggered_animation = { + trigger = { exists = scope:challenge_murder_success } + animation = fear + } + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + add_prestige = massive_prestige_loss + add_prestige_level = -1 + if = { + limit = { exists = scope:challenge_murder_success } + set_house_head_effect = { + NEW_HEAD = scope:house_challenger + OLD_HEAD = scope:house_head + } + show_as_tooltip = { + known_murder_effect = { VICTIM = scope:house_head MURDERER = scope:house_challenger EXPOSER = scope:house_challenger } + } + scope:house_head = { trigger_event = fp3_misc_decisions.0043 } + } + else = { + scope:house_head = { + show_as_tooltip = { + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:house_challenger } + } + set_relation_rival = { + target = scope:house_challenger + reason = rival_tried_to_kill_me + } + } + } + if = { + limit = { exists = scope:challenge_wound } + show_as_tooltip = { + increase_wounds_no_death_effect = { REASON = murder } + } + } + } + show_as_tooltip = { + attempted_murder_opinion_effect = { + VICTIM = scope:house_head + MURDERER = scope:house_challenger + } + } + show_as_tooltip = { + scope:house_head = { + imprison = { + target = scope:house_challenger + type = house_arrest + } + } + } + scope:house_head = { trigger_event = fp3_misc_decisions.0042 } + } + } + + # Yay + option = { + name = fp3_misc_decisions.0041.a + trigger = { exists = scope:challenge_murder_success } + } + + # Curses + option = { + name = fp3_misc_decisions.0041.b + trigger = { + NOT = { exists = scope:challenge_murder_success } + } + } +} + +fp3_misc_decisions.0042 = { # Failed Murder ping + type = character_event + title = fp3_misc_decisions.0020.t + desc = fp3_misc_decisions.0042.desc + theme = dynasty + left_portrait = { + character = scope:house_head + animation = anger + } + right_portrait = { + character = scope:house_challenger + animation = fear + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + if = { + limit = { exists = scope:challenge_wound } + increase_wounds_no_death_effect = { REASON = murder } + } + show_as_tooltip = { + scope:house_challenger = { + add_prestige = massive_prestige_loss + add_prestige_level = -1 + } + attempted_murder_opinion_effect = { + VICTIM = scope:house_head + MURDERER = scope:house_challenger + } + } + rightfully_imprison_character_effect = { + TARGET = scope:house_challenger + IMPRISONER = scope:house_head + } + } + + # Yay + option = { + name = fp3_misc_decisions.0042.a + trigger = { exists = scope:challenge_murder_success } + } +} + +fp3_misc_decisions.0043 = { # Succesful Murder ping + type = character_event + title = fp3_misc_decisions.0020.t + desc = fp3_misc_decisions.0043.desc + theme = dynasty + left_portrait = { + character = scope:house_head + animation = loss_1 + } + right_portrait = { + character = scope:house_challenger + animation = assassin + } + override_background = { reference = throne_room } + + trigger = { + # DLC check. + has_fp3_dlc_trigger = yes + # Both parties alive and well + scope:actor = { + is_alive = yes + is_imprisoned = no + } + scope:recipient = { + is_alive = yes + is_imprisoned = no + } + } + + immediate = { + show_as_tooltip = { + scope:house_challenger = { + add_prestige = massive_prestige_loss + add_prestige_level = -1 + } + } + known_murder_effect = { VICTIM = scope:house_head MURDERER = scope:house_challenger EXPOSER = scope:house_challenger } + } + + # Curses + option = { + name = fp3_misc_decisions.0043.a + } +} + +################################################## +# Favour Skilled Outsiders +# by Ewan Cowhig Croft +# 0031 - 0040 +################################################## + +scripted_trigger fp3_misc_decisions_0031_preferred_ethoses_trigger = { + # Eloquent Captains + trigger_if = { + limit = { scope:outsider_diplomacy_martial = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_courtly + } + } + } + # Career Soldiers + trigger_if = { + limit = { scope:outsider_martial_prowess = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_bellicose + has_cultural_pillar = ethos_stoic + } + } + } + # Fringe Nobility + trigger_if = { + limit = { scope:outsider_prowess_learning = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_stoic + has_cultural_pillar = ethos_communal + } + } + } + # Dedicated Functionaries + trigger_if = { + limit = { scope:outsider_learning_intrigue = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_spiritual + } + } + } + # Cunning Officials + trigger_if = { + limit = { scope:outsider_intrigue_stewardship = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_courtly + has_cultural_pillar = ethos_egalitarian + } + } + } + # Skilled Administrators + trigger_if = { + limit = { scope:outsider_stewardship_diplomacy = yes } + # Cultures more likely to send people to this type of position. + culture = { + OR = { + has_cultural_pillar = ethos_bureaucratic + has_cultural_pillar = ethos_spiritual + } + } + } +} + +scripted_effect fp3_misc_decisions_0031_create_char_no_dynasty_effect = { + create_character = { + template = fp3_skilled_outsider_template + location = scope:batch_$BATCH$_county.title_province + dynasty = none + culture = scope:batch_$BATCH$_county.culture + faith = scope:batch_$BATCH$_county.faith + after_creation = { + add_to_list = batch_$BATCH$_characters_list + # Set an employer if there's a valid one available. + if = { + limit = { + scope:outsider_diplomacy_martial = yes + root.cp:councillor_chancellor ?= { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_chancellor + } + else_if = { + limit = { + scope:outsider_martial_prowess = yes + root.cp:councillor_steward ?= { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_steward + } + else_if = { + limit = { + scope:outsider_stewardship_diplomacy = yes + root.cp:councillor_marshal ?= { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_marshal + } + else_if = { + limit = { + scope:outsider_intrigue_stewardship = yes + root.cp:councillor_spymaster ?= { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_spymaster + } + else_if = { + limit = { + scope:outsider_learning_intrigue = yes + root.cp:councillor_court_chaplain ?= { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_court_chaplain + } + } + } +} + +scripted_effect fp3_misc_decisions_0031_create_char_with_dynasty_effect = { + create_character = { + template = fp3_skilled_outsider_template + location = scope:batch_$BATCH$_county.title_province + culture = scope:batch_$BATCH$_county.culture + faith = scope:batch_$BATCH$_county.faith + after_creation = { + add_to_list = batch_$BATCH$_characters_list + # Set an employer if there's a valid one available. + if = { + limit = { + scope:outsider_diplomacy_martial = yes + root.cp:councillor_chancellor = { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_chancellor + } + else_if = { + limit = { + scope:outsider_martial_prowess = yes + root.cp:councillor_steward = { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_steward + } + else_if = { + limit = { + scope:outsider_stewardship_diplomacy = yes + root.cp:councillor_marshal = { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_marshal + } + else_if = { + limit = { + scope:outsider_intrigue_stewardship = yes + root.cp:councillor_spymaster = { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_spymaster + } + else_if = { + limit = { + scope:outsider_learning_intrigue = yes + root.cp:councillor_court_chaplain = { + is_ruler = yes + is_ai = yes + } + } + set_employer = root.cp:councillor_court_chaplain + } + } + } +} + +scripted_effect fp3_misc_decisions_0031_pick_best_appropriate_char_effect = { + ordered_in_list = { + list = batch_$BATCH$_characters_list + order_by = { + if = { + limit = { scope:outsider_diplomacy_martial = yes } + add = diplomacy + } + if = { + limit = { scope:outsider_martial_prowess = yes } + add = martial + } + if = { + limit = { scope:outsider_prowess_learning = yes } + add = prowess + } + if = { + limit = { scope:outsider_learning_intrigue = yes } + add = learning + } + if = { + limit = { scope:outsider_intrigue_stewardship = yes } + add = intrigue + } + if = { + limit = { scope:outsider_stewardship_diplomacy = yes } + add = stewardship + } + } + save_scope_as = batch_$BATCH$_char1 + } +} + +scripted_effect fp3_misc_decisions_0031_apply_opinion_to_batch_effect = { + every_in_list = { + list = batch_$BATCH$_characters_list + custom = fp3_misc_decisions.0031.tt.all_outsiders + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 80 + } + # Since we're giving you a loyalty hook, we don't bother to take up option space with separate options for requesting their conversion - if you want it, you can always make 'em. + custom_tooltip = { + text = fp3_misc_decisions.0031.tt.all_outsiders.you_gain_hook + root = { + add_hook = { + type = loyalty_hook + target = prev + } + } + } + } +} + +# Recruit skilled outsiders from the lower ranks of your administration. +fp3_misc_decisions.0031 = { + type = character_event + title = favour_skilled_outsiders_decision + desc = { + desc = fp3_misc_decisions.0031.desc.intro + # How many cultures are we drawing from? + first_valid = { + # Are we taking all our guys from the same county? + triggered_desc = { + trigger = { scope:batch_a_county = scope:batch_b_county } + desc = fp3_misc_decisions.0031.desc.cultures.single + } + # Otherwise, use the multi-county loc. + desc = fp3_misc_decisions.0031.desc.cultures.fallback + } + } + theme = realm + left_portrait = { + character = scope:batch_a_char1 + animation = ecstasy + } + right_portrait = { + character = scope:batch_b_char1 + animation = personality_compassionate + } + lower_left_portrait = scope:batch_a_char2 + lower_center_portrait = scope:batch_a_char3 + lower_right_portrait = scope:batch_b_char2 + + immediate = { + # Finally, as we sorted ordered rankings out in the previous event, make sure that batch B is always higher quality. + hidden_effect = { + # Does scope:batch_b_char1 need elevating? + scope:batch_b_char1 = { + if = { + limit = { + scope:outsider_diplomacy_martial = yes + diplomacy < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_diplomacy_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = diplomacy + } + } + if = { + limit = { + scope:outsider_martial_prowess = yes + martial < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_martial_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = martial + } + } + if = { + limit = { + scope:outsider_prowess_learning = yes + prowess < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_prowess_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = prowess + } + } + if = { + limit = { + scope:outsider_learning_intrigue = yes + learning < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_learning_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = learning + } + } + if = { + limit = { + scope:outsider_intrigue_stewardship = yes + intrigue < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_intrigue_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = intrigue + } + } + if = { + limit = { + scope:outsider_stewardship_diplomacy = yes + stewardship < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + } + add_stewardship_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char1_value + subtract = stewardship + } + } + } + # Does scope:batch_b_char2 need a lil boost also? + scope:batch_b_char2 = { + if = { + limit = { + scope:outsider_diplomacy_martial = yes + diplomacy < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_diplomacy_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = diplomacy + } + } + if = { + limit = { + scope:outsider_martial_prowess = yes + martial < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_martial_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = martial + } + } + if = { + limit = { + scope:outsider_prowess_learning = yes + prowess < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_prowess_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = prowess + } + } + if = { + limit = { + scope:outsider_learning_intrigue = yes + learning < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_learning_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = learning + } + } + if = { + limit = { + scope:outsider_intrigue_stewardship = yes + intrigue < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_intrigue_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = intrigue + } + } + if = { + limit = { + scope:outsider_stewardship_diplomacy = yes + stewardship < scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + } + add_stewardship_skill = { + value = scope:batch_a_char1.fp3_skilled_outsider_minimum_main_skill_batch_b_char2_value + subtract = stewardship + } + } + } + # If we have a player, force a second skill recalc so that they can accurately see what they're getting. + if = { + limit = { + root = { is_ai = no } + } + scope:batch_b_char1 = { force_character_skill_recalculation = yes } + scope:batch_b_char2 = { force_character_skill_recalculation = yes } + } + } + } + + # Select batch A. + option = { + name = fp3_misc_decisions.0031.a + + # Gain the courtiers. + ## Added individually rather than through the same effect as opinion so you can easily see exactly who you get. + add_courtier = scope:batch_a_char1 + add_courtier = scope:batch_a_char2 + add_courtier = scope:batch_a_char3 + fp3_misc_decisions_0031_apply_opinion_to_batch_effect = { BATCH = a } + # Apply opinion maluses. + scope:batch_a_char1 = { save_scope_as = outsider_select } + favour_skilled_outsiders_decision_apply_opinions_effect = yes + + # No stress gain here. + ai_chance = { + base = 1 + # No AI value modifier - this is really just a pick you gut-feel as either a player or the AI. + # Though the AI is more likely to pick cultures you get on with better. + modifier = { + add = 75 + culture = { + cultural_acceptance = { + target = scope:batch_a_char1.culture + value >= 75 + } + } + } + modifier = { + add = 50 + culture = { + cultural_acceptance = { + target = scope:batch_a_char1.culture + value >= 50 + } + } + } + modifier = { + add = 25 + culture = { + cultural_acceptance = { + target = scope:batch_a_char1.culture + value >= 25 + } + } + } + } + } + + # Select batch B. + option = { + name = fp3_misc_decisions.0031.b + + # Gain the courtiers. + ## Added individually rather than through the same effect as opinion so you can easily see exactly who you get. + add_courtier = scope:batch_b_char1 + add_courtier = scope:batch_b_char2 + fp3_misc_decisions_0031_apply_opinion_to_batch_effect = { BATCH = b } + # Apply opinion maluses. + scope:batch_b_char1 = { save_scope_as = outsider_select } + favour_skilled_outsiders_decision_apply_opinions_effect = yes + + # No stress gain here. + ai_chance = { + base = 1 + # No AI value modifier - this is really just a pick you gut-feel as either a player or the AI. + # Though the AI is more likely to pick cultures you get on with better. + modifier = { + add = 75 + culture = { + cultural_acceptance = { + target = scope:batch_b_char1.culture + value >= 75 + } + } + } + modifier = { + add = 50 + culture = { + cultural_acceptance = { + target = scope:batch_b_char1.culture + value >= 50 + } + } + } + modifier = { + add = 25 + culture = { + cultural_acceptance = { + target = scope:batch_b_char1.culture + value >= 25 + } + } + } + } + } + + # Change your mind. + option = { + name = fp3_misc_decisions.0031.c + trigger = { is_ai = no } + + # RIP. + ## Job interviews suck. + custom_tooltip = fp3_misc_decisions.0031.c.tt + # Your prestige is refunded. + hidden_effect = { add_prestige_no_experience = scope:prestige_cost } + # We leave the decision on cooldown, though — otherwise you could just cycle through it repeatedly till you get the best conceivable recruits. + + # No stress gain here. + # No ai_chance; this is for the player to change their mind. If the AI gets this far, it should roll with it. + } + + after = { + # Remove the batch we didn't recruit. + hidden_effect = { + if = { + limit = { + NOT = { scope:batch_a_char1.liege ?= root } + } + every_in_list = { + list = batch_a_characters_list + silent_disappearance_effect = yes + } + } + if = { + limit = { + NOT = { scope:batch_b_char1.liege ?= root } + } + every_in_list = { + list = batch_b_characters_list + silent_disappearance_effect = yes + } + } + } + } +} + +# Laundering event to spawn the characters so that we can do some skill updating magic which'd otherwise error. +fp3_misc_decisions.0032 = { + hidden = yes + + immediate = { + # Alright, let's generate some characters! + ## First, we need to compile a list of valid cultures. + ### Sort our total possible candidates. + every_sub_realm_county = { + limit = { favour_skilled_outsiders_decision_valid_county_to_generate_trigger = yes } + # So we nab every valid county. + add_to_list = sub_realm_minority_cultures_county_pre_filter_list + # And every valid _culture_: we're gonna need to use these as a limit against the above list in a sec. + culture = { add_to_list = sub_realm_minority_cultures_tally_list } + } + ### Grab the tally of how many possible cultures we need for the final list. + #### This'll tell us how many times to iterate over the counties list total so that we end up with one county per valid culture instead of every county for every valid culture. + save_scope_value_as = { + name = while_count_value + value = { + every_in_list = { + list = sub_realm_minority_cultures_tally_list + add = 1 + } + } + } + ### Then we loop through and pick our finalists. + #### Hide the effect, because the while loop's tally will show even if nothing in it is visible to the player. + hidden_effect = { + while = { + count = scope:while_count_value + # First, nab a random culture we haven't used yet from the list of cultures to account for. + random_in_list = { + list = sub_realm_minority_cultures_tally_list + save_scope_as = current_culture + # We remove from the list so that we don't roll this culture again - effectively marking it as used. + remove_from_list = sub_realm_minority_cultures_tally_list + } + # Now, process through the complete list of counties to find the best possible fit that matches the valid culture. + ordered_in_list = { + list = sub_realm_minority_cultures_county_pre_filter_list + limit = { culture = scope:current_culture } + order_by = { + value = development_level + # Weight down for places that don't follow the same HoF. + if = { + limit = { + exists = root.faith.religious_head + faith.religious_head ?= root.faith.religious_head + } + add = { + value = development_level + multiply = -0.1 + } + } + # Weight down by root's hostility. + ## Righteous is perfect. + ## Astray, lose a little. + if = { + limit = { + root.faith = { + faith_hostility_level = { + target = prev.faith + value = faith_astray_level + } + } + } + add = { + value = development_level + multiply = -0.1 + } + } + ## Hostile, lose a little more. + if = { + limit = { + root.faith = { + faith_hostility_level = { + target = prev.faith + value = faith_hostile_level + } + } + } + add = { + value = development_level + multiply = -0.25 + } + } + ## Evil, lose a lottle more. + if = { + limit = { + root.faith = { + faith_hostility_level = { + target = prev.faith + value = faith_evil_level + } + } + } + add = { + value = development_level + multiply = -0.4 + } + } + } + add_to_list = sub_realm_minority_cultures_final_counties_list + } + } + } + ### For debug purposes: here so you can de-clog the tooltip if you need it to stop displaying _every_ valid county and just show you some selected appropriate scopes. + if = { + limit = { always = no } + every_in_list = { + list = sub_realm_minority_cultures_county_pre_filter_list + remove_from_list = sub_realm_minority_cultures_county_pre_filter_list + } + } + ## Sweet, now let's try to pick two from the list. + ### + if = { + limit = { + list_size = { + name = sub_realm_minority_cultures_final_counties_list + value >= 2 + } + } + # Try to grab a culture for batch A that matches our needs. + random_in_list = { + list = sub_realm_minority_cultures_final_counties_list + limit = { fp3_misc_decisions_0031_preferred_ethoses_trigger = yes } + alternative_limit = { always = yes } + weight = { fp3_misc_decisions_0031_preferred_cultrads_modifier = yes } + save_scope_as = batch_a_county + } + # And try to grab one for batch B that does the same whilst not being batch A. + random_in_list = { + list = sub_realm_minority_cultures_final_counties_list + limit = { + fp3_misc_decisions_0031_preferred_ethoses_trigger = yes + this != scope:batch_a_county + } + alternative_limit = { + this != scope:batch_a_county + } + weight = { fp3_misc_decisions_0031_preferred_cultrads_modifier = yes } + save_scope_as = batch_b_county + } + } + ### Otherwise, we've only got one item in the list, so just grab it twice. + else = { + random_in_list = { + list = sub_realm_minority_cultures_final_counties_list + save_scope_as = batch_a_county + } + scope:batch_a_county = { save_scope_as = batch_b_county } + } + ## Right, now let's generate batch A. + ### Slightly different parameters if we're using the fallback option. + if = { + limit = { scope:outsider_prowess_learning = yes } + fp3_misc_decisions_0031_create_char_with_dynasty_effect = { BATCH = a } + fp3_misc_decisions_0031_create_char_with_dynasty_effect = { BATCH = a } + fp3_misc_decisions_0031_create_char_with_dynasty_effect = { BATCH = a } + } + ### Otherwise, they're not nobles in any capacity, so remove their dynasties. + else = { + fp3_misc_decisions_0031_create_char_no_dynasty_effect = { BATCH = a } + fp3_misc_decisions_0031_create_char_no_dynasty_effect = { BATCH = a } + fp3_misc_decisions_0031_create_char_no_dynasty_effect = { BATCH = a } + } + ## Aaaaand batch B. + ### Slightly different parameters if we're using the fallback option. + if = { + limit = { scope:outsider_prowess_learning = yes } + fp3_misc_decisions_0031_create_char_with_dynasty_effect = { BATCH = b } + fp3_misc_decisions_0031_create_char_with_dynasty_effect = { BATCH = b } + } + ### Otherwise, they're not nobles in any capacity, so remove their dynasties. + else = { + fp3_misc_decisions_0031_create_char_no_dynasty_effect = { BATCH = b } + fp3_misc_decisions_0031_create_char_no_dynasty_effect = { BATCH = b } + } + ### Plus go over batch B & upgrade their education traits by +2. + every_in_list = { + list = batch_b_characters_list + hidden_effect = { + # Which education track are they on? + ## Diplomacy + if = { + limit = { has_trait = education_diplomacy_1 } + remove_trait = education_diplomacy_1 + add_trait = education_diplomacy_3 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + else_if = { + limit = { has_trait = education_diplomacy_2 } + remove_trait = education_diplomacy_2 + add_trait = education_diplomacy_4 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + ## Martial + if = { + limit = { has_trait = education_martial_1 } + remove_trait = education_martial_1 + add_trait = education_martial_3 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + else_if = { + limit = { has_trait = education_martial_2 } + remove_trait = education_martial_2 + add_trait = education_martial_4 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + ## Stewardship + if = { + limit = { has_trait = education_stewardship_1 } + remove_trait = education_stewardship_1 + add_trait = education_stewardship_3 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + else_if = { + limit = { has_trait = education_stewardship_2 } + remove_trait = education_stewardship_2 + add_trait = education_stewardship_4 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + ## Intrigue + if = { + limit = { has_trait = education_intrigue_1 } + remove_trait = education_intrigue_1 + add_trait = education_intrigue_3 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + else_if = { + limit = { has_trait = education_intrigue_2 } + remove_trait = education_intrigue_2 + add_trait = education_intrigue_4 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + ## Learning + if = { + limit = { has_trait = education_learning_1 } + remove_trait = education_learning_1 + add_trait = education_learning_3 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + else_if = { + limit = { has_trait = education_learning_2 } + remove_trait = education_learning_2 + add_trait = education_learning_4 + # Force a skill recalc so that we can evaluate who's in the lead later. + ## Remember that only two of these'll ever be applied in total, so it's not too bad to be using them like this. + force_character_skill_recalculation = yes + } + } + } + ## Select our representatives. + fp3_misc_decisions_0031_pick_best_appropriate_char_effect = { BATCH = a } + fp3_misc_decisions_0031_pick_best_appropriate_char_effect = { BATCH = b } + ## And fill out our fodder. + random_in_list ={ + list = batch_a_characters_list + limit = { + this != scope:batch_a_char1 + } + save_scope_as = batch_a_char2 + # Plus we make the characters within each group get on, as they're sorta local allies. + hidden_effect = { set_relation_friend = scope:batch_a_char1 } + } + random_in_list = { + list = batch_a_characters_list + limit = { + NOR = { + this = scope:batch_a_char1 + this = scope:batch_a_char2 + } + } + save_scope_as = batch_a_char3 + # Plus we make the characters within each group get on, as they're sorta local allies. + hidden_effect = { + set_relation_friend = scope:batch_a_char1 + set_relation_friend = scope:batch_a_char2 + } + } + random_in_list = { + list = batch_b_characters_list + limit = { + this != scope:batch_b_char1 + } + save_scope_as = batch_b_char2 + # Plus we make the characters within each group get on, as they're sorta local allies. + hidden_effect = { set_relation_best_friend = scope:batch_b_char1 } + } + # Now fire the actual event! + trigger_event = fp3_misc_decisions.0031 + } +} + +################################################## +# Adopt Clan Government +# by Joe Parkin +# 0051-0060 +################################################## + +fp3_misc_decisions.0051 = { # Adopt Clan Government through House + type = character_event + title = fp3_misc_decisions.0051.t + desc = fp3_misc_decisions.0051.desc + theme = dynasty + left_portrait = { + character = root + animation = personality_rational + } + lower_right_portrait = house.house_head + + immediate = { + change_government = clan_government + # Increase unity, uses this effect since both chars are not clan when script is evaluated + house.house_head = { + apply_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = root.house.house_head + DESC = clan_unity_adopt_clan.desc + VALUE = medium_unity_gain + VALUE_REVERSED = no + } + } + hidden_effect = { + house.house_head = { + send_interface_toast = { + title = fp3_become_clan_government_decision_toast + left_icon = root + right_icon = house.house_head + show_as_tooltip = { + root = { + # Change government type + change_government = clan_government + # Increase unity, uses this effect since both chars are not clan when script is evaluated + house.house_head = { + apply_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = root.house.house_head + DESC = clan_unity_adopt_clan.desc + VALUE = medium_unity_gain + VALUE_REVERSED = no + } + } + } + } + } + } + } + } + + option = { + name = fp3_misc_decisions.0051.a + } +} diff --git a/events/dlc/fp3/fp3_religious_decision_events.txt b/events/dlc/fp3/fp3_religious_decision_events.txt new file mode 100644 index 00000000..defabe17 --- /dev/null +++ b/events/dlc/fp3/fp3_religious_decision_events.txt @@ -0,0 +1,1362 @@ +namespace = fp3_decision + +################################################## +# #Zoroastrian Decision Events + +################################################## + +fp3_decision.0001 = { + type = character_event + title = fp3_decision.0001.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_faith = faith:mazdakism + } + desc = fp3_decision.0001.desc_mazdakist + } + triggered_desc = { + trigger = { + has_faith = faith:khurramism + } + desc = fp3_decision.0001.desc_khurramite + } + desc = fp3_decision.0001.desc_general_zoroastrian + } + desc = fp3_decision.0001_desc_ending + } + + + + theme = crown + override_background = { reference = throne_room_east } + + left_portrait = { + character = root + animation = personality_bold + } + + option = { #If you're of the Mazdakite or Behafarid inclination, you might rather want to destroy the fires + name = fp3_decision.0001.a + flavor = fp3_decision.0001.a.tt + + trigger = { + OR = { + has_faith = faith:mazdakism + has_faith = faith:zurvanism #Behafaridism + faith = { + OR = { + has_doctrine_parameter = vows_of_poverty_active + has_doctrine = tenet_gnosticism + } + } + } + } + + add_piety = major_piety_gain + + custom_tooltip = fp3_decision.0001_pledged_to_quench_fire + hidden_effect = { + add_character_flag = { + flag = pledged_to_quench_fire + days = 7300 + } + } + + stress_impact = { + zealous = major_stress_loss + ambitious = minor_stress_loss + } + + ai_chance = { #ambitious, vengeful Mazdaki AIs pick this option + base = 10 + ai_value_modifier = { + ai_rationality = 0.5 + ai_energy = 1 + ai_vengefulness = 1 + ai_zeal = 1 + } + } + } + + option = { #Kindle the fire (elaborate ceremony) + name = fp3_decision.0001.b + + add_piety = massive_piety_loss + + dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_value } + + add_character_modifier = { + modifier = fp3_royal_fire_modifier + } + + custom_tooltip = fp3_decision.0001_vassal_and_courtier_opinion_impressed + hidden_effect = { + every_vassal = { + IF = { + limit = { + NOT = { + has_religion = religion:zoroastrianism_religion + } + OR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + faith = { has_doctrine = doctrine_pluralism_righteous } + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_strange_rituals_opinion + } + } + ELSE = { + add_opinion = { + target = root + opinion = 15 + modifier = fp3_magnificent_fire_ritual_opinion + } + } + } + every_courtier = { + IF = { + limit = { + NOT = { + has_religion = religion:zoroastrianism_religion + } + OR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + faith = { has_doctrine = doctrine_pluralism_righteous } + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_strange_rituals_opinion + } + } + ELSE = { + add_opinion = { + target = root + opinion = 15 + modifier = fp3_magnificent_fire_ritual_opinion + } + } + } + } + + ai_chance = { #ambitious and zealous AIs pick this option + base = 10 + ai_value_modifier = { + ai_energy = 0.5 + ai_zeal = 1 + } + } + + stress_impact = { #Ambitious rulers of course like this, but paranoid ones are worried about offending people. + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + zealous = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + august = medium_stress_impact_loss + gallant = medium_stress_impact_loss + content = miniscule_stress_impact_gain + cynical = minor_stress_impact_gain + temperate = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + } + } + + option = { #Kindle the fire (less elaborate ceremony) + name = fp3_decision.0001.c + + + add_piety = major_piety_loss + + add_character_modifier = { + modifier = fp3_royal_fire_modifier + } + + custom_tooltip = fp3_decision.0001_vassal_and_courtier_opinion + hidden_effect = { + every_vassal = { + IF = { + limit = { + NOT = { + has_religion = religion:zoroastrianism_religion + } + OR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + faith = { has_doctrine = doctrine_pluralism_righteous } + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_strange_rituals_opinion + } + } + ELSE = { + add_opinion = { + target = root + opinion = 10 + modifier = fp3_blessed_by_fire_opinion + } + } + } + every_courtier = { + IF = { + limit = { + NOT = { + has_religion = religion:zoroastrianism_religion + } + OR = { + faith = { has_doctrine = doctrine_pluralism_fundamentalist } + faith = { has_doctrine = doctrine_pluralism_righteous } + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_strange_rituals_opinion + } + } + ELSE = { + add_opinion = { + target = root + opinion = 10 + modifier = fp3_blessed_by_fire_opinion + } + } + } + } + + ai_chance = { #more cautious AIs pick this option + base = 10 + ai_value_modifier = { + ai_rationality = 0.5 + ai_greed = 1 + } + } + + stress_impact = { #Wasteful or ambitious rulers loathe this more moderate option, but temperate and content rulers love it. + ambitious = minor_stress_impact_gain + zealous = miniscule_stress_impact_gain + august = minor_stress_impact_gain + gallant = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + content = medium_stress_impact_loss + temperate = medium_stress_impact_loss + } + } + + option = { #Skip it for now + name = fp3_decision.0001.d + + ai_chance = { #the AI generally shouldn't pick this, as it's the opting-out-option + base = 1 + } + } +} + +fp3_decision.0002 = { + type = character_event + title = fp3_decision.0002.t + desc = fp3_decision.0002.desc + + theme = death + left_portrait = { + character = scope:occupant + animation = celebrate_sword + } + right_portrait = { + character = ROOT + animation = shock + } + override_background = { reference = battlefield } + + trigger = { + + is_ai = no + has_character_modifier = fp3_royal_fire_modifier + } + + cooldown = { years = 30 } + + immediate = { + + remove_character_modifier = fp3_royal_fire_modifier + + hidden_effect = { + add_character_flag = { + flag = fire_recently_quenched + days = 1825 + } + } + + if = { + limit = { + OR = { + has_trait = ambitious + has_trait = august + has_trait = craven + has_trait = gallant + has_trait = zealous + has_trait = arrogant + has_trait = paranoid + has_trait = lunatic + } + } + add_stress = major_stress_impact_gain + } + else = { add_stress = medium_stress_impact_gain } + + + custom_tooltip = fp3_decision.0002_fire_destroyed_tt + hidden_effect = { #Now they like you less because your royal fire got quenched + every_vassal = { + if = { + limit = { + NOR = { #but these personalities stand by you no matter what, or are less superstitious + has_trait = cynical + has_trait = trusting + has_trait = forgiving + has_trait = brave + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_bad_portent_opinion + } + } + } + every_courtier = { #but these personalities stand by you no matter what, or are less superstitious + if = { + limit = { + NOR = { + has_trait = brave + has_trait = cynical + has_trait = trusting + has_trait = forgiving + } + } + add_opinion = { + target = root + opinion = -20 + modifier = fp3_bad_portent_opinion + } + } + } + } + } + + option = { #It matters not, it was merely a symbol + name = fp3_decision.0002.a + + trigger = { + OR = { + has_trait = calm + has_trait = content + has_trait = cynical + has_trait = diplomat + has_trait = temperate + has_trait = saoshyant + } + } + + add_piety = minor_piety_loss + + add_stress = medium_stress_impact_loss + } + + option = { #This atrocity must be avenged! + name = fp3_decision.0002.b + trigger = { + scope:occupant = { + NOR = { + has_relation_rival = root + has_relation_nemesis = root + } + } + } + + set_relation_nemesis = scope:occupant + } + + option = { #What am I to do now? + name = fp3_decision.0002.c + } +} + + +fp3_decision.0003 = { #This is triggered from the restore_badd_fortress_decision, and is used to apply its effects. The options gives you a nickname. + type = character_event + title = fp3_decision.0003.t + desc = { + first_valid = { + triggered_desc = { + trigger = { current_date <= 900.1.1 } #The fortress was destroyed only recently + desc = fp3_decision.0003.desc_recently + } + triggered_desc = { + trigger = { current_date <= 1000.1.1 } #The fortress was destroyed a while ago + desc = fp3_decision.0001.desc_less_recently + } + triggered_desc = { + trigger = { current_date > 1000.1.1 } #The fortress was destroyed long ago + desc = fp3_decision.0001.desc_long_ago + } + } + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_faith = faith:khurramism + has_faith = faith:urartuism + } + } + desc = fp3_decision.0003.desc_khurramite + } + triggered_desc = { + trigger = { + faith = { has_doctrine = doctrine_heretic_branch_zandik } + } + desc = fp3_decision.0003.desc_zandik + } + desc = fp3_decision.0003.desc_fallback + } + desc = fp3_decision.0003.desc_ending + } + + + theme = realm + override_background = { reference = wilderness_mountains } + + left_portrait = { + character = root + animation = personality_bold + } + + immediate = { + play_music_cue = "mx_cue_war_declared" + # Apply effects + restore_badd_fortress_scripted_effect = yes + } + + option = { #I could recuperate some costs + name = fp3_decision.0003.a + + trigger = { + has_trait = architect + } + + add_gold = 100 + + # Add a unique nickname. + give_nickname = nick_the_fortress_builder + + stress_impact = { + ambitious = minor_stress_loss + diligent = minor_stress_loss + greedy = minor_stress_loss + } + + ai_chance = { + # AI should always choose this option, if it can. + base = 100 + } + } + + option = { #What a redoubt it shall be! + name = fp3_decision.0003.b + + # Add a unique nickname. + give_nickname = nick_the_eagle_of_arasbaran + + # No stress impact necessary. + ai_chance = { + # AI should always choose this option, if it can. + base = 100 + } + } + + option = { #I need no glory, just my fortress secure + name = fp3_decision.0003.c + + # Minor stress loss for turning down the nickname. + add_stress = minor_stress_loss + + # No stress impact necessary. + ai_chance = { + # AI should, if it somehow makes it here, never opt out of the nickname. + base = 0 + } + } +} + +fp3_decision.0004 = { #This is triggered from the destroy_the_magi_decision, and is used to apply its effects. The options gives you a nickname. + + type = character_event + + title = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_faith = faith:mazdakism + has_faith = faith:zurvanism + } + } + desc = fp3_decision.0004_alternate.t + } + desc = fp3_decision.0004.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_faith = faith:mazdakism + has_faith = faith:zurvanism + } + } + desc = fp3_decision.0004_alternate_desc + } + desc = fp3_decision.0004_desc + } + } + + theme = faith + override_background = { reference = temple } + + left_portrait = { + character = root + animation = schadenfreude + } + + immediate = { + play_music_cue = "mx_cue_faith_conversion" + # Apply effects + destroy_the_magi_scripted_effect = yes + } + + #since the AI can't take this decision, AI chance is not needed here. + + option = { #Muwahaha + name = fp3_decision.0004.a + + trigger = { + OR = { + has_trait = vengeful + has_trait = arrogant + } + } + + give_nickname = nick_the_reformer + + stress_impact = { + ambitious = minor_stress_loss + arrogant = minor_stress_loss + vengeful = minor_stress_loss + sadistic = minor_stress_loss + } + } + + option = { #And may the embers turn to cold ash! + name = fp3_decision.0004.b + + trigger = { + OR = { + has_faith = faith:mazdakism + has_faith = faith:zurvanism + } + } + + give_nickname = nick_the_fire_quencher + } + + option = { #The people can handle this now + name = fp3_decision.0004.c + + trigger = { + NOR = { + has_faith = faith:mazdakism + has_faith = faith:zurvanism + } + } + + give_nickname = nick_the_firekeeper + } + + option = { #It is done! + name = fp3_decision.0004.d + + give_nickname = nick_the_heretic + } +} + +################################################## +# #Islamic Decision Events +# 0011-0012 - Avenge the Battle of Nahrawan +################################################## + +fp3_decision.0011 = { + type = character_event + title = fp3_decision.0011.t + desc = { + desc = fp3_decision.0011_opening.desc + first_valid = { + triggered_desc = { + trigger = { + faith = { + OR = { + has_doctrine = tenet_fp3_fedayeen + has_doctrine = tenet_warmonger + has_doctrine_parameter = pluralism_fundamentalist_proselytization_bonus + } + } + } + desc = fp3_decision.0011_fanatic_murderer.desc + } + desc = fp3_decision.0011_unfanatic_unmurderer.desc + } + } + + + theme = war + left_portrait = { + character = scope:avenger + animation = war_over_win + } + + override_background = { reference = battlefield } + + immediate = { + play_music_cue = "mx_cue_combat_2" + + character:33911 = { save_scope_as = ali } + character:163029 = { save_scope_as = muawiya } + } + + option = { + name = fp3_decision.0011.a + + avenge_the_battle_of_nahrawan_scripted_effect = yes + + stress_impact = { + zealous = major_stress_impact_loss + vengeful = major_stress_impact_loss + ambitious = medium_stress_impact_loss + } + } +} + +fp3_decision.0012 = { + type = character_event + title = fp3_decision.0012.t + desc = fp3_decision.0012.desc + theme = war + left_portrait = { + character = scope:avenger + animation = personality_vengeful + } + + override_background = { reference = battlefield } + + immediate = { + play_music_cue = "mx_cue_combat_3" + show_as_tooltip = { + scope:avenger = { + faith = { + change_fervor = { + value = major_fervor_gain + desc = fervor_gain_avenged_battle_of_nahrawan + } + } + } + if = { + limit = { exists = scope:sunni_faith } + scope:sunni_faith = { + change_fervor = { + value = major_fervor_loss + desc = fervor_loss_avenged_battle_of_nahrawan + } + } + } + if = { + limit = { exists = scope:shia_faith } + scope:shia_faith = { + change_fervor = { + value = major_fervor_loss + desc = fervor_loss_avenged_battle_of_nahrawan + } + } + } + } + } + + option = { + name = fp3_decision.0012.a + } + + option = { + name = fp3_decision.0012.b + + } +} + +fp3_decision.0013 = { + type = character_event + title = fp3_decision.0013.t + desc = fp3_decision.0013.desc + theme = faith + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = dismissal + } + + right_portrait = { + character = scope:hof_emissary + animation = chancellor + } + + lower_left_portrait = { character = scope:righteous_caliph } + + + immediate = { + + root.faith.religious_head = { save_scope_as = righteous_caliph } + + create_character = { #this is the head of faith's emissary + age = { 25 75 } + location = root.capital_province + faith = root.faith.religious_head.faith + gender_female_chance = root_faith_dominant_gender_female_chance #could be female, if given the right context. + trait = diplomat + template = priest_character_template + save_scope_as = hof_emissary #this saves him as a scope so we can get nice effects to bounce off him! + } + } + + option = { + name = fp3_decision.0013.a + + promote_persian_scripture_scripted_effect = yes + + if = { + limit = { + scope:righteous_caliph = { + NOR = { + has_relation_rival = root + has_relation_nemesis = root + } + } + } + scope:righteous_caliph = { + progress_towards_rival_effect = { + REASON = rival_promoting_blasphemous_translations + CHARACTER = root + OPINION = -30 + } + } + } + + stress_impact = { + zealous = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + craven = medium_stress_impact_gain + trusting = medium_stress_impact_gain + greedy = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { #most AI prefer this option, once the decision is taken + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_zeal = 1 + ai_energy = 0.5 + ai_vengefulness = 1 + ai_rationality = 0.5 + } + } + } + + option = { + name = fp3_decision.0013.b + + add_gold = 400 + add_piety = var:promote_persian_scripture_piety_refund + + custom_tooltip = promote_persian_scripture_cannot_take_decision.tt + + set_variable = { + name = pledged_to_not_promote_persian + years = 30 + } + + remove_list_global_variable = { + name = unavailable_unique_decisions + target = flag:promote_persian_scripture_decision + } + + stress_impact = { + trusting = medium_stress_impact_loss + craven = medium_stress_impact_loss + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + + ai_chance = { #but cautious AI might cave in + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_honor = 0.5 + } + } + } + + after ={ + scope:hof_emissary = { silent_disappearance_effect = yes } + } +} + +fp3_decision.0014 = { + type = character_event + title = fp3_decision.0014.t + desc = { + desc = fp3_decision.0014_opening.desc + first_valid = { + triggered_desc = { + trigger = { + exists = root.faith.religious_head + this != root.faith.religious_head + } + desc = fp3_decision.0014_there_is_caliph.desc + } + desc = fp3_decision.0014_no_caliph.desc + } + } + theme = faith + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:persian_genius_ulama + animation = chancellor + } + + immediate = { + + if = { + limit = { exists = root.faith.religious_head } + root.faith.religious_head = { save_scope_as = uncaring_caliph } + } + + create_character = { + age = { 40 75 } + location = root.capital_province + faith = root.faith + gender_female_chance = root_faith_dominant_gender_female_chance #could be female, if given the right context. + trait = shrewd + trait = theologian + trait = diligent + template = priest_character_template + save_scope_as = persian_genius_ulama #this saves him as a scope so we can get nice effects to bounce off him! + } + } + + option = { + name = fp3_decision.0014.a + + promote_persian_scripture_scripted_effect = yes + + scope:persian_genius_ulama = { move_to_pool = yes } + + ai_chance = { #most AI prefer this option, once the decision is taken + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_zeal = 1 + ai_energy = 0.5 + ai_vengefulness = 1 + ai_rationality = 0.5 + } + } + } + + option = { + name = fp3_decision.0014.b + + promote_persian_scripture_scripted_effect = yes + + pay_short_term_gold = { + gold = minor_gold_value + target = scope:persian_genius_ulama + } + + add_courtier = scope:persian_genius_ulama + + ai_chance = { #but cautious AI might cave in + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_honor = 0.5 + } + } + } +} + +################################################## +# #Islamic Decision Events +# 0015-0016 - Friday Prayer Politics +# by Ewan Cowhig Croft +################################################## + +scripted_effect fp3_decision_0015_apply_rebellious_stress_effect = { + stress_impact = { + arrogant = miniscule_stress_impact_loss + ambitious = minor_stress_impact_loss + disloyal = minor_stress_impact_loss + humble = minor_stress_impact_gain + content = medium_stress_impact_gain + loyal = major_stress_impact_gain + } +} + +scripted_effect fp3_decision_0015_apply_seditious_intent_effect = { + add_prestige = major_prestige_gain + save_scope_as = prestige_gained + reverse_add_opinion = { + target = liege + modifier = fp3_plotting_rebellion_opinion + opinion = -30 + } + # Notify the liege. + hidden_effect = { + liege = { + send_interface_toast = { + title = fp3_decision.0015.vassal_semi_rebel + left_icon = root + reverse_add_opinion = { + target = root + modifier = respect_opinion + opinion = -30 + } + } + } + } +} + +# Your name is read in the Friday Prayer +fp3_decision.0015 = { + type = character_event + title = fp3_decision.0015.t + desc = { + # Who are we switching to? + first_valid = { + # Supporter: switching to detractor. + triggered_desc = { + trigger = { has_trait = fp3_struggle_detractor } + desc = fp3_decision.0015.desc.switch.supporter_becoming_detractor + } + # Detractor: switching to supporter. + triggered_desc = { + trigger = { has_trait = fp3_struggle_supporter } + desc = fp3_decision.0015.desc.switch.detractor_becoming_supporter + } + # Neutral: switching to either. + desc = fp3_decision.0015.desc.switch.presently_neutral + } + # Do we have a liege to consider? + first_valid = { + # Yes, and we're making our alignment choice in the event. + triggered_desc = { + trigger = { + NOR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + liege ?= { + this != root + OR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + } + } + desc = fp3_decision.0015.desc.liege.presently_neutral + } + # Yes, and we'll be aligning with them. + triggered_desc = { + trigger = { + NOT = { liege ?= { this = root } } + OR = { + AND = { + has_trait = fp3_struggle_supporter + liege ?= { has_trait = fp3_struggle_supporter } + } + AND = { + has_trait = fp3_struggle_detractor + liege ?= { has_trait = fp3_struggle_detractor } + } + } + } + desc = fp3_decision.0015.desc.liege.aligning + } + # Yes, and we'll be contradicting them. + triggered_desc = { + trigger = { + NOT = { liege ?= { this = root } } + OR = { + AND = { + has_trait = fp3_struggle_supporter + liege ?= { has_trait = fp3_struggle_detractor } + } + AND = { + has_trait = fp3_struggle_detractor + liege ?= { has_trait = fp3_struggle_supporter } + } + } + } + desc = fp3_decision.0015.desc.liege.contradicting + } + # Yes, and they don't much care. + triggered_desc = { + trigger = { + liege ?= { + NOR = { + this = root + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + } + } + } + # Else no, and we need no loc. + } + } + theme = faith + left_portrait = { + character = root + animation = personality_bold + } + right_portrait = { + character = scope:right_portrait + triggered_animation = { + trigger = { + OR = { + AND = { + has_trait = fp3_struggle_supporter + scope:right_portrait = { has_trait = fp3_struggle_supporter } + } + AND = { + has_trait = fp3_struggle_detractor + scope:right_portrait = { has_trait = fp3_struggle_detractor } + } + } + } + animation = admiration + } + triggered_animation = { + trigger = { + OR = { + AND = { + has_trait = fp3_struggle_supporter + scope:right_portrait = { has_trait = fp3_struggle_detractor} + } + AND = { + has_trait = fp3_struggle_detractor + scope:right_portrait = { has_trait = fp3_struggle_supporter } + } + } + } + animation = anger + } + } + lower_center_portrait = { character = scope:lower_centre_portrait } + + + immediate = { + # Work out who goes in the righthand portrait slot. + ## Do we have a suitable liege? + if = { + limit = { + top_liege != this + liege = { + OR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + NOT = { has_title = title:d_sunni } + } + } + liege = { save_scope_as = right_portrait } + # In which case, we try to put the caliph in the bottom slot. + title:d_sunni.holder = { + if = { + limit = { + this != root.liege + } + save_scope_as = lower_centre_portrait + } + } + } + ## If we don't, it's the caliph. + else = { + title:d_sunni.holder = { save_scope_as = right_portrait } + # If we still have a liege, we put them in the bottom slot as they're mentioned in the copy — even though it's for not much caring. + if = { + limit = { top_liege != this } + liege = { save_scope_as = lower_centre_portrait } + } + } + ## If we're flipflopping, apply base logic. + if = { + limit = { + OR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + } + read_name_in_friday_prayer_scripted_effect = yes + # For ease of reference, we save a scope to avoid rechecking this constantly. + save_scope_value_as = { + name = change_type + value = flag:flipflop + } + } + ## If we're neutral, we only flag that — we'll make our actual choice in the options. + else = { + save_scope_value_as = { + name = change_type + value = flag:neutral + } + } + } + + # Neutral: become a supporter, irritate liege. + option = { + name = fp3_decision.0015.a + flavor = fp3_decision.0015.a.tt + trigger = { + scope:change_type = flag:neutral + liege ?= { + NOR = { + this = prev + this = title:d_sunni.holder + } + } + } + + # Switch traits. + read_name_in_friday_prayer_guts_become_supporter_effect = yes + # Annoy your liege. + fp3_decision_0015_apply_seditious_intent_effect = yes + # Apply the remainder effects. + read_name_in_friday_prayer_guts_apply_sundry_changes_effect = yes + read_name_in_friday_prayer_guts_apply_house_unity_changes_effect = yes + + fp3_decision_0015_apply_rebellious_stress_effect = yes + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = -1 + } + } + } + + # Neutral: become a supporter, ignore liege. + option = { + name = fp3_decision.0015.b + trigger = { scope:change_type = flag:neutral } + + # Switch traits. + read_name_in_friday_prayer_guts_become_supporter_effect = yes + # Apply the remainder effects. + read_name_in_friday_prayer_guts_apply_sundry_changes_effect = yes + read_name_in_friday_prayer_guts_apply_house_unity_changes_effect = yes + + # No extra stress on ignore. + ai_chance = { + base = 1 + ai_value_modifier = { + ai_honor = 0.5 + ai_boldness = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = 1 + } + } + } + + # Neutral: become a detractor, irritate liege. + option = { + name = fp3_decision.0015.c + flavor = fp3_decision.0015.c.tt + trigger = { + scope:change_type = flag:neutral + liege ?= { + NOR = { + this = prev + this = title:d_sunni.holder + } + } + } + + # Switch traits. + read_name_in_friday_prayer_guts_become_detractor_effect = yes + # Annoy your liege. + fp3_decision_0015_apply_seditious_intent_effect = yes + # Apply the remainder effects. + read_name_in_friday_prayer_guts_apply_sundry_changes_effect = yes + read_name_in_friday_prayer_guts_apply_house_unity_changes_effect = yes + + fp3_decision_0015_apply_rebellious_stress_effect = yes + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = -1 + } + } + } + + # Neutral: become a detractor, ignore liege. + option = { + name = fp3_decision.0015.d + trigger = { scope:change_type = flag:neutral } + + # Switch traits. + read_name_in_friday_prayer_guts_become_detractor_effect = yes + # Apply the remainder effects. + read_name_in_friday_prayer_guts_apply_sundry_changes_effect = yes + read_name_in_friday_prayer_guts_apply_house_unity_changes_effect = yes + + # No extra stress on ignore. + ai_chance = { + base = 1 + ai_value_modifier = { + ai_honor = 0.5 + ai_boldness = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = 1 + } + } + } + + # Flipflopped + irritate liege. + option = { + name = fp3_decision.0015.e + flavor = fp3_decision.0015.e.tt + trigger = { + scope:change_type = flag:flipflop + liege ?= { + NOR = { + this = prev + this = title:d_sunni.holder + } + } + } + + # Annoy your liege. + fp3_decision_0015_apply_seditious_intent_effect = yes + + fp3_decision_0015_apply_rebellious_stress_effect = yes + ai_chance = { + base = 1 + ai_value_modifier = { + ai_boldness = 1 + ai_honor = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = -1 + } + } + } + + # Flipflopped + ignore liege. + option = { + name = fp3_decision.0015.f + trigger = { scope:change_type = flag:flipflop } + + # No further effects. + + # No extra stress on ignore. + ai_chance = { + base = 1 + ai_value_modifier = { + ai_honor = 0.5 + ai_boldness = -0.25 + } + opinion_modifier = { + opinion_target = liege + multiplier = 1 + } + } + } + + after = { + # Plus this can be a catalyst. + hidden_effect = { + if = { + limit = { + is_important_or_vip_struggle_character = yes + OR = { + AND = { + any_character_struggle = { phase_has_catalyst = catalyst_became_supporter_fp3 } + has_trait = fp3_struggle_supporter + } + AND = { + any_character_struggle = { phase_has_catalyst = catalyst_became_detractor_fp3 } + has_trait = fp3_struggle_detractor + } + } + } + ## Is the character now a supporter? Move towards stabilisation. + if = { + limit = { has_trait = fp3_struggle_supporter } + every_character_struggle = { + activate_struggle_catalyst = { + catalyst = catalyst_became_supporter_fp3 + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = stabil_catalyst_became_supporter_fp3 } + } + } + ## Is the character now a detractor? Move towards unrest. + if = { + limit = { has_trait = fp3_struggle_detractor } + every_character_struggle = { + activate_struggle_catalyst = { + catalyst = catalyst_became_detractor_fp3 + character = root + } + log_debug_variable_for_persian_struggle_effect = { VAR = unrest_catalyst_became_detractor_fp3 } + } + } + } + } + } +} diff --git a/events/dlc/fp3/fp3_scholarship_events.txt b/events/dlc/fp3/fp3_scholarship_events.txt new file mode 100644 index 00000000..b68cafdd --- /dev/null +++ b/events/dlc/fp3/fp3_scholarship_events.txt @@ -0,0 +1,1918 @@ +namespace = fp3_scholarship + +# ========================= Persian Scholarship Events ========================= +# = Events that relate to sponsoring scholars and innovation in your realm = +# ============================================================================== +# = +# 0000 – 0999: Hidden decision events = +# 1000 – 1999: Scholarship events that don't need a court scholar to trigger = +# 2000 – 2999: Events that fire when you employ a court scholar = +# 8000 – 8999: Research Project events = +# 9000 – 9999: Research Project conclusion events = +# = +# ============================================================================== + +# Sponsor Persian Scholars +fp3_scholarship.0001 = { + hidden = yes + + trigger = { + exists = var:number_of_invite_scholars_countdown + } + + immediate = { + #Set up a list of provinces, one per duchy in the realm, find all relevant pool characters there + every_realm_province = { + if = { + limit = { + save_temporary_scope_as = potential_province + NOT = { + any_in_list = { + list = pool_provinces + county.duchy = scope:potential_province.county.duchy + } + } + } + add_to_temporary_list = pool_provinces + } + } + + every_in_list = { + list = pool_provinces + save_temporary_scope_as = pool_province + + every_pool_character = { + province = scope:pool_province + limit = { + learning >= 10 + has_trait = education_learning + NOT = { has_trait = intellect_bad } + } + add_to_temporary_list = potential_scholars + } + } + + #Prioritize good scholars + random_in_list = { + list = potential_scholars + limit = { is_alive = yes } + weight = { + base = 1 + modifier = { + add = { + value = learning + subtract = 12 + multiply = 5 + } + } + } + save_scope_as = scholar + } + + #If no one was found, make a new scholar + if = { + limit = { NOT = { exists = scope:scholar } } + + # Can be either anywhere from a great to mediocre scholar + + create_character = { + location = root.capital_province + age = { 20 70 } + gender_female_chance = { + if = { + limit = { + faith = { has_doctrine = doctrine_gender_male_dominated } + } + add = 0 + } + else_if = { + limit = { + faith = { has_doctrine = doctrine_gender_female_dominated } + } + add = 100 + } + else = { + add = 50 + } + } + culture = root.culture + faith = root.faith + + random_traits = yes + diplomacy = { 2 10 } + martial = { 0 8 } + stewardship = { 2 10 } + intrigue = { 2 10 } + learning = { 10 18 } + prowess = { 0 8 } + + random_traits_list = { + count = { 0 2 } + scholar = {} + theologian = {} + lifestyle_physician = {} + } + + dynasty = none + + after_creation = { + remove_any_education_traits_effect = yes + random_list = { + 10 = { add_trait = education_learning_1 } + 35 = { add_trait = education_learning_2 } + 35 = { add_trait = education_learning_3 } + 20 = { add_trait = education_learning_4 } + } + random = { + chance = 10 + add_trait = shrewd + } + random_list = { + 85 = {} + 20 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_1 + } + 10 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_2 + } + } + add_random_tiered_trait_xp_effect = { + TRAIT = lifestyle_physician + LEVEL_1 = yes + LEVEL_3 = yes + } + random = { + chance = 2 + add_trait = depressed_1 + } + random = { + chance = 2 + add_trait = reclusive + } + random = { + chance = 2 + add_trait = journaller + } + } + + save_scope_as = scholar + } + } + + #Add scholar to court + send_interface_message = { + type = event_learning_good_with_text + title = fp3_scholarship.0001.t + desc = fp3_scholarship.0001.desc + left_icon = scope:scholar + add_visiting_courtier = scope:scholar + } + + #Count down the number of extra scholars and either end the chain or resend this event + change_variable = { + name = number_of_invite_scholars_countdown + subtract = 1 + } + + if = { + limit = { var:number_of_invite_scholars_countdown = 0 } + remove_variable = number_of_invite_scholars_countdown + } + else = { + clear_saved_scope = scholar + trigger_event = { + id = fp3_scholarship.0001 + days = { 100 200 } + } + } + } +} + +########################################## +# 1000 - 1999: No Court Scholar Required # +########################################## + +# A Second Aryabhata +# Ask a neighboring Indo-Aryan ruler to send you some scholars + +scripted_trigger fp3_scholarship_1000_neighboring_ruler_is_valid = { + this != root + is_ai = yes + culture = { + OR = { + has_cultural_pillar = heritage_indo_aryan + has_cultural_pillar = heritage_dravidian + } + NOT = { has_cultural_pillar = ethos_bellicose } + } +} + +# A Second Aryabhata +# Contemplate asking a neighboring Indo-Aryan ruler for some mathematician courtiers +fp3_scholarship.1000 = { + type = character_event + title = fp3_scholarship.1000.t + desc = fp3_scholarship.1000.desc + theme = education + left_portrait = { + character = root + animation = personality_rational + } + lower_left_portrait = scope:nearby_indian_ruler + + cooldown = { years = 10 } + + trigger = { + has_fp3_dlc_trigger = yes + NOT = { employs_court_position = court_scholar_court_position } + can_employ_court_position_type = court_scholar_court_position + any_neighboring_top_liege_realm_owner = { + fp3_scholarship_1000_neighboring_ruler_is_valid = yes + } + } + + # Find an appropriate neighboring Indian ruler + immediate = { + save_scope_as = actor # Required for gift_value + random_neighboring_top_liege_realm_owner = { + limit = { + fp3_scholarship_1000_neighboring_ruler_is_valid = yes + } + save_scope_as = nearby_indian_ruler + save_scope_as = recipient # Required for gift_value + save_scope_value_as = { + name = bribe_value + value = { + value = gift_value + divide = 2 + } + } + } + } + + option = { # Ask nicely + name = fp3_scholarship.1000.a + duel = { + skill = diplomacy + target = scope:nearby_indian_ruler + 50 = { + desc = fp3_scholarship.1000.duel_success + min = 15 + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + opinion_modifier = { + who = scope:nearby_indian_ruler + opinion_target = root + multiplier = 1.5 + min = -49 + } + send_interface_toast = { + title = fp3_scholarship.1000.duel_success + left_icon = scope:nearby_indian_ruler + custom_tooltip = fp3_scholarship.1000.duel_success_tt + } + trigger_event = { + id = fp3_scholarship.1001 + days = { 7 14 } + } + hidden_effect = { + add_opinion = { + target = scope:nearby_indian_ruler + modifier = grateful_opinion + opinion = 20 + } + } + } + 50 = { + desc = fp3_scholarship.1000.duel_failure + min = 15 + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + opinion_modifier = { + who = scope:nearby_indian_ruler + opinion_target = root + multiplier = -1.5 + min = -49 + } + send_interface_toast = { + title = fp3_scholarship.1000.duel_failure + left_icon = scope:nearby_indian_ruler + reverse_add_opinion = { + target = scope:nearby_indian_ruler + modifier = fp3_disrespected_me_opinion + } + } + hidden_effect = { + add_opinion = { + target = scope:nearby_indian_ruler + modifier = disappointed_opinion + opinion = -10 + } + } + } + } + stress_impact = { + paranoid = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + scholar = minor_stress_impact_loss + } + ai_chance = { + base = 10 #We don't want too many Indian mathematicians in Persia from this event + modifier = { + factor = 5 + has_trait = scholar + } + } + } + + option = { # Offer some gold + name = fp3_scholarship.1000.b + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + remove_short_term_gold = scope:bribe_value + custom_tooltip = fp3_scholarship.1000.duel_success_tt + reverse_add_opinion = { + target = scope:nearby_indian_ruler + modifier = grateful_opinion + opinion = 20 + } + trigger_event = { + id = fp3_scholarship.1001 + days = { 7 14 } + } + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + scholar = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + has_trait = greedy + } + } + } + + option = { # Focus on improving local mathematics + name = fp3_scholarship.1000.c + remove_treasury_or_gold = medium_treasury_or_gold_value + custom_tooltip = fp3_scholarship.1000.native_tt + add_character_modifier = { + modifier = fp3_promoted_persian_mathematics_modifier + years = 10 + } + hidden_effect = { + create_character = { + location = root.capital_province + template = scholar_character + save_scope_as = mathematician + } + + send_interface_message = { + type = event_learning_good_with_text + title = fp3_scholarship.1001.t + desc = fp3_scholarship.1001.native.desc + left_icon = scope:mathematician + add_courtier = scope:mathematician + } + } + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + scholar = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + factor = 0 + has_trait = greedy + } + } + } + option = { # Complete Opt Out + name = fp3_scholarship.1000.d + stress_impact = { + scholar = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} + +scripted_effect fp3_scholarship_1001_create_indian_mathematician_effect = { + create_character = { + location = root.capital_province + age = { 20 70 } + gender_female_chance = { + if = { + limit = { + scope:nearby_indian_ruler.faith = { has_doctrine = doctrine_gender_male_dominated } + } + add = 0 + } + else_if = { + limit = { + scope:nearby_indian_ruler.faith = { has_doctrine = doctrine_gender_female_dominated } + } + add = 100 + } + else = { + add = 50 + } + } + culture = scope:nearby_indian_ruler.culture + faith = scope:nearby_indian_ruler.faith + + random_traits_list = { + count = 3 + chaste = {} + content = {} + ambitious = {} + diligent = {} + stubborn = {} + forgiving = {} + shy = {} + just = {} + patient = {} + cynical = {} + craven = {} + } + random_traits = no + diplomacy = { 2 10 } + martial = { 0 8 } + stewardship = { 2 10 } + intrigue = { 0 8 } + learning = { 8 14 } + prowess = { 0 8 } + + dynasty = none + + after_creation = { + remove_any_education_traits_effect = yes + random_list = { + 10 = { add_trait = education_learning_2 } + 30 = { add_trait = education_learning_3 } + 10 = { add_trait = education_learning_4 } + } + random = { + chance = 25 + add_trait = scholar + } + random = { + chance = 10 + add_trait = shrewd + } + random_list = { + 85 = {} + 20 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_1 + } + 10 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_2 + } + } + random = { + chance = 2 + add_trait = depressed_1 + } + random = { + chance = 2 + add_trait = reclusive + } + random = { + chance = 5 + add_trait = hashishiyah + } + random = { + chance = 2 + add_trait = journaller + } + } + + save_temporary_scope_as = mathematician + } + send_interface_message = { + type = event_learning_good_with_text + title = fp3_scholarship.1001.t + desc = fp3_scholarship.1001.desc + left_icon = scope:mathematician + add_courtier = scope:mathematician + } +} + +# 1-2 mathematician Indo-Aryan courtiers arrive +fp3_scholarship.1001 = { + hidden = yes + + trigger = { + exists = scope:nearby_indian_ruler # Sanity check + } + + immediate = { + fp3_scholarship_1001_create_indian_mathematician_effect = yes + fp3_scholarship_1001_create_indian_mathematician_effect = yes + } +} + +scripted_trigger fp3_scholarship_1010_is_valid_magus_county = { + county.holder = { #Holder must be ROOT or a direct vassal of ROOT in order for root to grant protection + OR = { + this = root + liege ?= root + } + } + faith = { + religion_tag = zoroastrianism_religion + faith_hostility_level = { + target = root.faith + value > faith_astray_level + } + } + # Don't target repeat counties + NOT = { has_variable = cannot_be_converted_by_value } +} + +# The Lone Magus +# You encounter an extant fire temple. Do you ignore it, destroy it, or recruit the Magus? +#Travel Event +fp3_scholarship.1010 = { + type = character_event + title = fp3_scholarship.1010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + # Consider the zoroastrian faith "dying" if it has no religious head of faith + NOT = { exists = scope:magus_faith.religious_head } + } + desc = fp3_scholarship.1010.desc_dying_faith + } + desc = fp3_scholarship.1010.desc_living_faith + } + } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:magus + animation = beg + } + theme = travel + override_background = { + reference = fp3_zoroastrian_temple + } + + cooldown = { years = 10 } + + trigger = { + has_fp3_dlc_trigger = yes + NOT = { employs_court_position = court_scholar_court_position } + can_employ_court_position_type = court_scholar_court_position + faith = { + NOT = { religion_tag = zoroastrianism_religion } + } + location = { fp3_scholarship_1010_is_valid_magus_county = yes } + NOT = { + has_character_modifier = fp3_denied_religious_protection_modifier + } + } + + immediate = { + # Grab scopes for the event + location = { + save_scope_as = magus_location + county = { save_scope_as = magus_county } + faith = { save_scope_as = magus_faith } + } + create_character = { + location = scope:magus_location + age = { 30 70 } + gender_female_chance = { + if = { + limit = { + scope:magus_faith = { has_doctrine = doctrine_clerical_gender_male_only } + } + add = 0 + } + else_if = { + limit = { + scope:magus_faith = { has_doctrine = doctrine_clerical_gender_female_only } + } + add = 100 + } + else = { + add = 50 + } + } + culture = scope:magus_county.culture + faith = scope:magus_county.faith + + trait = brave + trait = devoted + random_traits_list = { + count = 2 + zealous = {} + chaste = {} + diligent = {} + stubborn = {} + just = {} + patient = {} + impatient = {} + honest = {} + temperate = {} + humble = {} + calm = {} + wrathful = {} + forgiving = {} + } + random_traits = no + diplomacy = { 2 10 } + martial = { 0 8 } + stewardship = { 2 10 } + intrigue = { 0 8 } + learning = { 10 16 } + prowess = { 0 8 } + + dynasty = none + + after_creation = { + remove_any_education_traits_effect = yes + random_list = { + 5 = { add_trait = education_learning_2 } + 30 = { add_trait = education_learning_3 } + 15 = { add_trait = education_learning_4 } + } + random = { + chance = 15 + add_trait = scholar + } + random = { + chance = 60 + add_trait = theologian + } + random = { + chance = 10 + add_trait = shrewd + } + random_list = { + 85 = {} + 20 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_1 + } + 10 = { + trigger = { + NOR = { + has_trait = intellect_good_1 + has_trait = intellect_good_2 + has_trait = intellect_good_3 + } + } + add_trait = intellect_good_2 + } + } + random = { + chance = 5 + add_trait = depressed_1 + } + random = { + chance = 90 + add_trait = celibate + } + random = { + chance = 25 + add_trait = infertile + } + random = { + chance = 2 + add_trait = contrite + } + random = { + chance = 5 + add_trait = reclusive + } + } + + save_scope_as = magus + } + } + option = { # Deny the request + name = fp3_scholarship.1010.a + add_character_modifier = { + modifier = fp3_denied_religious_protection_modifier + years = 10 + } + scope:magus = { + death = { + death_reason = death_execution + killer = root + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + just = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + generous = minor_stress_impact_gain + zealous = minor_stress_impact_loss + callous = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0.25 + has_trait = just + } + modifier = { + factor = 0 + has_trait = compassionate + } + } + } + + option = { # Gain the magus as a courtier + name = fp3_scholarship.1010.b + trigger = { + is_ai = no + } + add_courtier = scope:magus + custom_tooltip = fp3_scholarship.1010.b.tt + scope:magus_county = { + set_variable = { + name = cannot_be_converted_by_value + value = root + years = 20 + } + } + scope:magus = { + set_variable = { + name = cannot_be_converted_by_value + value = root + years = 100 + } + add_character_flag = { + flag = blocked_from_leaving + years = 10 + } + } + stress_impact = { + zealous = medium_stress_impact_gain + callous = minor_stress_impact_gain + forgiving = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + } + } + + option = { # Just Leave + name = fp3_scholarship.1010.c + add_piety = minor_piety_loss + scope:magus = { + silent_disappearance_effect = yes + } + ai_chance = { + base = 100 + } + } +} + +######################################## +# 2000 - 2999: Court Scholar Required # +######################################## + +# Worth Its Weight +# Requisition paper for your court scholar? +fp3_scholarship.2000 = { + type = character_event + title = fp3_scholarship.2000.t + desc = fp3_scholarship.2000.desc + theme = education + left_portrait = { + character = scope:court_scholar + animation = reading + } + + cooldown = { years = 5 } + + trigger = { + # Don't give the court scholar multiple paper surpluses + any_court_position_holder = { + type = court_scholar_court_position + NOT = { has_character_modifier = fp3_paper_surplus_modifier } + } + # Paper should be abundant by the late medieval era + culture = { NOT = { has_cultural_era_or_later = culture_era_late_medieval } } + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + save_scope_as = court_scholar + } + } + + option = { # Requisition the paper + name = fp3_scholarship.2000.a + capital_county = { + change_county_control = -25 + } + scope:court_scholar = { + add_character_modifier = { + modifier = fp3_paper_surplus_modifier + years = 10 + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 10 + } + } + stress_impact = { + just = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + } + ai_chance = { + base = 0 + } + } + + option = { # Import the Paper + name = fp3_scholarship.2000.b + remove_treasury_or_gold = medium_treasury_or_gold_value + scope:court_scholar = { + add_character_modifier = { + modifier = fp3_paper_surplus_modifier + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_greed = -1 + } + } + } + + option = { # We cannot afford it + name = fp3_scholarship.2000.c + scope:court_scholar = { + add_character_modifier = { + modifier = fp3_paper_shortage_modifier + years = 10 + } + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + stress_impact = { + diligent = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -0.5 + } + } + } +} + +# Liquid Wisdom +# Your court scholar is drinking with a foreign scholar, do you stop them in the name of piety? +fp3_scholarship.2010 = { + type = character_event + title = fp3_scholarship.2010.t + desc = fp3_scholarship.2010.desc + theme = education + override_background = { + reference = tavern + } + left_portrait = { + character = scope:court_scholar + animation = thinking + } + right_portrait = { + character = scope:foreign_scholar + animation = toast + } + + cooldown = { years = 10 } + + trigger = { + faith = { trait_is_sin = drunkard } + any_court_position_holder = { + type = court_scholar_court_position + NOT = { has_trait = zealous } + } + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + save_scope_as = court_scholar + } + # Find a random faraway county to pull a character from + random_county_in_region = { + region = world_india + limit = { + faith = { + NOT = { trait_is_sin = drunkard } + } + } + save_scope_as = foreign_county + } + create_character = { + age = { 35 50 } + random_traits_list = { + count = 1 + education_learning_2 = {} + education_learning_3 = {} + education_learning_4 = {} + } + random_traits = yes + location = root.capital_province + faith = scope:foreign_county.faith + culture = scope:foreign_county.culture + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + learning = { + min_template_high_skill + max_template_high_skill + } + save_scope_as = foreign_scholar + } + } + + option = { # Stop court scholar + name = fp3_scholarship.2010.a + add_piety = minor_piety_gain + reverse_add_opinion = { + target = scope:court_scholar + modifier = fp3_killjoy_opinion + opinion = -15 + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + option = { # Let them continue drinking + name = fp3_scholarship.2010.b + add_piety = minor_piety_loss + random = { + chance = 50 + scope:court_scholar = { + add_learning_skill = 1 + } + } + scope:court_scholar = { + add_character_modifier = { + modifier = fp3_liquid_wisdom_modifier + years = 5 + } + } + stress_impact = { + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_zeal = -1 + } + } + } + + after = { + scope:foreign_scholar = { silent_disappearance_effect = yes } + } +} + +# Morbid Insights +# Give a prisoner to your court scholar to experiment on? +fp3_scholarship.2020 = { + type = character_event + title = fp3_scholarship.2020.t + desc = fp3_scholarship.2020.desc + theme = prison + left_portrait = { + character = scope:court_scholar + animation = thinking + } + right_portrait = { + character = scope:specimen + animation = fear + } + + cooldown = { years = 10 } + + trigger = { + any_prisoner = { + is_adult = yes + } + any_court_position_holder = { + type = court_scholar_court_position + ai_compassion < very_high_positive_ai_value # A compassionate person would not endanger another's life + } + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + save_scope_as = court_scholar + assign_quirk_effect = yes + } + random_prisoner = { + limit = { is_adult = yes } + # Try to pull an important person; this event is more interesting if the prisoner isn't Guy McNobody + weight = { + base = 1 + modifier = { + exists = dynasty + add = dynasty.dynasty_prestige_level + } + } + save_scope_as = specimen + } + } + + option = { # Allow the experimentation + name = fp3_scholarship.2020.a + random_list = { # 40% chance of prisoner death + 3 = { add_learning_skill = 2 } + 2 = { + scope:specimen = { + death = { + death_reason = death_treatment + killer = scope:court_scholar + } + } + } + } + scope:court_scholar = { + add_character_modifier = { + modifier = fp3_morbid_insights_modifier + years = 20 + } + } + stress_impact = { + compassionate = major_stress_impact_gain + sadistic = minor_stress_impact_loss + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + NOT = { has_execute_reason = scope:specimen } + ai_honor >= high_positive_ai_value + add = -50 + } + } + } + + option = { # Forbid experimentation + name = fp3_scholarship.2020.b + reverse_add_opinion = { + target = scope:court_scholar + modifier = disappointed_opinion + opinion = -15 + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 1 + } + } + } +} + +#Treatice Published (Your Scholar is levelling up) +#By Henrik Lohmander +fp3_scholarship.2030 = { + type = character_event + title = fp3_scholarship.2030.t + desc = fp3_scholarship.2030.desc + theme = education + left_portrait = { + character = scope:court_scholar + animation = reading + } + override_background = { + reference = bp2_study_indian + } + + cooldown = { years = 10 } #This will keep happening with regular intervals once the cooldown is over, if you keep a scholar on for long enough they will be increasingly learned + + trigger = { + any_court_position_holder = { + type = court_scholar_court_position + is_available_healthy_adult = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + any_realm_province = { + is_higher_studies_location = yes + } + } + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + save_scope_as = court_scholar + } + random_list = { + 33 = { + trigger = { + scope:court_scholar = { + NOT = { has_trait = scholar } + learning > 15 + } + } + save_scope_value_as = { + name = personal_development_time + value = flag:scholar_trait + } + } + 33 = { + trigger = { + scope:court_scholar = { + NOT = { has_trait = theologian } + learning > 20 + } + } + save_scope_value_as = { + name = personal_development_time + value = flag:theologian_trait + } + } + 33 = { + save_scope_value_as = { + name = personal_development_time + value = flag:learning + } + } + 33 = { + trigger = { + any_realm_province = { + is_higher_studies_location = yes + } + scope:court_scholar = { + has_education_learning_trigger = yes + NOT = { has_trait = education_learning_5 } + } + } + save_scope_value_as = { + name = personal_development_time + value = flag:learning_education + } + } + } + } + + option = { + name = fp3_scholarship.2030.a + switch = { + trigger = scope:personal_development_time + flag:learning = { + scope:court_scholar = { + add_learning_skill = 2 + } + } + flag:theologian_trait = { + scope:court_scholar = { + add_trait = theologian + } + } + flag:scholar_trait = { + scope:court_scholar = { + add_trait = scholar + } + } + flag:learning_education = { + custom_tooltip = fp3_scholarship.2030.tt + scope:court_scholar = { + switch = { + trigger = has_trait + education_learning_1 = { + remove_trait = education_learning_1 + add_trait_force_tooltip = education_learning_2 + } + education_learning_2 = { + remove_trait = education_learning_2 + add_trait_force_tooltip = education_learning_3 + } + education_learning_3 = { + remove_trait = education_learning_3 + add_trait_force_tooltip = education_learning_4 + } + education_learning_4 = { + remove_trait = education_learning_4 + add_trait_force_tooltip = education_learning_5 + } + } + } + } + } + } +} + +################################## +# 8000 - 8999: Innovation Events # +################################## + +# Determines whether the research project was a success or failure, given $SUCCESS_CHANCE$ +scripted_effect fp3_research_completion_effect = { + # For loc + if = { + limit = { NOT = { exists = scope:court_scholar } } + random_court_position_holder = { + type = court_scholar_court_position + save_scope_as = court_scholar + } + } + random_list = { + 65 = { # Failure + modifier = { + add = { + value = 0 + subtract = $SUCCESS_CHANCE$ + } + } + custom_tooltip = fp3_scholarship.8999.tt_failure + trigger_event = fp3_scholarship.9000 + } + 34 = { # Regular Success + modifier = { + add = { + value = $SUCCESS_CHANCE$ + multiply = 0.75 + } + } + custom_tooltip = fp3_scholarship.8999.tt_success + trigger_event = fp3_scholarship.9100 + } + 1 = { # Critical Success: Unlock Innovation + trigger = { + trigger_if = { + limit = { + NOT = { culture = { has_innovation = fp3_innovation_mural_sextant } } + } + culture = { has_cultural_era_or_later = culture_era_early_medieval } + } + trigger_if = { + limit = { + NOT = { culture = { has_innovation = fp3_innovation_fritware } } + } + culture = { has_cultural_era_or_later = culture_era_late_medieval } + } + } + modifier = { + add = { + value = $SUCCESS_CHANCE$ + multiply = 0.25 + } + } + custom_tooltip = fp3_scholarship.8999.tt_crit_success + trigger_event = fp3_scholarship.9200 + } + } +} + +scripted_effect add_research_cooldown_effect = { + add_character_flag = { + flag = fund_research_inspiration_event_cooldown + days = { 30 60 } + } +} + +scripted_trigger has_no_research_event_cooldown = { + NOT = { has_character_flag = fund_research_inspiration_event_cooldown } +} + +# Scholar announces initial plans to begin a research project +fp3_scholarship.8000 = { + type = character_event + title = fp3_scholarship.8000.t + desc = fp3_scholarship.8000.desc + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:court_scholar + animation = reading + } + theme = education + override_background = { + reference = bp2_university + } + + cooldown = { + years = 5 + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + limit = { + exists = inspiration + is_available_healthy_adult = yes + } + save_scope_as = court_scholar + } + } + + option = { + name = fp3_scholarship.8000.a + } +} + +# Scholar wants to begin an alchemy inspiration +fp3_scholarship.8500 = { + type = character_event + title = fp3_scholarship.8500.t + desc = fp3_scholarship.8500.desc + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:court_scholar + animation = reading + } + theme = education + override_background = { + reference = bp2_university + } + + cooldown = { + years = 5 + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + limit = { + NOT = { exists = inspiration } + is_available_healthy_adult = yes + } + save_scope_as = court_scholar + } + scope:court_scholar = { + save_scope_as = recipient + } + save_scope_as = actor + } + + trigger = { + has_fp3_dlc_trigger = yes + has_royal_court = yes #Yes, for this you need both fp3 and Royal Court + any_court_position_holder = { + type = court_scholar_court_position + NOT = { exists = inspiration } + is_available_healthy_adult = yes + has_completed_inspiration = no + learning > 20 + } + } + + option = { + name = fp3_scholarship.8000.a + remove_short_term_gold = fp3_research_base_cost + custom_tooltip = fp3_scholarship.8500.a.tt + hidden_effect = { + scope:court_scholar = { + create_inspiration = alchemy_inspiration + fund_inspiration_effect = yes + } + } + } + + option = { + name = fp3_scholarship.8000.b + add_prestige = minor_prestige_loss + reverse_add_opinion = { + target = scope:court_scholar + modifier = disappointed_opinion + opinion = -10 + } + } +} + +# Scholar wants to begin a book inspiration +fp3_scholarship.8600 = { + type = character_event + title = fp3_scholarship.8600.t + desc = fp3_scholarship.8600.desc + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:court_scholar + animation = throne_room_writer + } + theme = education + override_background = { + reference = study + } + + trigger = { + has_fp3_dlc_trigger = yes + has_royal_court = yes #Yes, for this you need both fp3 and Royal Court + any_court_position_holder = { + type = court_scholar_court_position + NOT = { exists = inspiration } + has_completed_inspiration = no + is_available_healthy_adult = yes + learning > 20 + } + } + + cooldown = { + years = 5 + } + + immediate = { + random_court_position_holder = { + type = court_scholar_court_position + limit = { + NOT = { exists = inspiration } + is_available_healthy_adult = yes + } + save_scope_as = court_scholar + } + scope:court_scholar = { + save_scope_as = recipient + } + save_scope_as = actor + } + + option = { + name = fp3_scholarship.8000.a + show_as_tooltip = { remove_short_term_gold = medium_gold_value } # gold is removed by sponsor_inspiration effect (inside fund_inspiration_effect) + custom_tooltip = fp3_scholarship.8600.a.tt + hidden_effect = { + scope:court_scholar = { + create_inspiration = { + type = book_inspiration + gold = root.medium_gold_value + } + fund_inspiration_effect = yes + } + } + } + + option = { + name = fp3_scholarship.8000.b + add_prestige = minor_prestige_loss + reverse_add_opinion = { + target = scope:court_scholar + modifier = disappointed_opinion + opinion = -10 + } + } +} + +# Scholar asks for more texts +fp3_scholarship.8100 = { + type = character_event + title = fp3_scholarship.8100.t + desc = fp3_scholarship.8100.desc + theme = education + left_portrait = scope:inspiration_owner + + cooldown = { years = 2 } + + trigger = { + exists = scope:inspiration + scope:inspiration_owner = { + is_available_ai_adult = yes + has_no_research_event_cooldown = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 0.5 + scope:inspiration_owner = { + ai_energy >= medium_positive_ai_value + } + } + } + + immediate = { + scope:inspiration_owner = { + add_research_cooldown_effect = yes + } + } + + option = { # Furnish the library + name = fp3_scholarship.8100.a + if = { + limit = { exists = scope:inspiration } + scope:inspiration = { + invest_gold = 50 + } + } + scope:inspiration_owner = { + change_artifact_quality_effect = { AMOUNT = 6 } + } + stress_impact = { + arrogant = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + add = -50 + short_term_gold < 50 + } + } + } + + option = { # The library is fine as-is + name = fp3_scholarship.8100.b + scope:inspiration_owner = { + change_artifact_quality_effect = { AMOUNT = -2 } + add_opinion = { + target = root + modifier = refusal_opinion + opinion = -10 + } + } + stress_impact = { + arrogant = minor_stress_impact_loss + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = 0.75 + } + } + } +} + +# Roll for project outcome +fp3_scholarship.8999 = { + hidden = yes + + # Roll for success + immediate = { + if = { + limit = { exists = scope:inspiration_owner } + scope:inspiration_owner = { + if = { + limit = { has_variable = research_success_chance } + scope:inspiration_sponsor = { + fp3_research_completion_effect = { SUCCESS_CHANCE = prev.var:research_success_chance } + } + } + } + } + } + } + +# Research project was a failure +fp3_scholarship.9000 = { + type = character_event + title = fp3_scholarship.9000.t + desc = fp3_scholarship.9000.desc + theme = education + left_portrait = { + character = scope:inspiration_owner + animation = worry + } + + immediate = { + scope:inspiration_owner = { + add_character_flag = { + flag = research_invalidated + days = 1 + } + } + } + + option = { # These things happen + name = fp3_scholarship.9000.a + add_prestige = minor_prestige_loss + } +} + +# Research project minor success +scripted_effect fp3_scholarship_9100_reward_effect = { + house = { + add_house_modifier = { + modifier = $MODIFIER$ + years = 30 + } + } +} + +fp3_scholarship.9100 = { + type = character_event + title = fp3_scholarship.9100.t + desc = fp3_scholarship.9100.desc + theme = education + left_portrait = { + character = scope:inspiration_owner + animation = personality_honorable + } + + immediate = { + hidden_effect = { + random_list = { + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = civil_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_development_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_development_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = civil_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_building_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_building_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = civil_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_control_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_control_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = civil_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_mathematics_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_mathematics_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = civil_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_taxation_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_taxation_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = military_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_light_warfare_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_light_warfare_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = military_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_heavy_warfare_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_heavy_warfare_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = military_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_cavalry_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_cavalry_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = military_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_siege_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_siege_modifier + } + } + 30 = { + trigger = { + scope:inspiration_owner = { has_character_flag = military_research } + house = { + NOT = { has_house_modifier = fp3_treatise_on_strategy_modifier } + } + } + save_scope_value_as = { + name = researched_house_modifier + value = flag:fp3_treatise_on_strategy_modifier + } + } + 1 = { + save_scope_value_as = { + name = researched_house_modifier + value = flag:prestige + } + } + } + } + } + + option = { + name = fp3_scholarship.9100.a + ai_chance = { + base = 100 + } + switch = { + trigger = scope:researched_house_modifier + flag:fp3_treatise_on_development_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_development_modifier } + } + flag:fp3_treatise_on_building_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_building_modifier } + } + flag:fp3_treatise_on_control_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_control_modifier } + } + flag:fp3_treatise_on_mathematics_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_mathematics_modifier } + } + flag:fp3_treatise_on_taxation_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_taxation_modifier } + } + flag:fp3_treatise_on_light_warfare_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_light_warfare_modifier } + } + flag:fp3_treatise_on_heavy_warfare_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_heavy_warfare_modifier } + } + flag:fp3_treatise_on_cavalry_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_cavalry_modifier } + } + flag:fp3_treatise_on_siege_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_siege_modifier } + } + flag:fp3_treatise_on_strategy_modifier = { + fp3_scholarship_9100_reward_effect = { MODIFIER = fp3_treatise_on_strategy_modifier } + } + flag:prestige = { + custom_tooltip = patron_of_the_sciences + add_prestige = massive_prestige_value + } + } + } +} + +# Research project critical success! New innovation discovered +fp3_scholarship.9200 = { + type = character_event + title = fp3_scholarship.9200.t + desc = fp3_scholarship.9200.desc + theme = education + left_portrait = { + character = scope:inspiration_owner + animation = happiness + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + hidden_effect = { + random_list = { + 30 = { + trigger = { + culture = { + NOT = { has_innovation = fp3_innovation_mural_sextant } + has_cultural_era_or_later = culture_era_early_medieval + } + } + save_scope_value_as = { + name = research_cultural_innovation + value = flag:fp3_innovation_mural_sextant + } + } + 30 = { + trigger = { + culture = { + NOT = { has_innovation = fp3_innovation_fritware } + has_cultural_era_or_later = culture_era_late_medieval + } + } + save_scope_value_as = { + name = research_cultural_innovation + value = flag:fp3_innovation_fritware + } + } + } + } + } + + option = { + name = fp3_scholarship.9200.a + switch = { + trigger = scope:research_cultural_innovation + flag:fp3_innovation_mural_sextant = { + culture = { add_innovation = fp3_innovation_mural_sextant } + } + flag:fp3_innovation_fritware = { + culture = { add_innovation = fp3_innovation_fritware } + } + } + } +} diff --git a/events/dlc/fp3/fp3_story_cycle_seljuks_invasion_events.txt b/events/dlc/fp3/fp3_story_cycle_seljuks_invasion_events.txt new file mode 100644 index 00000000..858b4511 --- /dev/null +++ b/events/dlc/fp3/fp3_story_cycle_seljuks_invasion_events.txt @@ -0,0 +1,153 @@ +namespace = fp3_story_cycle_seljuks_invasion_events + +### RISE OF THE SELJUKS ############################################# +## 0001 Leader and Story Cycle Creation by Maxence Voleau +## 0002 The First Settlers by Hugo Cortell +##################################################################### + +################################### +# Setup: we create the leader and start the story cycle +# By Maxence Voleau +################################### +fp3_story_cycle_seljuks_invasion_events.0001 = { + scope = none + hidden = yes + + immediate = { + spawn_seljuk_character_effect = yes + scope:lead_seljuk = { + create_story = story_seljuk_invasion + } + } +} + +################################### +# The First Settlers +# By Hugo Cortell +################################### +fp3_story_cycle_seljuks_invasion_events.0002 = { + type = character_event + title = fp3_story_cycle_seljuks_invasion_events.0001.t + desc = { + desc = fp3_story_cycle_seljuks_invasion_events.0001.desc + first_valid = { + triggered_desc = { + trigger = { highest_held_title_tier > tier_duchy } + desc = fp3_story_cycle_seljuks_invasion_events.0001.desc_vassal + } + desc = fp3_story_cycle_seljuks_invasion_events.0001.desc_independent + } + } + theme = realm + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:lead_seljuk + animation = personality_honorable + } + + immediate = { + save_scope_as = seljuk_victim + random_sub_realm_county = { + limit = { + any_neighboring_county = { + exists = holder + holder.top_liege != scope:seljuk_victim + } + de_jure_liege = scope:fp3_seljuk_settle_target + } + alternative_limit = { + any_neighboring_county = { + exists = holder + holder.top_liege != scope:seljuk_victim + } + any_neighboring_county = { de_jure_liege = scope:fp3_seljuk_settle_target } + } + alternative_limit = { + any_neighboring_county = { + exists = holder + holder.top_liege != scope:seljuk_victim + } + } + random_county_province = { + limit = { + this != scope:fp3_seljuk_settle_target.title_capital_county.title_province + } + save_scope_as = spawn_location + } + } + save_scope_value_as = { + name = victim_strength_modifier + value = { + value = current_military_strength + divide = 10000 + add = 1.25 + } + } + scope:lead_seljuk = { + #move to the army spawn location, so it's less confusing when you want to see where they are + set_location = scope:spawn_location + var:seljuk_birthplace = { save_scope_as = seljuk_birthplace } + } + } + + option = { # Yes - Serve me well! + name = fp3_story_cycle_seljuks_invasion_events.0001.a_liege + + fp3_story_cycle_seljuks_invasion_events_grant_seljuks_land_effect = yes + scope:lead_seljuk = { + add_trait = loyal + culture = { + change_cultural_acceptance = { + target = scope:seljuk_victim.culture + value = 30 + desc = STEWARD_PROMOTE_CULTURE_ALLOWED_NOMAD_SETTLEMENT + } + } + } + create_seljuk_army_at_peace_effect = yes + debug_log = "Seljuk got the land and were vassalized" + ai_chance = { + base = 50 + + ai_value_modifier = { + ai_boldness = -0.5 + ai_compassion = 0.2 + ai_greed = -0.5 + ai_energy = -0.5 + ai_rationality = 0.3 + ai_sociability = 0.3 + } + } + } + + option = { # No - To war with you! + name = fp3_story_cycle_seljuks_invasion_events.0001.b + + # Start war + scope:lead_seljuk = { + start_war = { + casus_belli = fp3_seljuk_invasion_cb + target = root + target_title = scope:fp3_seljuk_settle_target + } + random_character_war = { save_scope_as = war } + } + + create_seljuk_army_effect = yes + debug_log = "Seljuk have to win a war" + ai_chance = { + base = 50 + + ai_value_modifier = { + ai_boldness = 0.5 + ai_greed = 0.5 + ai_energy = 0.5 + ai_vengefulness = 0.5 + } + } + } +} diff --git a/events/dlc/fp3/fp3_story_cycle_zanj_rebellion_events.txt b/events/dlc/fp3/fp3_story_cycle_zanj_rebellion_events.txt new file mode 100644 index 00000000..335509e4 --- /dev/null +++ b/events/dlc/fp3/fp3_story_cycle_zanj_rebellion_events.txt @@ -0,0 +1,726 @@ +namespace = fp3_story_cycle_zanj_rebellion_events + +### Ali Ibn Muhammad and Zanj Rebellion Setup +fp3_story_cycle_zanj_rebellion_events.0001 = { + scope = none + hidden = yes + + immediate = { + spawn_zanj_leader_character_effect = yes + scope:zanj_leader = { + save_scope_as = story_owner + create_story = story_zanj_rebellion + give_nickname = nick_albaghid + } + + title:c_basra.holder = { + add_visiting_courtier = scope:zanj_leader + } + title:c_basra.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0002 + } + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0005 + days = { 60 120 } + } + } + } +} + +### Ali Ibn Muhammad riling up locals in Basra +fp3_story_cycle_zanj_rebellion_events.0002 = { + type = character_event + theme = intrigue + override_background = { reference = wilderness_wetlands } + title = fp3_story_cycle_zanj_rebellion_events.0002.t + desc = fp3_story_cycle_zanj_rebellion_events.0002.desc + + left_portrait = { + character = root + animation = marshal + } + right_portrait = { + character = scope:zanj_leader + animation = scheme + } + + immediate = { + scope:zanj_leader = { + save_scope_as = outspoken_rebel + } + } + + #Try to arrest Ali + option = { + name = fp3_story_cycle_zanj_rebellion_events.0002.a + duel = { + skill = intrigue + target = scope:outspoken_rebel + 50 = { + # You arrest Ali Ibn Muhammad + desc = fp3_story_cycle_zanj_rebellion_events.0002.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + title = fp3_story_cycle_zanj_rebellion_events.0002.a.success + left_icon = root + right_icon = scope:outspoken_rebel + rightfully_imprison_character_effect = { + TARGET = scope:outspoken_rebel + IMPRISONER = root + } + } + inherit_zanj_rebellion_effect = yes + } + 50 = { + # Ali Ibn Muhammad escapes + desc = fp3_story_cycle_zanj_rebellion_events.0002.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + title = fp3_story_cycle_zanj_rebellion_events.0002.a.failure + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_greatly_strengthened_tt + custom_tooltip = fp3_story_cycle_zanj_rebellion_leaves_for_baghdad + left_icon = root + right_icon = scope:outspoken_rebel + } + hidden_effect = { + scope:zanj_leader = { + change_variable = { + name = zanj_rebellion_strength_score + add = 4 + } + } + title:c_baghdad.holder = { + hidden_effect = { + title:c_baghdad.holder = { + add_visiting_courtier = scope:outspoken_rebel + } + } + } + title:c_basra.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0003 + days = { 30 60 } + } + } + } + } + } + root = { + progress_towards_rival_effect = { + REASON = fp3_zanj_rebellion_opressed_me + CHARACTER = scope:outspoken_rebel + OPINION = default_rival_opinion + } + } + stress_impact = { + paranoid = medium_stress_impact_loss + just = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + trusting = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = trusting + has_trait = forgiving + has_trait = compassionate + } + } + } + } + + #Ignore Ali + option = { + name = fp3_story_cycle_zanj_rebellion_events.0002.c + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_strengthened_tt + scope:zanj_leader = { + change_variable = { + name = zanj_rebellion_strength_score + add = 2 + } + } + custom_tooltip = fp3_story_cycle_zanj_rebellion_leaves_for_baghdad + hidden_effect = { + title:c_baghdad.holder = { + add_visiting_courtier = scope:outspoken_rebel + } + } + title:c_basra.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0003 + days = { 30 60 } + } + } + stress_impact = { + paranoid = medium_stress_impact_gain + just = minor_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = medium_stress_impact_gain + trusting = medium_stress_impact_loss + forgiving = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = paranoid + has_trait = just + has_trait = callous + has_trait = sadistic + } + } + } + } +} + +### Setup to find correct scope for event 0004 and check if Ali is dead or imprisoned +fp3_story_cycle_zanj_rebellion_events.0003 = { + scope = none + hidden = yes + + immediate = { + if ={ + #check if Ali is still alive and not in prison and is not an inheritor of the rebellion + limit = { + scope:zanj_leader = { + AND = { + is_alive = yes + is_imprisoned = no + NOT = { has_character_flag = new_zanj_leader } + } + } + } + title:c_baghdad.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0004 + } + } + } + } +} + +### Ali Ibn Muhammad claims divinity +fp3_story_cycle_zanj_rebellion_events.0004 = { + type = character_event + theme = faith + title = fp3_story_cycle_zanj_rebellion_events.0004.t + desc = fp3_story_cycle_zanj_rebellion_events.0004.desc + + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:zanj_leader + animation = personality_zealous + } + + #Contest Ali Ibn Muhammad's claims + option = { + name = fp3_story_cycle_zanj_rebellion_events.0004.a + duel = { + skill = learning + target = scope:zanj_leader + 50 = { + # You disprove Ali's claims + desc = fp3_story_cycle_zanj_rebellion_events.0004.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + title = fp3_story_cycle_zanj_rebellion_events.0004.a.success + add_piety = medium_piety_gain + add_prestige = minor_prestige_gain + left_icon = root + right_icon = scope:zanj_leader + } + } + 50 = { + # Ali Ibn Muhammad validates his claims + desc = fp3_story_cycle_zanj_rebellion_events.0004.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_greatly_strengthened_tt + send_interface_toast = { + title = fp3_story_cycle_zanj_rebellion_events.0004.a.failure + left_icon = root + right_icon = scope:zanj_leader + + scope:zanj_leader = { + add_trait = sayyid + add_pressed_claim = title:e_arabia + change_variable = { + name = zanj_rebellion_strength_score + add = 4 + } + } + } + } + } + root = { + progress_towards_rival_effect = { + REASON = fp3_zanj_rebellion_opressed_me + CHARACTER = scope:zanj_leader + OPINION = default_rival_opinion + } + } + stress_impact = { + paranoid = minor_stress_impact_loss + just = minor_stress_impact_loss + zealous = medium_stress_impact_loss + trusting = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = cynical + has_trait = trusting + has_trait = forgiving + } + } + } + } + + #Ignore Ali + option = { + name = fp3_story_cycle_zanj_rebellion_events.0004.b + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_strengthened_tt + + scope:zanj_leader = { + add_trait = sayyid + add_pressed_claim = title:e_arabia + change_variable = { + name = zanj_rebellion_strength_score + add = 2 + } + } + stress_impact = { + paranoid = minor_stress_impact_gain + just = minor_stress_impact_gain + zealous = medium_stress_impact_gain + trusting = minor_stress_impact_loss + forgiving = medium_stress_impact_loss + cynical = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = paranoid + has_trait = just + has_trait = zealous + } + } + } + } +} + +### Setup event to find the correct scope and check if Ali or the current Zanj Leader is dead or imprisoned +fp3_story_cycle_zanj_rebellion_events.0005 = { + scope = none + hidden = yes + immediate = { + if = { + limit = { + scope:zanj_leader = { + OR = { + is_imprisoned = yes + is_alive = no + is_landed = yes + } + } + } + inherit_zanj_rebellion_effect = yes + } + title:c_basra.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0006 + } + } + } +} + +### A Zanj Steps Forth +fp3_story_cycle_zanj_rebellion_events.0006 = { + type = character_event + theme = corruption + title = fp3_story_cycle_zanj_rebellion_events.0006.t + desc = { + desc = fp3_story_cycle_zanj_rebellion_events.0006.desc.a + + triggered_desc = { + trigger = { scope:zanj_leader = { NOT = { has_character_flag = new_zanj_leader } } } + desc = fp3_story_cycle_zanj_rebellion_events.0006.desc.b + } + + desc = fp3_story_cycle_zanj_rebellion_events.0006.desc.c + } + + left_portrait = { + character = root + animation = eyeroll + } + + right_portrait = { + character = scope:outspoken_rebel + animation = worry + } + + lower_left_portrait = { + trigger = { scope:zanj_leader = { NOT = { has_character_flag = new_zanj_leader } } } + character = scope:zanj_leader + } + + immediate = { + if = { + limit = { scope:zanj_leader = { NOT = { has_character_flag = new_zanj_leader } } } + spawn_zanj_representative_character_effect = yes + scope:zanj_representative = { save_scope_as = outspoken_rebel } + } + else = { + scope:zanj_leader = { save_scope_as = outspoken_rebel } + } + } + #Give Basra to the Zanj + option = { + name = fp3_story_cycle_zanj_rebellion_events.0006.a + + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + + title:c_basra = { + set_county_culture = culture:east_bantu + set_county_faith = faith:azariqa + } + + show_as_tooltip = { # UI/UX + title:c_basra = { + change_title_holder = { + holder = scope:outspoken_rebel + change = scope:change + } + } + } + + scope:outspoken_rebel = { + becomes_independent = { + change = scope:change + } + add_truce_both_ways = { + character = root + years = 10 + name = fp3_landed_zanj_reason + } + } + + if = { + limit = { + NOT = { title:c_basra.holder = root } + } + add_tyranny = 30 + set_relation_rival = { + reason = fp3_rival_gave_title_away + target = title:c_basra.holder + } + } + + hidden_effect = { + title:c_basra = { + change_title_holder = { + holder = scope:outspoken_rebel + change = scope:change + } + every_de_jure_county = { + change_title_holder = { + holder = scope:outspoken_rebel + change = scope:change + } + } + } + scope:zanj_leader = { + random_owned_story = { + type = story_zanj_rebellion + end_story = yes + } + } + } + resolve_title_and_vassal_change = scope:change + + stress_impact = { + compassionate = medium_stress_impact_loss + just = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + generous = medium_stress_impact_loss + content = medium_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = major_stress_impact_gain + ambitious = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = ambitious + has_trait = greedy + } + } + } + } + + #Make minor concessions to the Zanj + option = { + name = fp3_story_cycle_zanj_rebellion_events.0006.b + + scope:zanj_leader = { + change_variable = { + name = zanj_rebellion_strength_score + add = 3 + } + } + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_strengthened_tt + hidden_effect = { + title:c_basra.holder = { + if = { + limit = { scope:zanj_leader != scope:outspoken_rebel} + add_visiting_courtier = scope:zanj_leader + } + add_visiting_courtier = scope:outspoken_rebel + } + } + + if = { + limit = { + NOT = { title:c_basra.holder = root } + } + progress_towards_rival_effect = { + REASON = fp3_zanj_rebellion_interfered_with_my_workers + CHARACTER = title:c_basra.holder + OPINION = default_rival_opinion + } + } + + title:c_basra = { + add_county_modifier = { + modifier = fp3_zanj_rebellion_work_concessions_modifier + years = 5 + } + } + + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0007 + days = { 30 60 } + } + stress_impact = { + compassionate = minor_stress_impact_loss + just = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + generous = minor_stress_impact_loss + content = minor_stress_impact_loss + callous = minor_stress_impact_gain + sadistic = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = callous + has_trait = sadistic + has_trait = ambitious + has_trait = greedy + } + } + } + } + + #Ignore the Zanj + option = { + name = fp3_story_cycle_zanj_rebellion_events.0006.c + + scope:zanj_leader = { + change_variable = { + name = zanj_rebellion_strength_score + add = 5 + } + } + custom_tooltip = fp3_story_cycle_zanj_rebellion_events_cause_greatly_strengthened_tt + hidden_effect = { + title:c_basra.holder = { + add_visiting_courtier = scope:zanj_leader + add_visiting_courtier = scope:zanj_representative + } + } + + if = { + limit = { + NOT = { title:c_basra.holder = root } + } + + progress_towards_friend_effect = { + REASON = fp3_rival_stayed_out_of_my_business + CHARACTER = title:c_basra.holder + OPINION = default_friend_opinion + } + } + + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0007 + days = { 30 60 } + } + + stress_impact = { + compassionate = minor_stress_impact_gain + just = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + generous = minor_stress_impact_gain + content = minor_stress_impact_gain + callous = minor_stress_impact_loss + sadistic = medium_stress_impact_loss + ambitious = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + OR = { + has_trait = compassionate + has_trait = just + has_trait = forgiving + has_trait = generous + } + } + } + } +} + +fp3_story_cycle_zanj_rebellion_events.0007 = { + scope = none + hidden = yes + immediate = { + if = { + limit = { + scope:zanj_leader = { + OR = { + is_imprisoned = yes + is_alive = no + is_landed = yes + } + } + } + inherit_zanj_rebellion_effect = yes + } + title:c_basra.holder.top_liege = { + trigger_event = { + id = fp3_story_cycle_zanj_rebellion_events.0008 + + } + } + } +} + +### The Zanj Rebellion +fp3_story_cycle_zanj_rebellion_events.0008 = { + type = character_event + theme = battle + override_background = { reference = wilderness_wetlands } + title = fp3_story_cycle_zanj_rebellion_events.0008.t + desc = { + desc = fp3_story_cycle_zanj_rebellion_events.0008.desc.a + triggered_desc = { + trigger = { + scope:zanj_leader = { NOT = { has_character_flag = new_zanj_leader}} + } + desc = fp3_story_cycle_zanj_rebellion_events.0008.desc.b + } + triggered_desc = { + trigger = { + scope:zanj_leader = { has_character_flag = new_zanj_leader } + } + desc = fp3_story_cycle_zanj_rebellion_events.0008.desc.c + } + desc = fp3_story_cycle_zanj_rebellion_events.0008.desc.d + } + + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:zanj_leader + animation = celebrate_sword + } + + immediate = { + scope:zanj_leader = { + give_nickname = nick_chief_of_the_zanj + hidden_effect = { + random_owned_story = { + type = story_zanj_rebellion + end_story = yes + } + } + } + hidden_effect = { + fp3_start_zanj_rebellion_effect = { + TARGET_COUNTY = title:c_basra + REBEL_LEADER = scope:zanj_leader + } + create_zanj_courtier_effect = { + EMPLOYER = scope:zanj_leader + LOCATION = scope:zanj_leader.location + } + create_zanj_courtier_effect = { + EMPLOYER = scope:zanj_leader + LOCATION = scope:zanj_leader.location + } + create_zanj_courtier_effect = { + EMPLOYER = scope:zanj_leader + LOCATION = scope:zanj_leader.location + } + create_zanj_courtier_effect = { + EMPLOYER = scope:zanj_leader + LOCATION = scope:zanj_leader.location + } + } + } + + option = { + name = fp3_story_cycle_zanj_rebellion_events.0008.a + } +} \ No newline at end of file diff --git a/events/dlc/fp3/fp3_struggle_events.txt b/events/dlc/fp3/fp3_struggle_events.txt new file mode 100644 index 00000000..3a9cd0f8 --- /dev/null +++ b/events/dlc/fp3/fp3_struggle_events.txt @@ -0,0 +1,1339 @@ +namespace = fp3_struggle + +### EVENT LIST #################################################################### +## 0001 - 0020 Internal Management Events by Hugo Cortell +## 0021 - 0030 Invalidation Events by Hugo Cortell +## 0031 - 0040 Empty block by Hugo Cortell +## 0051 - 0060 FP3 Struggle Intro Events by Hugo Cortell +## 0061 - 0070 Realm Shattering Events by Hugo Cortell +## 0071 - 0300 Struggle Endings by Thalassic Design Dept (Ola, Eren, Hugo) +## XXXX - XXXX Event Name Here by Author Name Here +## XXXX - XXXX Event Name Here by Author Name Here +## XXXX - XXXX Event Name Here by Author Name Here +## 9980 - 9999 Integrity Validation Tools by Hugo Cortell +################################################################################### + +################################### +# FP3 Maintenance Events +# By Ewan Cowhig Croft +################################### + +scripted_trigger fp3_struggle_0001_valid_ai_struggle_char_trigger = { + # Basic checks. + can_execute_decision = fp3_name_read_in_friday_prayer_decision + is_ai = yes + # Suitability for switchin' checks. + OR = { + # If they're gonna become a supporter, it should make sense. + AND = { + opinion = { + target = title:d_sunni.holder + value >= low_positive_opinion + } + OR = { + # We check for the opposite, since you're flipflopping. + has_trait = fp3_struggle_detractor + NOR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + } + } + # If they're gonna become a detractor, that should make sense too. + AND = { + opinion = { + target = title:d_sunni.holder + value <= low_negative_opinion + } + OR = { + # We check for the opposite, since you're flipflopping. + has_trait = fp3_struggle_supporter + NOR = { + has_trait = fp3_struggle_supporter + has_trait = fp3_struggle_detractor + } + } + } + } +} + +fp3_struggle.0001 = { + hidden = yes + scope = none + scope = struggle + + # If the struggle ends, break the loop. + trigger = { exists = struggle:persian_struggle } + + immediate = { + if = { + # If there isn't a caliph at present, then stop trying to make people talk about them. + limit = { exists = title:d_sunni.holder } + struggle:persian_struggle = { + every_involved_ruler = { + limit = { fp3_struggle_0001_valid_ai_struggle_char_trigger = yes } + random = { + chance = fp3_struggle_switch_sides_value + execute_decision = fp3_name_read_in_friday_prayer_decision + } + } + every_interloper_ruler = { + limit = { fp3_struggle_0001_valid_ai_struggle_char_trigger = yes } + random = { + chance = fp3_struggle_switch_sides_value + execute_decision = fp3_name_read_in_friday_prayer_decision + } + } + } + } + + # Cue this event up again for the next time around. + trigger_event = { + id = fp3_struggle.0001 + years = { 3 5 } + } + } +} + +################################### +# FP3 Intro Events +# By Hugo Cortell, reworked by Ewan Cowhig Croft +################################### +fp3_struggle.0051 = { # BOOKMARK EVENT + type = character_event + window = fullscreen_event + title = fp3_struggle.0051.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + any_character_struggle = { + is_struggle_type = persian_struggle + is_struggle_phase = struggle_persia_phase_unrest + } + } + desc = fp3_struggle.0051.desc.unrest + } + desc = fp3_struggle.0051.desc.stabilization + } + first_valid = { + triggered_desc = { + trigger = { + any_character_struggle = { + is_struggle_type = persian_struggle + is_struggle_phase = struggle_persia_phase_stabilisation + } + } + desc = fp3_struggle.0051.desc.stabilization_actor + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0051.desc.supporter + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0051.desc.detractor + } + triggered_desc = { + trigger = { + fp3_struggle_is_the_caliph = yes + } + desc = fp3_struggle.0051.desc.caliph + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0051.desc.involved + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0051.desc.interloper + } + } + } + theme = realm + trigger = { # we need to prevent this from firing for all players when a new player joins in MP + is_ai = no + NOT = { has_character_flag = fp3_struggle_intro_event_flag } + any_character_struggle = { is_struggle_type = persian_struggle } + } + override_background = { reference = fp3_fullscreen_intro } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + cooldown = { years = 100 } + + widgets = { + widget = { + gui = "event_window_widget_struggle_info" + container = "dynamic_content_widget" + controller = struggle_info + setup_scope = { struggle:persian_struggle = { save_scope_as = struggle } } + } + } + immediate = { + play_music_cue = strugglestart_cue + add_character_flag = fp3_struggle_intro_event_flag + add_to_global_variable_list = { # List is only checked for removal, comparing it in the trigger would be needlessly expensive + name = fp3_intro_flag_character_list + target = root + } + save_scope_value_as = { + name = start + value = yes + } + + # LOC SCOPES + character:34010 = { save_scope_as = Mutawakkil } # Stabbed by guards + character:34012 = { save_scope_as = Muntasir } # Poisoned probably + character:34013 = { save_scope_as = Mustain } # Betrayed by bookmark character (?) (Note: this char is listed as 3933 in some other files for some reason) + character:34014 = { save_scope_as = Mostaza } # Bookmark ruler + } + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + any_character_struggle = { is_struggle_type = persian_struggle } + has_title = character:34014.primary_title + } + desc = fp3_struggle.0051.b + } + desc = fp3_struggle.0051.a + } + } + } + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} + +################################################# +# Struggle Endings # +# By Hugo Cortell, Maxence Voleau, Ola Jentzsch & Eren Humphrey # +################################################################### +# Script is set up in this way to prevent out of order executions # +################################################################### + +### STRENGTHEN CALIPHATE ENDING ### 0071 = 0080 ### +fp3_struggle.0071 = { # Strengthen the Caliphate Ending + type = character_event + window = fullscreen_event + title = fp3_struggle.0071.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + fp3_struggle_is_the_caliph = yes + } + desc = fp3_struggle.0071.desc.caliph + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0071.desc.supporter + } + } + } + theme = court + override_background = { reference = fp3_fullscreen_strength } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + fp3_ending_effects_assertion = yes + character:34014 = { save_scope_as = Mostaza } # Bookmark ruler + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0071.a + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + + ai_chance = { + base = 75 + + modifier = { + factor = 0.1 + realm_size >= 250 + } + } + } + + option = { + trigger = { + has_dlc_feature = roads_to_power + fp3_struggle_is_the_caliph = yes + NOT = { government_has_flag = government_is_administrative } + } + name = fp3_struggle.0071.b + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + + convert_to_administrative_from_feudalism_effect = { GOVERNMENT_TO_ADOPT = flag:administrative } + add_legitimacy_effect = { LEGITIMACY = admin_convert_legitimacy_value } #One Time Legitimacy Boost + + ai_chance = { + base = 0 + + modifier = { + add = 25 + realm_size >= 75 + } + modifier = { + add = 25 + realm_size >= 100 + } + modifier = { + add = 25 + realm_size >= 125 + } + modifier = { + add = 25 + realm_size >= 150 + } + modifier = { + add = 50 + realm_size >= 200 + } + } + } + + after = { + fp3_end_persian_struggle_effect = { + ENDING = struggle_persia_ending_assertion_decision + EVENT = fp3_struggle.0072 + FLAG = flag:fp3_struggle_strengthen_caliphate_ending + } + } +} + +fp3_struggle.0072 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = fp3_struggle.0071.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + fp3_struggle_is_the_caliph = yes + } + desc = fp3_struggle.0072.desc.caliph + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0072.desc.supporter + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0072.desc.detractor + } + + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0072.desc.involved + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0072.desc.interloper + } + desc = fp3_struggle.0072.desc.uninvolved + } + } + theme = court + override_background = { reference = fp3_fullscreen_strength } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + trigger = { + NOT = { has_character_flag = struggle_end_notification } + } + + immediate = { + show_as_tooltip = { struggle:persian_struggle = { end_struggle = yes } } + add_character_flag = struggle_end_notification + + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0072.a + trigger = { + OR = { + fp3_struggle_is_the_caliph = yes + has_trait = fp3_struggle_supporter + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { + name = fp3_struggle.0072.a + trigger = { + NOR = { + fp3_struggle_is_the_caliph = yes + has_trait = fp3_struggle_supporter + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } + after = { + remove_character_flag = struggle_end_notification + } +} + +### CONCESSION ENDING ### 0081 = 0090 ### + +fp3_struggle.0081 = { # + type = character_event + window = fullscreen_event + title = fp3_struggle.0082.t + desc = { + first_valid = { + triggered_desc = { + trigger = { has_trait = fp3_struggle_supporter } + desc = fp3_struggle.0082.desc.supporter + } + triggered_desc = { + trigger = { has_trait = fp3_struggle_detractor } + desc = fp3_struggle.0082.desc.detractor + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + desc = { + desc = fp3_struggle.0082.desc.intro + desc = fp3_struggle.0082.desc.involved + } + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + desc = { + desc = fp3_struggle.0082.desc.intro + desc = fp3_struggle.0082.desc.interloper + } + } + desc = fp3_struggle.0082.desc.uninvolved + } + } + theme = court + override_background = { reference = fp3_fullscreen_concession } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0082.a + show_as_tooltip = { + struggle:persian_struggle = { end_struggle = yes } + fp3_struggle_ending_concession_effects = yes + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } + + after = { + fp3_end_persian_struggle_effect = { + ENDING = yes + EVENT = fp3_struggle.0082 + FLAG = flag:fp3_struggle_concession_ending + } + } +} + +fp3_struggle.0082 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = fp3_struggle.0082.t + desc = { + first_valid = { + triggered_desc = { + trigger = { has_trait = fp3_struggle_supporter } + desc = fp3_struggle.0082.desc.supporter + } + triggered_desc = { + trigger = { has_trait = fp3_struggle_detractor } + desc = fp3_struggle.0082.desc.detractor + } + triggered_desc = { + trigger = { exists = scope:involved } + desc = { + desc = fp3_struggle.0082.desc.intro + desc = fp3_struggle.0082.desc.involved + } + } + triggered_desc = { + trigger = { exists = scope:interloper } + desc = { + desc = fp3_struggle.0082.desc.intro + desc = fp3_struggle.0082.desc.interloper + } + } + desc = fp3_struggle.0082.desc.uninvolved + } + } + theme = court + override_background = { reference = fp3_fullscreen_concession } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + # There could, and should, be a event_window_widget_struggle_info widget here + + immediate = { + if = { + limit = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + save_scope_as = involved + } + else_if = { + limit = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + save_scope_as = interloper + } + show_as_tooltip = { + struggle:persian_struggle ?= { end_struggle = yes } + fp3_struggle_ending_concession_effects = yes + } + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0082.b + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } +} + +### FOUNDATION ENDINGS ### 0091 = 0180 ### +fp3_struggle.0091 = { # Rekindle Iran + type = character_event + window = fullscreen_event + title = fp3_struggle.0091.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0091.desc.supporter + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0091.desc.detractor + } + } + } + theme = court + override_background = { reference = fp3_fullscreen_rekindle } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + save_scope_as = struggle_ender + # Save Sunni caliph or previous one as scope:struggle_liege + fp3_save_sunni_caliph_or_previous_effect = yes + title:e_persia = { save_scope_as = persia_loc } # Persia gets renamed under clan govs + + fp3_struggle_rekindle_iran_effects = yes + + play_music_cue = struggleend_cue + + dynasty:1029100 = { save_scope_as = sassanid_dynasty } + } + + option = { + name = fp3_struggle.0091.a + + show_as_tooltip = { struggle:persian_struggle = { end_struggle = yes } } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + after = { + fp3_end_persian_struggle_effect = { + ENDING = struggle_persia_ending_rekindle_iran_decision + EVENT = fp3_struggle.0092 + FLAG = flag:fp3_struggle_rekindle_iran_ending + } + } +} + +fp3_struggle.0092 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = fp3_struggle.0091.t + desc = { + desc = fp3_struggle.0092.intro + first_valid = { + triggered_desc = { + trigger = { + culture = { has_cultural_pillar = heritage_iranian } + } + desc = fp3_struggle.0092.desc.iranian + } + desc = fp3_struggle.0092.desc.non-iranian + } + } + theme = court + override_background = { reference = fp3_fullscreen_rekindle } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + # There could, and should, be a event_window_widget_struggle_info widget here + + immediate = { + show_as_tooltip = { + struggle:persian_struggle = { end_struggle = yes } + fp3_struggle_rekindle_iran_effects = yes + } + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0092.a + trigger = { + culture = { has_cultural_pillar = heritage_iranian } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { + name = fp3_struggle.0092.a + trigger = { + NOT = { + culture = { has_cultural_pillar = heritage_iranian } + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } +} + +fp3_struggle.0095 = { # Temper the Caliphate, Shia Ending + type = character_event + window = fullscreen_event + title = fp3_struggle.0095.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + faith = { + OR = { + has_doctrine = muhammad_succession_shia_doctrine + has_doctrine = muhammad_succession_zandaqa_doctrine + } + } + } + desc = fp3_struggle.0095.desc.shia_and_zandaqa + } + triggered_desc = { + trigger = { + faith = { + has_doctrine = muhammad_succession_muhakkima_doctrine + } + } + desc = fp3_struggle.0095.desc.muhakkima + } + desc = fp3_struggle.0095.desc.fallback + } + } + theme = court + override_background = { reference = fp3_fullscreen_temper } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + root = { save_scope_as = struggle_ender } + # Save Sunni caliph or previous one as scope:struggle_liege + fp3_save_sunni_caliph_or_previous_effect = yes + character:34005 = { save_scope_as = harun_the_rightly_guided } + + fp3_struggle_ending_shia_caliphate_effects = yes + + play_music_cue = struggleend_cue + + character:33911 = { save_scope_as = ali } + + } + + option = { + name = fp3_struggle.0095.a + show_as_tooltip = { struggle:persian_struggle = { end_struggle = yes } } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + after = { + fp3_end_persian_struggle_effect = { + ENDING = struggle_persia_ending_foundation_decision + EVENT = fp3_struggle.0096 + FLAG = flag:fp3_struggle_shia_caliphate_ending + } + } +} + +fp3_struggle.0096 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = fp3_struggle.0095.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0096.desc.supporter + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0096.desc.detractor + } + + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0096.desc.involved + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0096.desc.interloper + } + desc = fp3_struggle.0096.desc.uninvolved + } + } + theme = court + override_background = { reference = fp3_fullscreen_temper } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + # There could, and should, be a event_window_widget_struggle_info widget here + + immediate = { + play_music_cue = struggleend_cue + show_as_tooltip = { + fp3_struggle_ending_shia_caliphate_effects = yes + struggle:persian_struggle = { end_struggle = yes } + } + } + + option = { + name = fp3_struggle.0096.a + trigger = { + NOR = { + has_trait = fp3_struggle_supporter + faith = { has_doctrine = muhammad_succession_sunni_doctrine } + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { + name = fp3_struggle.0096.a + trigger = { + OR = { + has_trait = fp3_struggle_supporter + faith = { has_doctrine = muhammad_succession_sunni_doctrine } + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } +} + +fp3_struggle.0100 = { # Temper the Caliphate, Vassalize Caliphate Ending + type = character_event + window = fullscreen_event + title = fp3_struggle.0100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + faith = { + OR = { + has_doctrine = muhammad_succession_shia_doctrine + has_doctrine = muhammad_succession_zandaqa_doctrine + } + } + } + desc = fp3_struggle.0100.desc.shia_and_zandaqa + } + triggered_desc = { + trigger = { + faith = { has_doctrine = muhammad_succession_muhakkima_doctrine } + } + desc = fp3_struggle.0100.desc.muhakkima + } + desc = fp3_struggle.0100.desc + } + } + + theme = court + override_background = { reference = fp3_fullscreen_temper } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + root = { save_scope_as = struggle_ender } + title:d_sunni.holder = { save_scope_as = struggle_liege } + fp3_struggle_ending_vassalize_caliph_effects = yes + + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0100.a + show_as_tooltip = { struggle:persian_struggle = { end_struggle = yes } } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + after = { + fp3_end_persian_struggle_effect = { + ENDING = struggle_persia_ending_foundation_decision + EVENT = fp3_struggle.0101 + FLAG = flag:fp3_struggle_vassalize_caliph_ending + } + } +} + +fp3_struggle.0101 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = fp3_struggle.0100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = fp3_struggle_supporter + } + desc = fp3_struggle.0101.desc.supporter + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0101.desc.detractor + } + + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = involved + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0101.desc.involved + } + triggered_desc = { + trigger = { + any_character_struggle = { + involvement = interloper + is_struggle_type = persian_struggle + } + } + desc = fp3_struggle.0101.desc.interloper + } + desc = fp3_struggle.0101.desc.uninvolved + } + } + theme = court + override_background = { reference = fp3_fullscreen_temper } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + immediate = { + show_as_tooltip = { struggle:persian_struggle = { end_struggle = yes } } + + play_music_cue = struggleend_cue + } + + option = { + name = fp3_struggle.0101.a + trigger = { + NOR = { + has_trait = fp3_struggle_supporter + faith = { has_doctrine = muhammad_succession_sunni_doctrine } + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { + name = fp3_struggle.0101.a + trigger = { + OR = { + has_trait = fp3_struggle_supporter + faith = { has_doctrine = muhammad_succession_sunni_doctrine } + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } +} + +### SUNDERING THE CALIPHATE ### 0191 = 0200 ### +fp3_struggle.0191 = { # Sunder the Caliphate + type = character_event + title = fp3_struggle.0191.t + desc = fp3_struggle.0191.desc + theme = court + left_portrait = { + character = scope:sunderer + animation = war_over_win + } + lower_right_portrait = scope:struggle_liege + + immediate = { + # Select the caliph and destroy their title + fp3_sundered_caliphate_effects = yes + } + + option = { + name = fp3_struggle.0191.a + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } +} + +fp3_struggle.0192 = { # Notification for relevant people + type = character_event + title = fp3_struggle.0192.t + + desc = { + first_valid = { + triggered_desc = { + trigger = { + fp3_struggle_is_the_caliph = yes + } + desc = fp3_struggle.0192.desc.caliph + } + triggered_desc = { + trigger = { + OR = { + has_trait = fp3_struggle_supporter + is_vassal_of = scope:struggle_liege + } + } + desc = fp3_struggle.0192.desc.supporter_or_vassal + } + triggered_desc = { + trigger = { + has_trait = fp3_struggle_detractor + } + desc = fp3_struggle.0192.desc.detractor + } + } + } + + + theme = court + override_background = { reference = fp3_fullscreen_sunder } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + left_portrait = { + character = scope:sunderer + animation = war_over_win + } + lower_right_portrait = scope:struggle_liege + + option = { + name = fp3_struggle.0192.c + trigger = { + NOR = { + fp3_struggle_is_the_caliph = yes + has_trait = fp3_struggle_supporter + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { + name = fp3_struggle.0192.b + trigger = { + OR = { + fp3_struggle_is_the_caliph = yes + has_trait = fp3_struggle_supporter + } + } + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } +} + +################################### +# FP3 casus belli events +# By Joe Parkin +################################### + +# Install loyal puppet - declared puppet ping +fp3_struggle.8000 = { + type = letter_event + opening = fp3_struggle.8000.t + desc = { + desc = fp3_struggle.8000.desc + } + sender = scope:attacker + + immediate = { + send_interface_message = { + type = event_struggle_neutral + title = install_loyalist_puppet_declared_puppet + left_icon = scope:attacker + right_icon = scope:defender + show_as_tooltip = { + scope:attacker = { + start_war = { + casus_belli = "fp3_install_loyalist_cb" + target = scope:defender + } + } + } + } + } + + # Indeed? + option = { + name = fp3_struggle.8000.a + } +} + +# Install loyal puppet - declared defender ping +fp3_struggle.8001 = { + type = letter_event + opening = fp3_struggle.8000.t + desc = { + desc = fp3_struggle.8001.desc + } + sender = scope:attacker + + immediate = { + send_interface_message = { + type = event_struggle_bad + title = install_loyalist_puppet_declared_defender + left_icon = scope:attacker + right_icon = scope:loyalist_puppet + show_as_tooltip = { + scope:attacker = { + start_war = { + casus_belli = "fp3_install_loyalist_cb" + target = scope:defender + } + } + } + } + } + + # Outrageous! + option = { + name = fp3_struggle.8001.a + } +} + +# Install loyal puppet - won puppet ping +fp3_struggle.8002 = { + type = letter_event + opening = fp3_struggle.8000.t + desc = { + desc = fp3_struggle.8002.desc + } + sender = scope:attacker + + immediate = { + send_interface_message = { + type = event_struggle_good + title = install_loyalist_puppet_won_puppet + left_icon = scope:attacker + right_icon = scope:defender + show_as_tooltip = { + every_in_list = { + list = title_to_steal + save_scope_as = stolen_title + root = { get_title = scope:stolen_title } + } + custom_tooltip = fp3_struggle.8002.alliance_tt + if = { + limit = { scope:defender.imprisoner ?= root } + imprison = { + target = scope:defender + type = house_arrest + } + } + } + } + } + + # Ok! + option = { + name = fp3_struggle.8002.a + } +} + + +################################### +# Integrity Validation Events +# By Hugo Cortell +################################### +fp3_struggle.9980 = { # Validation of title + type = character_event + orphan = yes + title = { + desc = Hugo + desc = game_concept_struggle_struggles + desc = number_two + desc = debug + } + desc = { + desc = historical_commander_trait.0003.d + desc = stress_threshold.3201.depressed.effect + } + + theme = mental_break + left_portrait = title:e_arabia.holder + + immediate = { title:e_arabia.holder = { add_piety = 30000 } } # Hard title validation + + option = { + name = { + text = { + desc = martial_chivalry.2015.a + desc = rivalry.1016.a.exposed + } + } + } +} + +fp3_struggle.9981 = { # Destroy e_arabia (used mostly for checking invalidations) + hidden = yes + orphan = yes + immediate = { destroy_title = title:e_arabia } +} + +fp3_struggle.9982 = { # Revision 2 nav event, to make QA's life easier and avoid unecessary crashes + type = character_event + title = { + desc = Hugo + desc = CHARACTER_POSS + desc = intrigue_broken_modifier + desc = game_concept_struggle + desc = MENU + } + desc = { + desc = bp1_yearly.9018.c + desc = double_line_break + desc = childhood.7400_mother_dead + desc = double_line_break + desc = yearly.7021.b + } + + orphan = yes + theme = mental_break + + option = { # Dynamically start a struggle + trigger = { NOT = { exists = struggle:persian_struggle } } + name = FRONTEND_MP_GAME_SETUP_HOST_NEW_GAME + + random_ruler = { + limit = { + top_liege = this + location ?= { geographical_region = world_persian_empire } + } + primary_title = { save_scope_as = debug_caliph } + } + start_struggle = { + struggle_type = persian_struggle + start_phase = struggle_persia_phase_stabilisation + } + + send_interface_message = { # Informs you of who the "debug caliph" is + type = event_martial_bad + title = trait_beauty_bad_1_desc + left_icon = scope:debug_caliph + right_icon = scope:debug_caliph.holder + } + } + option = { # Go forward in the struggle flow + name = dynn_Daflos_motto + trigger = { exists = struggle:persian_struggle } + + if = { + limit = { struggle:persian_struggle = { is_struggle_phase = struggle_persia_phase_unrest } } + struggle:persian_struggle = { change_struggle_phase = { struggle_phase = struggle_persia_ending_phase_concession } } + } + else_if = { + limit = { struggle:persian_struggle = { is_struggle_phase = struggle_persia_phase_stabilisation } } + struggle:persian_struggle = { change_struggle_phase = { struggle_phase = struggle_persia_phase_unrest with_transition = yes } } + } + } + option = { # Go backwards in the struggle flow + name = default_retreat + trigger = { exists = struggle:persian_struggle } + + if = { + limit = { struggle:persian_struggle = { is_struggle_phase = struggle_persia_phase_unrest } } + struggle:persian_struggle = { change_struggle_phase = { struggle_phase = struggle_persia_phase_stabilisation } } + } + } + option = { name = EXIT_TO_DESKTOP } # Exit event without doing anything +} + +fp3_struggle.9983 = { # Create Persian Empire Test + hidden = yes + orphan = yes + immediate = { + create_title_and_vassal_change = { + type = created + save_scope_as = change + } + title:e_persia = { + change_title_holder = { + holder = root + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } +} + +fp3_struggle.9984 = { # Ending simulator - Allows you to end the struggle in a clean way, works better/is safer than commands + type = character_event + window = fullscreen_event + title = ENDING_DECISION_AVAILABLE + desc = ENDING_DECISION_BUTTON_LABEL_MULTIPLE + orphan = yes + theme = realm + override_background = { reference = fp3_fullscreen_strength } + override_sound = { reference = "event:/DLC/FP2/SFX/UI/fp2_struggle_ui_intro_animate" } + + widgets = { + widget = { + gui = "event_window_widget_struggle_info" + container = "dynamic_content_widget" + controller = struggle_info + setup_scope = { struggle:persian_struggle = { save_scope_as = struggle } } + } + } + + immediate = { + # Save Sunni caliph or previous one as scope:struggle_liege + fp3_save_sunni_caliph_or_previous_effect = yes + } + + option = { # Concession + name = struggle_persia_ending_phase_concession + save_scope_value_as = { + name = ending_to_simulate + value = flag:concession + } + trigger_event = fp3_struggle.9985 + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + + option = { # Assertion (Strengthen) + name = struggle_persia_ending_assertion + save_scope_value_as = { + name = ending_to_simulate + value = flag:strength + } + trigger_event = fp3_struggle.9985 + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { # Sunni Caliphate + name = struggle_persia_ending_foundation_decision_option_shia + save_scope_value_as = { + name = ending_to_simulate + value = flag:sunni + } + trigger_event = fp3_struggle.9985 + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { # Consume/Vassalize + name = struggle_persia_ending_foundation_decision_option_vassalize + save_scope_value_as = { + name = ending_to_simulate + value = flag:vassal + } + trigger_event = fp3_struggle.9985 + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + } + + option = { name = EXIT_TO_DESKTOP } +} + +fp3_struggle.9985 = { # Simulator Follow-up (keeps it hidden and clean to prevent QA panic) + hidden = yes + immediate = { + struggle:persian_struggle = { + # Ensure we are in the correct position to fire the ending + if = { + limit = { + scope:ending_to_simulate = flag:strength + is_struggle_phase = struggle_persia_phase_unrest + } + change_struggle_phase = { struggle_phase = struggle_persia_phase_stabilisation } + } + else_if = { + limit = { + OR = { + scope:ending_to_simulate = flag:sunni + scope:ending_to_simulate = flag:vassal + } + is_struggle_phase = struggle_persia_phase_stabilisation + } + change_struggle_phase = { struggle_phase = struggle_persia_phase_unrest } + } + } + # Cases for firing the correct phase + switch = { + trigger = scope:ending_to_simulate + flag:concession = { trigger_event = fp3_struggle.0081 } + flag:sunni = { trigger_event = fp3_struggle.0095 } + flag:vassal = { trigger_event = fp3_struggle.0100 } + flag:strength = { trigger_event = fp3_struggle.0071 } + + fallback = { + assert_if = { + limit = { always = yes } + text = "FP3 ENDING SIMULATION DEBUG TOOL ERROR: NO VALID scope:ending_to_simulate STATE!" + } + } + } + } +} diff --git a/events/dlc/fp3/fp3_tax_collector_events_ola.txt b/events/dlc/fp3/fp3_tax_collector_events_ola.txt new file mode 100644 index 00000000..779a8541 --- /dev/null +++ b/events/dlc/fp3/fp3_tax_collector_events_ola.txt @@ -0,0 +1,1416 @@ +namespace = fp3_clan + +########EVENT INDEX############ +#fp3_clan.8008 - Bleeding them Dry, by Ola Jentzsch +#fp3_clan.8009 - Popular with the People, by Ola Jentzsch +#fp3_clan.8010 - Competent Qadis / More Magistrates, by Ola Jentzsch +#fp3_clan.8011 - A Proper Paymaster, by Ola Jentzsch +#fp3_clan.8012 - Auspicious Avarice, by Ola Jentzsch +#fp3_clan.8013 - The Burden of Tax Farming, by Ola Jentzsch + + +###########fp3_clan.8008 - Bleeding them Dry, by Ola Jentzsch############### +scripted_trigger tax_collector_8008_trigger = { + is_available_ai_adult = yes + tax_collector_aptitude = { + target = clan_tax_slot + value >= 4 + } + ai_honor <= low_positive_ai_value +} + +scripted_trigger house_unity_8008_member_trigger = { + is_available_ai_adult = yes + is_vassal_of = root + opinion = { + target = root + value <= 75 + } + reverse_opinion = { + target = scope:$SCOPE$ + value < 0 + } +} + +fp3_clan.8008 = { + type = character_event + title = fp3_clan.8008.t + desc = fp3_clan.8008.desc + theme = intrigue_intimidation_focus + + left_portrait = { + character = root + animation = personality_cynical + triggered_animation = { + trigger = { + OR = { + has_trait = ambitious + has_trait = sadistic + has_trait = greedy + } + } + animation = personality_greedy + } + } + right_portrait = { + character = scope:ambitious_tax_collector + animation = chancellor + triggered_animation = { + trigger = { ai_greed >= high_positive_ai_value } + animation = personality_dishonorable + } + } + lower_left_portrait = { + character = scope:beleaguered_clan_member + } + + override_background = { reference = corridor_night } + + trigger = { + has_fp3_dlc_trigger = yes + is_available_healthy_adult = yes + + any_vassal = { #checking that it would be beneficial to gain the Extort Subjects decision + highest_held_title_tier >= tier_county + } + + any_tax_collector = { + tax_collector_8008_trigger = yes + save_temporary_scope_as = tax_collector_temp + } + + house = { + any_house_unity_member = { + house_unity_8008_member_trigger = { SCOPE = tax_collector_temp } + } + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + tax_collector_8008_trigger = yes + } + save_scope_as = ambitious_tax_collector + } + + house = { + random_house_unity_member = { + limit = { + house_unity_8008_member_trigger = { SCOPE = ambitious_tax_collector } + } + save_scope_as = beleaguered_clan_member + } + } + } + + option = { + name = fp3_clan.8008.a + + add_tyranny = medium_tyranny_value + + add_character_modifier = { + modifier = fp3_justification_for_taxation_modifier + years = 20 + } + + if = { + limit = { + NOR = { + has_perk = it_is_my_domain_perk + has_lifestyle = stewardship_lifestyle + } + } + custom_tooltip = unlock_extortion.tt + } + + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:beleaguered_clan_member + VALUE = minor_unity_loss + DESC = clan_unity_extorted_vassal.desc + REVERSE_NON_HOUSE_TARGET = no + } + + scope:ambitious_tax_collector = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 20 + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + ambitious = minor_stress_impact_loss + just = medium_stress_impact_gain + honest = medium_stress_impact_gain + generous = medium_stress_impact_gain + content = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_greed = 1 + ai_energy = 0.5 + ai_honor = -0.7 + ai_compassion = -0.2 + } + } + } + + option = { + name = fp3_clan.8008.b + + scope:beleaguered_clan_member = { + pay_short_term_gold = { + target = root + gold = medium_gold_value + } + add_opinion = { + target = root + modifier = extorted_me_opinion + } + } + + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:beleaguered_clan_member + VALUE = minor_unity_loss + DESC = clan_unity_extorted_vassal.desc + REVERSE_NON_HOUSE_TARGET = no + } + + scope:ambitious_tax_collector = { + add_opinion = { + target = root + modifier = trusted_me_opinion + opinion = 10 + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + just = minor_stress_impact_gain + generous = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.8 + ai_energy = 0.3 + ai_honor = -0.4 + ai_compassion = -0.7 + } + } + } + + option = { + name = fp3_clan.8008.c + + scope:ambitious_tax_collector = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + + stress_impact = { + content = minor_stress_impact_loss + greedy = medium_stress_impact_gain + ambitious = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.8 + ai_energy = 0.3 + ai_honor = -0.4 + ai_compassion = -0.7 + } + } + } +} + +#############fp3_clan.8009 - Popular with the People, by Ola Jentzsch############ +scripted_trigger fp3_clan_8009_province_trigger = { + has_holding_type = city_holding + barony = { + is_under_holy_order_lease = no + holder = { fp3_clan_suitable_holder_trigger = yes } + } +} + +scripted_trigger fp3_clan_suitable_holder_trigger = { + stewardship >= average_skill_rating + NOR = { + has_trait = sadistic + has_trait = honest + has_trait = content + has_trait = lazy + has_trait = arrogant + has_trait = callous + has_relation_friend = root + has_relation_lover = root + is_close_family_of = root + + } +} + +scripted_trigger tax_collector_8009_trigger = { + is_available_ai_adult = yes + tax_collector_aptitude = { + target = clan_tax_slot + value >= 2 + } + OR = { + ai_honor <= low_positive_ai_value + ai_compassion < low_positive_ai_value + ai_greed >= medium_positive_ai_value + } +} + +fp3_clan.8009 = { + type = character_event + title = fp3_clan.8009.t + desc = fp3_clan.8009.desc + theme = realm + + left_portrait = { + character = root + animation = boredom + triggered_animation = { + trigger = { + OR = { + has_trait = vengeful + has_trait = paranoid + has_trait = sadistic + } + } + animation = personality_vengeful + } + } + right_portrait = { + character = scope:righteous_tax_collector + animation = reading + } + lower_right_portrait = { + character = scope:corrupt_mayor + } + + trigger = { + has_fp3_dlc_trigger = yes + is_available_healthy_adult = yes + + any_tax_collector = { + tax_collector_8009_trigger = yes + save_temporary_scope_as = tax_collector_temp + } + + any_held_county = { any_county_province = { fp3_clan_8009_province_trigger = yes } } + } + + cooldown = { years = 20 } + + immediate = { + random_tax_collector = { + limit = { + tax_collector_8009_trigger = yes + } + save_scope_as = righteous_tax_collector + } + + random_held_county = { + limit = { + any_county_province = { fp3_clan_8009_province_trigger = yes } + } + save_scope_as = fawazil_county + + random_county_province = { + limit = { fp3_clan_8009_province_trigger = yes } + barony = { + save_scope_as = fawazil_barony + + holder = { + save_scope_as = corrupt_mayor + } + } + } + } + + hidden_effect = { + scope:corrupt_mayor = { + add_gold = major_gold_value #this is the corruption money + add_gold = major_gold_value + } + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = eccentric + } + desc = fp3_clan.8009.a.eccentric + } + desc = fp3_clan.8009.a + } + } + + } + + scope:corrupt_mayor = { + pay_short_term_gold = { + target = root + gold = scope:corrupt_mayor.gold + } + death = { + death_reason = death_crucified + killer = root + } + } + + scope:fawazil_county = { + add_county_modifier = { + modifier = fp3_locals_infuriated_county_modifier + years = 8 + } + } + + stress_impact = { + sadistic = major_stress_impact_loss + vengeful = major_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_vengefulness = 1 + ai_boldness = 0.9 + ai_honor = -0.5 + ai_compassion = -1 + } + } + } + + option = { + name = fp3_clan.8009.b + + scope:corrupt_mayor = { banish = yes } + + scope:fawazil_county = { + add_county_modifier = { + modifier = fp3_locals_intimidated_county_modifier + years = 4 + } + } + + stress_impact = { + forgiving = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.6 + ai_greed = 0.5 + ai_rationality = 0.4 + ai_compassion = -0.5 + } + } + } + + option = { + name = fp3_clan.8009.c + + add_character_modifier = { + modifier = fp3_looking_the_other_way_modifier + years = 6 + } + + stress_impact = { + base = medium_stress_impact_loss + shy = major_stress_impact_loss + vengeful = major_stress_impact_gain + wrathful = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -1 + ai_boldness = -0.7 + ai_rationality = 0.6 + ai_compassion = 0.5 + } + } + } +} + +################fp3_clan.8010 - Competent Qadis / More Magistrates, by Ola Jentzsch################# +scripted_trigger fp3_suitable_magistrate_courtier_trigger = { + save_temporary_scope_as = temp_magistrate + is_available_ai_adult = yes + any_child = { count < 1 } + NOT = { is_of_major_or_minor_interest_trigger = { CHARACTER = root } } + can_be_clergy_due_to_gender_trigger = yes + OR = { + learning >= high_skill_rating + stewardship >= high_skill_rating + } + scope:temp_magistrate != scope:$SCOPE$ +} + +scripted_trigger tax_collector_8010_trigger = { + is_available_ai_adult = yes + tax_collector_aptitude = { + target = clan_tax_slot + value >= 1 + } + tax_collector_aptitude = { #since this would make the modifier redundant + target = clan_tax_slot + value < 4 + } +} + +fp3_clan.8010 = { #More Magistrates + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { + has_religion = religion:islam_religion + } + desc = fp3_clan.8010_muslim.t + } + desc = fp3_clan.8010.t + } + } + desc = { + desc = fp3_clan.8010.desc_beginning + first_valid = { + triggered_desc = { + trigger = { + has_religion = religion:islam_religion + } + desc = fp3_clan.8010_muslim_version + } + desc = fp3_clan.8010_non_muslim_version + } + } + theme = corruption + + left_portrait = { + character = scope:competent_tax_collector + animation = stress + triggered_animation = { + trigger = { ai_vengefulness >= low_positive_ai_value } + animation = anger + } + } + right_portrait = { + character = root + animation = personality_rational + triggered_animation = { + trigger = { + OR = { + has_trait = lazy + has_trait = content + has_trait = greedy + has_trait = callous + } + } + animation = dismissal + } + } + + lower_left_portrait = { character = scope:capable_magistrate_candidate } + + trigger = { + has_fp3_dlc_trigger = yes + is_landed = yes + is_available_healthy_adult = yes + + any_tax_collector = { + tax_collector_8010_trigger = yes + save_temporary_scope_as = competent_tax_collector_temp + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + tax_collector_8010_trigger = yes + } + save_scope_as = competent_tax_collector + } + + if = { + limit = { + any_courtier = { + fp3_suitable_magistrate_courtier_trigger = { SCOPE = competent_tax_collector } + } + } + random_courtier = { + limit = { + fp3_suitable_magistrate_courtier_trigger = { SCOPE = competent_tax_collector } + } + save_scope_as = capable_magistrate_candidate + } + } + } + + option = { + name = fp3_clan.8010.a + flavor = tax_farming_capable_courtier_flavor + + trigger = { + exists = scope:capable_magistrate_candidate + } + + remove_courtier_or_guest = scope:capable_magistrate_candidate + + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = slightly_disappointed_opinion + opinion = -10 + } + add_character_modifier = { + modifier = fp3_capable_magistrates_modifier + years = 25 + } + custom_tooltip = increase_aptitude.tt + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_sociability = 0.7 + ai_greed = 0.2 + } + } + } + + option = { + name = fp3_clan.8010.b + + remove_treasury_or_gold = major_treasury_or_gold_value + + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = trusted_me_opinion + opinion = 20 + } + add_character_modifier = { + modifier = fp3_capable_magistrates_modifier + years = 25 + } + custom_tooltip = increase_aptitude.tt + } + + stress_impact = { + greedy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_rationality = 0.6 + } + } + } + + option = { + name = fp3_clan.8010.c + + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = fp3_resentful_opinion + opinion = -15 + } + } + + stress_impact = { + diligent = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + patient = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_rationality = -0.6 + ai_energy = -0.3 + } + } + } +} + +##################fp3_clan.8011 - A Proper Paymaster, by Ola Jentzsch########################### +scripted_trigger fp3_suitable_extra_tax_collector_competence_traits_trigger = { + is_available_ai_adult = yes + NOT = { has_trait = content } + OR = { + tax_collector_aptitude = { + target = clan_tax_slot + value >= 4 + } + AND = { + tax_collector_aptitude = { + target = clan_tax_slot + value >= 3 + } + OR = { + has_trait = ambitious + has_trait = diligent + has_trait = organizer + has_trait = overseer + has_trait = administrator + martial >= high_skill_rating + } + } + } +} + +fp3_clan.8011 = { #A Proper Paymaster + type = character_event + title = fp3_clan.8011.t + desc = fp3_clan.8011.desc + theme = stewardship_wealth_focus + + left_portrait = { + character = scope:competent_tax_collector + animation = personality_greedy + triggered_animation = { + trigger = { ai_boldness >= low_positive_ai_value } + animation = personality_honorable + } + } + right_portrait = { + character = root + animation = personality_content + triggered_animation = { + trigger = { + OR = { + has_trait = paranoid + has_trait = ambitious + has_trait = diligent + has_trait = brave + } + } + animation = dismissal + } + } + + lower_left_portrait = { character = scope:concerned_marshal } + + override_background = { reference = army_camp } + + trigger = { + has_fp3_dlc_trigger = yes + is_available_healthy_adult = yes + + number_of_maa_regiments >= 1 + + exists = cp:councillor_marshal + + any_tax_collector = { + fp3_suitable_extra_tax_collector_competence_traits_trigger = yes + NOT = { + this = root.cp:councillor_marshal + } + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + fp3_suitable_extra_tax_collector_competence_traits_trigger = yes + } + save_scope_as = competent_tax_collector + } + + cp:councillor_marshal = { save_scope_as = concerned_marshal } + } + + option = { + name = fp3_clan.8011.a + + add_character_modifier = { + modifier = fp3_delegated_payments_modifier + years = 25 + } + + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 15 + } + add_character_modifier = { + modifier = fp3_army_influence_modifier + years = 25 + } + } + + scope:concerned_marshal = { + add_opinion = { + target = root + modifier = fp3_meddling_in_my_privileges_opinion + opinion = -30 + } + if = { + limit = { + NOT = { has_relation_rival = scope:competent_tax_collector } + } + set_relation_rival = { + target = scope:competent_tax_collector + reason = rival_over_position + } + } + } + + stress_impact = { + diligent = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + content = medium_stress_impact_gain + just = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.3 + ai_greed = 0.7 + ai_energy = -0.4 + } + } + } + + option = { + name = fp3_clan.8011.b + + duel = { + skill = diplomacy + value = average_skill_rating + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 40 + min = -40 + } + + modifier = { + add = 50 + scope:concerned_marshal = { + OR = { + has_trait = trusting + has_trait = humble + has_trait = content + } + } + } + + modifier = { + add = -50 + scope:concerned_marshal = { + OR = { + has_trait = paranoid + has_trait = arrogant + has_trait = ambitious + } + } + } + + modifier = { + add = -50 + scope:competent_tax_collector = { + OR = { + has_trait = greedy + has_trait = arrogant + has_trait = ambitious + } + } + } + + modifier = { + add = 50 + scope:concerned_marshal = { + OR = { + has_trait = humble + has_trait = trusting + has_trait = loyal + } + } + } + + desc = fp3_clan.8011.b.success + send_interface_toast = { + title = fp3_clan.8011.b.success.tt + left_icon = root + + add_character_modifier = { + modifier = fp3_delegated_payments_modifier + years = 10 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + max = 40 + min = -40 + } + + desc = fp3_clan.8011.b.failure + send_interface_toast = { + title = fp3_clan.8011.b.failure.tt + left_icon = root + + add_character_modifier = { + modifier = fp3_messy_payments_modifier + years = 25 + } + + scope:concerned_marshal = { + add_opinion = { + target = root + modifier = fp3_meddling_in_my_privileges_opinion + opinion = -30 + } + if = { + limit = { + NOT = { has_relation_rival = scope:competent_tax_collector } + } + set_relation_rival = { + target = scope:competent_tax_collector + reason = rival_over_position + } + } + } + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = fp3_frustrated_opinion + opinion = -10 + } + } + } + } + } + + stress_impact = { + trusting = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.8 + ai_honor = 0.8 + ai_vengefulness = -0.4 + } + } + } + + option = { + name = fp3_clan.8011.c + + scope:competent_tax_collector = { + add_opinion = { + target = root + modifier = fp3_resentful_opinion + opinion = -15 + } + } + + stress_impact = { + diligent = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_energy = -0.5 + ai_compassion = 0.2 + } + } + } +} + +##############fp3_clan.8012 - Auspicious Avarice, by Ola Jentzsch################### +scripted_trigger tax_collector_8012_trigger = { + tax_collector_aptitude = { + target = clan_tax_slot + value >= 3 + } + is_available_ai_adult = yes + ai_honor < medium_positive_ai_value +} + +scripted_trigger vassal_check_8012_trigger = { + has_any_good_relationship_with_root_trigger = no + is_ai = yes + reverse_opinion = { + target = scope:$SCOPE$ + value < 25 + } +} + +fp3_clan.8012 = { + type = character_event + title = fp3_clan.8012.t + desc = fp3_clan.8012.desc + theme = stewardship_wealth_focus + + left_portrait = { + character = root + animation = personality_compassionate + triggered_animation = { + trigger = { + OR = { + has_trait = ambitious + has_trait = sadistic + has_trait = greedy + } + } + animation = personality_dishonorable + } + } + right_portrait = { + character = scope:greedy_tax_collector + animation = personality_greedy + triggered_animation = { + trigger = { + OR = { + ai_greed >= high_positive_ai_value + ai_honor < low_positive_ai_value + } + } + animation = schadenfreude + } + } + lower_left_portrait = { + character = scope:extorted_vassal + } + + trigger = { + has_fp3_dlc_trigger = yes + is_available_healthy_adult = yes + + any_tax_collector = { + tax_collector_8012_trigger = yes + save_temporary_scope_as = greedy_tax_collector_temp + any_tax_collector_vassal = { + vassal_check_8012_trigger = { SCOPE = greedy_tax_collector_temp } + } + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + tax_collector_8012_trigger = yes + save_temporary_scope_as = greedy_tax_collector_temp + any_tax_collector_vassal = { + vassal_check_8012_trigger = { SCOPE = greedy_tax_collector_temp } + } + } + save_scope_as = greedy_tax_collector + random_tax_collector_vassal = { + limit = { + vassal_check_8012_trigger = { SCOPE = greedy_tax_collector_temp } + } + save_scope_as = extorted_vassal + } + } + + hidden_effect = { + scope:extorted_vassal = { + pay_short_term_gold = { + target = scope:greedy_tax_collector + gold = medium_gold_value + } + } + } + + save_scope_value_as = { + name = vassal_medium_gold_halved + value = { + value = scope:extorted_vassal.medium_gold_value + divide = 2 + } + } + } + + option = { + name = fp3_clan.8012.a + + scope:greedy_tax_collector = { + pay_short_term_gold = { + target = root + gold = scope:extorted_vassal.medium_gold_value + } + } + + scope:extorted_vassal = { + add_opinion = { + target = root + modifier = extorted_me_opinion + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + generous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -0.4 + ai_honor = -0.4 + } + } + } + + option = { + name = fp3_clan.8012.b + + add_piety = medium_piety_gain + + scope:greedy_tax_collector = { + remove_short_term_gold = scope:extorted_vassal.medium_gold_value + } + + stress_impact = { + zealous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_compassion = 1 + ai_rationality = 0.6 + } + } + } + + option = { + name = fp3_clan.8012.c + + add_prestige = minor_prestige_gain + + scope:greedy_tax_collector = { + pay_short_term_gold = { + target = scope:extorted_vassal + gold = scope:vassal_medium_gold_halved + } + } + scope:greedy_tax_collector = { + pay_short_term_gold = { + target = root + gold = scope:vassal_medium_gold_halved + } + } + + scope:extorted_vassal = { + add_opinion = { + target = root + modifier = fp3_frustrated_opinion + opinion = -10 + } + } + + stress_impact = { + generous = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + vengeful = minor_stress_impact_gain + greedy = minor_stress_impact_gain + + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_vengefulness = -0.5 + ai_compassion = 0.5 + ai_rationality = 0.8 + } + } + } +} + +############fp3_clan.8013 - The Burden of Tax Farming, by Ola Jentzsch######### +scripted_trigger tax_collector_8013_trigger = { + tax_collector_aptitude = { + target = clan_tax_slot + value >= 2 + } + is_available_ai_adult = yes + has_any_bad_relationship_with_root_trigger = no +} + +fp3_clan.8013 = { + type = character_event + title = fp3_clan.8013.t + desc = fp3_clan.8013.desc + theme = learning_scholarship_focus + + left_portrait = { + character = root + animation = personality_forgiving + triggered_animation = { + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arrogant + has_trait = vengeful + has_trait = wrathful + } + } + animation = personality_cynical + } + } + right_portrait = { + character = scope:stressed_tax_collector + animation = boredom + triggered_animation = { + trigger = { + ai_energy >= low_positive_ai_value + } + animation = stress + } + } + + trigger = { + has_fp3_dlc_trigger = yes + is_landed = yes + is_available = yes + is_healthy = yes + age > 10 + + any_tax_collector = { + tax_collector_8013_trigger = yes + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + tax_collector_8013_trigger = yes + } + save_scope_as = stressed_tax_collector + } + + scope:stressed_tax_collector = { + add_stress = major_stress_gain + } + } + + option = { # Assuage tax collector's stress + name = fp3_clan.8013.a + + duel = { + skill = stewardship + target = scope:stressed_tax_collector + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + max = 40 + min = -40 + } + + modifier = { + add = 10 + scope:stressed_tax_collector = { + OR = { + has_trait = diligent + has_trait = ambitious + has_trait = patient + has_trait = trusting + } + } + } + + modifier = { + add = -10 + scope:stressed_tax_collector = { + OR = { + has_trait = lazy + has_trait = paranoid + has_trait = arrogant + } + } + } + + modifier = { + add = -10 + scope:stressed_tax_collector = { + opinion = { + target = root + value <= 25 + } + } + } + + desc = fp3_clan.8013.a.success + send_interface_toast = { + title = fp3_clan.8013.a.success.tt + left_icon = root + + if = { + limit = { + NOT = { has_relation_friend = scope:stressed_tax_collector } + } + progress_towards_friend_effect = { + CHARACTER = scope:stressed_tax_collector + REASON = friend_reassurance + OPINION = 25 + } + } + + scope:stressed_tax_collector = { + add_learning_skill = 1 + add_stewardship_skill = 1 + add_stress = medium_stress_impact_loss + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + max = 40 + min = -40 + } + + desc = fp3_clan.8013.a.failure + send_interface_toast = { + title = fp3_clan.8013.a.failure.tt + left_icon = root + + scope:stressed_tax_collector = { + add_character_modifier = { + modifier = fp3_cutting_corners_modifier + years = 10 + } + } + } + } + } + + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = -0.5 + ai_energy = 0.3 + ai_sociability = 0.7 + ai_compassion = 0.8 + } + } + } + + option = { # Threaten tax collector with violence + name = fp3_clan.8013.b + + trigger = { + scope:stressed_tax_collector = { + NOT = { has_trait = brave } # Brave tax collectors won't be intimidated + } + } + + scope:stressed_tax_collector = { + add_stress = major_stress_gain + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -20 + } + add_learning_skill = 1 + add_stewardship_skill = 1 + } + + stress_impact = { + wrathful = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + calm = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_boldness = 0.4 + ai_sociability = -0.6 + ai_compassion = -0.7 + } + } + } + + option = { #Just move on + name = fp3_clan.8013.c + + stress_impact = { + compassionate = medium_stress_impact_gain + diligent = medium_stress_impact_gain + curious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_energy = -0.5 + ai_sociability = -1 + ai_vengefulness = 0.3 + } + } + } +} diff --git a/events/dlc/fp3/fp3_tax_collector_flavor_events.txt b/events/dlc/fp3/fp3_tax_collector_flavor_events.txt new file mode 100644 index 00000000..3d4c5a46 --- /dev/null +++ b/events/dlc/fp3/fp3_tax_collector_flavor_events.txt @@ -0,0 +1,1063 @@ +namespace = fp3_clan + +# FP3: Additional Tax Collector Flavor Events +# by Chad Uhl + +##################################################################### +# Worth more than Gold? # +# Tax Collector learns of a secret held by one of their taxees # +# by Chad Uhl # +##################################################################### +fp3_clan.1000 = { + type = character_event + title = fp3_clan.1000.t + desc = fp3_clan.1000.desc + theme = realm + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:target_tax_collector + animation = personality_dishonorable + } + lower_center_portrait = scope:secret_holder + + trigger = { + has_fp3_dlc_trigger = yes + is_valid_for_narrow_yearly_events = yes + # Do any of their taxed vassals have a secret that you don't know about? + any_tax_collector = { + save_temporary_scope_as = temp_tax_collector + tax_slot = { + any_tax_slot_vassal = { + # Don't let the tax collector tell on themself + this != scope:temp_tax_collector + # Ensure they have a secret that ROOT doesn't already know + any_secret = { + NOT = { is_known_by = root } + } + } + } + } + } + + immediate = { + random_tax_collector = { + limit = { + save_temporary_scope_as = temp_tax_collector + tax_slot = { + any_tax_slot_vassal = { + # Don't let the tax collector tell on themself + this != scope:temp_tax_collector + # Ensure they have a secret that ROOT doesn't already know + any_secret = { + NOT = { is_known_by = root } + } + } + } + } + weight = { + base = 1 + modifier = { # Base tax collector weighting + add = preferred_tax_collector_modifier + } + modifier = { # Diligent or Ambitious tax collectors are more likely + add = 10 + OR = { + has_trait = diligent + has_trait = ambitious + } + } + modifier = { # Being patient is also useful + add = 5 + has_trait = patient + } + modifier = { # And so is being stubborn + add = 5 + has_trait = stubborn + } + modifier = { # And so is being deceitful + add = 5 + has_trait = deceitful + } + } + save_scope_as = target_tax_collector + tax_slot = { + random_tax_slot_vassal = { + limit = { + any_secret = { + NOT = { is_known_by = root } + } + this != scope:target_tax_collector + } + save_scope_as = secret_holder + random_secret = { + limit = { + NOT = { is_known_by = root } + } + save_scope_as = target_secret + reveal_to = root + hidden_effect = { reveal_to = scope:target_tax_collector } + } + } + } + } + } + + option = { # Some coin for your troubles + name = fp3_clan.1000.a + trigger = { + short_term_gold > minor_gold_value + } + show_as_unavailable = { + short_term_gold < minor_gold_value + } + pay_short_term_gold = { + target = scope:target_tax_collector + gold = minor_gold_value + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = grateful_opinion + opinion = 30 + } + + ai_chance = { + base = 30 + } + + stress_impact = { + #paranoid = medium_stress_impact_loss + } + } + + option = { # take this artifact + name = fp3_clan.1000.b + trigger = { + any_character_artifact = { + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:target_tax_collector } + } + } + show_as_unavailable = { + always = yes + } + + random_character_artifact = { + limit = { + artifact_can_be_gift_to_trigger = { RECIPIENT = scope:target_tax_collector } + } + save_scope_as = target_artifact + set_owner = scope:target_tax_collector + add_artifact_history = { + type = given + actor = root + recipient = scope:target_tax_collector + } + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = grateful_opinion + opinion = 40 + } + + ai_chance = { + base = 30 + } + + stress_impact = { + #paranoid = medium_stress_impact_loss + } + } + + option = { # Wow thanks for this tasty info + name = fp3_clan.1000.c + reverse_add_opinion = { + target = scope:target_tax_collector + # labelled spouse, but is generic and can work in this situation + modifier = spouse_praised_me_opinion + } + + ai_chance = { + base = 30 + } + + stress_impact = { + paranoid = medium_stress_impact_loss + } + } +} + +##################################################################### +# GetHerHis Cup Runneth Over # +# Tax Collector is embezzling money # +# by Chad Uhl # +##################################################################### +fp3_clan.1010 = { + type = character_event + title = fp3_clan.1010.t + desc = fp3_clan.1010.desc + theme = realm + + left_portrait = { + character = scope:steward + animation = thinking + } + right_portrait = { + character = scope:target_tax_collector + animation = shame + } + + trigger = { + has_fp3_dlc_trigger = yes + is_valid_for_narrow_yearly_events = yes + # Check that tax collector is not trustworthy + exists = cp:councillor_steward + any_tax_collector = { + NOT = { this = root.cp:councillor_steward } + root = { + NOT = { has_imprisonment_reason = prev } + } + } + } + + cooldown = { years = 10 } + + immediate = { + cp:councillor_steward = { save_scope_as = steward } + random_tax_collector = { + limit = { + this != scope:steward + } + weight = { + base = 1 + modifier = { # Base tax collector weighting + add = preferred_tax_collector_modifier + } + modifier = { # Deceitful or Ambitious tax collectors are more likely + add = 10 + OR = { + has_trait = deceitful + has_trait = ambitious + } + } + modifier = { # And so is being stubborn + add = 5 + has_trait = stubborn + } + } + save_scope_as = target_tax_collector + } + # Give valid imprisonment reason + add_opinion = { + target = scope:target_tax_collector + modifier = embezzled_opinion + } + # Determine how much money they embezzled + set_variable = { + name = embezzled_gold + value = { + value = 10 + multiply = root.primary_title.tier + # Mult the number of vassals they have in that tax slot + multiply = { + value = 1 + scope:target_tax_collector.tax_slot = { + every_tax_slot_vassal = { + add = 1 + } + } + divide = 2 + min = 1 + } + } + } + } + + option = { # Demand your money back + name = fp3_clan.1010.a + # Skill challenge + duel = { + skills = { stewardship diplomacy } + target = scope:target_tax_collector + # Success: you get your money back + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp3_clan.1010.a.success + send_interface_toast = { + title = fp3_clan.1010.a.success + left_icon = root + right_icon = scope:target_tax_collector + # Apply success effects + # you get the gold; wahoo + add_treasury_or_gold = root.var:embezzled_gold + } + } + # Failure: lower opinion from tax collector + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp3_clan.1010.a.failure + send_interface_toast = { + title = fp3_clan.1010.a.failure + left_icon = root + right_icon = scope:target_tax_collector + # Apply failure effects + # Lower opinion to affect tax collector aptitude + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = was_scolded_opinion + } + } + } + } + + ai_chance = { + base = 33 + modifier = { + has_trait = greedy + add = 50 + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + } + } + + option = { # Opportunity plus instinct equals profit + name = fp3_clan.1010.b + flavor = fp3_clan.1010.b.flavor + # Opinion gain to make the tax collector better at their job + reverse_add_opinion = { + modifier = grateful_opinion + opinion = 35 + target = scope:target_tax_collector + } + add_character_modifier = { + modifier = fp3_cunning_tax_collectors + years = 30 + } + + ai_chance = { + base = 33 + modifier = { + has_trait = generous + add = 50 + } + } + } + + option = { # Don't let it happen again + name = fp3_clan.1010.c + # Lower opinion to affect tax collector aptitude + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = whipped_me_opinion + } + add_dread = medium_dread_gain + + ai_chance = { + base = 33 + modifier = { + OR = { + has_trait = sadistic + has_trait = wrathful + has_trait = vengeful + } + add = 50 + } + modifier = { + OR = { + has_trait = calm + has_trait = content + has_trait = generous + has_trait = forgiving + has_trait = compassionate + } + factor = 0 + } + modifier = { + dread >= 50 + add = -30 + } + } + + stress_impact = { + calm = minor_stress_impact_gain + content = minor_stress_impact_gain + generous = minor_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + } + } + + after = { + # Variable cleanup + remove_variable = embezzled_gold + } +} + +##################################################################### +# Practical Learning # +# Your tax collector improves skill on the job # +# by Chad Uhl # +##################################################################### +fp3_clan.1020 = { + type = character_event + title = fp3_clan.1020.t + desc = { + desc = fp3_clan.1020.desc + first_valid = { + triggered_desc = { + trigger = { var:skill_to_increase = flag:stewardship } + desc = fp3_clan.1020.stewardship + } + triggered_desc = { + trigger = { var:skill_to_increase = flag:intrigue } + desc = fp3_clan.1020.intrigue + } + triggered_desc = { + trigger = { var:skill_to_increase = flag:diplomacy } + desc = fp3_clan.1020.diplomacy + } + } + desc = fp3_clan.1020.outro + } + theme = realm + + left_portrait = { + character = scope:steward + animation = personality_content + } + right_portrait = { + character = scope:target_tax_collector + animation = happiness + } + + cooldown = { years = 5 } + + trigger = { + has_fp3_dlc_trigger = yes + is_valid_for_narrow_yearly_events = yes + exists = cp:councillor_steward + employs_tax_collector = yes + any_tax_collector = { + NOT = { this = root.cp:councillor_steward } + } + } + + immediate = { + cp:councillor_steward = { save_scope_as = steward } + random_tax_collector = { + limit = { this != scope:steward } + weight = { + base = 1 + modifier = { # Base tax collector weighting + add = preferred_tax_collector_modifier + } + modifier = { + add = 10 + has_trait = diligent + } + modifier = { + add = 10 + has_trait = ambitious + } + modifier = { + add = 5 + has_trait = stubborn + } + } + save_scope_as = target_tax_collector + } + random_list = { + 1 = { + set_variable = { + name = skill_to_increase + value = flag:stewardship + } + } + 1 = { + set_variable = { + name = skill_to_increase + value = flag:intrigue + } + } + 1 = { + set_variable = { + name = skill_to_increase + value = flag:diplomacy + } + } + } + } + + option = { # Well done! + name = fp3_clan.1020.a + reverse_add_opinion = { + modifier = spouse_praised_me_opinion + target = scope:target_tax_collector + } + scope:target_tax_collector = { increase_tax_collector_skill = yes } + + ai_chance = { + base = 30 + modifier = { + OR = { + has_trait = compassionate + has_trait = generous + has_trait = gregarious + has_trait = humble + has_trait = just + } + add = 50 + } + modifier = { + OR = { + has_trait = arrogant + has_trait = callous + } + factor = 0 + } + } + + stress_impact = { + arrogant = minor_stress_impact_gain + callous = minor_stress_impact_gain + generous = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + } + } + + option = { # Teach the others your skills + name = fp3_clan.1020.b + trigger = { + any_tax_collector = { + count >= 2 + } + } + scope:target_tax_collector = { increase_tax_collector_skill = yes } + every_tax_collector = { + custom = fp3_clan.1020.every_tax_collector + limit = { + this != scope:target_tax_collector + } + random = { + chance = 30 + increase_tax_collector_skill = yes + root = { + add_to_variable_list = { + name = improved_tax_collectors + target = prev + } + } + } + } + hidden_effect = { + if = { # If any tax collectors were improved, send a toast + limit = { + any_in_list = { + variable = improved_tax_collectors + count >= 1 + } + } + every_in_list = { + variable = improved_tax_collectors + root = { + if = { + limit = { + NOT = { has_variable = num_improved_tax_collectors } + } + set_variable = { + name = num_improved_tax_collectors + value = 0 + } + } + change_variable = { + name = num_improved_tax_collectors + add = 1 + } + } + } + send_interface_toast = { + title = fp3_clan.1020.b.improved_tax_collectors + left_icon = scope:target_tax_collector + custom_tooltip = fp3_clan.1020.b.improved_tax_collectors.desc + } + } + else = { + send_interface_toast = { + title = fp3_clan.1020.b.none_improved + left_icon = scope:target_tax_collector + custom_tooltip = fp3_clan.1020.b.none_improved.desc + } + } + } + + ai_chance = { + base = 40 + } + } + + option = { # Deny recognition + name = fp3_clan.1020.c + scope:target_tax_collector = { increase_tax_collector_skill = yes } + reverse_add_opinion = { + modifier = neglected_opinion + target = scope:target_tax_collector + opinion = -10 + } + add_prestige = medium_prestige_gain + + ai_chance = { + base = 30 + modifier = { + OR = { + has_trait = callous + has_trait = arrogant + } + add = 50 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = generous + has_trait = gregarious + has_trait = humble + has_trait = just + } + factor = 0 + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + callous = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + } + + after = { + remove_variable = skill_to_increase + remove_variable = improved_tax_collectors + if = { + limit = { exists = var:num_improved_tax_collectors } + remove_variable = num_improved_tax_collectors + } + } +} + +##################################################################### +# Tax Dispute # +# Tax collector in conflict with vassal, you can choose sides # +# by Chad Uhl # +##################################################################### +scripted_trigger is_valid_vassal_1030_trigger = { + is_available_ai_adult = yes + # we wanna dunk on them, not their diarch + has_active_diarchy = no +} + +fp3_clan.1030 = { + type = character_event + title = fp3_clan.1030.t + desc = fp3_clan.1030.desc + theme = realm + + left_portrait = { + character = scope:target_taxed_vassal + animation = anger + } + right_portrait = { + character = scope:target_tax_collector + animation = disapproval + } + + trigger = { + has_fp3_dlc_trigger = yes + is_valid_for_narrow_yearly_events = yes + # ensure we have a proper vassal to pull in + any_tax_collector = { + save_temporary_scope_as = temp_tax_collector + tax_slot = { + any_tax_slot_vassal = { + is_valid_vassal_1030_trigger = yes + faith = { + this != scope:temp_tax_collector.faith + faith_hostility_level = { + target = scope:temp_tax_collector.faith + value > faith_fully_accepted_level + } + } + } + } + } + } + + immediate = { + random_tax_collector = { + limit = { + save_temporary_scope_as = temp_tax_collector + tax_slot = { + any_tax_slot_vassal = { + is_valid_vassal_1030_trigger = yes + faith = { + this != scope:temp_tax_collector.faith + faith_hostility_level = { + target = scope:temp_tax_collector.faith + value > faith_fully_accepted_level + } + } + } + } + } + save_scope_as = target_tax_collector + tax_slot = { + random_tax_slot_vassal = { + limit = { + is_valid_vassal_1030_trigger = yes + faith = { + this != scope:target_tax_collector.faith + faith_hostility_level = { + target = scope:target_tax_collector.faith + value > faith_fully_accepted_level + } + } + } + weight = { # Grab the tax slot vassal with the worst stewardship + base = 1 + modifier = { + add = { + value = stewardship + multiply = -1 + } + } + } + save_scope_as = target_taxed_vassal + } + } + } + } + + option = { # Side with the vassal + name = fp3_clan.1030.a + fire_tax_collector = scope:target_tax_collector + reverse_add_opinion = { + target = scope:target_taxed_vassal + modifier = feast_sided_with_me_in_my_fight_opinion + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = feast_sided_against_me_in_my_fight_opinion + } + if = { # add a favor hook if we can + limit = { + can_add_hook = { + target = scope:target_taxed_vassal + type = favor_hook + } + } + add_hook = { + target = scope:target_taxed_vassal + type = favor_hook + years = 3 + } + } + add_character_modifier = { + modifier = fp3_sided_with_different_faith_vassal_tax_dispute + years = 10 + } + scope:target_taxed_vassal.faith = { + change_fervor = { + # Since this event is fired repeatedly, the miniscule value is halved + value = { + value = miniscule_fervor_gain + divide = 2 + } + desc = tax_collector_fired_on_religious_grounds + } + } + + ai_chance = { + base = 50 + modifier = { + root.faith = scope:target_taxed_vassal.faith + add = 50 + } + } + + stress_impact = { + base = minor_stress_impact_gain + } + } + + option = { # Side with the tax collector + name = fp3_clan.1030.b + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = feast_sided_with_me_in_my_fight_opinion + } + reverse_add_opinion = { + target = scope:target_taxed_vassal + modifier = feast_sided_against_me_in_my_fight_opinion + } + if = { # add a favor hook if we can + limit = { + can_add_hook = { + target = scope:target_tax_collector + type = favor_hook + } + } + add_hook = { + target = scope:target_tax_collector + type = favor_hook + years = 3 + } + } + add_character_modifier = { + modifier = fp3_sided_with_tax_collector_tax_dispute + years = 10 + } + + ai_chance = { + base = 50 + } + } + + option = { # Resolve it yourselves + name = fp3_clan.1030.c + reverse_add_opinion = { + target = scope:target_taxed_vassal + modifier = neglected_opinion + opinion = -10 + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = neglected_opinion + opinion = -10 + } + + ai_chance = { + base = 10 + modifier = { + has_trait = lazy + add = 100 + } + } + + stress_impact = { + base = minor_stress_impact_loss + lazy = medium_stress_impact_loss + } + } +} + +##################################################################### +# Mismanaged Land # +# Tax collector makes you aware of someone mismanaging their lands # +# by Chad Uhl # +##################################################################### +fp3_clan.1040 = { + type = character_event + title = fp3_clan.1040.t + desc = fp3_clan.1040.desc + theme = realm + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:target_tax_collector + animation = happiness + } + lower_center_portrait = scope:target_taxed_vassal + + trigger = { + has_fp3_dlc_trigger = yes + is_valid_for_narrow_yearly_events = yes + # ensure we have a proper vassal to pull in + any_tax_collector = { + tax_slot = { + any_tax_slot_vassal = { + is_valid_vassal_1030_trigger = yes + } + } + } + } + + cooldown = { years = 10 } + + immediate = { + random_tax_collector = { + limit = { + tax_slot = { + any_tax_slot_vassal = { + is_valid_vassal_1030_trigger = yes + } + } + } + save_scope_as = target_tax_collector + tax_slot = { + random_tax_slot_vassal = { + limit = { is_valid_vassal_1030_trigger = yes } + weight = { # Grab the tax slot vassal with the worst stewardship + base = 1 + modifier = { + add = { + value = stewardship + multiply = -1 + } + } + } + save_scope_as = target_taxed_vassal + } + } + } + } + + option = { # Educate everyone on your next round + name = fp3_clan.1040.a + add_character_modifier = { + modifier = fp3_tax_collector_become_teacher + years = 10 + } + + ai_chance = { + base = 60 + } + } + + option = { # I'll go help them myself + name = fp3_clan.1040.b + # Skill challenge + duel = { + skill = stewardship + value = { + value = 0 + if = { # easier if you have the stewardship lifestyle selected + limit = { has_lifestyle = stewardship_lifestyle } + add = medium_skill_rating + } + else = { + add = high_skill_rating + } + } + # Success: they improve their skill and you get some money/xp + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = fp3_clan.1040.b.success + send_interface_toast = { + title = fp3_clan.1040.b.success + left_icon = scope:target_tax_collector + right_icon = scope:target_taxed_vassal + # Apply success effects + add_treasury_or_gold = medium_treasury_or_gold_value + scope:target_taxed_vassal = { add_stewardship_skill = 1 } + if = { + limit = { + has_lifestyle = stewardship_lifestyle + } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = respect_opinion + opinion = 15 + } + } + } + # Failure: lower opinion from tax collector + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = fp3_clan.1040.b.failure + send_interface_toast = { + title = fp3_clan.1040.b.failure + left_icon = scope:target_tax_collector + right_icon = scope:target_taxed_vassal + # Apply failure effects + if = { + limit = { + has_lifestyle = stewardship_lifestyle + } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + } + reverse_add_opinion = { + target = scope:target_tax_collector + modifier = disappointed_opinion + opinion = -15 + } + } + } + } + ai_chance = { + base = 0 + } + } + + option = { # Perhaps a physical reminder of my authority is needed + name = fp3_clan.1040.c + reverse_add_opinion = { + modifier = whipped_me_opinion + target = scope:target_taxed_vassal + } + add_dread = medium_dread_gain + + ai_chance = { + base = 50 + modifier = { + OR = { + has_trait = sadistic + has_trait = wrathful + has_trait = vengeful + } + add = 50 + } + modifier = { + OR = { + has_trait = calm + has_trait = content + has_trait = generous + has_trait = forgiving + has_trait = compassionate + } + factor = 0 + } + modifier = { + dread >= 50 + add = -30 + } + } + + stress_impact = { + calm = minor_stress_impact_gain + content = minor_stress_impact_gain + generous = minor_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + sadistic = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + } + } +} diff --git a/events/dlc/fp3/fp3_yearly_events_eren.txt b/events/dlc/fp3/fp3_yearly_events_eren.txt new file mode 100644 index 00000000..2e2a1b29 --- /dev/null +++ b/events/dlc/fp3/fp3_yearly_events_eren.txt @@ -0,0 +1,3134 @@ +namespace = fp3_yearly + +# Daylight Censors (The Drunkenness of Ali Nushtgin) +# Go out drunk/high in broad daylight and risk being caught by your liege's censors? +fp3_yearly.2000 = { + type = character_event + title = fp3_yearly.2000.t + desc = { + triggered_desc = { + trigger = { exists = scope:out_late_drinking } + desc = fp3_yearly.2000.desc_drinking + } + triggered_desc = { + trigger = { exists = scope:out_late_hash } + desc = fp3_yearly.2000.desc_hashish + } + desc = fp3_yearly.2000.desc_warning + } + theme = crown + override_background = { + reference = alley_day + } + left_portrait = { + character = root + animation = laugh + } + right_portrait = { + character = scope:cautious_vassal + animation = worry + } + cooldown = { years = 10 } + + trigger = { + has_fp3_dlc_trigger = yes + is_landed_or_landless_administrative = yes + OR = { + has_trait = drunkard + has_trait = hashishiyah + } + liege ?= { + # You have at least one fellow vassal who would partake in alcohol/hashish with you (at least in moderation) + any_vassal = { + is_ai = yes + NOR = { + this = root + has_trait = zealous + } + } + # Faith must condemn drunkard/hashishiyah + faith = { + religion = religion:islam_religion + NOR = { + trait_is_virtue = drunkard + trait_is_virtue = hashishiyah + } + } + # Liege should not be a hypocrite + NOR = { + has_trait = drunkard + has_trait = hashishiyah + } + # Liege hasn't had the follow-up event in the last 5 years + NOT = { has_character_flag = had_event_fp3_yearly_2001 } + } + } + + immediate = { + # Are we out late drinking or hashishing? + random_list = { + 1 = { + trigger = { + has_trait = drunkard + NOT = { faith = { trait_is_virtue = drunkard } } + } + save_scope_value_as = { name = out_late_drinking value = yes } + } + 1 = { + trigger = { + has_trait = hashishiyah + NOT = { faith = { trait_is_virtue = hashishiyah } } + } + save_scope_value_as = { name = out_late_hash value = yes } + } + } + liege = { + save_scope_as = prudish_liege + random_vassal = { + limit = { + NOR = { + this = root + has_trait = zealous + } + } + save_scope_as = cautious_vassal + } + } + add_stress = minor_stress_impact_loss + } + + option = { # Stay inside, be cautious + name = fp3_yearly.2000.a + add_prestige = minor_prestige_loss + stress_impact = { + arrogant = minor_stress_impact_gain + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { ai_boldness = -0.5 } + } + } + + option = { # Risk going out + name = fp3_yearly.2000.b + flavor = fp3_yearly.2000.b_flavor + if = { + limit = { scope:prudish_liege = { is_ai = yes } } + random_list = { + 50 = { # You get away with it + show_chance = no + desc = fp3_yearly.2000.b_success + send_interface_toast = { + title = fp3_yearly.2000.b_success + left_icon = root + } + } + 50 = { # You get caught and flogged + show_chance = no + desc = fp3_yearly.2000.b_failure + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2000.b_failure + left_icon = root + increase_wounds_effect = { REASON = flogged_by_censors } + } + hidden_effect = { + add_opinion = { + modifier = fp3_flogged_me + target = scope:prudish_liege + } + } + } + } + } + # If liege is player, then trigger event for them to decide what to do with this uppity vassal + else = { + show_as_tooltip = { + random_list = { + # This is a tooltip-only version of the above to communicate the possible consequences of this option + 1 = { + show_chance = no + desc = fp3_yearly.2000.b_success + } + 1 = { + show_chance = no + desc = fp3_yearly.2000.b_failure + increase_wounds_effect = { REASON = flogged_by_censors } + } + } + } + save_scope_as = intoxicated + scope:prudish_liege = { trigger_event = fp3_yearly.2001 } + } + stress_impact = { + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { ai_boldness = 0.5 } + # This option is more interesting for players, so make AI attempt it more often if the liege is a player + modifier = { + scope:prudish_liege = { is_ai = no } + add = 100 + } + } + } +} + +scripted_trigger fp3_yearly_2001_is_valid_druggie = { + is_available_ai_adult = yes + is_of_major_interest_to_root_trigger = yes + OR = { + has_trait = hashishiyah + has_trait = drunkard + } + NOT = { has_trait = craven } +} + +# Public Intoxication +# Your vassal/courtier/family is drunk in broad daylight, have them flogged or no? +fp3_yearly.2001 = { + type = character_event + title = fp3_yearly.2001.t + desc = { + desc = fp3_yearly.2001.desc_intro + triggered_desc = { + trigger = { exists = scope:out_late_drinking } + desc = fp3_yearly.2001.desc_drinking + } + triggered_desc = { + trigger = { exists = scope:out_late_hash } + desc = fp3_yearly.2001.desc_hashish + } + desc = fp3_yearly.2001.desc_outro + } + theme = crown + override_background = { + reference = alley_day + } + left_portrait = { + character = scope:intoxicated + animation = laugh + } + + trigger = { + has_fp3_dlc_trigger = yes + is_landed_or_landless_administrative = yes + # This event can be fired from either the yearly pulse or fp3_yearly.2000 + # If the former is true, then the offending druggie does not yet exist and we need to find one + OR = { + exists = scope:intoxicated + AND = { + NOT = { has_character_flag = had_event_fp3_yearly_2001 } + religion = religion:islam_religion + NOR = { + has_trait = drunkard + has_trait = hashishiyah + } + OR = { + any_vassal = { fp3_yearly_2001_is_valid_druggie = yes } + any_courtier_or_guest = { fp3_yearly_2001_is_valid_druggie = yes } + any_consort = { fp3_yearly_2001_is_valid_druggie = yes } + } + } + } + } + + immediate = { + save_scope_as = prudish_liege + if = { + limit = { NOT = { exists = scope:intoxicated } } + # 10 year cooldown if fired from yearly pulse + add_character_flag = { + flag = had_event_fp3_yearly_2001 + years = 10 + } + every_vassal = { + limit = { fp3_yearly_2001_is_valid_druggie = yes } + add_to_temporary_list = valid_druggies + } + every_courtier_or_guest = { + limit = { fp3_yearly_2001_is_valid_druggie = yes } + add_to_temporary_list = valid_druggies + } + every_consort = { + limit = { fp3_yearly_2001_is_valid_druggie = yes } + add_to_temporary_list = valid_druggies + } + random_in_list = { + list = valid_druggies + save_scope_as = intoxicated + } + random_list = { + 1 = { + trigger = { + scope:intoxicated = { + has_trait = drunkard + NOT = { faith = { trait_is_virtue = drunkard } } + } + } + save_scope_value_as = { name = out_late_drinking value = yes } + } + 1 = { + trigger = { + scope:intoxicated = { + has_trait = hashishiyah + NOT = { faith = { trait_is_virtue = hashishiyah } } + } + } + save_scope_value_as = { name = out_late_hash value = yes } + } + } + } + } + + option = { # Flog them + name = fp3_yearly.2001.a + scope:intoxicated = { + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2000.b_failure + left_icon = root + increase_wounds_effect = { REASON = flogged_by_censors } + } + } + add_piety = minor_piety_gain + reverse_add_opinion = { + target = scope:intoxicated + modifier = fp3_flogged_me + } + if = { + limit = { has_relation_friend = scope:intoxicated } + remove_relation_friend = scope:intoxicated + } + stress_impact = { + sadistic = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { ai_zeal = 0.5 } + } + } + + option = { # Ignore them + name = fp3_yearly.2001.b + add_piety = medium_piety_loss + scope:intoxicated = { + send_interface_toast = { + title = fp3_yearly.2000.b_success + left_icon = root + } + } + stress_impact = { + zealous = medium_stress_impact_gain + just = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { ai_energy = -0.5 } + } + } +} + +scripted_effect fp3_yearly_2010_create_baker_effect = { + create_character = { + age = { 35 50 } + dynasty = none + location = root.capital_province + gender_female_chance = root_faith_dominant_gender_female_chance + faith = root.capital_province.faith + culture = scope:bakers_county.culture + # Personality Traits + trait = greedy + random_traits_list = { + count = 2 + brave = {} + craven = {} + wrathful = {} + lustful = {} + ambitious = {} + diligent = {} + stubborn = {} + vengeful = {} + deceitful = {} + arrogant = {} + arbitrary = {} + impatient = {} + gluttonous = {} + } + random_traits_list = { + count = 1 + education_diplomacy_2 = {} + education_stewardship_2 = {} + education_stewardship_3 = {} + education_stewardship_4 = {} + education_learning_1 = {} + education_learning_2 = {} + } + # Flavor Traits + trait = administrator + random_traits_list = { + count = { 0 2 } + gout_ridden = {} + leper = {} + lovers_pox = {} + pneumonic = {} + dwarf = {} + giant = {} + hunchbacked = {} + weak = {} + clubfooted = {} + lisping = {} + stuttering = {} + wheezing = {} + albino = {} + scaly = {} + spindly = {} + maimed = {} + one_eyed = {} + one_legged = {} + disfigured = {} + blind = {} + } + random_traits = yes + diplomacy = { 8 13 } + martial = { 6 10 } + stewardship = { 8 13 } + intrigue = { 8 13 } + learning = { 13 18 } + prowess = { 3 8 } + after_creation = { + random_list = { + 50 = { + # Character is of average weight, nothing happens + } + 25 = { + change_current_weight = 25 + } + 25 = { + change_current_weight = 75 + } + } + add_character_flag = peasant_outfit + } + save_scope_as = greedy_baker + } + +} + +# Maunds of Wheat (The Bakers of Ghaznain) +# Your royal baker is hoarding bread, how shall you deal with them? +fp3_yearly.2010 = { + type = court_event + title = fp3_yearly.2010.t + desc = fp3_yearly.2010.desc + theme = court + cooldown = { years = 5 } + court_scene = { + button_position_character = root + roles = { + scope:greedy_baker = { + group = event_group + } + root = { + group = event_group + animation = personality_rational + } + scope:random_courtier = { + group = event_group + animation = beg + } + } + } + + trigger = { + has_fp3_dlc_trigger = yes + has_royal_court = yes + has_court_event_flag = no + is_available = yes + government_has_flag = government_is_clan + any_sub_realm_county = { + NOR = { + has_county_modifier = fp3_generous_bakers_modifier + has_county_modifier = fp3_wheat_shortage_modifier + } + } + any_courtier = { + is_available_ai_adult = yes + has_court_event_flag = no + } + } + + immediate = { + court_event_character_flag_effect = yes + random_courtier = { + limit = { + is_available_ai_adult = yes + has_court_event_flag = no + } + save_scope_as = random_courtier + court_event_character_flag_effect = yes + } + random_sub_realm_county = { + save_scope_as = bakers_county + } + fp3_yearly_2010_create_baker_effect = yes + scope:greedy_baker = { court_event_character_flag_effect = yes } + } + + option = { # Trample to death + name = { + text = { + desc = fp3_yearly.2010.a + first_valid = { + triggered_desc = { + trigger = { culture = { has_innovation = innovation_elephantry } } + desc = fp3_yearly.2010.a_elephants + } + triggered_desc = { + trigger = { culture = { has_innovation = innovation_elephantry } } + desc = fp3_yearly.2010.a_camels + } + desc = fp3_yearly.2010.a_horses + } + } + } + flavor = fp3_yearly.2010.a.tt + stress_impact = { + greedy = minor_stress_impact_gain + just = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + scope:greedy_baker = { + death = { + death_reason = death_trampled + killer = root + } + } + add_prestige = minor_prestige_loss + remove_treasury_or_gold = minor_treasury_or_gold_value + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_generous_bakers_modifier + years = 15 + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } + + option = { # Recruit + name = fp3_yearly.2010.b + stress_impact = { + just = minor_stress_impact_gain + zealous = minor_stress_impact_gain + arbitrary = minor_stress_impact_loss + } + add_courtier = scope:greedy_baker + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_wheat_shortage_modifier + years = 10 + } + } + ai_chance = { + base = 10 + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + } + } + + option = { # Take the extra money + name = fp3_yearly.2010.c + add_treasury_or_gold = medium_treasury_or_gold_value + stress_impact = { + just = medium_stress_impact_gain + generous = medium_stress_impact_gain + zealous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_wheat_shortage_modifier + years = 10 + } + } + ai_chance = { + base = 10 + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = generous + factor = 0 + } + } + } + + after = { + clear_court_event_participation = yes + scope:greedy_baker = { clear_court_event_participation = yes } + scope:random_courtier = { clear_court_event_participation = yes } + } +} + +# Maunds of Wheat (Non-Royal Court Version) +fp3_yearly.2011 = { + type = character_event + title = fp3_yearly.2010.t + desc = fp3_yearly.2010.desc + theme = crown + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:random_courtier + animation = beg + } + lower_left_portrait = scope:greedy_baker + cooldown = { years = 10 } + + trigger = { + has_fp3_dlc_trigger = yes + government_has_flag = government_is_clan + highest_held_title_tier >= tier_kingdom + any_courtier = { + is_available_ai_adult = yes + } + any_sub_realm_county = { + NOR = { + has_county_modifier = fp3_generous_bakers_modifier + has_county_modifier = fp3_wheat_shortage_modifier + } + } + } + + immediate = { + random_courtier = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = random_courtier + } + random_sub_realm_county = { + save_scope_as = bakers_county + } + fp3_yearly_2010_create_baker_effect = yes + } + + option = { # Trample to death + name = { + text = { + desc = fp3_yearly.2010.a + first_valid = { + triggered_desc = { + trigger = { culture = { has_innovation = innovation_elephantry } } + desc = fp3_yearly.2010.a_elephants + } + triggered_desc = { + trigger = { culture = { has_innovation = innovation_elephantry } } + desc = fp3_yearly.2010.a_camels + } + desc = fp3_yearly.2010.a_horses + } + } + } + flavor = fp3_yearly.2010.a.tt + stress_impact = { + greedy = minor_stress_impact_gain + just = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + scope:greedy_baker = { + death = { death_reason = death_trampled } + } + add_prestige = minor_prestige_loss + remove_treasury_or_gold = minor_treasury_or_gold_value + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_generous_bakers_modifier + years = 15 + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } + + option = { # Recruit + name = fp3_yearly.2010.b + add_courtier = scope:greedy_baker + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_wheat_shortage_modifier + years = 10 + } + } + stress_impact = { + just = minor_stress_impact_gain + zealous = minor_stress_impact_gain + arbitrary = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + } + } + + option = { # Take the extra money + name = fp3_yearly.2010.c + add_treasury_or_gold = major_treasury_or_gold_value + stress_impact = { + just = medium_stress_impact_gain + generous = medium_stress_impact_gain + zealous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + scope:bakers_county = { + add_county_modifier = { + modifier = fp3_wheat_shortage_modifier + years = 10 + } + } + ai_chance = { + base = 10 + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = generous + factor = 0 + } + } + } +} + +# This tax collector is guilty of at least one vice condemned of public officials in the Quran +scripted_trigger fp3_yearly_2020_is_valid_tax_collector = { + is_available_ai_adult = yes + OR = { + AND = { + has_trait = greedy + faith = { + NOR = { + trait_is_virtue = greedy + trait_is_sin = generous + } + } + } + AND = { + has_trait = arbitrary + faith = { + NOR = { + trait_is_virtue = arbitrary + trait_is_sin = just + } + } + } + AND = { + has_trait = cynical + faith = { + NOR = { + trait_is_virtue = cynical + trait_is_sin = zealous + } + } + } + AND = { + has_trait = contrite + NOT = { faith = { trait_is_virtue = contrite } } + } + } +} + +# Set the Scale: Vassal Version +# The tax collector in charge of you is corrupt, shall you petition to your liege to have them removed? +fp3_yearly.2020 = { + type = character_event + title = fp3_yearly.2020.t + desc = { + desc = fp3_yearly.2020.desc_intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:tax_collector_is_greedy } + desc = fp3_yearly.2020.desc_greedy + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_arbitrary } + desc = fp3_yearly.2020.desc_arbitrary + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_cynical } + desc = fp3_yearly.2020.desc_cynical + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_contrite } + desc = fp3_yearly.2020.desc_contrite + } + } + desc = fp3_yearly.2020.desc_outro + } + theme = stewardship + override_background = { + reference = courtyard + } + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:sinful_tax_collector + animation = shock + } + lower_left_portrait = scope:liege + + trigger = { + is_landed = yes + has_religion = religion:islam_religion + piety_level > low_negative_piety_level + liege ?= { + has_religion = religion:islam_religion + employs_tax_collector = yes + any_tax_collector = { + this != root + any_tax_collector_vassal = { this = root } + fp3_yearly_2020_is_valid_tax_collector = yes + } + # Liege has not been bothered about this tax collector in the last 5 years + NOT = { has_character_flag = had_event_fp3_yearly_2021 } + } + } + + # This event is more likely to trigger if you are your liege's steward (because the effects are more interesting) + weight_multiplier = { + modifier = { + add = 0.5 + has_council_position = councillor_steward + } + } + + immediate = { + liege = { + save_scope_as = liege + add_character_flag = { + flag = had_event_fp3_yearly_2021 + years = 5 + } + random_tax_collector = { + limit = { + this != root + any_tax_collector_vassal = { this = root } + fp3_yearly_2020_is_valid_tax_collector = yes + } + save_scope_as = sinful_tax_collector + # Choose which flaw to criticize in this tax collector + random_list = { + 1 = { + trigger = { + has_trait = greedy + NOT = { faith = { trait_is_virtue = greedy } } + } + save_scope_value_as = { + name = tax_collector_is_greedy + value = yes + } + } + 1 = { + trigger = { + has_trait = arbitrary + NOT = { faith = { trait_is_virtue = arbitrary } } + } + save_scope_value_as = { + name = tax_collector_is_arbitrary + value = yes + } + } + 1 = { + trigger = { + has_trait = cynical + NOT = { faith = { trait_is_virtue = cynical } } + } + save_scope_value_as = { + name = tax_collector_is_cynical + value = yes + } + } + 1 = { + trigger = { + has_trait = contrite + NOT = { faith = { trait_is_virtue = contrite } } + } + save_scope_value_as = { + name = tax_collector_is_contrite + value = yes + } + } + } + } + } + } + + option = { # Petition to have them removed + name = fp3_yearly.2020.a + reverse_add_opinion = { + target = scope:sinful_tax_collector + modifier = fp3_denounced_me + } + if = { #If Liege is AI we can fire the tax collector here + limit = { scope:liege = { is_ai = yes } } + progress_towards_rival_effect = { + CHARACTER = scope:sinful_tax_collector + REASON = rival_tried_to_remove_tax_collector + OPINION = 0 + } + duel = { + skill = learning + value = scope:liege.learning + + 7 = { # Tax collector is removed forever + desc = fp3_yearly.2020.a_success + compare_modifier = { + value = scope:duel_value + multiplier = 0.25 + } + send_interface_toast = { + type = event_toast_effect_good + title = fp3_yearly.2020.a_success + left_icon = root + right_icon = scope:sinful_tax_collector + add_piety = medium_piety_gain + scope:liege = { fire_tax_collector = scope:sinful_tax_collector } + scope:sinful_tax_collector = { + add_character_modifier = fp3_incapable_tax_collector_modifier + } + } + } + 3 = { # Tax collector starts problems with you + desc = fp3_yearly.2020.a_failure + compare_modifier = { + value = scope:duel_value + multiplier = -0.25 + } + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2020.a_failure + left_icon = root + right_icon = scope:sinful_tax_collector + if = { + limit = { has_council_position = councillor_steward } + custom_tooltip = fp3_yearly.2020.a_failure.tt + } + } + if = { + limit = { + has_council_position = councillor_steward + # Don't give the liege two stories of the same type + scope:liege = { NOT = { any_owned_story = { type = story_cycle_tax_rivalry } } } + } + # Create the tax rivalry story, if applicable + scope:liege = { + set_variable = { + name = story_steward + value = root + days = 1 + } + set_variable = { + name = story_tax_collector + value = scope:sinful_tax_collector + days = 1 + } + create_tax_rivalry_story_effect = yes + } + } + } + } + } + else = { #If Liege is not AI this is resolved in an event for liege + show_as_tooltip = { + # The actual progress effect will happen in fp3_yearly.2021 + # This is so that the liege's tooltip accurately reflects on the depth of rivalry + progress_towards_rival_effect = { + CHARACTER = scope:sinful_tax_collector + REASON = rival_tried_to_remove_tax_collector + OPINION = 0 + } + random_list = { + 1 = { + show_chance = no + desc = fp3_yearly.2020.a_success + fire_tax_collector = scope:sinful_tax_collector + scope:sinful_tax_collector = { + add_character_modifier = fp3_incapable_tax_collector_modifier + } + } + 1 = { + show_chance = no + desc = fp3_yearly.2020.a_failure + custom_tooltip = fp3_yearly.2020.a_failure.tt + } + } + } + save_scope_as = denouncing_taxpayer + scope:liege = { trigger_event = fp3_yearly.2021 } + } + stress_impact = { + shy = minor_stress_impact_gain + generous = minor_stress_impact_gain + craven = minor_stress_impact_gain + just = minor_stress_impact_loss + zealous = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_zeal = 0.25 + ai_greed = 0.5 + } + } + } + + option = { # Publicly expose them (causes their learning to tank, meaning they have less aptitude and you will owe fewer taxes to your liege) + name = fp3_yearly.2020.b + reverse_add_opinion = { + target = scope:sinful_tax_collector + modifier = fp3_denounced_me + } + progress_towards_rival_effect = { + CHARACTER = scope:sinful_tax_collector + REASON = rival_tried_to_remove_tax_collector + OPINION = 0 + } + # Tank the collector's aptitude and inform the liege + save_scope_as = denouncing_taxpayer + add_piety = minor_piety_gain + liege = { + send_interface_message = { + type = event_tax_collector_bad_with_text + title = fp3_yearly.2020.b.t + desc = fp3_yearly.2020.b.desc + scope:sinful_tax_collector = { + add_character_modifier = { + modifier = fp3_impious_tax_collector_modifier + years = 30 + } + } + left_icon = scope:sinful_tax_collector + right_icon = scope:denouncing_taxpayer + } + } + stress_impact = { + shy = medium_stress_impact_gain + zealous = minor_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + + option = { # Pray for their soul (opt-out) + name = fp3_yearly.2020.c + add_piety = minor_piety_gain + stress_impact = { + greedy = medium_stress_impact_gain + just = minor_stress_impact_gain + zealous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = greedy + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } +} + +# Set the Scale: Liege Version +# One of your tax collectors is corrupt and your vassal is demanding you fire them +fp3_yearly.2021 = { + type = character_event + title = fp3_yearly.2020.t + desc = { + desc = fp3_yearly.2021.desc_intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:tax_collector_is_greedy } + desc = fp3_yearly.2021.desc_greedy + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_arbitrary } + desc = fp3_yearly.2021.desc_arbitrary + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_cynical } + desc = fp3_yearly.2021.desc_cynical + } + triggered_desc = { + trigger = { exists = scope:tax_collector_is_contrite } + desc = fp3_yearly.2021.desc_contrite + } + } + desc = fp3_yearly.2021.desc_outro + } + theme = stewardship + + + left_portrait = { + character = scope:denouncing_taxpayer + animation = anger + } + right_portrait = { + character = scope:sinful_tax_collector + animation = shame + } + + cooldown = { years = 5 } + + trigger = { + has_religion = religion:islam_religion + employs_tax_collector = yes + any_tax_collector = { + any_tax_collector_vassal = { + has_religion = religion:islam_religion + piety_level > low_negative_piety_level + is_available_adult = yes + trigger_if = { + limit = { NOT = { exists = scope:denouncing_taxpayer } } # If this event isn't a redirect from fp3_yearly.2020, then the featured taxpayer must be an ai + is_ai = yes + NOT = { has_trait = shy } # B/c shy vassals are unlikely to take the denounce option in fp3_yearly.2020.a + } + } + fp3_yearly_2020_is_valid_tax_collector = yes + } + } + + immediate = { + if = { + limit = { NOT = { exists = scope:sinful_tax_collector } } + random_tax_collector = { + limit = { + any_tax_collector_vassal = { + has_religion = religion:islam_religion + piety_level > low_negative_piety_level + is_available_adult = yes + trigger_if = { + limit = { NOT = { exists = scope:denouncing_taxpayer } } # If this event isn't a redirect from fp3_yearly.2020, then the featured taxpayer must be an ai + is_ai = yes + NOT = { has_trait = shy } # B/c shy vassals are unlikely to take the denounce option in fp3_yearly.2020.a + } + } + fp3_yearly_2020_is_valid_tax_collector = yes + } + save_scope_as = sinful_tax_collector + # Choose which flaw to criticize in this tax collector + random_list = { + 1 = { + trigger = { + has_trait = greedy + NOT = { faith = { trait_is_virtue = greedy } } + } + save_scope_value_as = { + name = tax_collector_is_greedy + value = yes + } + } + 1 = { + trigger = { + has_trait = arbitrary + NOT = { faith = { trait_is_virtue = arbitrary } } + } + save_scope_value_as = { + name = tax_collector_is_arbitrary + value = yes + } + } + 1 = { + trigger = { + has_trait = cynical + NOT = { faith = { trait_is_virtue = cynical } } + } + save_scope_value_as = { + name = tax_collector_is_cynical + value = yes + } + } + 1 = { + trigger = { + has_trait = contrite + NOT = { faith = { trait_is_virtue = contrite } } + } + save_scope_value_as = { + name = tax_collector_is_contrite + value = yes + } + } + } + if = { + limit = { NOT = { exists = scope:denouncing_taxpayer } } + random_tax_collector_vassal = { + limit = { + is_available_ai_adult = yes + has_religion = religion:islam_religion + piety_level > low_negative_piety_level + NOT = { has_trait = shy } + } + # More likely to choose a zealous denouncer + weight = { + base = 1 + ai_value_modifier = { + ai_zeal = 0.1 + } + } + save_scope_as = denouncing_taxpayer + } + } + } + } + scope:denouncing_taxpayer = { + assign_quirk_effect = yes + } + scope:denouncing_taxpayer = { + progress_towards_rival_effect = { + CHARACTER = scope:sinful_tax_collector + REASON = rival_tried_to_remove_tax_collector + OPINION = 0 + } + } + } + + option = { # Fire the tax collector + name = fp3_yearly.2021.a + add_piety = minor_piety_gain + fire_tax_collector = scope:sinful_tax_collector + scope:sinful_tax_collector = { + add_character_modifier = fp3_incapable_tax_collector_modifier + } + scope:denouncing_taxpayer = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 20 + } + # If this is a follow-up from fp3_yearly.2020, then send that player a toast + if = { + limit = { is_ai = no } + send_interface_toast = { + type = event_toast_effect_good + title = fp3_yearly.2020.a_success + left_icon = root + right_icon = scope:sinful_tax_collector + } + } + } + if = { + limit = { #Complainer is a house member - collector is not + exists = scope:denouncing_taxpayer.house + scope:denouncing_taxpayer.house = house + trigger_if = { + limit = { + exists = scope:sinful_tax_collector.house + } + scope:sinful_tax_collector.house != house + } + } + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:denouncing_taxpayer + VALUE = minor_unity_gain + DESC = clan_unity_tax_collector_fired_on_request.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + else_if = { + limit = { #Complainer is not a clan member but the tax collector is + exists = scope:sinful_tax_collector.house + scope:sinful_tax_collector.house = house + trigger_if = { + limit = { + exists = scope:denouncing_taxpayer.house + } + scope:denouncing_taxpayer.house != house + } + } + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:sinful_tax_collector + VALUE = minor_unity_loss + DESC = clan_unity_tax_collector_fired.desc + REVERSE_NON_HOUSE_TARGET = no + } + } #If neither is of your house, or if both are we don't adjust unity. + + stress_impact = { + greedy = medium_stress_impact_gain + callous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + just = minor_stress_impact_loss + zealous = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + modifier = { + has_trait = arrogant + factor = 0 + } + modifier = { + has_trait = callous + factor = 0 + } + } + } + + option = { # Ignore + name = fp3_yearly.2021.b + add_piety = medium_piety_loss + scope:denouncing_taxpayer = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + if = { + limit = { is_ai = no } + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2020.a_failure + left_icon = root + right_icon = scope:sinful_tax_collector + custom_tooltip = fp3_yearly.2020.a_failure.tt + } + } + } + # Create the tax rivalry story if the denouncer is your steward + if = { + limit = { + scope:denouncing_taxpayer = { has_council_position = councillor_steward } + # Don't give yourself two stories of the same type + NOT = { any_owned_story = { type = story_cycle_tax_rivalry } } + } + set_variable = { + name = story_steward + value = scope:denouncing_taxpayer + days = 30 + } + set_variable = { + name = story_tax_collector + value = scope:sinful_tax_collector + days = 30 + } + create_tax_rivalry_story_effect = yes + } + if = { + limit = { #Complainer is a house member - collector is not + exists = scope:denouncing_taxpayer.house + scope:denouncing_taxpayer.house = house + trigger_if = { + limit = { + exists = scope:sinful_tax_collector.house + } + scope:sinful_tax_collector.house != house + } + } + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:denouncing_taxpayer + VALUE = minor_unity_loss + DESC = clan_unity_ignore_tax_collector_complaint.desc + REVERSE_NON_HOUSE_TARGET = no + } + } + else_if = { + limit = { #Complainer is not a clan member but the tax collector is + exists = scope:sinful_tax_collector.house + scope:sinful_tax_collector.house = house + trigger_if = { + limit = { + exists = scope:denouncing_taxpayer.house + } + scope:denouncing_taxpayer.house != house + } + } + add_clan_unity_interaction_effect = { + CHARACTER = root + TARGET = scope:sinful_tax_collector + VALUE = minor_unity_gain + DESC = clan_unity_protected_tax_collector_against_complaint.desc + REVERSE_NON_HOUSE_TARGET = no + } + } #If neither is of your house, or if both are we don't adjust unity. + + stress_impact = { + just = medium_stress_impact_gain + zealous = minor_stress_impact_gain + arrogant = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + } + } +} + +# A Beautiful Rule (The Ugliness of Sultan Mahmud) +# You are ugly, but your courtier suggests your beautiful actions are more important to your rule +#Triggers shortly after succession +fp3_yearly.2030 = { + type = character_event + title = fp3_yearly.2030.t + desc = { + desc = fp3_yearly.2030.desc_intro + # Look in the mirror at your "ugly" feature + first_valid = { + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_beauty_bad } + desc = fp3_yearly.2030.desc_beauty_bad + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_spindly } + desc = fp3_yearly.2030.desc_spindly + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_disfigured } + desc = fp3_yearly.2030.desc_disfigured + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_scaly } + desc = fp3_yearly.2030.desc_scaly + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_albino } + desc = fp3_yearly.2030.desc_albino + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_hunchbacked } + desc = fp3_yearly.2030.desc_hunchbacked + } + triggered_desc = { + trigger = { has_character_flag = fp3_yearly_2030_inbred } + desc = fp3_yearly.2030.desc_inbred + } + } + desc = fp3_yearly.2030.desc_outro + } + theme = crown + override_background = { + reference = sitting_room + } + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:reassuring_courtier + animation = personality_compassionate + } + + cooldown = { years = 100 } + + trigger = { + has_fp3_dlc_trigger = yes + is_available_adult = yes + is_landed = yes + OR = { + has_trait = beauty_bad + has_trait = spindly + has_trait = disfigured + has_trait = scaly + has_trait = albino + has_trait = hunchbacked + has_trait = inbred + } + NOR = { + has_trait = callous + has_trait = sadistic + has_trait = beauty_good + } + faith = { + trait_is_virtue = generous + } + } + + immediate = { + # Figure out which ugliness we will pick at + random_list = { + 1 = { + trigger = { has_trait = beauty_bad } + add_character_flag = { + flag = fp3_yearly_2030_beauty_bad + days = 1 + } + } + 1 = { + trigger = { has_trait = spindly } + add_character_flag = { + flag = fp3_yearly_2030_spindly + days = 1 + } + } + 1 = { + trigger = { has_trait = disfigured } + add_character_flag = { + flag = fp3_yearly_2030_disfigured + days = 1 + } + } + 1 = { + trigger = { has_trait = scaly } + add_character_flag = { + flag = fp3_yearly_2030_scaly + days = 1 + } + } + 1 = { + trigger = { has_trait = albino } + add_character_flag = { + flag = fp3_yearly_2030_albino + days = 1 + } + } + 1 = { + trigger = { has_trait = hunchbacked } + add_character_flag = { + flag = fp3_yearly_2030_hunchbacked + days = 1 + } + } + 1 = { + trigger = { has_trait = inbred } + add_character_flag = { + flag = fp3_yearly_2030_inbred + days = 1 + } + } + } + # Figure out which courtier should reassure us + # If we have a lady in waiting, then use her + if = { + limit = { + employs_court_position = lady_in_waiting_court_position + is_available_ai_adult = yes + has_contagious_deadly_disease_trigger = no + } + random_court_position_holder = { + type = lady_in_waiting_court_position + save_scope_as = reassuring_courtier + } + } + # Otherwise, pick court jester + else_if = { + limit = { + employs_court_position = court_jester_court_position + is_available_ai_adult = yes + has_contagious_deadly_disease_trigger = no + } + random_court_position_holder = { + type = court_jester_court_position + save_scope_as = reassuring_courtier + } + } + # Otherwise, pick some (weighted) rando + else = { + random_courtier = { + limit = { + is_available_ai_adult = yes + has_contagious_deadly_disease_trigger = no + } + weight = { + base = 100 + opinion_modifier = { + opinion_target = root + } + modifier = { + has_trait = zealous + add = 50 + } + modifier = { + has_trait = cynical + add = -50 + } + modifier = { + has_trait = generous + add = 50 + } + modifier = { + has_trait = greedy + add = -50 + } + } + save_scope_as = reassuring_courtier + } + } + } + + + option = { # Act generously (even if it is instrumental and not in your nature) + name = fp3_yearly.2030.a + trigger = { + NOT = { has_trait = generous } + } + remove_short_term_gold = medium_gold_value + add_character_modifier = { + modifier = generous_beauty + years = 10 + } + stress_impact = { + greedy = major_stress_impact_gain + arrogant = minor_stress_impact_gain + deceitful = minor_stress_impact_gain + callous = minor_stress_impact_gain + temperate = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + option = { # Actions will speak louder than words + name = fp3_yearly.2030.d + add_prestige = minor_prestige_value + stress_impact = { + base = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + impatient = minor_stress_impact_gain + temperate = minor_stress_impact_loss + trusting = minor_stress_impact_loss + humble = minor_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + option = { # Bask in your generosity + name = fp3_yearly.2030.b + trigger = { + has_trait = generous + } + trait = generous + add_prestige = medium_prestige_gain + give_nickname = nick_the_beautiful_generous + remove_short_term_gold = medium_gold_value + add_character_modifier = { + modifier = generous_beauty + years = 10 + } + stress_impact = { + generous = major_stress_impact_loss + arrogant = minor_stress_impact_loss + temperate = minor_stress_impact_loss + deceitful = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Gain dread + name = fp3_yearly.2030.c + add_dread = medium_dread_gain + scope:reassuring_courtier = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + imprison_character_effect = { #We kill the messenger, so to speak + TARGET = scope:reassuring_courtier + IMPRISONER = root + } + add_character_modifier = { + modifier = dreaded_beauty + } + stress_impact = { + compassionate = medium_stress_impact_gain + just = minor_stress_impact_gain + content = minor_stress_impact_gain + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + generous = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + callous = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = compassionate + factor = 0 + } + modifier = { + has_trait = content + factor = 0 + } + modifier = { + has_trait = just + factor = 0 + } + modifier = { + has_trait = humble + factor = 0 + } + } + } +} + +# Checks whether any of the character's provinces recognize the caliph as their HOF +scripted_trigger fp3_yearly_2040_attackers_provinces_respect_caliph = { + any_held_title = { + title_tier = county + faith.religious_head = root + } +} + +# All counties that respect the caliph as their HOF get a massive levy size penalty +# NB: Scope:caliph needs to be set before this effect is called +scripted_effect fp3_yearly_2040_religious_desertion_effect = { + every_held_county = { + limit = { faith.religious_head = scope:caliph } + add_county_modifier = { + modifier = fp3_religious_desertion_modifier + years = 5 + } + } +} + +# Commander of the Faithful (The Army of Ya'qub ibn Laith) +# As the Caliph, if someone is warring you and has counties that obey you as their HOF, then you have the option of pleading with their army to stand down +fp3_yearly.2040 = { + type = character_event + title = fp3_yearly.2040.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + any_character_war = { + primary_attacker = { faith.religion = religion:islam_religion } + } + } + desc = fp3_yearly.2040.desc_attacker_is_muslim + } + desc = fp3_yearly.2040.desc_attacker_is_not_muslim + } + } + theme = martial + override_background = { + reference = terrain_scope + } + left_portrait = { + character = scope:infidel + animation = war_attacker + } + cooldown = { years = 5 } + + trigger = { + has_fp3_dlc_trigger = yes + # Below triggers are similar to is_available_adult but without is_in_army + is_adult = yes + is_alive = yes + exists = location + is_imprisoned = no + has_contagious_deadly_disease_trigger = no + NOT = { has_trait = incapable } + NOT = { has_variable = gone_adventuring } + NOT = { has_character_flag = planning_an_activity } + faith.religion = religion:islam_religion + is_at_war_as_defender = yes + any_character_war = { + primary_defender = root + primary_attacker = { + exists = location + fp3_yearly_2040_attackers_provinces_respect_caliph = yes + } + } + } + + immediate = { + save_scope_as = caliph + if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { save_scope_as = imam } + } + random_character_war = { + limit = { + primary_defender = root + primary_attacker = { + exists = location + fp3_yearly_2040_attackers_provinces_respect_caliph = yes + } + } + primary_attacker = { + save_scope_as = infidel + location = { save_scope_as = background_terrain_scope } # For event_bg + } + } + } + + option = { # Make a plea + name = fp3_yearly.2040.a + flavor = fp3_yearly.2040.a.flavor + duel = { + skill = learning + target = scope:infidel + + 70 = { # Shouldn't be too difficult to succeed + desc = fp3_yearly.2040.a_success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -55 + max = 35 + } + # More pious caliphs should be able to succeed more easily + modifier = { + add = { + value = piety_level + subtract = 1 + } + } + modifier = { + add = { + value = num_virtuous_traits + } + } + scope:infidel = { + # If the attacker is a player, notify them of the penalty they just suffered + if = { + limit = { is_ai = no } + trigger_event = fp3_yearly.2041 + show_as_tooltip = { fp3_yearly_2040_religious_desertion_effect = yes } # tt only, the actual effect happens in fp3_yearly.2041 + } + else = { + fp3_yearly_2040_religious_desertion_effect = yes + } + } + send_interface_toast = { + type = event_toast_effect_good + title = fp3_yearly.2040.a_success + left_icon = scope:infidel + reverse_add_opinion = { + target = scope:infidel + modifier = fp3_sabotaged_me + } + } + } + 30 = { + desc = fp3_yearly.2040.a_failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -35 + max = 55 + } + modifier = { + add = { + value = piety_level + subtract = 1 + multiply = -1 + } + } + modifier = { + add = { + value = num_sinful_traits + } + } + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2040.a_failure + left_icon = root + add_prestige = medium_prestige_loss + increase_wounds_effect = { REASON = piteously_cut_down } + } + } + } + stress_impact = { + craven = major_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_vengefulness = 0.5 + } + # Add only negative % chance due to shyness + modifier = { + add = { + value = ai_sociability + multiply = -1 + max = 0 + } + } + # Is the caliph's or imam's learning higher? + compare_modifier = { + target = scope:imam + value = learning + multiplier = -5 + } + } + } + + option = { # Have your imam make a plea. Ignores your own learning/piety + name = fp3_yearly.2040.b + flavor = fp3_yearly.2040.b.flavor + trigger = { exists = scope:imam } + scope:imam = { + duel = { + skill = learning + target = scope:infidel + + 60 = { # Harder for your imam to succeed + desc = fp3_yearly.2040.b_success + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -55 + max = 35 + } + scope:infidel = { + # If the attacker is a player, notify them of this huge penalty + if = { + limit = { is_ai = no } + trigger_event = fp3_yearly.2041 + show_as_tooltip = { fp3_yearly_2040_religious_desertion_effect = yes } # tt only, the actual effect happens in fp3_yearly.2041 + } + else = { + fp3_yearly_2040_religious_desertion_effect = yes + } + } + scope:caliph = { + send_interface_toast = { + type = event_toast_effect_good + title = fp3_yearly.2040.b_success + left_icon = scope:infidel + reverse_add_opinion = { + target = scope:infidel + modifier = fp3_sabotaged_me + } + } + } + } + 40 = { # Is killed + desc = fp3_yearly.2040.b_failure + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -35 + max = 55 + } + scope:caliph = { + send_interface_toast = { + type = event_toast_effect_bad + title = fp3_yearly.2040.b_failure + left_icon = scope:imam + scope:imam = { death = { death_reason = death_piteously_cut_down } } + } + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_vengefulness = 0.5 + } + # Is the caliph's or imam's learning higher? + compare_modifier = { + target = scope:imam + value = learning + multiplier = 5 + } + } + } + + option = { # Do nothing + name = fp3_yearly.2040.c + stress_impact = { + brave = major_stress_impact_gain + vengeful = minor_stress_impact_gain + wrathful = medium_stress_impact_gain + zealous = major_stress_impact_gain + } + ai_chance = { + base = 0 # Should be low, we want the AI to take the other two options + ai_value_modifier = { + ai_vengefulness = -0.5 + ai_energy = -1 + } + } + } +} + +# Commander of the Faithful: Attacker Version +# The Caliph has asked your armies to stand down and they complied! +fp3_yearly.2041 = { + type = character_event + title = fp3_yearly.2040.t + desc = { + first_valid = { + triggered_desc = { + # You do not respect the caliph + trigger = { + OR = { + has_trait = cynical + faith.religious_head != scope:caliph + } + } + desc = fp3_yearly.2041.desc_cynical + } + desc = fp3_yearly.2041.desc_fallback + } + } + theme = martial + override_background = { + reference = terrain_scope + } + left_portrait = { + character = scope:caliph + animation = war_defender + } + + immediate = { + fp3_yearly_2040_religious_desertion_effect = yes + scope:caliph.location = { save_scope_as = background_terrain_scope } + } + + option = { # Curse them! + name = fp3_yearly.2041.a + } +} + +# Futuwaa Lodges: Check if root has any valid members of futuwaa lodges. If so, trigger ongoing_futuwaa_lodges_events +fp3_yearly.2050 = { + hidden = yes + + immediate = { + every_courtier = { + limit = { fp3_is_valid_futuwaa_member = { SPONSOR = root } } + add_to_list = futuwaa_members + } + house ?= { + every_house_member = { + limit = { + fp3_is_valid_futuwaa_member = { SPONSOR = root } + NOT = { is_courtier_of = root } + } + add_to_list = futuwaa_members + } + } + if = { + limit = { any_in_list = { list = futuwaa_members } } + trigger_event = { on_action = ongoing_futuwaa_lodges_events } + } + } +} + +# Futuwaa Lodges: Prowess skill increased +fp3_yearly.2051 = { + hidden = yes + + # This event is more likely to trigger if you have more futuwaa members + weight_multiplier = { + base = 1 + modifier = { + add = { + value = list_size:futuwaa_members + subtract = 1 + } + } + } + + immediate = { + random_in_list = { + list = futuwaa_members + weight = { + base = 1 + # Unskilled members are more likely to have their stats improved + modifier = { + add = { + value = prowess + multiply = -0.1 + } + } + # Virtuous members are more likely to benefit + modifier = { + add = { + value = num_virtuous_traits + subtract = num_sinful_traits + } + } + # Martial members are more likely to... you get the idea + modifier = { + OR = { + has_focus = education_martial + has_education_martial_trigger = yes + } + add = 2 + } + # AI energy (Diligent, lazy, etc.) + modifier = { + ai_energy <= high_negative_ai_value + add = -2 + } + modifier = { + ai_energy >= high_positive_ai_value + add = 2 + } + } + save_scope_as = improved_youth + } + send_interface_message = { + type = event_martial_good + title = fp3_yearly.2050.t + left_icon = scope:improved_youth + scope:improved_youth = { add_prowess_skill = 2 } + } + } +} + +# Futuwaa Lodges: Martial skill increased (martial focus only) +fp3_yearly.2052 = { + hidden = yes + + trigger = { + any_in_list = { + list = futuwaa_members + OR = { + has_focus = education_martial + has_education_martial_trigger = yes + } + } + } + + # This event is more likely to trigger if you have more futuwaa members + weight_multiplier = { + base = 1 + modifier = { + add = { + value = list_size:futuwaa_members + subtract = 1 + } + } + } + + immediate = { + random_in_list = { + list = futuwaa_members + weight = { + base = 1 + # Unskilled members are more likely to have their stats improved + modifier = { + add = { + value = martial + multiply = -0.1 + } + } + # Virtuous members are more likely to benefit + modifier = { + add = { + value = num_virtuous_traits + subtract = num_sinful_traits + } + } + # AI energy (Diligent, lazy, etc.) + modifier = { + ai_energy <= high_negative_ai_value + add = -2 + } + modifier = { + ai_energy >= high_positive_ai_value + add = 2 + } + } + save_scope_as = improved_youth + } + send_interface_message = { + type = event_martial_good + title = fp3_yearly.2050.t + left_icon = scope:improved_youth + scope:improved_youth = { add_martial_skill = 2 } + } + } +} + +# Futuwaa Lodges: Virtuous trait added +fp3_yearly.2053 = { + hidden = yes + + trigger = { + any_in_list = { + list = futuwaa_members + number_of_personality_traits < childhood_personality_trait_gain_limit + } + } + + # This event is more likely to trigger if you have more futuwaa members + weight_multiplier = { + base = 1 + modifier = { + add = { + value = list_size:futuwaa_members + subtract = 1 + } + } + } + + immediate = { + random_in_list = { + list = futuwaa_members + weight = { + base = 1 + # More zealous members are more likely to benefit (and vice versa) + modifier = { + add = { + value = ai_zeal + divide = 100 + } + } + } + save_scope_as = improved_youth + } + # Choose a random virtue to give the youth + # I know... there is no better way to do this + random_list = { + # Brave + 1 = { + trigger = { + faith = { trait_is_virtue = brave } + scope:improved_youth = { + NOR = { + has_trait = brave + has_trait = craven + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:brave + } + } + # Craven + 1 = { + trigger = { + faith = { trait_is_virtue = craven } + scope:improved_youth = { + NOR = { + has_trait = brave + has_trait = craven + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:craven + } + } + # Calm + 1 = { + trigger = { + faith = { trait_is_virtue = calm } + scope:improved_youth = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:calm + } + } + # Wrathful + 1 = { + trigger = { + faith = { trait_is_virtue = wrathful } + scope:improved_youth = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:wrathful + } + } + # Chaste + 1 = { + trigger = { + faith = { trait_is_virtue = chaste } + scope:improved_youth = { + NOR = { + has_trait = chaste + has_trait = lustful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:chaste + } + } + # Lustful + 1 = { + trigger = { + faith = { trait_is_virtue = lustful } + scope:improved_youth = { + NOR = { + has_trait = chaste + has_trait = lustful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:lustful + } + } + # Content + 1 = { + trigger = { + faith = { trait_is_virtue = content } + scope:improved_youth = { + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:content + } + } + # Ambitious + 1 = { + trigger = { + faith = { trait_is_virtue = ambitious } + scope:improved_youth = { + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:ambitious + } + } + # Diligent + 1 = { + trigger = { + faith = { trait_is_virtue = diligent } + scope:improved_youth = { + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:diligent + } + } + # Lazy + 1 = { + trigger = { + faith = { trait_is_virtue = lazy } + scope:improved_youth = { + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:lazy + } + } + # Fickle + 1 = { + trigger = { + faith = { trait_is_virtue = fickle } + scope:improved_youth = { + NOR = { + has_trait = fickle + has_trait = stubborn + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:fickle + } + } + # Stubborn + 1 = { + trigger = { + faith = { trait_is_virtue = stubborn } + scope:improved_youth = { + NOR = { + has_trait = fickle + has_trait = stubborn + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:stubborn + } + } + # Forgiving + 1 = { + trigger = { + faith = { trait_is_virtue = forgiving } + scope:improved_youth = { + NOR = { + has_trait = forgiving + has_trait = vengeful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:forgiving + } + } + # Vengeful + 1 = { + trigger = { + faith = { trait_is_virtue = vengeful } + scope:improved_youth = { + NOR = { + has_trait = forgiving + has_trait = vengeful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:vengeful + } + } + # Generous + 1 = { + trigger = { + faith = { trait_is_virtue = generous } + scope:improved_youth = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:generous + } + } + # Greedy + 1 = { + trigger = { + faith = { trait_is_virtue = greedy } + scope:improved_youth = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:greedy + } + } + # Gregarious + 1 = { + trigger = { + faith = { trait_is_virtue = gregarious } + scope:improved_youth = { + NOR = { + has_trait = gregarious + has_trait = shy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:gregarious + } + } + # Shy + 1 = { + trigger = { + faith = { trait_is_virtue = shy } + scope:improved_youth = { + NOR = { + has_trait = gregarious + has_trait = shy + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:shy + } + } + # Honest + 1 = { + trigger = { + faith = { trait_is_virtue = honest } + scope:improved_youth = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:honest + } + } + # Deceitful + 1 = { + trigger = { + faith = { trait_is_virtue = deceitful } + scope:improved_youth = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:deceitful + } + } + # Humble + 1 = { + trigger = { + faith = { trait_is_virtue = humble } + scope:improved_youth = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:humble + } + } + # Arrogant + 1 = { + trigger = { + faith = { trait_is_virtue = arrogant } + scope:improved_youth = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:arrogant + } + } + # Just + 1 = { + trigger = { + faith = { trait_is_virtue = just } + scope:improved_youth = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:just + } + } + # Arbitrary + 1 = { + trigger = { + faith = { trait_is_virtue = arbitrary } + scope:improved_youth = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:arbitrary + } + } + # Patient + 1 = { + trigger = { + faith = { trait_is_virtue = patient } + scope:improved_youth = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:patient + } + } + # Impatient + 1 = { + trigger = { + faith = { trait_is_virtue = impatient } + scope:improved_youth = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:impatient + } + } + # Temperate + 1 = { + trigger = { + faith = { trait_is_virtue = temperate } + scope:improved_youth = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:temperate + } + } + # Gluttonous + 1 = { + trigger = { + faith = { trait_is_virtue = gluttonous } + scope:improved_youth = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:gluttonous + } + } + # Trusting + 1 = { + trigger = { + faith = { trait_is_virtue = trusting } + scope:improved_youth = { + NOR = { + has_trait = trusting + has_trait = paranoid + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:trusting + } + } + # Paranoid + 1 = { + trigger = { + faith = { trait_is_virtue = paranoid } + scope:improved_youth = { + NOR = { + has_trait = trusting + has_trait = paranoid + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:paranoid + } + } + # Zealous + 1 = { + trigger = { + faith = { trait_is_virtue = zealous } + scope:improved_youth = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:zealous + } + } + # Cynical + 1 = { + trigger = { + faith = { trait_is_virtue = cynical } + scope:improved_youth = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:cynical + } + } + # Compassionate + 1 = { + trigger = { + faith = { trait_is_virtue = compassionate } + scope:improved_youth = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:compassionate + } + } + # Callous + 1 = { + trigger = { + faith = { trait_is_virtue = callous } + scope:improved_youth = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:callous + } + } + # Sadistic + 1 = { + trigger = { + faith = { trait_is_virtue = sadistic } + scope:improved_youth = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + save_scope_value_as = { + name = virtuous_trait + value = flag:sadistic + } + } + } + send_interface_message = { + type = event_martial_good + title = fp3_yearly.2050.t + left_icon = scope:improved_youth + scope:improved_youth = { + if = { + limit = { scope:virtuous_trait = flag:brave } + add_trait = brave + } + if = { + limit = { scope:virtuous_trait = flag:craven } + add_trait = craven + } + if = { + limit = { scope:virtuous_trait = flag:calm } + add_trait = calm + } + if = { + limit = { scope:virtuous_trait = flag:wrathful } + add_trait = wrathful + } + if = { + limit = { scope:virtuous_trait = flag:chaste } + add_trait = chaste + } + if = { + limit = { scope:virtuous_trait = flag:lustful } + add_trait = lustful + } + if = { + limit = { scope:virtuous_trait = flag:content } + add_trait = content + } + if = { + limit = { scope:virtuous_trait = flag:ambitious } + add_trait = ambitious + } + if = { + limit = { scope:virtuous_trait = flag:diligent } + add_trait = diligent + } + if = { + limit = { scope:virtuous_trait = flag:lazy } + add_trait = lazy + } + if = { + limit = { scope:virtuous_trait = flag:fickle } + add_trait = fickle + } + if = { + limit = { scope:virtuous_trait = flag:stubborn } + add_trait = stubborn + } + if = { + limit = { scope:virtuous_trait = flag:forgiving } + add_trait = forgiving + } + if = { + limit = { scope:virtuous_trait = flag:vengeful } + add_trait = vengeful + } + if = { + limit = { scope:virtuous_trait = flag:generous } + add_trait = generous + } + if = { + limit = { scope:virtuous_trait = flag:greedy } + add_trait = greedy + } + if = { + limit = { scope:virtuous_trait = flag:gregarious } + add_trait = gregarious + } + if = { + limit = { scope:virtuous_trait = flag:shy } + add_trait = shy + } + if = { + limit = { scope:virtuous_trait = flag:honest } + add_trait = honest + } + if = { + limit = { scope:virtuous_trait = flag:deceitful } + add_trait = deceitful + } + if = { + limit = { scope:virtuous_trait = flag:humble } + add_trait = humble + } + if = { + limit = { scope:virtuous_trait = flag:arrogant } + add_trait = arrogant + } + if = { + limit = { scope:virtuous_trait = flag:just } + add_trait = just + } + if = { + limit = { scope:virtuous_trait = flag:arbitrary } + add_trait = arbitrary + } + if = { + limit = { scope:virtuous_trait = flag:patient } + add_trait = patient + } + if = { + limit = { scope:virtuous_trait = flag:impatient } + add_trait = impatient + } + if = { + limit = { scope:virtuous_trait = flag:temperate } + add_trait = temperate + } + if = { + limit = { scope:virtuous_trait = flag:gluttonous } + add_trait = gluttonous + } + if = { + limit = { scope:virtuous_trait = flag:trusting } + add_trait = trusting + } + if = { + limit = { scope:virtuous_trait = flag:paranoid } + add_trait = paranoid + } + if = { + limit = { scope:virtuous_trait = flag:zealous } + add_trait = zealous + } + if = { + limit = { scope:virtuous_trait = flag:cynical } + add_trait = cynical + } + if = { + limit = { scope:virtuous_trait = flag:compassionate } + add_trait = compassionate + } + if = { + limit = { scope:virtuous_trait = flag:callous } + add_trait = callous + } + if = { + limit = { scope:virtuous_trait = flag:sadistic } + add_trait = sadistic + } + } + } + } +} + +# Madrasas: Check if root has any valid members of madrasas. If so, trigger ongoing_madrasas_events +fp3_yearly.2060 = { + hidden = yes + + immediate = { + every_courtier = { + limit = { fp3_is_valid_madrasa_pupil = { SPONSOR = root } } + add_to_list = madrasa_pupils + } + house ?= { + every_house_member = { + limit = { + fp3_is_valid_madrasa_pupil = { SPONSOR = root } + NOT = { is_courtier_of = root } + } + add_to_list = madrasa_pupils + } + } + + if = { + limit = { any_in_list = { list = madrasa_pupils } } + trigger_event = { on_action = ongoing_madrasas_events } + } + } +} + +# Madrasas: Learning skill increased +fp3_yearly.2061 = { + hidden = yes + + # This event is more likely to trigger if you have more madrasa pupils + weight_multiplier = { + base = 1 + modifier = { + add = { + value = list_size:madrasa_pupils + subtract = 1 + } + } + } + + immediate = { + random_in_list = { + list = madrasa_pupils + weight = { + base = 1 + # Skilled members are more likely to have their stats improved + modifier = { + add = { + value = learning + multiply = 0.1 + } + } + # Learning education members are more likely to gain more learning + modifier = { + has_focus = education_learning + add = 2 + } + # AI energy (Diligent, lazy, etc.) + modifier = { + ai_energy <= high_negative_ai_value + add = -2 + } + modifier = { + ai_energy >= high_positive_ai_value + add = 2 + } + } + save_scope_as = improved_youth + } + send_interface_message = { + type = event_learning_good + title = { + first_valid = { + # Call them madrasas if our capital is advanced enough + triggered_desc = { + trigger = { + capital_county ?= { + development_level >= bad_development_level + } + } + desc = fp3_yearly.2060.t_madrasas + } + # Otherwise just say that the youth are being educated in houses of worship + desc = fp3_yearly.2060.t_houses_of_worship + } + } + left_icon = scope:improved_youth + scope:improved_youth = { add_learning_skill = 2 } + } + } +} + +# Madrasas: Physician experience gain +fp3_yearly.2062 = { + hidden = yes + + # This event is more likely to trigger if you have more futuwaa members + weight_multiplier = { + base = 1 + modifier = { + add = { + value = list_size:madrasa_pupils + subtract = 1 + } + } + } + + immediate = { + random_in_list = { + list = madrasa_pupils + weight = { + base = 1 + # Members w/high learning are more likely to gain physician experience + modifier = { + add = { + value = learning + multiply = 0.1 + } + } + # AI energy (Diligent, lazy, etc.) + modifier = { + ai_energy <= high_negative_ai_value + add = -2 + } + modifier = { + ai_energy >= high_positive_ai_value + add = 2 + } + } + save_scope_as = improved_youth + } + send_interface_message = { + type = event_learning_good + # "Madrasas" vs "Schooling in Mosques" + title = { + first_valid = { + # Call them madrasas if our capital is advanced enough + triggered_desc = { + trigger = { + capital_county ?= { + development_level >= bad_development_level + } + } + desc = fp3_yearly.2060.t_madrasas + } + # Otherwise just say that the youth are being educated in houses of worship + desc = fp3_yearly.2060.t_houses_of_worship + } + } + left_icon = scope:improved_youth + scope:improved_youth = { + if = { + limit = { has_trait = lifestyle_physician } + add_trait_xp = { + trait = lifestyle_physician + value = { + integer_range = { + min = 5 + max = 10 + } + } + } + } + else = { add_trait = lifestyle_physician } + } + } + } +} diff --git a/events/dlc/fp3/fp3_yearly_events_hugo.txt b/events/dlc/fp3/fp3_yearly_events_hugo.txt new file mode 100644 index 00000000..6ae8aa81 --- /dev/null +++ b/events/dlc/fp3/fp3_yearly_events_hugo.txt @@ -0,0 +1,286 @@ +namespace = fp3_h_yearly + +################################### +# You have pissed off your ulema and you're a drunkard +# By Hugo Cortell +# Rewritten by Henrik Lohmander +################################### +fp3_h_yearly.0001 = { + type = character_event + title = fp3_h_yearly.0001.t + desc = { + triggered_desc = { + trigger = { always = yes } + desc = fp3_h_yearly.0001.desc.main + } + } + theme = feast_activity + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = drink_goblet + } + right_portrait = { + character = scope:ulema_member + animation = disapproval + } + + cooldown = { years = 10 } + + weight_multiplier = { + base = 1 + + modifier = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { has_trait = drunkard } + factor = 0.4 + } + modifier = { + any_character_struggle = { + is_struggle_type = persian_struggle + } + add = 0.5 + } + modifier = { + has_trait = fp3_struggle_supporter + add = -0.5 + } + modifier = { + has_trait = fp3_struggle_detractor + add = 0.5 + } + } + + trigger = { + has_fp3_dlc_trigger = yes + has_trait = drunkard + NOT = { has_character_modifier = ulema_displeased_drinking } + exists = cp:councillor_court_chaplain + NOT = { + has_hook = cp:councillor_court_chaplain + } + cp:councillor_court_chaplain = { + is_ai = yes + faith = { trait_is_sin = drunkard } + trigger_if = { + limit = { exists = house } + house != root.house + } + NOT = { + has_trait = lifestyle_mystic + } + OR = { + opinion = { # They will not do this unless they have reason to dislike you + target = root + value < -25 + } + has_relation_rival = root + } + } + } + + immediate = { + cp:councillor_court_chaplain = { save_scope_as = ulema_member } + save_scope_as = actor + scope:ulema_member = { save_scope_as = recipient } + } + + option = { #Deflection (They are a drunkard too) Look who is talking! + name = fp3_h_yearly.0001.a + trigger = { scope:ulema_member = { has_trait = drunkard } } + + #No duel, this deflection always succeeds. + + stress_impact = { + craven = minor_stress_gain + deceitful = minor_stress_loss + callous = minor_stress_loss + } + add_prestige = medium_prestige_gain + reverse_add_opinion = { + target = scope:ulema_member + modifier = ignored_concerns + } + } + + option = { #Deflection - Argue that drinking is healthy to the human spirit + name = fp3_h_yearly.0001.b + trigger = { + OR = { + has_trait = scholar + has_trait = theologian + has_trait = whole_of_body + has_trait = lifestyle_physician + has_trait = lifestyle_poet + faith = { trait_is_virtue = drunkard } + } + } + + + reverse_add_opinion = { + target = scope:ulema_member + modifier = ignored_concerns + } + + duel = { + desc = fp3_h_yearly.0001.b.desc + skill = learning + target = scope:annoying_clergy + + 35 = { #Success + desc = fp3_h_yearly.0001.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + send_interface_toast = { + type = event_toast_effect_good + title = fp3_h_yearly.0001.b.success + left_icon = root + add_prestige = minor_prestige_gain + } + } + 65 = { + desc = fp3_h_yearly.0001.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + title = fp3_h_yearly.0001.b.failure + left_icon = root + add_piety = medium_piety_loss + add_character_modifier = { + modifier = ulema_displeased_drinking + years = 10 + } + } + } + } + + stress_impact = { + honest = minor_stress_gain + humble = minor_stress_gain + callous = minor_stress_loss + deceitful = minor_stress_loss + } + } + + option = { # You do not get to speak to me in this way! + name = fp3_h_yearly.0001.e + + add_dread = medium_dread_gain + imprison_court_chaplain_consequences_effect = yes + imprison_character_effect = { + TARGET = scope:recipient + IMPRISONER = scope:actor + } + + stress_impact = { + just = medium_stress_gain + zealous = medium_stress_gain + deceitful = minor_stress_loss + callous = minor_stress_loss + } + } + + option = { #Bribery - Offer a generous donation + name = fp3_h_yearly.0001.c + trigger = { NOT = { scope:ulema_member = { has_trait = drunkard } } } #If you can deflect we don't show this option + custom_tooltip = fp3_h_yearly.0001.c.tt + pay_short_term_gold = { + target = scope:ulema_member + gold = medium_gold_value + } + random_list = { + 75 = { + modifier = { + scope:ulema_member = { + has_trait = greedy + } + factor = 2 + } + modifier = { + scope:ulema_member = { + has_trait = deceitful + } + factor = 2 + } + modifier = { + scope:ulema_member = { + has_trait = ambitious + } + factor = 2 + } + desc = fp3_h_yearly.0001.c.success + send_interface_toast = { + title = fp3_h_yearly.0001.c.success + left_icon = root + add_prestige = minor_prestige_gain + } + } + 25 = { + modifier = { + scope:ulema_member = { + has_trait = zealous + } + factor = 2 + } + modifier = { + scope:ulema_member = { + has_trait = honest + } + factor = 2 + } + modifier = { + scope:ulema_member = { + has_trait = just + } + factor = 2 + } + desc = fp3_h_yearly.0001.c.failure + send_interface_toast = { + title = fp3_h_yearly.0001.c.failure + left_icon = root + add_piety = medium_piety_loss + add_character_modifier = { + modifier = ulema_displeased_drinking + years = 10 + } + reverse_add_opinion = { + target = scope:ulema_member + modifier = ignored_concerns + } + } + } + } + + + stress_impact = { + just = medium_stress_gain + greedy = minor_stress_gain + honest = minor_stress_gain + callous = minor_stress_loss + deceitful = minor_stress_loss + } + } + + option = { # There is nothing I can do! + name = fp3_h_yearly.0001.d + + add_piety = minor_piety_loss + add_character_modifier = { + modifier = ulema_displeased_drinking + years = 5 + } + stress_impact = { + arrogant = minor_stress_gain + deceitful = minor_stress_gain + drunkard = minor_stress_gain + honest = minor_stress_loss + } + } + +} diff --git a/events/dlc/fp3/fp3_yearly_events_ola_batch_1.txt b/events/dlc/fp3/fp3_yearly_events_ola_batch_1.txt new file mode 100644 index 00000000..331e3d98 --- /dev/null +++ b/events/dlc/fp3/fp3_yearly_events_ola_batch_1.txt @@ -0,0 +1,4034 @@ +namespace = fp3_yearly + +########EVENT INDEX############ +#fp3_yearly.8000 - Ghazi Gone Bad, by Ola Jentzsch +#fp3_yearly.8001 - Frontier Fortress Benefactor, by Ola Jentzsch +#fp3_yearly.8002 - Faith at the Frontier, by Ola Jentzsch +#fp3_yearly.8003 - Exotic Espand, by Ola Jentzsch +#fp3_yearly.8004 - The Frontier Beckons, by Ola Jentzsch + #fp3_yearly.8005 - Hidden Event, sets up duel + #fp3_yearly.8006 - Hidden Event, in case duel is invalidated + #fp3_yearly.8007 - Persian Parenting (follow-up-event) + #fp3_yearly.8008 - An Ignominous Defeat (follow-up-event) +#fp3_yearly.8009 - Caliphal Concerns, by Ola Jentzsch +#fp3_yearly.8010 - The Abode of War, by Ola Jentzsch + #fp3_yearly.8011 - Hidden Event, sets up stuff + #fp3_yearly.8012 - Promise Fulfilled (follow-up-event) + #fp3_yearly.8013 - Caliphal Dissapointment (follow-up-event) +#fp3_yearly.8014 - Secrets of the Teapot, by Ola Jentzsch +#fp3_yearly.8016 - Forgotten Runestones, by Ola Jentzsch + #fp3_yearly.8017 - Hyrcanian Havoc, by Ola Jentzsch +#fp3_yearly.8018 - Heavenly Horses, by Ola Jentzsch + + +################################## +# Ghazi Gone Bad +# By Ola Jentzsch +################################### +scripted_trigger fp3_yearly.8000_province_trigger = { #this is needed to get the loc right - we want a city! + has_holding_type = city_holding + barony = { + is_capital_barony = no + } +} + +fp3_yearly.8000 = { #Ghazi Gone Bad + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_religion = religion:islam_religion } + desc = fp3_yearly.8000.t + } + desc = fp3_yearly_non_islamic.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { has_religion = religion:islam_religion } + desc = fp3_yearly.8000.desc_opening + } + desc = fp3_yearly.8000.desc_unislamic_opening + } + random_valid = { + desc = fp3_yearly.8000_dancing_girl.desc + desc = fp3_yearly.8000_bath_inspector.desc + desc = fp3_yearly.8000_townsfolk.desc + } + desc = fp3_yearly.8000.desc + } + + theme = skull + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:raging_ghazi + animation = prisondungeon + } + lower_left_portrait = { + character = scope:righteous_marshal + } + + override_background = { reference = dungeon } + + + trigger = { + has_fp3_dlc_trigger = yes + is_ruler = yes + any_held_county = { + any_county_province = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + fp3_yearly.8000_province_trigger = yes + } + } + + faith = { + NOR = { + has_doctrine_parameter = unreformed # Unreformed Pagans cannot Holy War + has_doctrine_parameter = holy_wars_forbidden # Pacifists cannot Holy War + } + } + exists = cp:councillor_marshal + + cp:councillor_marshal = { + is_available_ai_adult = yes + NOR = { #so that his personality makes sense for the story + has_trait = zealous + has_trait = arbitrary + has_trait = callous + has_trait = faith_warrior + } + } + + any_culture_global = { fp3_warrior_culture_trigger = yes } #failsafe to prevent funky errors + } + + cooldown = { + years = 10 + } + + immediate = { + + random_culture_global = { + limit = { fp3_warrior_culture_trigger = yes } + save_scope_as = warmonger_culture + } + + random_held_county = { + limit = { + any_county_province = { fp3_yearly.8000_province_trigger = yes } + } + save_scope_as = murder_county #for the modifier + } + + scope:murder_county = { + random_county_province = { + limit = { fp3_yearly.8000_province_trigger = yes } + barony = { save_scope_as = murder_barony } #for use in loc + } + } + + scope:murder_county = { + add_county_modifier = { + modifier = fp3_brutal_predations_county_modifier + years = 10 + } + } + + cp:councillor_marshal = { save_scope_as = righteous_marshal } + + create_character = { + template = fp3_raging_ghazi_character + location = root.capital_province + culture = root.culture + save_scope_as = raging_ghazi + } + } + + option = { #I too have walked the holy path, go in peace + name = fp3_yearly.8000.a + flavor = fp3_yearly.8000.flavor.a.tt + + trigger = { + OR = { + has_trait = faith_warrior + has_trait = holy_warrior + has_trait = crusader_king + has_trait = pilgrim + is_ai = yes #we want to encourage the AI to do this, rather than keep the ghazi around, thus we allow this option more easily for the AI + } + } + + add_piety = medium_piety_gain + + scope:raging_ghazi = { silent_disappearance_effect = yes } + + stress_impact = { + zealous = medium_stress_impact_loss + trusting = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + just = minor_stress_impact_gain + } + + ai_chance = { #zealous AI prefer this option + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_zeal = 1 + ai_honor = -1 + ai_rationality = -0.5 + } + } + } + + option = { #I have a nice new prison cell just for you! + name = fp3_yearly.8000.b + flavor = fp3_yearly.8000.flavor.b.tt + + add_dread = minor_dread_gain + + scope:raging_ghazi = { #the ghazi gets to languish in a dungeon + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = root + } + } + + scope:murder_county = { + remove_county_modifier = fp3_brutal_predations_county_modifier + } + + stress_impact = { + just = medium_stress_impact_loss + vengeful = minor_stress_impact_loss + zealous = medium_stress_impact_gain + callous = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { #just and compassionate AI go for this option + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_compassion = 1 + ai_zeal = -1 + } + } + } + + option = { #I could use a man of your talents + name = fp3_yearly.8000.c + + add_courtier = scope:raging_ghazi + + scope:raging_ghazi = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + + add_hook = { + target = scope:raging_ghazi + type = favor_hook + } + + scope:righteous_marshal = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + + stress_impact = { + zealous = minor_stress_impact_loss + greedy = minor_stress_impact_loss + just = major_stress_impact_gain + paranoid = minor_stress_impact_gain + } + + ai_chance = { #greedy / opportunistic AI go for this option, but more rarely than the others, since we don't want to spam Persia with this character + base = 50 + ai_value_modifier = { + ai_zeal = 0.5 + ai_greed = 1 + ai_rationality = 0.5 + ai_compassion = -1 + ai_honor = -1 + } + } + } + after = { + scope:raging_ghazi = { + silent_disappearance_ai_effect = yes + } + } +} + +scripted_trigger fp3_yearly.8001_outlying_province_trigger = { + squared_distance = { + target = root.capital_province + value > squared_distance_medium + } +} + +fp3_yearly.8001 = { #Frontier Fortress Benefactor + type = character_event + title = fp3_yearly.8001.t + desc = fp3_yearly.8001.desc + theme = martial + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:concerned_councillor + animation = personality_bold + } + + trigger = { + has_fp3_dlc_trigger = yes + is_ruler = yes + any_held_county = { + any_county_province = { + fp3_yearly.8001_outlying_province_trigger = yes + } + } + + is_healthy = yes #the councillor's request wouldn't make much sense otherwise + + root.capital_province = { geographical_region = world_persian_empire } #so that this inside-to-outside worldview makes sense + + faith = { + NOT = { + has_doctrine_parameter = unreformed # Unreformed Pagans don't need frontier fortresses, generally speaking + } + } + + OR = { #Either could make sense, may as well make it as flexible as possible + exists = cp:councillor_steward + exists = cp:councillor_marshal + } + } + + cooldown = { + years = 50 + } + + immediate = { + random_held_county = { + limit = { + any_county_province = { + fp3_yearly.8001_outlying_province_trigger = yes + } + } + weight = { + modifier = { + factor = 100 + any_county_province = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + } + } + } + save_scope_as = frontier_fort_county + } + + if = { + limit = { exists = cp:councillor_marshal } + cp:councillor_marshal = { save_scope_as = concerned_councillor } + } + else = { cp:councillor_steward = { save_scope_as = concerned_councillor } } + + if = { + limit = { + any_spouse = { + AND = { + is_available_healthy_ai_adult = yes + is_landed = no + } + NOR = { + has_trait = arrogant + has_trait = craven + has_trait = lazy + has_trait = shy + has_trait = content + has_trait = pregnant + } + } + } + random_spouse = { save_scope_as = dutiful_spouse } + } + } + + option = { #Of course I shall go! + name = fp3_yearly.8001.a + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_boosted_frontier_morale_county_modifier + years = 15 + } + } + + add_character_modifier = { + modifier = fp3_visited_the_frontier_modifier + years = 5 + } + + remove_treasury_or_gold = minor_treasury_or_gold_value #gotta pay for travel expenses! + + stress_impact = { + diligent = medium_stress_impact_loss + brave = minor_stress_impact_loss + humble = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + shy = minor_stress_impact_gain + content = miniscule_stress_impact_gain + lazy = medium_stress_impact_gain + } + + ai_chance = { #dutiful/diligent AI prefer this option + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_honor = 1 + ai_zeal = 0.5 + ai_boldness = 0.5 + } + } + } + + option = { #Send your wife/husband instead + name = fp3_yearly.8001.b + flavor = fp3_yearly.8001.flavor.b.tt + + trigger = { + exists = scope:dutiful_spouse + NOT = { + dummy_female = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:concerned_councillor } + } + } + scope:concerned_councillor = { #checking that they can be a misogynist/misandrist in this matter + NOR = { + faith = { has_doctrine = doctrine_gender_equal } + culture = { has_cultural_parameter = has_access_to_shieldmaidens } + } + } + } + + scope:concerned_councillor = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + + scope:dutiful_spouse = { + if = { + limit = { + OR = { #checking that (s)he would appreciate this opportunity + has_trait = diligent + has_trait = ambitious + has_trait = brave + has_trait = adventurer + has_trait = shieldmaiden + has_martial_lifestyle_trait_trigger = yes + has_lifestyle = martial_lifestyle + martial >= high_skill_rating + has_stewardship_lifestyle_trait_trigger = yes + has_lifestyle = stewardship_lifestyle + stewardship >= high_skill_rating + } + } + add_opinion = { + target = root + modifier = spouse_trusted_me_opinion + } + } + else = { #otherwise, (s)he doesn't wanna go to the frontier + add_opinion = { + target = root + modifier = fp3_sent_me_to_the_frontier_opinion + } + } + } + + scope:dutiful_spouse = { + duel = { + skill = martial + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + send_interface_toast = { + title = delegated_fortress_inspection_toast.success + left_icon = scope:dutiful_spouse + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_boosted_frontier_morale_county_modifier + years = 15 + } + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = delegated_fortress_inspection_toast.failure + left_icon = scope:tension_councillor + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_low_frontier_morale_county_modifier + years = 10 + } + } + } + } + } + } + } + + scope:dutiful_spouse = { + add_character_modifier = { + modifier = fp3_visited_the_frontier_modifier + years = 5 + } + } + + stress_impact = { + lazy = minor_stress_impact_loss + craven = minor_stress_impact_loss + cynical = minor_stress_impact_loss + ambitious = minor_stress_impact_gain + brave = minor_stress_impact_gain + diligent = minor_stress_impact_gain + } + + ai_chance = { #craven but sociable AI prefer this option + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_rationality = 0.5 + ai_sociability = 1 + } + } + } + + option = { #Make vague promises + name = fp3_yearly.8001.c + flavor = fp3_yearly.8001.flavor.c.tt + + duel = { #this duel is root trying to appease the councillor + skill = diplomacy + value = medium_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + modifier = { + add = 15 + has_trait = deceitful + } + modifier = { + add = 40 + scope:concerned_councillor = { + has_trait = trusting + } + } + modifier = { + add = 20 + scope:concerned_councillor = { + OR = { + has_trait = craven + has_trait = patient + } + } + } + send_interface_toast = { + title = convincing_councillor_toast.success + left_icon = root + right_icon = scope:concerned_councillor + + scope:concerned_councillor = { + add_opinion = { + target = root + modifier = trusting_liege_opinion + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + modifier = { + add = 20 + has_trait = honest + } + modifier = { + add = 10 + has_trait = brave + } + send_interface_toast = { + title = convincing_councillor_toast.failure + left_icon = root + right_icon = scope:concerned_councillor + + scope:concerned_councillor = { + add_opinion = { + target = root + modifier = weak_excuses + } + } + } + } + } + + random = { + chance = 33 + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_low_frontier_morale_county_modifier + years = 10 + } + } + } + + stress_impact = { + lazy = minor_stress_impact_loss + craven = major_stress_impact_loss + content = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + diligent = medium_stress_impact_gain + honest = medium_stress_impact_gain + + } + + ai_chance = { #craven but energetic AI prefer this option + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_rationality = 0.5 + ai_energy = 1 + } + } + } + + option = { #Refuse + name = fp3_yearly.8001.d + + random = { + chance = 50 + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_low_frontier_morale_county_modifier + years = 10 + } + } + } + + stress_impact = { + lazy = major_stress_impact_loss + craven = medium_stress_impact_loss + content = minor_stress_impact_loss + diligent = medium_stress_impact_gain + brave = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + + ai_chance = { #lazy, craven AI prefer this option + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_energy = -1 + } + } + } +} + +############ +scripted_trigger fp3_yearly.8002_zealous_vassal_or_spouse_trigger = { + AND = { + faith = root.faith + is_available_healthy_ai_adult = yes + OR = { + has_trait = zealous + has_trait = faith_warrior + has_trait = crusader_king + has_trait = order_member + } + } +} + +fp3_yearly.8002 = { #Faith at the Frontier + type = character_event + title = fp3_yearly.8002.t + desc = fp3_yearly.8002.desc + theme = faith + + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:concerned_person + animation = worry + } + + trigger = { + has_fp3_dlc_trigger = yes + age >= 12 + is_ruler = yes + any_held_county = { + any_county_province = { + fp3_yearly.8001_outlying_province_trigger = yes + } + } + + root.capital_province = { geographical_region = world_persian_empire } #so that this inside-to-outside worldview makes sense + + faith = { #so that the plot makes sense + NOR = { + has_doctrine_parameter = unreformed # Unreformed Pagans don't need frontier fortresses, generally speaking + has_doctrine = doctrine_pluralism_pluralistic + } + } + + OR = { #Either could make sense, may as well make it as flexible as possible + any_spouse = { + fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + any_powerful_vassal = { + fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + exists = cp:councillor_court_chaplain + } + } + + cooldown = { + years = 50 + } + + immediate = { #finding a nice location for the event + random_held_county = { + limit = { + any_county_province = { + fp3_yearly.8001_outlying_province_trigger = yes + } + } + weight = { + modifier = { + factor = 100 + any_county_province = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + } + } + } + save_scope_as = frontier_fort_county + } + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_frontier_heresy_county_modifier + years = 40 + } + } + + if = { + limit = { current_year >= 1050 } + faith.religion = { + random_faith = { #here we're setting up a nice heresy for the event + limit = { #some faiths didn't exist in the early period, and were extinct by the latter + this != root.faith + fervor > medium_fervor_value + OR = { + this = faith:nizari + this = faith:zayidi + this = faith:qarmatian + this = faith:zurvanism + this = faith:khurramism + this = faith:nestorian + this = faith:manichean + this = faith:mahayana + } + } + alternative_limit = { #just a failsafe to avoid errors + this != root.faith + } + save_scope_as = regional_heresy + } + } + } + else = { + faith.religion = { + random_faith = { #here we're setting up a nice heresy for the event + limit = { #some faiths didn't exist in the early period + this != root.faith + fervor > medium_fervor_value + OR = { + this = faith:azariqa + this = faith:mutazila + this = faith:ghulat + this = faith:zayidi + this = faith:zurvanism + this = faith:khurramism + this = faith:mazdakism + this = faith:nestorian + this = faith:manichean #the "Arch-Heresy" according to Cambridge History of Iran ^_^ + this = faith:zun_pagan + this = faith:mahayana + } + } + alternative_limit = { #just a failsafe to avoid errors + this != root.faith + } + save_scope_as = regional_heresy + } + } + } + + if = { + limit = { + any_spouse = { + fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + } + random_spouse = { + limit = { + fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + save_scope_as = concerned_person + } + } + else_if = { + limit = { + any_powerful_vassal = { fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + } + random_powerful_vassal = { + limit = { + fp3_yearly.8002_zealous_vassal_or_spouse_trigger = yes + } + save_scope_as = concerned_person + } + } + else = { + cp:councillor_court_chaplain = { save_scope_as = concerned_person } + } + } + + option = { #Burn them all and let God sort them out + name = fp3_yearly.8002.a + + trigger = { + OR = { + has_trait = zealous + has_trait = wrathful + has_trait = paranoid + has_trait = faith_warrior + has_trait = crusader_king + dread >= high_dread + } + } + + add_dread = major_dread_gain + + scope:concerned_person = { + if = { + limit = { + OR = { #if the concerned person has a... certain personality, they appreciate this + has_trait = sadistic + has_trait = callous + has_trait = paranoid + has_trait = vengeful + } + } + add_opinion = { + target = root + opinion = 20 + modifier = fp3_admires_resolve_opinion + } + } + else = { + add_opinion = { #but otherwise, they're kinda shocked + target = root + opinion = -20 + modifier = fp3_mildly_terrified_opinion + } + } + } + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = fp3_garrison_decimated_county_modifier + years = 10 + } + } + + + random_list = { + 75 = { + custom_tooltip = fp3_county_pacified.tt + scope:frontier_fort_county = { + remove_county_modifier = fp3_frontier_heresy_county_modifier + } + } + 25 = { + custom_tooltip = fp3_county_galvanized.tt + scope:frontier_fort_county = { + set_county_faith = scope:regional_heresy + } + } + } + + stress_impact = { + sadistic = major_stress_impact_loss + callous = medium_stress_impact_loss + wrathful = minor_stress_impact_loss + zealous = minor_stress_impact_loss + greedy = minor_stress_impact_loss + compassionate = massive_stress_impact_gain + just = major_stress_impact_gain + + + } + + ai_chance = { #cruel, zealous AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_vengefulness = 1 + ai_compassion = -1 + ai_honor = -0.5 + ai_rationality = -0.5 + } + } + } + + option = { #Join their faith + name = fp3_yearly.8002.b + + trigger = { + OR = { + has_trait = cynical + has_trait = fickle + has_trait = humble + has_trait = depressed + has_trait = lunatic + has_trait = possessed + has_trait = lifestyle_mystic + stress_level >= 3 + } + NOT = { + has_trait = zealous + } + } + + add_piety = medium_piety_loss + set_character_faith_with_conversion = scope:regional_heresy + if = { + limit = { + scope:regional_heresy = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = tensions_eased_province_modifier + years = 20 + } + } + + scope:concerned_person = { + add_opinion = { + target = root + modifier = perplexed_opinion + opinion = -20 + } + } + + stress_impact = { + cynical = major_stress_impact_loss + humble = medium_stress_impact_loss + brave = minor_stress_impact_loss + fickle = minor_stress_impact_loss + content = medium_stress_impact_gain + craven = medium_stress_impact_gain + + } + + ai_chance = { #bold, cynical AI prefer this option + base = 40 #so that the AI is less likely to take this option + ai_value_modifier = { + ai_boldness = 0.7 + ai_energy = 0.5 + ai_rationality = 0.7 + ai_zeal = -1 + } + } + } + + option = { #Send them to preach + name = fp3_yearly.8002.c + + scope:concerned_person = { + if = { + limit = { + OR = { #if the concerned person has a... certain personality, or is very able to perform the task, they're okay with this + has_trait = dull + has_trait = intellect_bad + has_trait = diligent + learning >= good_skill_level + } + } + add_opinion = { + target = root + opinion = 10 + modifier = trusted_me_opinion + } + } + else = { + add_opinion = { #but otherwise, they see it for what it is; a mild insult + target = root + opinion = -10 + modifier = unfair_expectations_opinion + } + } + } + + scope:concerned_person = { + add_character_modifier = { + modifier = fp3_visited_the_frontier_modifier + years = 5 + } + } + + scope:concerned_person = { + duel = { + skill = learning + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + send_interface_toast = { + title = dealing_with_soldier_heresy_toast.success + left_icon = scope:concerned_person + + custom_tooltip = fp3_county_converted.tt + scope:frontier_fort_county = { + remove_county_modifier = fp3_frontier_heresy_county_modifier + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = dealing_with_soldier_heresy_toast.failure + left_icon = scope:concerned_person + + custom_tooltip = fp3_county_galvanized.tt + scope:frontier_fort_county = { + set_county_faith = scope:regional_heresy + } + if = { + limit = { + NOT = { + scope:concerned_person = { has_trait = depressed } + } + } + random = { + chance = 10 + scope:concerned_person = { add_trait = depressed_1 } + } + } + } + } + } + } + } + + stress_impact = { + lazy = major_stress_impact_loss + shy = minor_stress_impact_loss + trusting = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + brave = minor_stress_impact_loss + zealous = minor_stress_impact_loss + ambitious = minor_stress_impact_gain + diligent = medium_stress_impact_gain + } + + ai_chance = { #hands-off/rational AI prefer this option + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_rationality = 0.5 + ai_zeal = 0.2 + ai_energy = -0.5 + } + } + } + + option = { #We should wait and see how the situation develops + name = fp3_yearly.8002.d + + random_list = { + 50 = { + send_interface_toast = { + title = frontier_heresy_eased + left_icon = scope:root + + scope:frontier_fort_county = { + add_county_modifier = { + modifier = tensions_eased_province_modifier + years = 20 + } + } + } + } + 50 = { + send_interface_toast = { + title = frontier_heresy_mega_outbreak + left_icon = scope:root + + scope:frontier_fort_county = { set_county_faith = scope:regional_heresy } + } + } + } + + scope:concerned_person = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + + stress_impact = { + patient = medium_stress_impact_loss + calm = minor_stress_impact_loss + cynical = minor_stress_impact_loss + content = minor_stress_impact_loss + wrathful = minor_stress_impact_gain + zealous = massive_stress_impact_gain + paranoid = medium_stress_impact_gain + impatient = medium_stress_impact_gain + } + + ai_chance = { #passive or compassionate AI prefer this optio + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 0.5 + ai_zeal = -1 + ai_vengefulness = -0.5 + } + } + } +} + +#######Exotic Espand, by Ola Jentzsch##### + +scripted_trigger fp3_yearly_8003_far_away_mountain_trigger = { + county_has_province_with_terrain = { + terrain = mountains + terrain = desert_mountains + } + squared_distance = { + target = root.capital_province + value > squared_distance_large + } +} + + +fp3_yearly.8003 = { #Exotic Espand + type = character_event + title = fp3_yearly.8003.t + desc = fp3_yearly.8003.desc + theme = mental_health + + left_portrait = { + character = scope:superstitious_consort + animation = paranoia + } + right_portrait = { + character = root + animation = personality_rational + } + + lower_left_portrait = { character = scope:cruel_consort } + lower_right_portrait = { character = scope:quest_chaplain } + + trigger = { #the wonders of harem intrigues! + + has_fp3_dlc_trigger = yes + is_ruler = yes + + root.capital_province = { + OR = { + geographical_region = world_persian_empire + geographical_region = world_steppe_tarim + } + } + + any_county_in_region = { + region = world_persian_empire + region = world_steppe_tarim + region = world_himalaya + region = world_middle_east_arabia + fp3_yearly_8003_far_away_mountain_trigger = yes + } + + any_consort = { + NOT = { + has_trait = cynical + has_trait = lifestyle_herbalist + learning >= good_skill_level + } + is_courtier = yes + is_available_adult = yes + save_temporary_scope_as = consort_1 + } + + any_consort = { + this != scope:consort_1 + is_available_adult = yes + is_courtier = yes + opinion = { + target = scope:consort_1 + value < 0 + } + } + } + + cooldown = { + years = 10 + } + + immediate = { + + random_consort = { + limit = { + NOT = { + has_trait = cynical + has_trait = lifestyle_herbalist + learning >= good_skill_level + } + is_available_adult = yes + is_courtier = yes + save_temporary_scope_as = consort_1_temp + root = { + any_consort = { + this != scope:consort_1_temp + is_available_adult = yes + is_courtier = yes + opinion = { + target = scope:consort_1_temp + value < 0 + } + } + } + } + save_scope_as = superstitious_consort + } + random_consort = { + limit = { + this != scope:superstitious_consort + is_available_adult = yes + is_courtier = yes + opinion = { + target = scope:superstitious_consort + value < 0 + } + } + save_scope_as = cruel_consort + } + + random_county_in_region = { + region = world_persian_empire + region = world_steppe_tarim + region = world_himalaya + region = world_middle_east_arabia + limit = { fp3_yearly_8003_far_away_mountain_trigger = yes } + save_scope_as = espad_mountain_province #this is only used for loc + } + + scope:superstitious_consort = { + add_character_modifier = { + modifier = fp3_jinx_modifier + years = 10 + } + } + + if = { + limit = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { is_available_healthy_ai_adult = yes } + } + cp:councillor_court_chaplain = { save_scope_as = quest_chaplain } + } + } + + option = { #Trust in God, not your superstition + name = fp3_yearly.8003.a + + trigger = { + faith = { + OR = { + has_doctrine_parameter = witchcraft_illegal + has_doctrine_parameter = witchcraft_shunned + } + } + } + + add_piety = minor_piety_gain + + scope:superstitious_consort = { #if (s)he loves you or is forgiving, (s)he takes this less hard + if = { + limit = { + OR = { + has_relation_lover = root + has_relation_soulmate = root + has_trait = forgiving + } + } + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -20 + } + } + else = { + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -40 + } + } + } + + scope:cruel_consort = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 20 + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + callous = minor_stress_impact_loss + zealous = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { #cruel or zealous AI prefers this option + base = 100 + ai_value_modifier = { + ai_zeal = 0.5 + ai_vengefulness = 0.5 + ai_compassion = -1 + } + } + } + + option = { #Cost what it may, I will send for it + name = fp3_yearly.8003.b + + scope:superstitious_consort = { + if = { + limit = { + OR = { + has_relation_lover = root + has_relation_soulmate = root + } + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + else = { + custom_tooltip = fp3_closer_to_love.tt + hidden_effect = { + root = { + progress_towards_lover_effect = { + CHARACTER = scope:superstitious_consort + REASON = lover_gave_fine_seeds # Naming conv. DLC_progress_towards_reason_TYPE_NAME. This will avoid dupes and conflicts. -h + OPINION = 20 + } + } + } + } + } + + scope:cruel_consort = { + add_opinion = { + target = scope:superstitious_consort + modifier = envy_opinion + opinion = -20 + } + } + + scope:cruel_consort = { + add_opinion = { + target = root + modifier = fp3_resentful_opinion + opinion = -20 + } + } + + remove_short_term_gold = medium_gold_value #this will be expensive! + + random = { + chance = 75 + scope:superstitious_consort = { + remove_character_modifier = fp3_jinx_modifier + } + } + + stress_impact = { + generous = major_stress_impact_loss + compassionate = minor_stress_impact_loss + diligent = minor_stress_impact_loss + zealous = minor_stress_impact_loss + greedy = medium_stress_impact_gain + callous = medium_stress_impact_gain + cynical = miniscule_stress_impact_gain + temperate = miniscule_stress_impact_gain + } + + ai_chance = { #compassionate, energetic, non-frugal AI prefers this option + base = 100 + ai_value_modifier = { + ai_compassion = 0.7 + ai_energy = 0.7 + ai_greed = -1 + } + } + } + + option = { #I can send my court chaplain, (s)he is very capable + name = fp3_yearly.8003.c + + + trigger = { exists = scope:quest_chaplain } + + scope:quest_chaplain = { + if = { + limit = { + OR = { #if the chaplain is adventurous or a nature specialist, or thinks very highly of the consort, (s)he appreciates the task + has_trait = brave + has_trait = adventurer + has_trait = lifestyle_herbalist + has_trait = lifestyle_mystic + has_trait = diligent + opinion = { + target = scope:superstitious_consort + value > 50 + } + } + } + add_opinion = { + target = root + opinion = 10 + modifier = trusted_me_opinion + } + } + else = { + add_opinion = { #but otherwise, don't really wanna go + target = root + modifier = fp3_sent_me_to_the_frontier_opinion + } + } + } + + scope:quest_chaplain = { + add_character_modifier = { + modifier = fp3_visited_the_frontier_modifier + years = 5 + } + } + + scope:quest_chaplain = { + duel = { + skill = learning + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + send_interface_toast = { + title = questing_for_espand_toast.success + left_icon = scope:quest_chaplain + right_icon = scope:superstitious_consort + + custom_tooltip = fp3_espand_found.tt + scope:superstitious_consort = { + remove_character_modifier = fp3_jinx_modifier + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = questing_for_espand_toast.failure + left_icon = scope:quest_chaplain + right_icon = scope:superstitious_consort + + custom_tooltip = fp3_espand_unfound.tt + scope:quest_chaplain = { + add_character_modifier = { + modifier = exhausted_modifier + years = 10 + } + } + if = { + limit = { + NOT = { + scope:superstitious_consort = { has_trait = depressed } + } + } + random = { + chance = 20 + scope:superstitious_consort = { add_trait = depressed_1 } + } + } + } + } + } + } + } + + stress_impact = { + lazy = medium_stress_impact_loss + greedy = minor_stress_impact_loss + trusting = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + diligent = medium_stress_impact_gain + } + + ai_chance = { #compassionate but frugal AI prefer this option + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = 0.5 + ai_greed = -1 + ai_energy = -0.5 + } + } + } + + option = { #Can't you pick normal espand like everyone else? + name = fp3_yearly.8003.d + + scope:superstitious_consort = { #if (s)he has particular traits, (s)he takes this very hard + if = { + limit = { + OR = { + has_trait = craven + has_trait = paranoid + has_trait = vengeful + has_trait = lifestyle_mystic + has_trait = arrogant + has_trait = greedy + has_trait = stubborn + has_trait = wrathful + } + } + add_opinion = { + target = root + modifier = mocked_me_in_time_of_need + } + } + else = { + add_opinion = { + target = root + modifier = fp3_ignored_me_in_time_of_need_opinion + } + } + } + + scope:cruel_consort = { + add_opinion = { + target = root + modifier = amused_opinion + opinion = 10 + } + } + + stress_impact = { + cynical = minor_stress_impact_loss + callous = minor_stress_impact_loss + temperate = minor_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + } + + ai_chance = { #cynical and frugal AI prefers this option + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_greed = -1 + ai_compassion = -0.5 + } + } + } +} + + +####The Frontier's Call, by Ola Jentzsch#### + +scripted_trigger fp3_suitable_child_to_leave = { + is_physically_able_adult = yes + is_courtier_of = root + age < 40 + is_concubine = no + OR = { #checking that they're the venturesome type + has_trait = brave + has_trait = impatient + has_trait = lifestyle_hunter + has_trait = education_martial + has_lifestyle = martial_lifestyle + has_martial_lifestyle_trait_trigger = yes + martial >= high_skill_rating + prowess >= high_skill_rating + } + NOR = { #and that their cravings aren't already satisfied + has_trait = faith_warrior + has_trait = pilgrim + has_trait = adventurer + has_trait = viking + has_trait = content + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } #and that them wanting to go on adventure wouldn't be preposterous in your culture +} + +scripted_trigger fp3_suitable_relation_for_child = { + NOT = { this = $CHAR$ } + age >= 10 + OR = { + is_close_family_of = $CHAR$ + is_spouse_of = $CHAR$ + is_concubine_of = $CHAR$ + is_great_grandparent_of = $CHAR$ + has_relation_friend = $CHAR$ + has_relation_lover = $CHAR$ + AND = { + betrothed = $CHAR$ + age >= 14 + } + } + NOR = { + has_trait = brave + has_trait = callous + has_trait = arrogant + } + opinion = { + target = $CHAR$ + value > 15 + } +} + +scripted_effect fp3_child_leaves_effect = { + move_to_pool_at = scope:far_frontier + scope:parent = { + if = { + limit = { + has_hook = scope:fp3_child_to_leave + } + remove_hook = { + target = scope:fp3_child_to_leave + } + } + } + add_character_modifier = { + modifier = fp3_call_of_the_wild_modifier + years = 25 + } +} + +fp3_yearly.8004 = { #The Frontier Beckons + type = character_event + title = fp3_yearly.8004.t + desc = fp3_yearly.8004.desc + theme = family + left_portrait = { + character = scope:fp3_child_to_leave + animation = personality_bold + } + right_portrait = { + character = scope:worried_relation + animation = grief + } + override_background = { reference = market_east } + + trigger = { + + #DLC check. + has_fp3_dlc_trigger = yes + + is_available = yes + + root.capital_province = { geographical_region = world_persian_empire } + + NAND = { #because this event is a Persian variant of an FP1 event, it's better that both cannot trigger for vikings + has_fp1_dlc_trigger = yes + culture = { has_cultural_pillar = heritage_north_germanic } + } + + any_child = { + fp3_suitable_child_to_leave = yes + save_temporary_scope_as = fp3_child_to_leave_temp + } + + any_courtier_or_guest = { + fp3_suitable_relation_for_child = { CHAR = scope:fp3_child_to_leave_temp } + } + + any_independent_ruler = { + NOT = { + target_is_liege_or_above = root + } + in_diplomatic_range = root + any_realm_province = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + save_temporary_scope_as = place + } + } + scope:place = { + squared_distance = { + target = root.capital_county + value >= squared_distance_large + } + } + } + + cooldown = { years = 10 } + + immediate = { + + save_scope_as = parent + + random_child = { + limit = { + fp3_suitable_child_to_leave = yes + has_personality_dominant_trigger = yes + is_primary_heir_of = root + } + alternative_limit = { + fp3_suitable_child_to_leave = yes + has_personality_dominant_trigger = yes + } + alternative_limit = { + fp3_suitable_child_to_leave = yes + } + save_scope_as = fp3_child_to_leave + } + + random_courtier_or_guest = { #weighting for the most suitable person! + limit = { + fp3_suitable_relation_for_child = { CHAR = scope:fp3_child_to_leave } + } + save_scope_as = worried_relation + } + + random_independent_ruler = { + limit = { + NOT = { + target_is_liege_or_above = root + } + in_diplomatic_range = root + any_realm_province = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + save_temporary_scope_as = place + } + scope:place = { + squared_distance = { + target = root.capital_county + value >= squared_distance_large + } + } + } + random_realm_province = { + limit = { + geographical_region = dlc_fp3_greater_persian_frontier_regions + save_temporary_scope_as = place + scope:place = { + squared_distance = { + target = root.capital_county + value >= squared_distance_large + } + } + } + save_scope_as = far_frontier + } + } + } + + option = { # Fight them to make them stay + name = fp3_yearly.8004.a + + trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_futuwaa + has_cultural_tradition = tradition_fp1_performative_honour + has_cultural_tradition = tradition_warrior_culture + } + } + can_start_single_combat_trigger = yes + scope:fp3_child_to_leave = { + can_start_single_combat_trigger = yes + } + } + custom_tooltip = fp3_yearly.8004.a.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:parent + SC_ATTACKER = scope:parent + SC_DEFENDER = scope:fp3_child_to_leave + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = fp3_yearly.8005 + INVALIDATION_EVENT = fp3_yearly.8006 + } + + stress_impact = { + craven = major_stress_impact_gain + forgiving = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = medium_stress_impact_gain + temperate = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + + modifier = { + factor = 2 + prowess > scope:fp3_child_to_leave.prowess + } + + modifier = { + factor = 0.1 + ai_compassion >= medium_positive_ai_value + } + + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = forgiving + has_trait = calm + } + } + } + } + + option = { # Appeal to their better nature + name = fp3_yearly.8004.b + + stress_impact = { + impatient = major_stress_impact_gain + wrathful = major_stress_impact_gain + arrogant = medium_stress_impact_gain + fickle = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + + scope:worried_relation = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + + duel = { + skill = diplomacy + value = scope:fp3_child_to_leave.diplomacy + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = fp3_yearly.8004.b.success + send_interface_toast = { + title = fp3_yearly.8004.b.success + left_icon = scope:fp3_child_to_leave + + + add_prestige = medium_prestige_gain + + scope:fp3_child_to_leave = { + custom_tooltip = fp1_yearly.2000.b.tt #reuse from FP1 to save translation + add_character_modifier = { + modifier = fp3_dutiful_scion_modifier + years = 25 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp3_yearly.8004.b.failure + send_interface_toast = { + title = fp3_yearly.8004.b.failure + left_icon = scope:fp3_child_to_leave + + add_prestige = major_prestige_loss + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + } + scope:worried_relation = { + add_character_modifier = { + modifier = fp3_worried_sick_modifier + years = 5 + } + } + } + } + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + diplomacy > scope:fp3_child_to_leave.diplomacy + } + + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = forgiving + has_trait = calm + } + } + } + } + + option = { # Treathen to disinherit + name = fp3_yearly.8004.c + flavor = fp3_yearly.8004.c.flavor + + stress_impact = { + impatient = major_stress_impact_gain + wrathful = major_stress_impact_gain + arrogant = medium_stress_impact_gain + fickle = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + + duel = { + skill = intrigue + value = scope:fp3_child_to_leave.intrigue + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + + desc = fp3_yearly.8004.b.success + send_interface_toast = { + title = fp3_yearly.8004.b.success + left_icon = scope:fp3_child_to_leave + + + add_prestige = medium_prestige_gain + + scope:fp3_child_to_leave = { + custom_tooltip = fp1_yearly.2000.b.tt #reuse from FP1 to save translation + add_character_modifier = { + modifier = fp3_dutiful_scion_modifier + years = 25 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + + desc = fp3_yearly.8004.b.failure + send_interface_toast = { + title = fp3_yearly.8004.b.failure + left_icon = scope:fp3_child_to_leave + + add_prestige = major_prestige_loss + + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + add_trait = disinherited + } + progress_towards_rival_effect = { + CHARACTER = scope:fp3_child_to_leave + REASON = rival_left_for_frontier + OPINION = -25 + } + scope:worried_relation = { + add_character_modifier = { + modifier = fp3_worried_sick_modifier + years = 5 + } + } + } + } + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + intrigue > scope:fp3_child_to_leave.intrigue + } + + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = craven + has_trait = forgiving + } + } + } + } + + option = { # Go in peace, my son/daughter + name = fp3_yearly.8004.d + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + } + + if = { + limit = { + has_hook = scope:fp3_child_to_leave + } + remove_hook = { + target = scope:fp3_child_to_leave + } + } + + scope:fp3_child_to_leave = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + } + + scope:worried_relation = { + add_opinion = { + target = root + modifier = fp3_dismayed_opinion + } + add_character_modifier = { + modifier = fp3_worried_sick_modifier + years = 5 + } + } + + stress_impact = { + compassionate = medium_stress_impact_loss + patient = medium_stress_impact_loss + calm = minor_stress_impact_loss + content = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + wrathful = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { #passive or compassionate AI prefer this optio + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_honor = 0.5 + ai_zeal = -1 + ai_vengefulness = -0.5 + } + } + } +} + +############Minor events triggered by the duel in fp3_yearly.8004.a############# + +#Hidden event, to set up the result of the duel +fp3_yearly.8005 = { + hidden = yes + + immediate = { + if = { + limit = { + scope:parent = scope:sc_victor + } + trigger_event = { id = fp3_yearly.8007 days = 1 } + } + else = { + trigger_event = { id = fp3_yearly.8008 days = 1 } + } + } +} + +#Hidden event; the bout became invalidated, inform affected parties. +fp3_yearly.8006 = { + hidden = yes + + immediate = { + # Inform both parties that the duel has invalidated. + scope:parent = { + send_interface_toast = { + title = fp1_yearly.2000.trigger_failure #reused from an fp1 event, so we can save some translation resources + left_icon = scope:fp3_child_to_leave + } + } + } +} + +# Beat child in combat +fp3_yearly.8007 = { + type = character_event + title = fp3_yearly.8007.t + desc = fp3_yearly.8007.desc + theme = family + left_portrait = { + character = scope:fp3_child_to_leave + animation = pain + } + right_portrait = { + character = root + animation = aggressive_sword + } + override_background = { reference = courtyard } + + trigger = { + + } + + immediate = { + + } + + option = { # I will not be found wanting + name = fp3_yearly.8007.a + + add_piety = medium_piety_gain + + scope:fp3_child_to_leave = { + add_character_modifier = { + modifier = fp3_dutiful_scion_modifier + years = 25 + } + } + + ai_chance = { + base = 100 + } + } + + option = { # # Good. I have real responsibilities for you. + name = fp3_yearly.8007.b + + add_prestige = medium_prestige_gain + + scope:fp3_child_to_leave = { + add_character_modifier = { + modifier = fp3_dutiful_scion_modifier + years = 25 + } + } + + ai_chance = { + base = 100 + } + } + + option = { #And now you must marry! + name = fp3_yearly.8007.c + + trigger = { + scope:fp3_child_to_leave = { + AND = { + is_married = no + is_betrothed = no + } + } + } + + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_value } + + scope:fp3_child_to_leave = { + add_character_modifier = { + modifier = fp3_marriage_material_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } +} + +# Beaten by child in combat +fp3_yearly.8008 = { + type = character_event + title = fp3_yearly.8008.t + desc = fp3_yearly.8008.desc + theme = family + left_portrait = { + character = root + animation = fear + } + right_portrait = { + character = scope:fp3_child_to_leave + animation = aggressive_sword + } + override_background = { reference = courtyard } + + trigger = { + + } + + immediate = { + + } + + option = { # My child I can lose, but my gold... + name = fp3_yearly.8008.a + + trigger = { + has_trait = greedy + } + + pay_short_term_gold = { + target = scope:fp3_child_to_leave + gold = minor_gold_value + } + + add_stress = medium_stress_impact_gain + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + if = { + limit = { + NOT = { has_trait = lifestyle_blademaster } + } + add_trait = lifestyle_blademaster + } + } + + ai_chance = { + base = 100 + } + } + + option = { # It would have been better to be a eunuch... + name = fp3_yearly.8008.b + + trigger = { + is_female = no + is_eunuch_trigger = no + } + + pay_short_term_gold = { + target = scope:fp3_child_to_leave + gold = minor_gold_value + } + + add_prestige = medium_prestige_loss + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + if = { + limit = { + NOT = { has_trait = lifestyle_blademaster } + } + add_trait = lifestyle_blademaster + } + } + + ai_chance = { + base = 100 + } + } + + option = { # Fate will bring us together again, you will see. + name = fp3_yearly.8008.c + + pay_short_term_gold = { + target = scope:fp3_child_to_leave + gold = minor_gold_value + } + + add_prestige = medium_prestige_loss + + scope:fp3_child_to_leave = { + fp3_child_leaves_effect = yes + if = { + limit = { + NOT = { has_trait = lifestyle_blademaster } + } + add_trait = lifestyle_blademaster + } + } + + ai_chance = { + base = 100 + } + } +} + +#############################Duel events end############################ +######################################################################### + +#########Caliphal Concerns, by Ola Jentzsch################ +scripted_trigger fp3_yearly.8009_frontier_heresy_trigger = { + any_county_province = { geographical_region = dlc_fp3_eastern_persian_frontier_regions } + faith = { save_temporary_scope_as = compare_faith } + root.faith.religious_head = { + faith = { + faith_hostility_level = { target = scope:compare_faith value > faith_astray_level } + } + } +} + +scripted_trigger fp3_yearly.8009_root_and_hof_faith_comparison_trigger = { + faith = { save_temporary_scope_as = compare_faith } + root = { + faith = { + faith_hostility_level = { target = scope:compare_faith value <= faith_astray_level } + } + } +} + + +fp3_yearly.8009 = { + type = character_event + title = fp3_yearly.8009.t + desc = { + desc = fp3_yearly.8009.desc_beginning + first_valid = { + triggered_desc = { + trigger = { + root.faith.religious_head = { + OR = { + has_religion = religion:islam_religion + has_religion = religion:judaism_religion + } + } + } + desc = fp3_yearly.8009.desc_muslim_or_jewish_insult_ending + } + desc = fp3_yearly.8009.desc_other_insult_ending + } + } + theme = faith + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = personality_rational + triggered_animation = { + trigger = { + OR = { + has_trait = vengeful + has_trait = wrathful + dread >= 50 + tyranny >= 50 + } + } + animation = personality_vengeful + } + } + right_portrait = { + character = scope:hof_emissary + animation = chancellor + } + + lower_left_portrait = { character = scope:righteous_caliph } + lower_right_portrait = { character = scope:loyal_chaplain } + + trigger = { + has_fp3_dlc_trigger = yes + + faith.religious_head != root + + exists = root.faith.religious_head + + root.faith.religious_head = { + is_ai = yes + fp3_yearly.8009_root_and_hof_faith_comparison_trigger = yes + faith = { + NOR = { + has_doctrine_parameter = unreformed + has_doctrine_parameter = witchcraft_accepted + has_doctrine = doctrine_pluralism_pluralistic + has_doctrine = tenet_carnal_exaltation + } + } + } + + any_held_county = { + fp3_yearly.8009_frontier_heresy_trigger = yes + save_temporary_scope_as = heretic_county + } + } + + cooldown = { years = 25 } + + immediate = { + + random_held_county = { + limit = { fp3_yearly.8009_frontier_heresy_trigger = yes } + save_scope_as = very_heretic_county + } + + if = { #this is a false safe due to the funkyness of the location system + limit = { + exists = root.faith.religious_head.location + } + root.faith.religious_head.location = { + save_scope_as = caliphal_location + } + } + else_if = { + limit = { + exists = root.faith.religious_head.primary_title.title_capital_county.title_province + } + root.faith.religious_head.primary_title.title_capital_county.title_province = { + save_scope_as = caliphal_location + } + } + else = { + random_province = { + save_scope_as = caliphal_location + } + } + + root.faith.religious_head = { save_scope_as = righteous_caliph } + + create_character = { #this is the head of faith's emissary + age = { 25 75 } + location = root.capital_province + faith = root.faith.religious_head.faith + gender_female_chance = root_faith_dominant_gender_female_chance #could be female, if given the right context. + trait = diplomat + template = priest_character_template + save_scope_as = hof_emissary #this saves him as a scope so we can get nice effects to bounce off him! + } + + if = { + limit = { + exists = cp:councillor_court_chaplain + cp:councillor_court_chaplain = { is_available_healthy_ai_adult = yes } + } + cp:councillor_court_chaplain = { save_scope_as = loyal_chaplain } + } + } + + option = { #I shall stamp this heresy out + name = fp3_yearly.8009.a + + add_dread = medium_dread_gain + + add_character_modifier = { + modifier = fp3_fearsome_example_modifier + years = 20 + } + + scope:righteous_caliph = { + if = { + limit = { + OR = { #if the HoF has a... certain personality, they appreciate this + has_trait = sadistic + has_trait = callous + has_trait = paranoid + has_trait = vengeful + } + } + add_opinion = { + target = root + opinion = 30 + modifier = fp3_admires_resolve_opinion + } + root = { add_piety = minor_piety_gain } + } + else = { + add_opinion = { #but otherwise, they're kinda shocked + target = root + opinion = -10 + modifier = fp3_went_too_far_opinion + } + } + } + + random_list = { + 70 = { + send_interface_toast = { + title = fp3_gross_persecutions_toast + scope:very_heretic_county = { + add_county_modifier = { + modifier = fp3_gross_persecutions_county_modifier + years = 10 + } + } + } + } + 30 = { + send_interface_toast = { + title = fp3_galvanized_heretics_toast + scope:very_heretic_county = { + add_county_modifier = { + modifier = fp3_galvanized_heretics_county_modifier + years = 30 + } + } + } + } + } + + stress_impact = { + sadistic = major_stress_impact_loss + callous = medium_stress_impact_loss + wrathful = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + zealous = minor_stress_impact_loss + compassionate = massive_stress_impact_gain + just = major_stress_impact_gain + } + + ai_chance = { #cruel, zealous AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_vengefulness = 1 + ai_boldness = 0.5 + ai_compassion = -1 + ai_honor = -0.5 + ai_rationality = -0.5 + } + } + } + + option = { #I shall convert them in the proper language + name = fp3_yearly.8009.b + flavor = fp3_yearly.8009.qurans.flavor + + trigger = { #checking if the province and root is non-arabic and the caliph arabic + + scope:very_heretic_county.culture = { + NOT = { has_cultural_pillar = language_arabic } + } + + culture = { + NOT = { has_cultural_pillar = language_arabic } + } + + root.faith.religious_head = { + culture = { has_cultural_pillar = language_arabic } + } + } + + add_piety = medium_piety_gain + + remove_treasury_or_gold = medium_treasury_or_gold_value + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + + + add_character_modifier = { + modifier = fp3_promoting_arabic_modifier + years = 20 + } + + + if = { + limit = { is_ai = no } #just so this doesn't get out of hand + culture = { + change_cultural_acceptance = { + target = scope:righteous_caliph.culture + value = low_positive_culture_acceptance + desc = cultural_acceptance_gain_arabic_books + } + } + } + + stress_impact = { + humble = minor_stress_impact_loss + zealous = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + } + + ai_chance = { #loyal AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 0.5 + ai_honor = 0.5 + } + + modifier = { + factor = 2 + OR = { + has_trait = humble + has_trait = trusting + knows_language_of_culture = scope:righteous_caliph.culture + } + } + } + } + + + option = { #My court chaplain can handle this + name = fp3_yearly.8009.c + + trigger = { + + exists = scope:loyal_chaplain + } + + add_piety = medium_piety_gain + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + + scope:loyal_chaplain = { + add_character_modifier = { + modifier = fp3_visited_the_frontier_modifier + years = 5 + } + } + + scope:loyal_chaplain = { + duel = { + skill = learning + value = high_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + send_interface_toast = { + title = dealing_with_frontier_heresy_toast.success + left_icon = scope:loyal_chaplain + + custom_tooltip = fp3_county_listened.tt + scope:very_heretic_county = { + add_county_modifier = { + modifier = fp3_conversion_curious_county_modifier + years = 20 + } + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = dealing_with_frontier_heresy_toast.failure + left_icon = scope:loyal_chaplain + + custom_tooltip = fp3_county_unfazed.tt + scope:very_heretic_county = { + add_county_modifier = { + modifier = fp3_frontier_heresy_county_modifier + years = 20 + } + } + } + } + } + } + } + + stress_impact = { + zealous = minor_stress_impact_loss + diligent = medium_stress_impact_gain + } + + ai_chance = { #zealous but frugal AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 0.5 + ai_greed = -1 + ai_energy = -0.5 + } + } + } + + option = { #I'm busy with other things + name = fp3_yearly.8009.d + + add_piety = medium_piety_loss + + add_stress = medium_stress_loss + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + + stress_impact = { + content = medium_stress_impact_loss + cynical = minor_stress_impact_loss + lazy = minor_stress_impact_loss + zealous = medium_stress_impact_gain + diligent = medium_stress_impact_gain + } + + ai_chance = { #lazy or cynical AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 0.5 + ai_boldness = -0.5 + ai_energy = -0.5 + } + } + } +} + +#########Abode of War, by Ola Jentzsch################ +scripted_trigger fp3_yearly.8010_super_evil_pagan_heretic_neighboring_ruler_trigger = { + is_ai = yes + OR = { + top_liege = this + top_liege = { is_ai = yes } + } + NOT = { + is_allied_to = root + is_vassal_of = root + has_truce = root + has_religion = root.faith.religious_head.religion + } +} + +fp3_yearly.8010 = { + type = character_event + title = fp3_yearly.8010.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + root.faith.religious_head = { has_religion = religion:islam_religion } + } + desc = fp3_yearly.8010.desc_muslim + } + desc = fp3_yearly.8010.desc_not_muslim + } + } + theme = war + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:righteous_caliph + animation = personality_dishonorable + } + + lower_left_portrait = { character = scope:pagan_ruler } + + trigger = { + has_fp3_dlc_trigger = yes + + faith.religious_head != root + + exists = root.faith.religious_head + + root.faith.religious_head = { + is_available_healthy_ai_adult = yes + fp3_yearly.8009_root_and_hof_faith_comparison_trigger = yes # sanity check + NOR = { + has_trait = content + has_trait = forgiving + has_trait = compassionate + has_trait = just + } + faith = { + NOR = { + has_doctrine_parameter = unreformed + has_doctrine = doctrine_pluralism_pluralistic + has_doctrine_parameter = holy_wars_forbidden # Pacifists cannot Holy War + } + } + } + + root.capital_province = { geographical_region = world_persian_empire } # so that this inside-to-outside worldview makes sense + + is_ruler = yes + + any_held_county = { + any_county_province = { + geographical_region = dlc_fp3_eastern_persian_frontier_regions # so that you have a suitable frontier region + } + } + + any_character_to_title_neighboring_county = { + holder = { + fp3_yearly.8010_super_evil_pagan_heretic_neighboring_ruler_trigger = yes + } + } + } + + cooldown = { years = 50 } + + immediate = { + root.faith.religious_head = { save_scope_as = righteous_caliph } + + random_character_to_title_neighboring_county = { + limit = { holder = { fp3_yearly.8010_super_evil_pagan_heretic_neighboring_ruler_trigger = yes } } + save_scope_as = pagan_county + } + + scope:pagan_county.holder = { save_scope_as = pagan_ruler } + } + + option = { # So be it! + name = fp3_yearly.8010.a + + add_piety = medium_piety_gain + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = 30 + modifier = pleased_opinion + } + } + + scope:pagan_ruler = { + add_opinion = { + target = root + modifier = warmonger_opinion + } + } + + add_unpressed_claim = scope:pagan_county + custom_tooltip = fp3_yearly.8010_warmonger.tt + + spawn_army = { + men_at_arms = { + type = mubarizun + stacks = 1 + } + men_at_arms = { + type = horse_archers + stacks = 1 + } + levies = 300 + location = root.capital_province + war_keep_on_attacker_victory = yes + save_scope_as = new_army + name = ghazi_event_troops + } + + hidden_effect = { #this sets up the "Five year deadline" + trigger_event = { + id = fp3_yearly.8011 + years = 5 + } + } + + stress_impact = { + brave = medium_stress_impact_loss + wrathful = minor_stress_impact_loss + zealous = minor_stress_impact_loss + arbitrary = miniscule_stress_impact_loss + content = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + craven = major_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { #zealous and bold AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_boldness = 1 + ai_compassion = -0.5 + ai_rationality = -0.5 + } + } + } + + option = { # Give me funds instead of troops, and I'll see what I can do + name = fp3_yearly.8010.b + + trigger = { + OR = { + stewardship >= high_skill_rating + has_stewardship_lifestyle_trait_trigger = yes + } + } + + add_piety = minor_piety_gain + + add_treasury_or_gold = medium_treasury_or_gold_value + + add_unpressed_claim = scope:pagan_county + custom_tooltip = fp3_yearly.8010_warmonger.tt + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = -10 + modifier = annoyed_opinion + } + } + + scope:pagan_ruler = { + add_opinion = { + target = root + modifier = warmonger_opinion + } + } + + hidden_effect = { #this sets up the "Five year deadline" + trigger_event = { + id = fp3_yearly.8011 + years = 5 + } + } + + stress_impact = { + brave = minor_stress_impact_loss + greedy = minor_stress_impact_loss + content = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + craven = major_stress_impact_gain + forgiving = minor_stress_impact_gain + } + + ai_chance = { #greedy AI prefer this option + base = 100 + ai_value_modifier = { + ai_zeal = 0.5 + ai_greed = 1 + ai_compassion = -0.5 + ai_rationality = -0.5 + } + } + } + + option = { # Surely, my lord, this is not the right time for war? + name = fp3_yearly.8010.c + + duel = { + skill = diplomacy + value = high_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + root = { + send_interface_toast = { + title = convincing_the_caliph_toast.success + left_icon = scope:righteous_caliph + + custom_tooltip = fp3_caliph_convinced.tt + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = 30 + modifier = fp3_convincing_argument_opinion + } + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = convincing_the_caliph_toast.failure + left_icon = scope:righteous_caliph + + custom_tooltip = fp3_caliph_unconvinced.tt + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = -30 + modifier = angry_opinion + } + } + add_character_modifier = { + modifier = fp3_refused_the_caliph_modifier + years = 10 + } + } + } + } + } + + scope:pagan_ruler = { + add_opinion = { + target = root + opinion = 10 + modifier = relieved_opinion + } + } + + stress_impact = { + compassionate = major_stress_impact_loss + craven = minor_stress_impact_loss + patient = minor_stress_impact_loss + ambitious = minor_stress_impact_gain + brave = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + + ai_chance = { #compassionate, energetic AI prefer this option + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_energy = 0.5 + ai_zeal = -0.8 + ai_boldness = -0.3 + } + } + } + + option = { # No thanks + name = fp3_yearly.8010.d + + add_character_modifier = { + modifier = fp3_refused_the_caliph_modifier + years = 10 + } + + scope:righteous_caliph = { + add_opinion = { + target = root + opinion = -30 + modifier = angry_opinion + } + } + + scope:pagan_ruler = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + + stress_impact = { + content = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + cynical = minor_stress_impact_loss + brave = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + + ai_chance = { #benevolent and tolerant AI prefer this option + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = 0.7 + ai_vengefulness = -0.5 + ai_zeal = -1 + } + } + } +} + +fp3_yearly.8011 = { #this sets up the HoF's response to your actions + hidden = yes + + immediate = { + if = { # Caliph dies + limit = { + OR = { + NOT = { exists = scope:righteous_caliph } + scope:righteous_caliph = { is_alive = no } + } + } + send_interface_message = { + type = event_martial_bad_with_text + title = fp3_caliph_dead.title + desc = fp3_caliph_dead.desc + } + } + else_if = { # You capture the region + limit = { scope:pagan_county.holder.top_liege = root.top_liege } + trigger_event = fp3_yearly.8012 + } + else = { trigger_event = fp3_yearly.8013 } # You fail + } +} + +fp3_yearly.8012 = { # Promise Fulfilled (follow-up-event) + type = character_event + title = fp3_yearly.8012.t + desc = fp3_yearly.8012.desc + theme = war + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = personality_content + } + right_portrait = { + character = scope:righteous_caliph + animation = happiness + } + + option = { + name = fp3_yearly.8012.a + + add_piety = minor_piety_gain + + hidden_effect = { + random = { + chance = 10 + send_interface_toast = { + left_icon = scope:righteous_caliph + right_icon = root + title = become_faith_warrior.toast + + if = { + limit = { + NOT = { has_trait = faith_warrior } + } + add_trait = faith_warrior + } + } + } + } + } +} + +fp3_yearly.8013 = { # Caliphal Dissapointment (follow-up-event) + type = character_event + title = fp3_yearly.8013.t + desc = fp3_yearly.8013.desc + theme = war + override_background = { reference = throne_room } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:righteous_caliph + animation = anger + } + + option = { + name = fp3_yearly.8013.a + + add_piety = minor_piety_loss + + scope:righteous_caliph = { + add_opinion = { + target = root + modifier = broke_promise + } + } + } + + option = { + name = fp3_yearly.8013.b + + add_piety = medium_piety_loss + add_prestige = minor_prestige_gain + + scope:righteous_caliph = { + add_opinion = { + target = root + modifier = hate_opinion + opinion = -40 + } + } + } +} + +################################### +# Secrets of the Teapot, by Ola Jentzsch, idea by Elena Zenko +################################### + +scripted_trigger fp3_opportunistic_drunkard_trigger = { + faith = { trait_is_sin = drunkard } + has_trait = deceitful + OR = { + has_trait = drunkard + has_trait = gregarious + has_trait = gluttonous + has_trait = lifestyle_reveler + } +} + +fp3_yearly.8014 = { + type = character_event + title = fp3_yearly.8014.t + desc = fp3_yearly.8014.desc + theme = faith + + left_portrait = { + character = scope:smart_courtier + animation = happiness + } + + right_portrait = { + character = root + animation = scheme + } + + trigger = { + has_fp3_dlc_trigger = yes + + root.capital_province = { geographical_region = world_persian_empire } + + faith = { trait_is_sin = drunkard } + + OR = { + has_trait = drunkard + has_trait = lifestyle_reveler + } + + OR = { + any_spouse = { fp3_opportunistic_drunkard_trigger = yes } + any_courtier_or_guest = { fp3_opportunistic_drunkard_trigger = yes } + any_powerful_vassal = { fp3_opportunistic_drunkard_trigger = yes } + } + } + + cooldown = { years = 10 } + + immediate = { + + if = { + limit = { + any_spouse = { + fp3_opportunistic_drunkard_trigger = yes + } + } + random_spouse = { + limit = { + fp3_opportunistic_drunkard_trigger = yes + } + save_scope_as = smart_courtier + } + } + else_if = { + limit = { + any_powerful_vassal = { fp3_opportunistic_drunkard_trigger = yes + } + } + random_powerful_vassal = { + limit = { + fp3_opportunistic_drunkard_trigger = yes + } + save_scope_as = smart_courtier + } + } + else_if = { + limit = { + any_courtier_or_guest = { fp3_opportunistic_drunkard_trigger = yes + } + } + random_courtier_or_guest = { + limit = { + fp3_opportunistic_drunkard_trigger = yes + } + save_scope_as = smart_courtier + } + } + + hidden_effect = { + scope:smart_courtier = { + add_character_modifier = { + modifier = fp3_teapot_alcoholism_modifier + years = 20 + } + } + } + } + + option = { #Very good idea! + name = fp3_yearly.8014.a + + add_piety = medium_piety_loss + + scope:smart_courtier = { + add_opinion = { + target = root + opinion = 20 + modifier = took_my_advice_opinion + } + } + + add_character_modifier = { + modifier = fp3_teapot_alcoholism_modifier + } + + + ai_chance = { #deceitful or gluttonous goes for this option + base = 10 + ai_value_modifier = { + ai_rationality = 0.8 + ai_greed = 0.5 + ai_honor = -0.5 + } + } + + stress_impact = { + deceitful = minor_stress_impact_loss + drunkard = medium_stress_impact_loss + gregarious = minor_stress_impact_loss + gluttonous = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + honest = medium_stress_impact_gain + temperate = minor_stress_impact_gain + zealous = medium_stress_impact_gain + } + } + + option = { #Men I can deceive, but not God + name = fp3_yearly.8014.b + + add_piety = medium_piety_gain + + scope:smart_courtier = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + + ai_chance = { #cautious, honorable, moderately zealous AI goes for this option + base = 10 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = -0.5 + ai_zeal = 0.5 + } + } + + stress_impact = { + just = minor_stress_impact_loss + honest = minor_stress_impact_loss + temperate = minor_stress_impact_loss + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + gluttonous = minor_stress_impact_gain + drunkard = medium_stress_impact_gain + } + } + + option = { #I should not do this, and nor will you. + name = fp3_yearly.8014.c + flavor = f3_yearly.8014_forbidding_teapot_alcohol_flavor + + trigger = { is_ruler = yes } + + add_piety = major_piety_gain + + scope:smart_courtier = { + add_opinion = { + target = root + opinion = -20 + modifier = fp3_killjoy_opinion + } + remove_character_modifier = fp3_teapot_alcoholism_modifier + } + + ai_chance = { #zealous AI goes for this option + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_energy = 0.5 + ai_vengefulness = 0.5 + ai_greed = -1 + } + } + + stress_impact = { + zealous = medium_stress_impact_loss + just = minor_stress_impact_loss + honest = minor_stress_impact_loss + temperate = minor_stress_impact_loss + craven = minor_stress_impact_gain + cynical = minor_stress_impact_gain + shy = minor_stress_impact_gain + gluttonous = minor_stress_impact_gain + drunkard = medium_stress_impact_gain + } + } +} + +#########Forgotten Runestones, by Ola Jentzsch###### +scripted_trigger fp3_not_norse_trigger = { + NOR = { + culture = { has_cultural_pillar = heritage_north_germanic } + culture = { has_cultural_tradition = tradition_fp1_northern_stories } + has_religion = religion:germanic_religion + } +} + +scripted_trigger fp3_intolerant_vassal_trigger = { + is_ai = yes + OR = { + has_trait = zealous + has_trait = arrogant + has_trait = wrathful + has_trait = irritable + } + NOR = { + has_trait = cynical + has_trait = forgiving + } +} + +fp3_yearly.8016 = { + type = character_event + title = fp3_yearly.8016.t + desc = fp3_yearly.8016.desc + theme = realm + + override_background = { reference = fp1_runestone } + + left_portrait = { + character = root + animation = personality_cynical + } + + right_portrait = { + character = scope:hyrcanian_vassal + animation = personality_vengeful + } + + trigger = { + + #Standard scope sanity checks + has_fp3_dlc_trigger = yes + + root.capital_province = { + OR = { + geographical_region = world_persian_empire + geographical_region = world_steppe_tarim + } + } + + #This event is a bit unique, so we don't want it to fire more than once in a playthrough + is_ai = no + NOT = { exists = global_var:has_had_runestone_event } + + #The important parts + + #is_available_at_peace_adult = yes #so it makes sense to be in Daylam + + fp3_not_norse_trigger = yes + + any_powerful_vassal = { + any_held_county = { + title_province = { + geographical_region = world_daylam + } + } + fp3_not_norse_trigger = yes + fp3_intolerant_vassal_trigger = yes + } + } + + immediate = { + + set_global_variable = has_had_runestone_event + + random_powerful_vassal = { + limit = { + any_held_county = { + title_province = { + geographical_region = world_daylam + } + } + fp3_not_norse_trigger = yes + fp3_intolerant_vassal_trigger = yes + } + save_scope_as = hyrcanian_vassal + } + + scope:hyrcanian_vassal = { + random_held_county = { + limit = { + title_province = { + geographical_region = world_daylam + } + } + save_scope_as = runestone_county + } + } + + scope:runestone_county = { + add_county_modifier = { + modifier = fp3_forgotten_runestones_county_modifier + years = 200 + } + } + + root.capital_county = { + save_scope_as = new_runestone_county + } + } + + option = { #Very well, let us destroy them. + name = fp3_yearly.8016.a + + + scope:hyrcanian_vassal = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + + scope:runestone_county = { + remove_county_modifier = fp3_forgotten_runestones_county_modifier + } + + scope:runestone_county = { + add_county_modifier = { + modifier = fp3_dismayed_daylamites_county_modifier + years = 30 + } + } + + hidden_effect = { + if = { + limit = { current_year < 1050 } + random = { + chance = 20 + trigger_event = { + id = fp3_yearly.8017 #easter egg, fans wanted events to build on eachother + years = { 5 15 } + } + } + } + } + + stress_impact = { + irritable = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + zealous = minor_stress_impact_loss + calm = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + } + + option = { #No, you shall leave them be forever. + name = fp3_yearly.8016.b + + scope:hyrcanian_vassal = { + add_opinion = { + target = root + opinion = -20 + modifier = angry_opinion + } + } + + stress_impact = { + cynical = minor_stress_impact_loss + scholar = minor_stress_impact_loss + craven = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + trusting = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + zealous = minor_stress_impact_gain + } + } + + option = { #Drag them to my capital + name = fp3_yearly.8016.c + + duel = { + skill = diplomacy + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + send_interface_toast = { + title = convincing_the_hyrcanian_vassal_toast.success + left_icon = scope:hyrcanian_vassal + + custom_tooltip = fp3_hyrcanian_vassal_convinced.tt + scope:hyrcanian_vassal = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + send_interface_toast = { + title = convincing_the_hyrcanian_vassal_toast.failure + left_icon = scope:hyrcanian_vassal + + custom_tooltip = fp3_hyrcanian_vassal_unconvinced.tt + scope:hyrcanian_vassal = { + add_opinion = { + target = root + opinion = -20 + modifier = fp3_suspicious_motives_opinion + } + } + } + } + } + } + + scope:runestone_county = { + remove_county_modifier = fp3_forgotten_runestones_county_modifier + } + + scope:runestone_county = { + add_county_modifier = { + modifier = fp3_dismayed_daylamites_county_modifier + years = 30 + } + } + + scope:new_runestone_county = { + add_county_modifier = { + modifier = fp3_forgotten_runestones_county_modifier + years = 200 + } + } + + hidden_effect = { + if = { + limit = { current_year < 1050 } + random = { + chance = 20 + trigger_event = { + id = fp3_yearly.8017 #easter egg, fans wanted events to build on eachother + years = { 5 15 } + } + } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + diligent = minor_stress_impact_loss + trusting = minor_stress_impact_gain + zealous = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + } + } +} + +###Hyrcanian Havoc by Ola Jentzsch (easter egg event, will only trigger rarely) +fp3_yearly.8017 = { + type = character_event + title = fp3_yearly.8017.t + desc = fp3_yearly.8017.desc + theme = battle + override_background = { + reference = burning_building + } + left_portrait = { + character = scope:raider + animation = aggressive_axe + } + right_portrait = { + character = scope:hyrcanian_vassal + animation = fear + triggered_animation = { + trigger = { + ai_vengefulness >= medium_positive_ai_value + ai_boldness > high_negative_ai_value + } + animation = rage + } + } + + trigger = { + + exists = global_var:has_had_runestone_event + + exists = scope:hyrcanian_vassal + + scope:hyrcanian_vassal = { + any_held_county = { this = scope:runestone_county } + } + } + + immediate = { + + create_character = { + template = fp1_jomsviking_bigwig + location = scope:hyrcanian_vassal.capital_province + save_scope_as = raider + } + + + scope:raider = { + add_character_flag = single_combat_duel_armor + } + + scope:hyrcanian_vassal = { + maimed_in_battle_effect = yes + } + + scope:runestone_county = { + random_county_province = { + limit = { is_county_capital = yes } + save_scope_as = runestone_province + } + } + + scope:runestone_province = { + add_province_modifier = { + modifier = recently_looted_modifier + years = 10 + } + } + } + + #Oh no! + option = { + name = fp3_yearly.8017.a + add_prestige = miniscule_prestige_loss + } + + #Send some restitution + option = { + name = fp3_yearly.8017.b + + pay_short_term_gold = { + target = scope:runestone_county.holder + gold = medium_gold_value + } + scope:runestone_county.holder = { + add_opinion = { + target = liege + modifier = grateful_opinion + opinion = 20 + } + } + stress_impact = { greedy = medium_stress_impact_gain } + } + + #This is a bad open...maybe I'd better return those stones... + option = { + name = fp3_yearly.8017.c + + trigger = { + scope:new_runestone_county = { + has_county_modifier = fp3_forgotten_runestones_county_modifier + } + } + + scope:new_runestone_county = { + remove_county_modifier = fp3_forgotten_runestones_county_modifier + } + + scope:runestone_county = { + add_county_modifier = { + modifier = fp3_forgotten_runestones_county_modifier + years = 200 + } + } + + stress_impact = { + craven = medium_stress_impact_loss + paranoid = medium_stress_impact_loss + zealous = minor_stress_impact_loss + arrogant = medium_stress_impact_gain + cynical = medium_stress_impact_gain + brave = medium_stress_impact_gain + stubborn = medium_stress_impact_gain + } + } + + after = { + scope:raider = { + remove_character_flag = single_combat_duel_armor + } + } +} + +###Heavenly Horses by Ola Jentzsch############ +fp3_yearly.8018 = { + type = character_event + title = fp3_yearly.8018.t + + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:horse_enthusiast = { is_eunuch_trigger = yes } + } + desc = fp3_yearly.8018.desc_eunuch + } + desc = fp3_yearly.8018.desc_grand_old_lady + } + } + theme = martial_chivalry_focus + left_portrait = { + character = scope:horse_enthusiast + animation = admiration + triggered_animation = { + trigger = { + ai_sociability >= medium_positive_ai_value + ai_boldness >= medium_positive_ai_value + } + animation = flirtation + } + } + right_portrait = { + character = root + animation = disapproval + } + + override_background = { + reference = wilderness_mountains + } + + trigger = { + + has_fp3_dlc_trigger = yes + + any_owned_story = { type = story_cycle_martial_lifestyle_warhorse } + + any_held_county = { + any_county_province = { + geographical_region = world_transoxiana + } + } + + NOR = { + title:h_china.holder ?= root + culture = culture:han + } + + gold < 0 + } + + + immediate = { + + random_list = { + 50 = { + create_character = { + template = fp3_chinese_grand_old_lady + location = root.capital_province + save_scope_as = horse_enthusiast + } + } + 50 = { + create_character = { + template = fp3_chinese_eunuch_envoy + location = root.capital_province + save_scope_as = horse_enthusiast + } + } + } + + random_owned_story = { + type = story_cycle_martial_lifestyle_warhorse + save_scope_as = warhorse_story + } + } + + + #Sell the horse + option = { + name = fp3_yearly.8018.a + + show_as_tooltip = { + remove_horse_story_modifiers_effect = yes + } + scope:warhorse_story = { + hidden_effect = { end_story = yes } + } + + add_gold = massive_gold_value + + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + temperate = minor_stress_impact_loss + } + + ai_chance = { #pragmatic, desperate AI goes for this option + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_boldness = -0.5 + ai_compassion = -0.5 + } + } + } + + #Refuse + option = { + name = fp3_yearly.8018.b + + stress_impact = { + stubborn = minor_stress_impact_loss + content = minor_stress_impact_loss + } + + ai_chance = { #horse-loving AI refuse this + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_boldness = 0.5 + ai_energy = 0.5 + ai_sociability = 0.5 + } + } + } + + #If it's the arrogant lady, insult her + option = { + name = fp3_yearly.8018.c + + trigger = { + scope:horse_enthusiast = { + is_female = yes + } + } + + add_character_modifier = { + modifier = fp3_insulted_chinese_noble_modifier + years = 20 + } + + stress_impact = { + calm = medium_stress_impact_gain + shy = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + arrogant = medium_stress_impact_loss + wrathful = medium_stress_impact_loss + irritable = medium_stress_impact_loss + } + + ai_chance = { #angry AI pick this option + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_boldness = 0.7 + } + } + } + + after = { + + hidden_effect = { + scope:horse_enthusiast = { + move_to_pool = yes + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/fp3/fp3_yearly_frontier_chains.txt b/events/dlc/fp3/fp3_yearly_frontier_chains.txt new file mode 100644 index 00000000..a902d3cd --- /dev/null +++ b/events/dlc/fp3/fp3_yearly_frontier_chains.txt @@ -0,0 +1,824 @@ +namespace = fp3_yearly + +scripted_trigger not_steppe_nomad_trigger = { + culture = { + NOR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + has_cultural_tradition = tradition_horse_lords + } + } +} + +scripted_trigger suitable_nomad_settling_province_trigger = { + has_holding_type = castle_holding + barony = { + is_under_holy_order_lease = no + #is_capital_barony = no + } +} + + +fp3_yearly.8888 = { #Nomads story cycle + type = character_event + title = fp3_yearly.8888.t + desc = fp3_yearly.8888.desc + theme = vassal + left_portrait = { + character = scope:upset_vassal + animation = anger + } + right_portrait = { + character = root + animation = personality_rational + triggered_animation = { + trigger = { + diplomacy >= decent_skill_rating + } + animation = personality_honorable + } + } + lower_left_portrait = { + character = scope:possibly_capable_marshal + } + lower_right_portrait = { + character = scope:turkic_leader + } + + trigger = { + + #standard checks + has_fp3_dlc_trigger = yes + root.capital_province = { geographical_region = world_persian_empire } + is_available_at_peace_adult = yes + + #event fluff triggers + not_steppe_nomad_trigger = yes + + NOT = { has_character_flag = had_turkic_tribe_story } #since this event starts the story + + exists = cp:councillor_marshal + + cp:councillor_marshal = { + NOT = { has_trait = craven } + is_ai = yes + } + + any_vassal = { + not_steppe_nomad_trigger = yes + is_ai = yes + NOT = { + this = root.cp:councillor_marshal + } + any_held_county = { + any_county_province = { + geographical_region = dlc_fp3_eastern_persian_frontier_regions + NOT = { terrain = steppe } + } + } + } + + any_held_county = { any_county_province = { suitable_nomad_settling_province_trigger = yes } } + } + + cooldown = { years = 50 } + + immediate = { + + random_vassal = { + limit = { + not_steppe_nomad_trigger = yes + is_ai = yes + NOT = { + this = root.cp:councillor_marshal + } + any_held_county = { + any_county_province = { + geographical_region = dlc_fp3_eastern_persian_frontier_regions + NOT = { terrain = steppe } + } + } + } + save_scope_as = upset_vassal + random_held_county = { + limit = { + any_county_province = { + geographical_region = dlc_fp3_eastern_persian_frontier_regions + NOT = { terrain = steppe } + } + } + save_scope_as = nomads_county + } + } + + random_held_county = { + limit = { + any_county_province = { suitable_nomad_settling_province_trigger = yes } + } + save_scope_as = nomads_new_county #for use in the claim the former_master might get + } + + scope:nomads_new_county = { + random_county_province = { + limit = { suitable_nomad_settling_province_trigger = yes } + barony = { save_scope_as = nomads_barony } + } + } + + cp:councillor_marshal = { save_scope_as = possibly_capable_marshal } + + scope:nomads_county = { + add_county_modifier = { + modifier = fp3_nomad_friction_county_modifier + years = 50 + } + } + + create_character = { + location = root.capital_province + template = fp3_turko-mongol_leader + save_scope_as = turkic_leader + } + } + + option = { + name = fp3_yearly.8888.a + + duel = { + skill = diplomacy + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + custom_tooltip = fp3_treating_with_turks.success.tt + trigger_event = { + id = fp3_yearly.8889 + days = { 2 3 } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + + custom_tooltip = fp3_treating_with_turks.failure.tt + send_interface_toast = { + title = fp3_treating_with_turks_toast.failure + left_icon = root + } + } + } + + scope:upset_vassal = { + if = { + limit = { + OR = { #if he's diplomatically minded, he'll appreciate this + has_trait = forgiving + has_trait = trusting + has_trait = compassionate + has_diplomacy_lifestyle_trait_trigger = yes + } + } + add_opinion = { + target = root + opinion = 20 + modifier = respect_opinion + } + } + else = { + add_opinion = { #but otherwise, they're not on board + target = root + opinion = -10 + modifier = fp3_treats_with_barbarians_opinion + } + } + } + + scope:possibly_capable_marshal = { + add_opinion = { + target = root + opinion = -10 + modifier = disappointed_opinion + } + } + + stress_impact = { + craven = medium_stress_impact_gain + lazy = medium_stress_impact_gain + shy = medium_stress_impact_gain + gregarious = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_boldness = 1 + ai_compassion = 0.5 + } + } + } + + option = { + name = fp3_yearly.8888.b + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = 20 + modifier = grateful_opinion + } + } + + scope:possibly_capable_marshal = { + add_opinion = { + target = root + opinion = 10 + modifier = trusted_me_opinion + } + } + + scope:possibly_capable_marshal = { + duel = { + skill = martial + value = average_skill_rating + + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + root = { + custom_tooltip = fp3_fighting_turks.success.tt + trigger_event = { + id = fp3_yearly.8890 + days = { 2 3 } + } + } + } + 20 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + root = { + custom_tooltip = fp3_fighting_turks.failure.tt + send_interface_toast = { + title = fp3_fighting_turks_toast.failure + left_icon = scope:possibly_capable_marshal + } + } + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_vengefulness = 0.5 + } + } + } + + option = { #Ignore the issue + name = fp3_yearly.8888.c + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = -20 + modifier = angry_opinion + } + } + + scope:possibly_capable_marshal = { + add_opinion = { + target = root + opinion = -10 + modifier = disappointed_opinion + } + } + + stress_impact = { + ambitious = minor_stress_impact_gain + diligent = minor_stress_impact_gain + just = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + } + } +} + +fp3_yearly.8889 = { #Nomads story cycle + type = character_event + title = fp3_yearly.8889.t + desc = fp3_yearly.8889.desc + theme = vassal + left_portrait = { + character = scope:turkic_leader + animation = disapproval + } + right_portrait = { + character = root + animation = drink_goblet + triggered_animation = { + trigger = { + diplomacy >= decent_skill_rating + NOR = { + has_trait = callous + has_trait = wrathful + has_trait = vengeful + } + } + animation = personality_compassionate + } + } + lower_left_portrait = { + character = scope:upset_vassal + } + + override_background = { reference = wilderness } + + trigger = { + + #standard checks + is_available_adult = yes + + #event not breaking sanity triggers + exists = scope:upset_vassal + scope:upset_vassal = { is_alive = yes } + + exists = scope:turkic_leader + scope:turkic_leader = { is_alive = yes } + + exists = scope:nomads_county + + exists = scope:nomads_new_county + } + + option = { + name = fp3_yearly.8889.a + + + if = { + limit = { + scope:upset_vassal = { + NOT = { + has_relation_rival = root + has_relation_nemesis = root + } + } + } + root = { + progress_towards_rival_effect = { + CHARACTER = scope:upset_vassal + REASON = rival_let_hostile_nomads_roam_free + OPINION = -20 + } + } + } + else = { + scope:upset_vassal = { + add_opinion = { + target = root + opinion = -40 + modifier = hate_opinion + } + } + } + + add_courtier = scope:turkic_leader + + spawn_army = { + men_at_arms = { + type = horse_archers + stacks = 1 + } + location = root.capital_province + war_keep_on_attacker_victory = yes + uses_supply = yes + inheritable = no + save_scope_as = horsemen_army + name = turkic_tribal_event_troops + } + + #This is needed to make the story cycle able to pick up the scopes + set_variable = { + name = turkic_leader + value = scope:turkic_leader + } + set_variable = { + name = upset_vassal + value = scope:upset_vassal + } + set_variable = { + name = nomads_county + value = scope:nomads_county + } + set_variable = { + name = nomads_new_county + value = scope:nomads_new_county + } + + create_story = turkic_tribe_story + + stress_impact = { + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.4 + ai_boldness = 0.7 + ai_vengefulness = 0.3 + } + } + } + + option = { + name = fp3_yearly.8889.b + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = -10 + modifier = disappointed_opinion + } + } + + add_courtier = scope:turkic_leader + + spawn_army = { + men_at_arms = { + type = horse_archers + stacks = 1 + } + location = root.capital_province + war_keep_on_attacker_victory = yes + uses_supply = yes + inheritable = no + save_scope_as = horsemen_army + name = turkic_tribal_event_troops + } + + #This is needed to make the story cycle able to pick up the scopes + set_variable = { + name = turkic_leader + value = scope:turkic_leader + } + set_variable = { + name = upset_vassal + value = scope:upset_vassal + } + set_variable = { + name = nomads_county + value = scope:nomads_county + } + set_variable = { + name = nomads_new_county + value = scope:nomads_new_county + } + + create_story = turkic_tribe_story + + scope:nomads_county = { + remove_county_modifier = fp3_nomad_friction_county_modifier + } + + scope:nomads_new_county = { + add_county_modifier = { + modifier = fp3_nomad_friction_county_modifier + years = 30 + } + } + + stress_impact = { + generous = medium_stress_impact_loss + content = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.6 + ai_boldness = 1 + ai_compassion = 0.2 + } + } + } + + option = { #no deal + name = fp3_yearly.8889.c + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + + stress_impact = { + ambitious = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_vengefulness = 0.5 + } + } + } +} + + + + +fp3_yearly.8890 = { #Nomads story cycle + type = character_event + title = fp3_yearly.8890.t + desc = { + desc = fp3_yearly.8890.desc_beginning + first_valid = { + triggered_desc = { + trigger = { + scope:upset_vassal = { + AND = { + ai_compassion < medium_positive_ai_value + ai_vengefulness > medium_positive_ai_value + } + } + } + desc = fp3_yearly.8890_brutal_demands + } + desc = fp3_yearly.8890_nonbrutal_demands + } + desc = fp3_yearly.8890.desc_ending + } + + + theme = vassal + left_portrait = { + character = scope:turkic_leader + animation = prisonhouse + } + right_portrait = { + character = root + animation = personality_rational + triggered_animation = { + trigger = { + diplomacy < high_skill_rating + NOR = { + has_trait = compassionate + has_trait = forgiving + has_trait = just + } + } + animation = personality_callous + } + } + lower_left_portrait = { + character = scope:upset_vassal + } + + lower_right_portrait = { + character = scope:possibly_capable_marshal + } + + trigger = { + + #standard checks + is_available_adult = yes + + #event not breaking sanity triggers + exists = scope:upset_vassal + scope:upset_vassal = { is_alive = yes } + + exists = scope:turkic_leader + scope:turkic_leader = { is_alive = yes } + + exists = scope:nomads_county + + exists = scope:nomads_new_county + } + + option = { + name = fp3_yearly.8890.a + + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = -15 + modifier = fp3_suspicious_motives_opinion + } + } + + add_courtier = scope:turkic_leader + + add_hook = { + type = indebted_hook + target = scope:turkic_leader + } + + spawn_army = { + men_at_arms = { + type = horse_archers + stacks = 1 + } + location = root.capital_province + war_keep_on_attacker_victory = yes + uses_supply = yes + inheritable = no + save_scope_as = horsemen_army + name = turkic_tribal_event_troops + } + + #This is needed to make the story cycle able to pick up the scopes + set_variable = { + name = turkic_leader + value = scope:turkic_leader + } + set_variable = { + name = upset_vassal + value = scope:upset_vassal + } + set_variable = { + name = nomads_county + value = scope:nomads_county + } + set_variable = { + name = nomads_new_county + value = scope:nomads_new_county + } + + create_story = turkic_tribe_story + + scope:nomads_county = { + remove_county_modifier = fp3_nomad_friction_county_modifier + } + + scope:nomads_new_county = { + add_county_modifier = { + modifier = fp3_nomad_friction_county_modifier + years = 30 + } + } + + stress_impact = { + content = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_rationality = 0.5 + } + } + } + + option = { #execute the nomad leader + name = fp3_yearly.8890.b + + add_dread = medium_dread_gain + + scope:upset_vassal = { + if = { + limit = { + AND = { #if they're cruel, he'll enjoy this + ai_compassion < 0 + ai_vengefulness > medium_positive_ai_value + } + } + add_opinion = { + target = root + opinion = 30 + modifier = fp3_very_very_pleased_opinion + } + } + else = { + add_opinion = { #but otherwise, they're not on board + target = root + opinion = -10 + modifier = fp3_went_too_far_opinion + } + } + } + + + scope:turkic_leader = { + death = { + death_reason = death_execution + killer = root + } + } + + random_list = { + 50 = { + send_interface_toast = { + title = nomad_friction_gone.tt + left_icon = root + + scope:nomads_county = { remove_county_modifier = fp3_nomad_friction_county_modifier } + } + } + 50 = { + send_interface_toast = { + title = nomad_friction_active.tt + left_icon = root + + scope:nomads_county = { + add_county_modifier = { + modifier = fp3_vengeful_nomads_county_modifier + years = 10 + } + } + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + just = medium_stress_impact_gain + arbitrary = medium_stress_impact_loss + sadistic = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_compassion = -1 + } + } + } + + option = { + name = fp3_yearly.8890.c + + add_dread = minor_dread_gain + + scope:turkic_leader = { + hard_imprison_character_effect = { + TARGET = this + IMPRISONER = root + } + } + + scope:upset_vassal = { + add_opinion = { + target = root + opinion = 20 + modifier = pleased_opinion + } + } + + random = { + chance = 75 + send_interface_toast = { + title = nomad_friction_gone.tt + left_icon = root + + scope:nomads_county = { remove_county_modifier = fp3_nomad_friction_county_modifier } + } + } + + + stress_impact = { + compassionate = minor_stress_impact_gain + just = minor_stress_impact_gain + arbitrary = minor_stress_impact_loss + cynical = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 0.5 + ai_rationality = 1 + ai_compassion = -0.5 + } + } + } +} diff --git a/events/dlc/mpo/court_astrologer_events.txt b/events/dlc/mpo/court_astrologer_events.txt new file mode 100644 index 00000000..9b2b2d15 --- /dev/null +++ b/events/dlc/mpo/court_astrologer_events.txt @@ -0,0 +1,307 @@ +namespace = court_astrologer_events + +#Triggered by the "Consult the Skies" decision +court_astrologer_events.0001 = { + type = character_event + title = court_astrologer_events.0001.t + desc = court_astrologer_events.0001.desc + theme = faith + override_effect_2d = { + reference = legend_glow + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_trait = zealous + } + animation = beg + } + triggered_animation = { + trigger = { + OR = { + has_trait = craven + has_trait = paranoid + } + } + animation = worry + } + triggered_animation = { + trigger = { + OR = { + has_trait = cynical + has_trait = arrogant + } + } + animation = boredom + } + animation = prayer + } + right_portrait = { + character = scope:astrologer + animation = holding_staff + } + + immediate = { + random_courtier = { + limit = { has_court_position = court_astrologer_court_position } + save_scope_as = astrologer + } + } + + option = { # Tell me about my love life + name = court_astrologer_events.0001.a + random_list = { + 50 = { + desc = court_astrologer_events.0001.a.success + send_interface_toast = { + title = court_astrologer_events.0001.a.success + left_icon = root + custom_tooltip = court_astrologer_events.0001.a.success.tt + if = { + limit = { + culture ?= { has_cultural_pillar = ethos_spiritual } + } + add_character_modifier = { + modifier = mpo_divination_love_spiritual_modifier + years = 5 + } + } + else = { + add_character_modifier = { + modifier = mpo_divination_love_modifier + years = 5 + } + } + } + } + 50 = { + desc = court_astrologer_events.0001.a.failure + send_interface_toast = { + title = court_astrologer_events.0001.a.failure + left_icon = root + add_stress = minor_stress_loss + } + } + } + stress_impact = { + paranoid = miniscule_stress_impact_gain + cynical = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Tell me about war + name = court_astrologer_events.0001.b + random_list = { + 50 = { + desc = court_astrologer_events.0001.b.success + send_interface_toast = { + title = court_astrologer_events.0001.b.success + left_icon = root + if = { + limit = { + culture ?= { has_cultural_pillar = ethos_spiritual } + } + add_character_modifier = { + modifier = mpo_divination_war_spiritual_modifier + years = 5 + } + } + else = { + add_character_modifier = { + modifier = mpo_divination_war_modifier + years = 5 + } + } + } + } + 50 = { + desc = court_astrologer_events.0001.a.failure + send_interface_toast = { + title = court_astrologer_events.0001.a.failure + left_icon = root + add_stress = minor_stress_loss + } + } + } + stress_impact = { + paranoid = miniscule_stress_impact_gain + cynical = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Just tell me about life + name = court_astrologer_events.0001.c + random_list = { + 50 = { + desc = court_astrologer_events.0001.c.success + send_interface_toast = { + title = court_astrologer_events.0001.c.success + left_icon = root + if = { + limit = { + culture ?= { has_cultural_pillar = ethos_spiritual } + } + add_character_modifier = { + modifier = mpo_divination_life_spiritual_modifier + years = 5 + } + } + else = { + add_character_modifier = { + modifier = mpo_divination_life_modifier + years = 5 + } + } + } + } + 50 = { + desc = court_astrologer_events.0001.a.failure + send_interface_toast = { + title = court_astrologer_events.0001.a.failure + left_icon = root + add_stress = minor_stress_loss + } + } + } + stress_impact = { + paranoid = miniscule_stress_impact_gain + cynical = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Actually, not right now + name = court_astrologer_events.0001.d + remove_decision_cooldown = mpo_divination_decision + ai_chance = { + base = 0 + } + } +} + +# Migration Suggestion +scripted_trigger court_astrologer_events_0002_neighbour_trigger = { + government_has_flag = government_is_nomadic + current_domain_fertility >= root.current_domain_fertility + is_independent_ruler = yes +} + +court_astrologer_events.0002 = { + type = character_event + title = court_astrologer_events.0002.t + desc = { + desc = court_astrologer_events.0002.desc.intro + first_valid = { + triggered_desc = { + trigger = { + location.county.county_fertility <= bad_county_fertility_level + } + desc = court_astrologer_events.0002.desc.bad + } + desc = court_astrologer_events.0002.desc.meh + } + desc = court_astrologer_events.0002.desc.outro + } + theme = nomads + override_background = { reference = mpo_steppe_evening } + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:astrologer + animation = holding_staff + } + lower_center_portrait = scope:target_realm_owner + cooldown = { years = 5 } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available = yes + employs_court_position = court_astrologer_court_position + court_position:court_astrologer_court_position = { is_available = yes } + any_neighboring_realm_same_rank_owner = { + court_astrologer_events_0002_neighbour_trigger = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + current_domain_fertility <= bad_county_fertility_level + factor = 2 + } + } + + immediate = { + court_position:court_astrologer_court_position = { + save_scope_as = astrologer + get_quirk_character_effect = yes + } + ordered_neighboring_realm_same_rank_owner = { + limit = { + court_astrologer_events_0002_neighbour_trigger = yes + } + order_by = current_domain_fertility + save_scope_as = target_realm_owner + primary_title = { save_scope_as = target_realm } + } + } + + option = { # Sounds like a great idea + name = court_astrologer_events.0002.a + custom_tooltip = court_astrologer_events.0002.a.tt + set_variable = { + name = astrologer_desired_area + value = scope:target_realm + years = 5 + } + stress_impact = { + paranoid = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Thank you for your feedback + name = court_astrologer_events.0002.b + scope:astrologer = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + stress_impact = { + paranoid = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # I'm good + name = court_astrologer_events.0002.c + add_prestige = minor_prestige_gain + stress_impact = { + paranoid = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } +} diff --git a/events/dlc/mpo/mpo_decisions_events.txt b/events/dlc/mpo/mpo_decisions_events.txt new file mode 100644 index 00000000..fda33c9d --- /dev/null +++ b/events/dlc/mpo/mpo_decisions_events.txt @@ -0,0 +1,9326 @@ +################################################### +## MPO Decision Events +## +## 0001 Offer Confederation +## 0200 Study Commander Trait +## 0300 Fertility Dance +## 0400 Pax Mongolica +## 0500 Desperate Stance +## 0060 Invite Shepherds +## 0120 Adopt the Nomadic Ways + +namespace = mpo_decisions_events + +scripted_trigger mpo_decisions_events_0001_threat_trigger = { + save_temporary_scope_as = confederate + trigger_if = { + limit = { + max_military_strength > 0 + } + confederation_worthy_foe_strength_ratio_value_root <= 0.5 + } + NOT = { is_allied_to = root } + OR = { + highest_held_title_tier >= tier_kingdom + faith = { + faith_hostility_level = { + target = root.faith + value >= faith_evil_level + } + } + has_trait = conqueror + has_trait = greatest_of_khans + is_gurkhan = yes + } +} + +#Confederation planning event +mpo_decisions_events.0001 = { + type = character_event + title = mpo_decisions_events.0001.t + desc = mpo_decisions_events.0001.desc + theme = vassal + override_background = { reference = wilderness } + left_portrait = { + character = root + animation = inspect_weapon + } + right_portrait = { + character = scope:warrior + animation = throne_room_two_handed_passive_shield + camera = camera_event_right_pointing_left + } + lower_right_portrait = scope:threat + + immediate = { + random_knight = { + limit = { + is_imprisoned = no + is_incapable = no + is_playable_character = no + } + save_scope_as = warrior + add_character_flag = need_military_outfit + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_courtier = { + limit = { + is_available_allow_travelling = yes + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + age <= 55 + } + save_scope_as = warrior + add_character_flag = need_military_outfit + } + } + if = { + limit = { + any_land_neighboring_realm_with_tributaries_owner = { + mpo_decisions_events_0001_threat_trigger = yes + } + } + ordered_land_neighboring_realm_with_tributaries_owner = { + order_by = current_military_strength + limit = { + mpo_decisions_events_0001_threat_trigger = yes + } + save_scope_as = threat + } + } + else_if = { + limit = { + NOT = { + exists = scope:threat + } + } + ordered_land_neighboring_realm_with_tributaries_owner = { + order_by = current_military_strength + limit = { + is_tributary = yes + suzerain ?= { + mpo_decisions_events_0001_threat_trigger = yes + } + } + suzerain = { + save_scope_as = threat + } + } + } + else_if = { + limit = { + NOT = { + exists = scope:threat + } + } + ordered_land_neighboring_realm_with_tributaries_owner = { + order_by = current_military_strength + limit = { + is_tributary = yes + top_suzerain ?= { + mpo_decisions_events_0001_threat_trigger = yes + } + } + top_suzerain = { + save_scope_as = threat + } + } + } + else = { + capital_county = { + kingdom = { + random_de_jure_county = { + limit = { + holder.top_liege = { + mpo_decisions_events_0001_threat_trigger = yes + } + } + holder.top_liege = { + save_scope_as = threat + } + } + } + } + } + if = { + limit = { + NOT = { + exists = scope:threat + } + } + ordered_land_neighboring_realm_with_tributaries_owner = { + order_by = current_military_strength + limit = { + NOT = { is_allied_to = root } + } + save_scope_as = threat + } + } + if = { + limit = { + any_realm_county = { + is_landless_type_title = no + kingdom = { + any_de_jure_county = { + holder.top_liege = scope:threat + } + } + } + } + random_realm_county = { + limit = { + is_landless_type_title = no + kingdom = { + any_de_jure_county = { + holder.top_liege = scope:threat + } + } + } + kingdom = { save_scope_as = home_kingdom } + } + + } + else = { + capital_county.kingdom = { + save_scope_as = home_kingdom + } + } + } + + option = { + name = mpo_decisions_events.0001.a + custom_tooltip = enables_offer_confederation_tt + custom_tooltip = offer_confederation_members_tt + custom_tooltip = offer_confederation_5_year_warning_tt + + add_character_flag = { + flag = forming_confederation + years = 5 + } + } + #opt out + option = { + trigger = { + is_ai = no + } + name = mpo_decisions_events.0001.b + remove_decision_cooldown = call_for_confederation_decision + } + after = { + scope:warrior ?= { + remove_character_flag = need_military_outfit + } + } +} + +#Leave confederation event for leaver +mpo_decisions_events.0002 = { + type = character_event + title = mpo_decisions_events.0002.t + desc = { + desc = mpo_decisions_events.0002.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:confederation + scope:confederation = { + any_confederation_member = { + count >= 2 + NOT = { + this = root + } + } + } + } + desc = mpo_decisions_events.0002.desc_confederation_survives + } + desc = mpo_decisions_events.0002.desc_confederation_done + } + } + theme = vassal + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:other_confederate + animation = disappointed + camera = camera_event_right_forward + } + + immediate = { + ordered_in_list = { + order_by = max_military_strength + list = confederation_members + save_scope_as = other_confederate + } + scope:confederation = { + #Your confederation will survive, it has more members + if = { + limit = { + any_confederation_member = { + count >= 2 + NOT = { + this = root + } + } + } + remove_confederation_member = root + } + #Your confederation is toast + else = { + disband_confederation = yes + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + show_as_tooltip = { + remove_character_modifier = mpo_confederation_member_modifier + } + } + every_in_list = { + list = confederation_members + custom = custom.every_confederation_member + add_opinion = { + modifier = turncoat_opinion + target = root + opinion = -20 + } + } + } + + #Bye + option = { + name = mpo_decisions_events.0002.a + every_in_list = { + list = confederation_members + trigger_event = mpo_decisions_events.0003 + } + } +} + +#Leave confederation event for other members +mpo_decisions_events.0003 = { + type = character_event + title = mpo_decisions_events.0003.t + desc = { + desc = mpo_decisions_events.0003.desc + first_valid = { + triggered_desc = { + trigger = { + is_confederation_member = yes + } + desc = mpo_decisions_events.0003.desc_confederation_survives + } + desc = mpo_decisions_events.0003.desc_confederation_done + } + } + theme = vassal + left_portrait = { + character = root + animation = war_defender + } + right_portrait = { + character = scope:leaver + animation = menacing + } + + immediate = { + if = { + limit = { + is_confederation_member = yes + } + custom_tooltip = leaver_left_confederation_tt + } + else = { + custom_tooltip = leaver_destroyed_confederation_tt + } + } + + #See ya later, I guess. Douchebag + option = { + name = mpo_decisions_events.0003.a + } +} + +#Confederation elevated - vassal +mpo_decisions_events.0004 = { + type = character_event + title = mpo_decisions_events.0004.t + desc = mpo_decisions_events.0004.desc + theme = vassal + override_background = { reference = courtyard } + left_portrait = { + character = root + animation = obsequious_bow + camera = camera_event_horse_left_forward + } + right_portrait = { + character = scope:new_king_ruler + animation = jockey_wave + camera = camera_event_horse_right + } + + immediate = { + + } + + option = { + name = mpo_decisions_events.0004.a + add_character_modifier = { + modifier = confederate_vassal_modifier + } + } + + option = { + name = mpo_decisions_events.0004.b + trigger = { + is_ai = no + } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + } + becomes_independent = { change = scope:change } + resolve_title_and_vassal_change = scope:change + } +} + +#Confederation elevated - king +mpo_decisions_events.0005 = { + type = character_event + title = mpo_decisions_events.0005.t + desc = mpo_decisions_events.0005.desc + theme = crown + override_background = { reference = courtyard } + left_portrait = { + character = scope:new_king_ruler + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:vassal + animation = throne_room_kneel_1 + camera = camera_event_right_to_the_right + } + + immediate = { + ordered_vassal = { + order_by = "opinion(root)" + limit = { + age > 5 + basic_is_available_ai = yes + } + save_scope_as = vassal + } + } + + option = { + name = mpo_decisions_events.0005.a + add_character_modifier = { + modifier = confederate_king_modifier + years = 15 + } + every_sub_realm_county = { + custom = custom.every_realm_county + add_county_modifier = { + modifier = confederate_lands_modifier + years = 30 + } + } + } +} + +scripted_effect mpo_decisions_events_0020_bonuses_tooltips_effect = { + if = { + limit = { + is_vassal_of = root + is_ai = yes + NOT = { is_obedient_to = root } + } + custom_tooltip = friend_heir_target_vassal_tt + custom_tooltip = friend_heir_target_vassal_obedient_tt + } + if = { + limit = { + is_allied_to = root + } + custom_tooltip = friend_heir_target_ally_tt + } + custom_tooltip = friend_heir_success_factors_tt + + #Positive option unlocks + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value = 1 + } + } + custom_tooltip = heir_friend_1_common_trait_tt + } + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value = 2 + } + } + custom_tooltip = heir_friend_2_common_trait_tt + } + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value = 3 + } + } + custom_tooltip = heir_friend_3_common_trait_tt + } + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value = 4 + } + } + custom_tooltip = heir_friend_4_common_trait_tt + } + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value = 5 + } + } + custom_tooltip = heir_friend_5_common_trait_tt + } + if = { + limit = { + number_of_traits_in_common = { + target = scope:heir + value >= 6 + } + } + custom_tooltip = heir_friend_6_or_more_common_trait_tt + } + if = { + limit = { + OR = { + AND = { + has_trait = lifestyle_hunter + scope:heir = { has_trait = lifestyle_hunter } + } + AND = { + has_trait = lifestyle_reveler + scope:heir = { has_trait = lifestyle_reveler } + } + AND = { + has_trait = lifestyle_traveler + scope:heir = { has_trait = lifestyle_traveler } + } + AND = { + has_trait = lifestyle_blademaster + scope:heir = { has_trait = lifestyle_blademaster } + } + AND = { + has_trait = lifestyle_herbalist + scope:heir = { has_trait = lifestyle_herbalist } + } + AND = { + has_trait = lifestyle_mystic + scope:heir = { has_trait = lifestyle_mystic } + } + AND = { + has_trait = lifestyle_physician + scope:heir = { has_trait = lifestyle_physician } + } + AND = { + has_trait = lifestyle_poet + scope:heir = { has_trait = lifestyle_poet } + } + AND = { + has_trait = lifestyle_gardener + scope:heir = { has_trait = lifestyle_gardener } + } + AND = { + has_trait = drunkard + scope:heir = { has_trait = drunkard } + } + AND = { + has_trait = hashishiyah + scope:heir = { has_trait = hashishiyah } + } + } + } + custom_tooltip = heir_friend_lifestyle_tt + } + if = { + limit = { + OR = { + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = wit + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = wit + value >= 50 + } + } + } + } + } + custom_tooltip = heir_friend_sports_tt + } + if = { + limit = { + has_relation_blood_brother = root + } + custom_tooltip = heir_friend_blood_brother_tt + } + if = { + limit = { + OR = { + has_relation_friend = root + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_lover = root + } + } + custom_tooltip = heir_friend_positive_relation_tt + } + if = { + limit = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + custom_tooltip = heir_friend_house_tt + } + if = { + limit = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + custom_tooltip = heir_friend_culture_tt + } + + #Positive bonuses + if = { + limit = { + is_allied_to = root + } + custom_tooltip = heir_friend_roots_ally_tt + } + if = { + limit = { + opinion = { + target = scope:heir + value >= 25 + } + } + custom_tooltip = heir_friend_likes_heir_tt + } + if = { + limit = { + age_compared_to_player_heir < 10 + age_compared_to_player_heir > -10 + } + custom_tooltip = heir_friend_similar_age_tt + } + + #Negative maluses + if = { + limit = { + opinion = { + target = scope:heir + value <= 0 + } + opinion = { + target = scope:heir + value > -40 + } + } + custom_tooltip = heir_friend_dislikes_heir_tt + } + if = { + limit = { + opinion = { + target = scope:heir + value <= -40 + } + } + custom_tooltip = heir_friend_hates_heir_tt + } + if = { + limit = { + save_temporary_scope_as = temp_target + NOR = { + knows_language_of_culture = scope:heir.culture + scope:heir = { + knows_language_of_culture = scope:temp_target.culture + } + } + } + custom_tooltip = heir_friend_cant_communicate_tt + } + if = { + limit = { + OR = { + age_compared_to_player_heir >= 20 + age_compared_to_player_heir <= -20 + } + } + custom_tooltip = heir_friend_different_age_tt + } + if = { + limit = { + highest_held_title_tier = tier_kingdom + } + custom_tooltip = heir_friend_high_tier_tt + } + if = { + limit = { + highest_held_title_tier >= tier_empire + } + custom_tooltip = heir_friend_very_high_tier_tt + } +} + +#Introduce Heir (friend matchmaking) +#By Jason Cantalini +mpo_decisions_events.0020 = { + type = character_event + title = mpo_decisions_events.0020.t + desc = { + desc = mpo_decisions_events.0020.desc + first_valid = { + triggered_desc = { + trigger = { + any_in_list = { + list = saved_targets + count >= 2 + } + } + desc = mpo_decisions_events.0020.desc_multiple + } + desc = mpo_decisions_events.0020.desc_one + } + } + theme = nomads + override_background = { + trigger = { + government_has_flag = government_is_nomadic + } + reference = mpo_camp_steppe + } + override_background = { + trigger = { + NOT = { + government_has_flag = government_is_nomadic + } + } + reference = wilderness + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:heir + animation = horse_conversing_left + camera = camera_event_horse_right_facing_left + } + lower_right_portrait = scope:target_1 + lower_center_portrait = scope:target_2 + lower_left_portrait = scope:target_3 + + immediate = { + save_scope_as = root_scope + player_heir = { + save_scope_as = heir + #Yes, I know how stupid this looks + save_scope_as = loc_heir + } + #Save targets + #Allies will always precede powerful vassals, who precede regular vassals + + #Good relations with root + every_ally = { + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + OR = { + has_relation_friend = root + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_blood_brother = root + } + } + add_to_list = saved_targets + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + OR = { + has_relation_friend = root + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_blood_brother = root + } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + OR = { + has_relation_friend = root + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_blood_brother = root + } + } + add_to_list = saved_targets + } + } + #Take care of blood brothers + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_relation = { + type = blood_brother + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + #friends + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_relation = { + type = friend + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + #soulmates + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_relation = { + type = soulmate + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + #Allied vassal + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + is_allied_to = root + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + is_allied_to = root + } + add_to_list = saved_targets + } + } + #Same house as root + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_ally = { + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + AND = { + exists = house + exists = root.house + house = { + this = root.house + } + } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + AND = { + exists = house + exists = root.house + house = { + this = root.house + } + } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + AND = { + exists = house + exists = root.house + house = { + this = root.house + } + } + } + add_to_list = saved_targets + } + } + #Same culture as root + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_ally = { + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + culture = root.culture + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + culture = root.culture + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 0 + } + culture = root.culture + } + add_to_list = saved_targets + } + } + #Root likes them + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_ally = { + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 50 + } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 50 + } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + reverse_opinion = { + target = root + value >= 50 + } + } + add_to_list = saved_targets + } + } + #Any vassal/ally + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_ally = { + limit = { + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_powerful_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + if = { + limit = { + list_size = { + name = saved_targets + value < 5 + } + } + every_vassal = { + limit = { + is_obedient_to = root + mpo_valid_heir_friend_trigger = { CHARACTER = root } + } + add_to_list = saved_targets + } + } + + #Now that we've put top candidates in list, save their scopes + random_in_list = { + list = saved_targets + save_scope_as = target_1 + } + if = { + limit = { + any_in_list = { + list = saved_targets + NOT = { + this = scope:target_1 + } + } + } + random_in_list = { + list = saved_targets + limit = { + NOT = { + this = scope:target_1 + } + } + save_scope_as = target_2 + } + } + if = { + limit = { + any_in_list = { + list = saved_targets + NOR = { + this = scope:target_1 + this = scope:target_2 + } + } + } + random_in_list = { + list = saved_targets + limit = { + NOR = { + this = scope:target_1 + this = scope:target_2 + } + } + save_scope_as = target_3 + } + } + if = { + limit = { + any_in_list = { + list = saved_targets + NOR = { + this = scope:target_1 + this = scope:target_2 + this = scope:target_3 + } + } + } + random_in_list = { + list = saved_targets + limit = { + NOR = { + this = scope:target_1 + this = scope:target_2 + this = scope:target_3 + } + } + save_scope_as = target_4 + } + } + if = { + limit = { + any_in_list = { + list = saved_targets + NOR = { + this = scope:target_1 + this = scope:target_2 + this = scope:target_3 + this = scope:target_4 + } + } + } + random_in_list = { + list = saved_targets + limit = { + NOR = { + this = scope:target_1 + this = scope:target_2 + this = scope:target_3 + this = scope:target_4 + } + } + save_scope_as = target_5 + } + } + } + #Friends with friend-bachelor #1! + option = { + name = mpo_decisions_events.0020.a + scope:target_1 = { + save_scope_as = friendship_target + mpo_decisions_events_0020_bonuses_tooltips_effect = yes + } + trigger_event = { + id = mpo_decisions_events.0021 + days = 3 + } + stress_impact = { + shy = medium_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 101 + modifier = { + OR = { + has_relation_friend = scope:target_1 + has_relation_best_friend = scope:target_1 + has_relation_soulmate = scope:target_1 + has_relation_lover = scope:target_1 + has_relation_blood_brother = scope:target_1 + } + add = 100 + } + modifier = { + scope:target_1 = { + opinion = { + target = scope:heir + value <= 0 + } + } + add = -100 + } + modifier = { + scope:target_1 = { + opinion = { + target = scope:heir + value < -40 + } + } + add = -200 + } + modifier = { + scope:target_1 = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + add = 50 + } + modifier = { + scope:target_1 = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + add = 50 + } + modifier = { + scope:target_1 = { + opinion = { + target = scope:heir + value >= 75 + } + } + add = 100 + } + } + } + #Friends with friend-bachelor #2! + option = { + trigger = { + exists = scope:target_2 + } + name = mpo_decisions_events.0020.b + scope:target_2 = { + save_scope_as = friendship_target + mpo_decisions_events_0020_bonuses_tooltips_effect = yes + } + trigger_event = { + id = mpo_decisions_events.0021 + days = 3 + } + stress_impact = { + shy = medium_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 101 + modifier = { + OR = { + has_relation_friend = scope:target_2 + has_relation_best_friend = scope:target_2 + has_relation_soulmate = scope:target_2 + has_relation_lover = scope:target_2 + has_relation_blood_brother = scope:target_2 + } + add = 100 + } + modifier = { + scope:target_2 = { + opinion = { + target = scope:heir + value <= 0 + } + } + add = -100 + } + modifier = { + scope:target_2 = { + opinion = { + target = scope:heir + value < -40 + } + } + add = -200 + } + modifier = { + scope:target_2 = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + add = 50 + } + modifier = { + scope:target_2 = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + add = 50 + } + modifier = { + scope:target_2 = { + opinion = { + target = scope:heir + value >= 75 + } + } + add = 100 + } + } + } + #Friends with friend-bachelor #3! + option = { + trigger = { + exists = scope:target_3 + } + name = mpo_decisions_events.0020.c + scope:target_3 = { + save_scope_as = friendship_target + mpo_decisions_events_0020_bonuses_tooltips_effect = yes + } + trigger_event = { + id = mpo_decisions_events.0021 + days = 3 + } + stress_impact = { + shy = medium_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 101 + modifier = { + OR = { + has_relation_friend = scope:target_3 + has_relation_best_friend = scope:target_3 + has_relation_soulmate = scope:target_3 + has_relation_lover = scope:target_3 + has_relation_blood_brother = scope:target_3 + } + add = 100 + } + modifier = { + scope:target_3 = { + opinion = { + target = scope:heir + value <= 0 + } + } + add = -100 + } + modifier = { + scope:target_3 = { + opinion = { + target = scope:heir + value < -40 + } + } + add = -200 + } + modifier = { + scope:target_3 = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + add = 50 + } + modifier = { + scope:target_3 = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + add = 50 + } + modifier = { + scope:target_3 = { + opinion = { + target = scope:heir + value >= 75 + } + } + add = 100 + } + } + } + #Friends with friend-bachelor #4! + option = { + trigger = { + exists = scope:target_4 + } + name = mpo_decisions_events.0020.d + scope:target_4 = { + save_scope_as = friendship_target + mpo_decisions_events_0020_bonuses_tooltips_effect = yes + } + trigger_event = { + id = mpo_decisions_events.0021 + days = 3 + } + stress_impact = { + shy = medium_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 101 + modifier = { + OR = { + has_relation_friend = scope:target_4 + has_relation_best_friend = scope:target_4 + has_relation_soulmate = scope:target_4 + has_relation_lover = scope:target_4 + has_relation_blood_brother = scope:target_4 + } + add = 100 + } + modifier = { + scope:target_4 = { + opinion = { + target = scope:heir + value <= 0 + } + } + add = -100 + } + modifier = { + scope:target_4 = { + opinion = { + target = scope:heir + value < -40 + } + } + add = -200 + } + modifier = { + scope:target_4 = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + add = 50 + } + modifier = { + scope:target_4 = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + add = 50 + } + modifier = { + scope:target_4 = { + opinion = { + target = scope:heir + value >= 75 + } + } + add = 100 + } + } + } + #Friends with friend-bachelor #5! + option = { + trigger = { + exists = scope:target_5 + } + name = mpo_decisions_events.0020.e + scope:target_5 = { + save_scope_as = friendship_target + mpo_decisions_events_0020_bonuses_tooltips_effect = yes + } + trigger_event = { + id = mpo_decisions_events.0021 + days = 1 + } + stress_impact = { + shy = medium_stress_impact_gain + callous = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 101 + modifier = { + OR = { + has_relation_friend = scope:target_5 + has_relation_best_friend = scope:target_5 + has_relation_soulmate = scope:target_5 + has_relation_lover = scope:target_5 + has_relation_blood_brother = scope:target_5 + } + add = 100 + } + modifier = { + scope:target_5 = { + opinion = { + target = scope:heir + value <= 0 + } + } + add = -100 + } + modifier = { + scope:target_5 = { + opinion = { + target = scope:heir + value < -40 + } + } + add = -200 + } + modifier = { + scope:target_5 = { + AND = { + exists = house + exists = scope:heir.house + house = { + this = root.house + } + } + } + add = 50 + } + modifier = { + scope:target_5 = { + OR = { + culture = { + this = scope:heir.culture + } + culture = { + cultural_acceptance = { + target = scope:heir.culture + value >= 80 + } + } + } + } + add = 50 + } + modifier = { + scope:target_5 = { + opinion = { + target = scope:heir + value >= 75 + } + } + add = 100 + } + } + } + #Yeah... not these bozos + option = { + name = mpo_decisions_events.0020.f + remove_decision_cooldown = mpo_decision_introduce_heir + add_prestige = mpo_introduce_heir_prestige_cost + add_piety = mpo_introduce_heir_piety_cost + } +} + +scripted_effect mpo_decisions_events_0021_positive_outcome_effect = { + scope:friendship_target = { + show_as_tooltip = { + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + if = { + limit = { + is_ai = yes + is_vassal_of = root + NOT = { is_obedient_to = root } + } + custom_tooltip = friend_heir_may_become_obedient + } + if = { + limit = { + is_allied_to = root + } + custom_tooltip = friend_heir_may_become_blood_brother + } + } + } +} + +scripted_effect mpo_decisions_events_0021_negative_outcome_effect = { + custom_tooltip = friendship_setup_fail_tt + add_character_flag = { + flag = heir_friend_failed + days = 40 + } +} + +#Friendship maneuvering event +mpo_decisions_events.0021 = { + type = character_event + title = mpo_decisions_events.0021.t + desc = { + desc = mpo_decisions_events.0021.desc_intro + first_valid = { + triggered_desc = { + trigger = { + scope:friendship_target = { + opinion = { + target = scope:heir + value >= 40 + } + } + } + desc = mpo_decisions_events.0021.desc_warm + } + desc = mpo_decisions_events.0021.desc_cold + } + desc = mpo_decisions_events.0021.desc + } + theme = nomads + override_background = { + reference = relaxing_room + } + left_portrait = { + character = scope:heir + triggered_animation = { + trigger = { + scope:friendship_target = { + opinion = { + target = scope:heir + value >= 40 + } + } + } + animation = personality_content + } + animation = boredom + } + right_portrait = { + character = scope:friendship_target + triggered_animation = { + trigger = { + scope:heir = { + reverse_opinion = { + target = scope:friendship_target + value >= 40 + } + } + } + animation = hunting_carcass_start + } + animation = war_defender + } + + trigger = { + is_alive = yes + scope:heir = { + is_alive = yes + } + scope:friendship_target = { + is_alive = yes + } + } + immediate = { + scope:heir = { + get_quirk_character_effect = yes + } + scope:friendship_target = { + save_scope_as = bg_override_char + random_list = { + 1 = { + trigger = { + has_trait = lifestyle_hunter + scope:heir = { + has_trait = lifestyle_hunter + } + } + trait:lifestyle_hunter = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_reveler + scope:heir = { has_trait = lifestyle_reveler } + } + trait:lifestyle_reveler = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_traveler + scope:heir = { has_trait = lifestyle_traveler } + } + trait:lifestyle_traveler = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_blademaster + scope:heir = { has_trait = lifestyle_blademaster } + } + trait:lifestyle_reveler = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_herbalist + scope:heir = { has_trait = lifestyle_herbalist } + } + trait:lifestyle_herbalist = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_mystic + scope:heir = { has_trait = lifestyle_mystic } + } + trait:lifestyle_mystic = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_physician + scope:heir = { has_trait = lifestyle_physician } + } + trait:lifestyle_physician = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_poet + scope:heir = { has_trait = lifestyle_poet } + } + trait:lifestyle_poet = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = lifestyle_gardener + scope:heir = { has_trait = lifestyle_gardener } + } + trait:lifestyle_gardener = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = drunkard + scope:heir = { has_trait = drunkard } + } + trait:drunkard = { + save_scope_as = lifestyle_trait + } + } + 1 = { + trigger = { + has_trait = hashishiyah + scope:heir = { has_trait = hashishiyah } + } + trait:hashishiyah = { + save_scope_as = lifestyle_trait + } + } + } + } + } + #Charm them with your high diplo + option = { + trigger = { + diplomacy >= very_high_skill_rating + } + name = mpo_decisions_events.0021.a + flavor = mpo_decisions_events.0021.a.flavor + add_character_flag = { + flag = heir_friend_personal_charm + days = 40 + } + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + + duel = { + skill = diplomacy + value = medium_skill_rating + #Successful - they're friends! + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -44 + } + modifier = { + scope:friendship_target = { + opinion = { + target = root + value >= 75 + } + } + add = 20 + } + modifier = { + scope:friendship_target = { + opinion = { + target = root + value >= 90 + } + } + add = 20 + } + modifier = { + add = mpo_friendship_setup_positive_modifiers_value + } + + desc = mpo_decisions_events.0021.a.success + mpo_decisions_events_0021_positive_outcome_effect = yes + show_as_tooltip = { + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + } + # Fail - they're pretty meh about each other + 55 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -54 + } + modifier = { + add = mpo_friendship_setup_negative_modifiers_value + } + + desc = mpo_decisions_events.0021.a.fail + mpo_decisions_events_0021_negative_outcome_effect = yes + } + } + } + else = { + #Player response + custom_tooltip = mpo_heir_friend_if_accept_tt + show_as_tooltip = { + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + mpo_decisions_events_0021_positive_outcome_effect = yes + custom_tooltip = mpo_heir_friend_if_do_not_accept_tt + custom_tooltip = friendship_setup_fail_tt + } + stress_impact = { + shy = miniscule_stress_impact_gain + trusting = miniscule_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_sociability = 1 + ai_energy = 0.5 + } + modifier = { + diplomacy > extremely_high_skill_rating + add = 100 + } + } + } + #Do their lifestyle traits together + option = { + trigger = { + exists = scope:lifestyle_trait + } + name = mpo_decisions_events.0021.b + flavor = mpo_decisions_events.0021.b.flavor + add_internal_flag = special + add_character_flag = { + flag = heir_friend_lifestyle_trait + days = 40 + } + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + duel = { + skill = diplomacy + value = average_skill_rating + #Successful - they're friends! + 65 = { + compare_modifier = { + value = scope:duel_value + multiplier = 0.1 + min = -64 + } + modifier = { + add = mpo_friendship_setup_positive_modifiers_value + } + + desc = mpo_decisions_events.0021.b.success + mpo_decisions_events_0021_positive_outcome_effect = yes + show_as_tooltip = { + mpo_heir_lifestyle_xp_gain_effect = yes + } + } + # Fail - they're pretty meh about each other + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = -0.1 + min = -34 + } + modifier = { + add = mpo_friendship_setup_negative_modifiers_value + } + + desc = mpo_decisions_events.0021.b.fail + mpo_decisions_events_0021_negative_outcome_effect = yes + } + } + } + else = { + #Player response + custom_tooltip = mpo_heir_friend_if_accept_tt + show_as_tooltip = { + mpo_heir_lifestyle_xp_gain_effect = yes + } + mpo_decisions_events_0021_positive_outcome_effect = yes + custom_tooltip = mpo_heir_friend_if_do_not_accept_tt + custom_tooltip = friendship_setup_fail_tt + } + ai_chance = { + base = 200 + } + } + + #Do their sports together + option = { + trigger = { + scope:friendship_target = { + OR = { + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + } + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = wit + value >= 50 + } + + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = wit + value >= 50 + } + } + } + } + } + } + name = mpo_decisions_events.0021.c + flavor = mpo_decisions_events.0021.c.flavor + reason = tourney_participant + add_internal_flag = special + add_character_flag = { + flag = heir_friend_sports + days = 40 + } + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + duel = { + skill = diplomacy + value = average_skill_rating + #Successful - they're friends! + 65 = { + compare_modifier = { + value = scope:duel_value + multiplier = 0.1 + min = -64 + } + modifier = { + add = mpo_friendship_setup_positive_modifiers_value + } + + desc = mpo_decisions_events.0021.c.success + mpo_decisions_events_0021_positive_outcome_effect = yes + show_as_tooltip = { + mpo_heir_hastiluder_xp_gain_effect = yes + } + } + # Fail - they're pretty meh about each other + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = -0.1 + min = -34 + } + modifier = { + add = mpo_friendship_setup_negative_modifiers_value + } + + desc = mpo_decisions_events.0021.c.fail + mpo_decisions_events_0021_negative_outcome_effect = yes + } + } + } + else = { + #Player response + custom_tooltip = mpo_heir_friend_if_accept_tt + show_as_tooltip = { + mpo_heir_hastiluder_xp_gain_effect = yes + } + mpo_decisions_events_0021_positive_outcome_effect = yes + custom_tooltip = mpo_heir_friend_if_do_not_accept_tt + custom_tooltip = friendship_setup_fail_tt + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_energy = 0.5 + ai_boldness = 0.5 + } + } + } + #Bond over shared traits + option = { + trigger = { + scope:friendship_target = { + trigger_if = { + limit = { + has_trait = nomadic_philosophy + scope:heir = { + has_trait = nomadic_philosophy + } + } + number_of_traits_in_common = { + target = scope:heir + value >= 2 + } + } + trigger_else = { + number_of_traits_in_common = { + target = scope:heir + value >= 1 + } + } + } + } + name = mpo_decisions_events.0021.d + flavor = mpo_decisions_events.0021.d.flavor + add_internal_flag = special + add_character_flag = { + flag = heir_friend_shared_traits + days = 40 + } + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + duel = { + skill = diplomacy + value = average_skill_rating + #Successful - they're friends! + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = 0.1 + min = -44 + } + modifier = { + add = mpo_friendship_setup_positive_modifiers_value + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 3 + } + } + add = 40 + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 4 + } + } + add = 40 + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 5 + } + } + add = 40 + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 6 + } + } + add = 40 + } + + desc = mpo_decisions_events.0021.d.success + mpo_decisions_events_0021_positive_outcome_effect = yes + show_as_tooltip = { + scope:heir = { + add_stress = minor_stress_impact_loss + add_prestige = minor_prestige_gain + } + } + } + # Fail - they're pretty meh about each other + 55 = { + compare_modifier = { + value = scope:duel_value + multiplier = -0.1 + min = -54 + } + modifier = { + add = mpo_friendship_setup_negative_modifiers_value + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value <= 1 + } + } + add = -40 + } + + desc = mpo_decisions_events.0021.d.fail + mpo_decisions_events_0021_negative_outcome_effect = yes + } + } + } + else = { + #Player response + custom_tooltip = mpo_heir_friend_if_accept_tt + show_as_tooltip = { + scope:heir = { + add_stress = minor_stress_impact_loss + add_prestige = minor_prestige_gain + } + } + mpo_decisions_events_0021_positive_outcome_effect = yes + custom_tooltip = mpo_heir_friend_if_do_not_accept_tt + custom_tooltip = friendship_setup_fail_tt + } + ai_chance = { + base = 50 + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 2 + } + } + add = 50 + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 4 + } + } + add = 100 + } + modifier = { + scope:friendship_target = { + number_of_traits_in_common = { + target = scope:heir + value >= 6 + } + } + add = 100 + } + } + } + #Let's hang - extra bonus for blood brother/friends/family/culture + option = { + name = mpo_decisions_events.0021.e + flavor = mpo_decisions_events.0021.e.flavor + add_character_flag = { + flag = heir_friend_kinship + days = 40 + } + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + duel = { + skill = diplomacy + value = medium_skill_rating + #Successful - they're friends! + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = 0.75 + min = -34 + } + modifier = { + add = mpo_friendship_setup_positive_modifiers_value + } + modifier = { + has_relation_blood_brother = scope:friendship_target + add = 120 + } + modifier = { + OR = { + has_relation_best_friend = scope:friendship_target + has_relation_soulmate = scope:friendship_target + } + add = 80 + } + modifier = { + OR = { + has_relation_friend = scope:friendship_target + has_relation_lover = scope:friendship_target + } + add = 60 + } + modifier = { + AND = { + exists = house + exists = scope:friendship_target.house + house = scope:friendship_target.house + } + add = 60 + } + modifier = { + OR = { + culture = { + this = scope:friendship_target.culture + } + culture = { + cultural_acceptance = { + target = scope:friendship_target.culture + value >= 80 + } + } + } + add = 30 + } + + desc = mpo_decisions_events.0021.e.success + mpo_decisions_events_0021_positive_outcome_effect = yes + show_as_tooltip = { + scope:heir = { + add_piety = minor_piety_gain + } + } + } + # Fail - they're pretty meh about each other + 65 = { + compare_modifier = { + value = scope:duel_value + multiplier = -0.75 + min = -64 + } + modifier = { + add = mpo_friendship_setup_negative_modifiers_value + } + + desc = mpo_decisions_events.0021.e.fail + mpo_decisions_events_0021_negative_outcome_effect = yes + } + } + } + else = { + #Player response + custom_tooltip = mpo_heir_friend_if_accept_tt + mpo_decisions_events_0021_positive_outcome_effect = yes + custom_tooltip = mpo_heir_friend_if_do_not_accept_tt + custom_tooltip = friendship_setup_fail_tt + } + + ai_chance = { + base = 10 + modifier = { + diplomacy >= medium_skill_rating + diplomacy < very_high_skill_rating + add = 40 + } + modifier = { + has_relation_blood_brother = scope:friendship_target + add = 40 + } + modifier = { + OR = { + has_relation_best_friend = scope:friendship_target + has_relation_soulmate = scope:friendship_target + } + add = 20 + } + } + } + #Gift fallback + option = { + trigger = { + diplomacy < very_high_skill_rating + } + show_unlock_reason = no + name = mpo_decisions_events.0021.f + flavor = mpo_decisions_events.0021.f.flavor + + add_character_flag = { + flag = heir_friend_gift + days = 40 + } + show_as_tooltip = { + pay_short_term_gold = { + target = scope:friendship_target + gold = medium_gold_value + } + pay_short_term_gold = { + target = scope:heir + gold = minor_gold_value + } + } + mpo_decisions_events_0021_positive_outcome_effect = yes + stress_impact = { + greedy = miniscule_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + } + modifier = { + gold >= monumental_gold_value + add = 300 + } + modifier = { + short_term_gold < major_gold_value + factor = 0 + } + } + } + after = { + if = { + limit = { + scope:friendship_target = { + is_ai = yes + } + } + trigger_event = { + id = mpo_decisions_events.0023 + days = 1 + } + } + else = { + scope:friendship_target = { + trigger_event = { + id = mpo_decisions_events.0022 + days = 1 + } + } + } + } +} + +mpo_decisions_events.0022 = { + type = character_event + title = mpo_decisions_events.0022.t + desc = { + desc = mpo_decisions_events.0022.desc_intro + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_personal_charm + } + } + desc = mpo_decisions_events.0022.desc_personal_charm + } + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_lifestyle_trait + } + } + desc = mpo_decisions_events.0022.desc_lifestyle + } + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_sports + } + } + desc = mpo_decisions_events.0022.desc_sports + } + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_shared_traits + } + } + desc = mpo_decisions_events.0022.desc_shared_traits + } + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_kinship + } + } + desc = mpo_decisions_events.0022.desc_kinship + } + triggered_desc = { + trigger = { + scope:root_scope = { + has_character_flag = heir_friend_gift + } + } + desc = mpo_decisions_events.0022.desc_gift + } + desc = mpo_decisions_events.0022.desc_outro + } + theme = nomads + override_background = { + reference = throne_room + } + left_portrait = { + character = scope:root_scope + animation = interested + } + right_portrait = { + character = scope:heir + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_hunter + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + } + } + + } + animation = hunting_shortbow_aim_arrow_default + } + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_blademaster + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + } + } + + } + animation = sword_coup_degrace + } + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_traveler + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + } + } + + } + animation = laugh + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_physician + scope:lifestyle_trait = trait:lifestyle_herbalist + } + } + animation = physician + } + + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_reveler + scope:lifestyle_trait = trait:drunkard + } + } + animation = wedding_drunk + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + scope:lifestyle_trait = trait:hashishiyah + } + animation = manic + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + scope:lifestyle_trait = trait:lifestyle_gardener + } + animation = holding_staff + } + + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_personal_charm + NOT = { + has_character_flag = heir_friend_failed + } + } + } + animation = laugh + } + triggered_animation = { + trigger = { + root = { + NOR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_failed + } + } + } + animation = storyteller + } + } + lower_right_portrait = scope:root_scope + + immediate = { + if = { + limit = { + has_character_flag = heir_friend_gift + } + show_as_tooltip = { + scope:root_scope = { + pay_short_term_gold = { + target = scope:friendship_target + gold = medium_gold_value + } + } + } + } + } + #I want this blood brother + option = { + trigger = { + is_allied_to = scope:root_scope + NOT = { + has_relation_blood_brother = scope:friendship_target + } + } + name = mpo_decisions_events.0022.a + show_as_tooltip = { + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + set_relation_blood_brother = { + target = scope:heir + reason = blood_brother_introduced_heir + } + } + scope:root_scope = { + add_character_flag = { + flag = player_heir_friend_blood_brother + days = 40 + } + } + if = { + limit = { + scope:root_scope = { + highest_held_title_tier > root.highest_held_title_tier + } + } + add_prestige = medium_prestige_gain + } + else_if = { + limit = { + scope:root_scope = { + highest_held_title_tier = root.highest_held_title_tier + } + } + add_prestige = minor_prestige_gain + } + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:root_scope + opinion = 10 + } + stress_impact = { + paranoid = medium_stress_impact_gain + callous = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + fickle = medium_stress_impact_gain + } + } + + #I will even be obedient! + option = { + trigger = { + is_ai = yes + is_vassal_of = scope:root_scope + NOR = { + is_obedient_to = scope:root_scope + has_trait = disloyal + } + } + name = mpo_decisions_events.0022.b + show_as_tooltip = { + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + } + scope:root_scope = { + add_character_flag = { + flag = player_heir_friend_obedient + days = 40 + } + } + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:root_scope + opinion = 40 + } + random = { + chance = 50 + add_trait = loyal + } + stress_impact = { + humble = minor_stress_impact_loss + trusting = minor_stress_impact_loss + content = minor_stress_impact_loss + paranoid = medium_stress_impact_gain + arrogant = major_stress_impact_gain + ambitious = major_stress_impact_gain + arbitrary = major_stress_impact_gain + } + } + + #We can be friends + option = { + name = mpo_decisions_events.0022.c + show_as_tooltip = { + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + } + if = { + limit = { + highest_held_title_tier > scope:root_scope.highest_held_title_tier + } + add_prestige = minor_prestige_loss + } + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:root_scope + opinion = 20 + } + stress_impact = { + paranoid = minor_stress_impact_gain + callous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + + #I don't want this friend + option = { + name = mpo_decisions_events.0022.d + scope:root_scope = { + add_character_flag = { + flag = heir_friend_failed + days = 40 + } + } + if = { + limit = { + scope:root_scope = { + has_character_flag = heir_friend_lifestyle_trait + } + } + mpo_target_lifestyle_xp_gain_effect = yes + } + else_if = { + limit = { + scope:root_scope = { + has_character_flag = heir_friend_sports + } + } + mpo_target_hastiluder_xp_gain_effect = yes + } + else_if = { + limit = { + scope:root_scope = { + has_character_flag = heir_friend_personal_charm + } + } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + else = { + add_stress = medium_stress_impact_loss + } + stress_impact = { + trusting = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + } + after = { + scope:root_scope = { + trigger_event = mpo_decisions_events.0023 + } + } +} + +mpo_decisions_events.0023 = { + type = character_event + title = mpo_decisions_events.0023.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = heir_friend_failed + } + desc = mpo_decisions_events.0023.desc_fail + } + desc = mpo_decisions_events.0023.desc + } + triggered_desc = { + trigger = { + exists = scope:accidental_friend + } + desc = mpo_decisions_events.0023.desc_accidental_friend + } + } + theme = nomads + override_background = { + reference = relaxing_room + } + left_portrait = { + character = scope:heir + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_failed + } + } + animation = personality_content + } + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_hunter + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 50 + } + } + } + } + + } + animation = hunting_shortbow_aim_arrow_default + } + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_blademaster + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 50 + } + } + } + } + + } + animation = sword_coup_degrace + } + triggered_animation = { + trigger = { + root = { + OR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_sports + } + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_traveler + AND = { + scope:friendship_target = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + scope:heir = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 50 + } + } + } + } + + } + animation = laugh + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_physician + scope:lifestyle_trait = trait:lifestyle_herbalist + } + } + animation = physician + } + + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + OR = { + scope:lifestyle_trait = trait:lifestyle_reveler + scope:lifestyle_trait = trait:drunkard + } + } + animation = wedding_drunk + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + scope:lifestyle_trait = trait:hashishiyah + } + animation = manic + } + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_lifestyle_trait + NOT = { + has_character_flag = heir_friend_failed + } + } + scope:lifestyle_trait = trait:lifestyle_gardener + } + animation = holding_staff + } + + triggered_animation = { + trigger = { + root = { + has_character_flag = heir_friend_personal_charm + NOT = { + has_character_flag = heir_friend_failed + } + } + } + animation = laugh + } + triggered_animation = { + trigger = { + root = { + NOR = { + has_character_flag = heir_friend_lifestyle_trait + has_character_flag = heir_friend_failed + } + } + } + animation = storyteller + } + } + right_portrait = { + character = scope:friendship_target + triggered_animation ={ + trigger = { + root = { + has_character_flag = heir_friend_failed + } + } + animation = interested + } + triggered_animation ={ + trigger = { + root = { + NOT = { has_character_flag = heir_friend_failed } + } + } + animation = happiness + } + } + lower_right_portrait = scope:accidental_friend + immediate = { + if = { + limit = { + has_character_flag = heir_friend_failed + } + #Random positive outcome + custom_tooltip = heir_friend_will_not_become_friends_tt + mpo_decisions_events_friend_fail_effect = yes + } + else = { + play_music_cue = mx_cue_positive_effect + scope:friendship_target = { + #Random chance of AI + random_list = { + 2 = { + trigger = { + is_ai = yes + is_vassal_of = root + } + modifier = { + opinion = { + target = root + value = 100 + } + factor = 2 + } + modifier = { + OR = { + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_blood_brother = root + } + factor = 2 + } + modifier = { + obedience_target = root + factor = 2 + } + add_opinion = { + modifier = obedience_opinion + target = root + } + } + 1 = { + trigger = { + is_ai = yes + is_allied_to = root + } + modifier = { + opinion = { + target = root + value = 100 + } + factor = 2 + } + modifier = { + OR = { + has_relation_best_friend = root + has_relation_soulmate = root + has_relation_blood_brother = root + } + factor = 2 + } + set_relation_blood_brother = { + target = scope:heir + reason = blood_brother_introduced_heir + } + } + 2 = {} + } + if = { + limit = { + has_character_flag = player_heir_friend_blood_brother + } + set_relation_blood_brother = { + target = scope:heir + reason = blood_brother_introduced_heir + } + } + else_if = { + limit = { + has_character_flag = player_heir_friend_obedient + } + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + add_opinion = { + modifier = obedience_opinion + target = root + } + } + if = { + limit = { + NOT = { + has_relation_blood_brother = scope:heir + } + } + set_relation_friend = { + target = scope:heir + reason = friend_introduced_heir + } + } + } + switch = { + trigger = has_character_flag + + heir_friend_personal_charm = { + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + } + heir_friend_lifestyle_trait = { + mpo_heir_lifestyle_xp_gain_effect = yes + } + heir_friend_sports = { + mpo_heir_hastiluder_xp_gain_effect = yes + } + heir_friend_shared_traits = { + scope:heir = { + add_stress = minor_stress_impact_loss + add_prestige = minor_prestige_gain + } + } + heir_friend_kinship = { + scope:heir = { + add_piety = minor_piety_gain + } + } + heir_friend_gift = { + pay_short_term_gold = { + target = scope:friendship_target + gold = medium_gold_value + } + pay_short_term_gold = { + target = scope:heir + gold = minor_gold_value + } + } + } + } + } + option = { + name = { + trigger = { + NOT = { + has_character_flag = heir_friend_failed + } + } + text = mpo_decisions_events.0023.a + } + name = { + trigger = { + has_character_flag = heir_friend_failed + } + text = mpo_decisions_events.0023.a_fail + } + } + after = { + remove_character_flag = heir_friend_failed + remove_character_flag = heir_friend_personal_charm + remove_character_flag = heir_friend_sports + remove_character_flag = heir_friend_gift + remove_character_flag = heir_friend_kinship + remove_character_flag = heir_friend_shared_traits + remove_character_flag = heir_friend_lifestyle_trait + remove_character_flag = player_heir_friend_blood_brother + remove_character_flag = player_heir_friend_obedient + } +} + +mpo_decisions_events.0098 = { + hidden = yes + + immediate = { + send_interface_toast = { + title = abused_paiza_authority + left_icon = root + right_icon = situation:the_great_steppe.situation_top_herd + switch = { + trigger = var:paiza_abuse_stance + flag:indifferent = { custom_tooltip = mpo_paiza_abuse_counter_effect.indifferent } + flag:angry = { custom_tooltip = mpo_paiza_abuse_counter_effect.khan_reaction_angry } + flag:annoyed = { custom_tooltip = mpo_paiza_abuse_counter_effect.khan_reaction_annoyed } + } + } + } +} + +mpo_decisions_events.0099 = { + type = character_event + title = mpo_decisions_events.0099.t + desc = mpo_decisions_events.0099.desc + theme = vassal + + override_background = { reference = mpo_tent_interior_mongol } + left_portrait = { + character = root + animation = personality_rational + } + artifact = { + target = scope:created_paiza + position = lower_right_portrait + } + + immediate = { + mpo_create_paiza_artifact_effect = { + PATRON = root + GRANTEE = root + } + } + + option = { + name = mpo_decisions_events.0099.a + custom_tooltip = mpo_establish_paiza_system_decision.grant_paiza_interaction_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.request_paiza_interaction_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.paiza_obedient + custom_tooltip = mpo_establish_paiza_system_decision.call_for_merchants_decision_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.leverage_khan_authority_unlocked + custom_tooltip = mpo_establish_paiza_system_decision.paiza_abuse_authority_unlocked + } +} + +#scripted effect to make the merchant go + + + +scripted_effect send_merchant_on_merry_voyage_effect = { + set_variable = { + name = merchant_employer + value = prev + } + set_variable = { + name = merchant_origin + value = scope:merchant_origin + } + start_travel_plan = { + destination = scope:merchant_origin.title_province + return_trip = yes + on_arrival_event = mpo_decisions_events.0102 + on_arrival_destinations = last + } +} + +scripted_effect send_merchant_on_first_voyage_effect = { + set_variable = merchant_var + set_variable = { + name = merchant_employer + value = prev + } + set_variable = { + name = merchant_origin + value = scope:merchant_origin + } + start_travel_plan = { + destination = var:merchant_employer.location + on_arrival_event = mpo_decisions_events.2140 + on_arrival_destinations = first + return_trip = no + } + root = { + prev = { + save_scope_as = merchant + } + send_interface_toast = { + type = event_toast_effect_good + title = paiza_merchant_on_route_tt + left_icon = scope:merchant_origin + right_icon = scope:merchant + custom_tooltip = paiza_merchant_on_route_tt_desc + } + } +} + + + +mpo_decisions_events.2139 = { + hidden = yes + + immediate = { + mpo_find_suitable_merchant_effect = yes + scope:paiza_merchant = { + random_list = { + 1 = { + add_trait = avaricious + add_stewardship_skill = 6 + add_learning_skill = 4 + add_intrigue_skill = 2 + add_prowess_skill = 4 + add_diplomacy_skill = 2 + } + 1 = { + add_trait = diplomat + add_stewardship_skill = 4 + add_learning_skill = 5 + add_intrigue_skill = 8 + add_prowess_skill = 8 + add_diplomacy_skill = 6 + } + 1 = { + add_trait = scholar + add_stewardship_skill = 4 + add_learning_skill = 5 + add_intrigue_skill = 8 + add_prowess_skill = 8 + add_diplomacy_skill = 4 + } + } + add_trait = lifestyle_traveler + add_gold = { + value = root.tiny_gold_value + multiply = 21.37 + } + send_merchant_on_first_voyage_effect = yes + } + } +} + + +mpo_decisions_events.2140 = { + hidden = yes + + immediate = { + remove_variable = merchant_var # Used only to send the death notification message + save_scope_as = paiza_merchant + var:merchant_origin = { + save_scope_as = merchant_origin + } + #teleport in case merchant_employer has migrated or something + var:merchant_employer = { + if = { + limit = { + is_alive = yes + } + if = { + limit = { + NOT = { + root.location = location + } + } + root = { + set_location = { location = var:merchant_employer.location } + } + } + if = { + limit = { + has_character_flag = established_paiza_system + } + trigger_event = mpo_decisions_events.0100 + } + else = { + trigger_event = mpo_decisions_events.2141 + } + } + } + } +} + +mpo_decisions_events.2138 = { + type = character_event + theme = nomads + + title = mpo_decisions_events.2138.t + desc = mpo_decisions_events.2138.desc + + override_background = { reference = mpo_camp_steppe } + + left_portrait = { + character = root + animation = personality_honorable + } + + right_portrait = { + character = scope:paiza_merchant + animation = personality_greedy + } + + immediate = { + add_character_flag = { + flag = had_herd_trade + days = 7 + } + domicile ?= { + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_herd_gain_lvl_1 = { + root = { + set_variable = { + name = herd_trade_herd_value + value = { + value = domicile.herd + multiply = 0.1 + } + } + set_variable = { + name = herd_trade_gold_value + value = { + value = root.var:herd_trade_herd_value + divide = 10 + } + } + } + } + nomad_yurt_paiza_herd_gain_lvl_2 = { + root = { + set_variable = { + name = herd_trade_herd_value + value = { + value = domicile.herd + multiply = 0.15 + } + } + set_variable = { + name = herd_trade_gold_value + value = { + value = root.var:herd_trade_herd_value + divide = 8 + } + } + } + } + nomad_yurt_paiza_herd_gain_lvl_3 = { + root = { + set_variable = { + name = herd_trade_herd_value + value = { + value = domicile.herd + multiply = 0.2 + } + } + set_variable = { + name = herd_trade_gold_value + value = { + value = root.var:herd_trade_herd_value + divide = 6 + } + } + } + } + } + } + } + + option = { + name = mpo_decisions_events.2138.a + domicile ?= { + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_herd_gain_lvl_1 = { root = { custom_tooltip = domicile_building_parameter_nomad_merchant_herd_gold_exchange_lvl_1 } } + nomad_yurt_paiza_herd_gain_lvl_2 = { root = { custom_tooltip = domicile_building_parameter_nomad_merchant_herd_gold_exchange_lvl_2 } } + nomad_yurt_paiza_herd_gain_lvl_3 = { root = { custom_tooltip = domicile_building_parameter_nomad_merchant_herd_gold_exchange_lvl_3 } } + } + } + hidden_effect = { + scope:paiza_merchant = { + add_gold = root.var:herd_trade_gold_value + } + } + scope:paiza_merchant = { + pay_short_term_gold = { + target = root + gold = root.var:herd_trade_gold_value + } + } + domicile ?= { + change_herd = { + value = root.var:herd_trade_herd_value + multiply = -1 + } + } + } + + option = { + name = mpo_decisions_events.2138.c + custom_tooltip = mpo_decisions_events.2138.c.desc + } + + after = { + if = { + limit = { + has_character_flag = smol_herd_trade + } + trigger_event = mpo_decisions_events.2141 + remove_character_flag = smol_herd_trade + } + else = { + trigger_event = mpo_decisions_events.0100 + } + remove_variable = herd_trade_herd_value + remove_variable = herd_trade_gold_value + } + +} + +mpo_decisions_events.2141 = { #mpo_call_for_merchants_smol_decision initial event + type = character_event + theme = nomads + + title = mpo_decisions_events.2141.t + desc = mpo_decisions_events.2141.desc + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = personality_honorable + } + + right_portrait = { + character = scope:paiza_merchant + animation = throne_room_bow_3 + } + + trigger = { + is_available_adult = yes + scope:paiza_merchant.location = root.location + } + + on_trigger_fail = { + scope:paiza_merchant = { + set_location = { location = root.location } + } + trigger_event = { + id = mpo_decisions_events.2141 + months = { 2 4 } + } + } + + option = { #ask for an artifact material + name = mpo_decisions_events.2141.b + + pay_short_term_gold = { + target = scope:paiza_merchant + gold = 400 + } + + scope:paiza_merchant = { + set_variable = { + name = requested_merchant_goods + value = flag:artifact_material + } + set_variable = { + name = paiza_gold_invested + value = 400 + } + send_merchant_on_merry_voyage_effect = yes + } + + custom_tooltip = mpo_decisions_events.2141.upon_merchant_return + show_as_tooltip = { + add_character_modifier = { + modifier = mpo_artifact_material_modifier + } + mpo_yurts_paiza_bonuses_tooltip_effect = yes + } + ai_chance = { + base = 0 + } + } + + option = { #ask for better armor for ur maa + name = mpo_decisions_events.2141.c + + show_as_unavailable = { + gold <= 800 + } + + pay_short_term_gold = { + target = scope:paiza_merchant + gold = 800 + } + + scope:paiza_merchant = { + set_variable = { + name = requested_merchant_goods + value = flag:armaments + } + set_variable = { + name = paiza_gold_invested + value = 800 + } + send_merchant_on_merry_voyage_effect = yes + } + + custom_tooltip = mpo_decisions_events.2141.upon_merchant_return + show_as_tooltip = { + mpo_paiza_improve_maa_smol_effect = yes + mpo_yurts_paiza_bonuses_tooltip_effect = yes + } + + ai_chance = { #most safe option for ai + base = 100 + } + } + + option = { + name = mpo_decisions_events.2141.d + custom_tooltip = mpo_decisions_events.2141.d.unlocked + trigger = { + NOT = { + has_character_flag = had_herd_trade + } + domicile ?= { + has_domicile_building_or_higher = herd_trade_yurt_01 + } + } + add_character_flag = smol_herd_trade + trigger_event = mpo_decisions_events.2138 + + ai_chance = { + base = 200 + } + } + + option = { #actually, give me your gold and get lost + name = mpo_decisions_events.0100.e + scope:paiza_merchant = { + pay_short_term_gold = { + target = root + gold = scope:paiza_merchant.gold + } + death = { + killer = root + death_reason = death_execution + } + } + add_character_modifier = { + modifier = mpo_paiza_robbed_merchants + years = { 18 22 } + } + custom_tooltip = mpo_decisions_events.0100.e.warning + + ai_chance = { + base = 50 + } + } +} + +mpo_decisions_events.0100 = { #mpo_call_for_merchants_decision initial event + type = character_event + theme = nomads + + title = mpo_decisions_events.0100.t + desc = mpo_decisions_events.0100.desc + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = personality_honorable + } + + right_portrait = { + character = scope:paiza_merchant + animation = throne_room_bow_3 + } + + trigger = { + is_available_adult = yes + scope:paiza_merchant.location = root.location + } + + on_trigger_fail = { + scope:paiza_merchant = { + set_location = { location = root.location } + } + trigger_event = { + id = mpo_decisions_events.0100 + months = { 2 4 } + } + } + + option = { #give him paiza, ask for innovation progress + name = mpo_decisions_events.0100.a + + show_as_unavailable = { + NOT = { + domicile ?= { + has_domicile_building_or_higher = innovation_yurt_01 + } + } + gold <= 2400 + } + mpo_create_paiza_artifact_effect = { + PATRON = root + GRANTEE = scope:paiza_merchant + } + pay_short_term_gold = { + target = scope:paiza_merchant + gold = 2400 + } + scope:paiza_merchant = { + set_variable = { + name = paiza_gold_invested + value = 2400 + } + set_variable = { + name = requested_merchant_goods + value = flag:innovation + } + send_merchant_on_merry_voyage_effect = yes + } + custom_tooltip = mpo_decisions_events.0100.upon_merchant_return + show_as_tooltip = { + domicile ?= { + mpo_paiza_innovation_reward_effect = yes + } + custom_tooltip = paiza_merchant_skill_gold_percent + mpo_yurts_paiza_bonuses_tooltip_effect = yes + } + + ai_chance = { + base = 0 + } + } + + option = { #give him paiza, ask for an artifact material + name = mpo_decisions_events.0100.b + + mpo_create_paiza_artifact_effect = { + PATRON = root + GRANTEE = scope:paiza_merchant + } + + pay_short_term_gold = { + target = scope:paiza_merchant + gold = 800 + } + + scope:paiza_merchant = { + set_variable = { + name = requested_merchant_goods + value = flag:artifact_material + } + set_variable = { + name = paiza_gold_invested + value = 800 + } + send_merchant_on_merry_voyage_effect = yes + } + custom_tooltip = mpo_decisions_events.0100.upon_merchant_return + show_as_tooltip = { + add_character_modifier = { + modifier = mpo_artifact_material_modifier + } + custom_tooltip = paiza_merchant_skill_gold_percent + mpo_yurts_paiza_bonuses_tooltip_effect = yes + } + + ai_chance = { + base = 0 + } + } + + option = { #ask for better armor for ur maa + name = mpo_decisions_events.0100.c + + show_as_unavailable = { + gold <= 1600 + } + mpo_create_paiza_artifact_effect = { + PATRON = root + GRANTEE = scope:paiza_merchant + } + pay_short_term_gold = { + target = scope:paiza_merchant + gold = 1600 + } + + scope:paiza_merchant = { + set_variable = { + name = requested_merchant_goods + value = flag:armaments + } + set_variable = { + name = paiza_gold_invested + value = 1600 + } + send_merchant_on_merry_voyage_effect = yes + } + custom_tooltip = mpo_decisions_events.0100.upon_merchant_return + show_as_tooltip = { + mpo_paiza_improve_maa_effect = yes + custom_tooltip = paiza_merchant_skill_gold_percent + mpo_yurts_paiza_bonuses_tooltip_effect = yes + } + + ai_chance = { #most safe option for ai + base = 100 + } + } + + option = { + name = mpo_decisions_events.0100.d + custom_tooltip = mpo_decisions_events.0100.d.unlocked + trigger = { + NOT = { + has_character_flag = had_herd_trade + } + domicile ?= { + has_domicile_building_or_higher = herd_trade_yurt_01 + } + } + trigger_event = mpo_decisions_events.2138 + + ai_chance = { + base = 200 + } + } + + option = { #actually, give me your gold and get lost + name = mpo_decisions_events.0100.e + scope:paiza_merchant = { + pay_short_term_gold = { + target = root + gold = scope:paiza_merchant.gold + } + death = { + killer = root + death_reason = death_execution + } + } + add_character_modifier = { + modifier = mpo_paiza_robbed_merchants + years = { 12 16 } + } + custom_tooltip = mpo_decisions_events.0100.e.warning + + ai_chance = { + base = 50 + } + } +} + +mpo_decisions_events.0101 = { #the merchant is back + type = character_event + theme = nomads + + title = mpo_decisions_events.0101.t + desc = mpo_decisions_events.0101.desc + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = ecstasy + } + + right_portrait = { + character = scope:paiza_merchant + animation = drink + } + + trigger = { + is_available_adult = yes + scope:paiza_merchant.location = root.location + } + + on_trigger_fail = { + scope:paiza_merchant = { + set_location = { location = root.location } + } + trigger_event = { + id = mpo_decisions_events.0101 + months = { 2 4 } + } + } + + immediate = { + mpo_paiza_deal_grade_effect = yes + if = { + limit = { + domicile ?= { + OR = { + has_domicile_building_or_higher = fertility_trade_yurt_01 + has_domicile_building_or_higher = herd_trade_yurt_01 + has_domicile_building_or_higher = knight_trade_yurt_01 + has_domicile_building_or_higher = merchant_yurt_01 + has_domicile_building_or_higher = char_trade_yurt_01 + } + } + } + domicile ?= { + if = { + limit = { + has_domicile_building_or_higher = fertility_trade_yurt_01 + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_fertility_gain_lvl_1 = { + root = { + every_held_county = { + limit = { + uses_county_fertility = yes + } + add_county_modifier = { + modifier = paiza_fertility_modifier_1 + years = 2 + } + } + } + } + nomad_yurt_paiza_fertility_gain_lvl_2 = { + root = { + every_held_county = { + limit = { + uses_county_fertility = yes + } + add_county_modifier = { + modifier = paiza_fertility_modifier_2 + years = 4 + } + } + } + } + nomad_yurt_paiza_fertility_gain_lvl_3 = { + root = { + every_held_county = { + limit = { + uses_county_fertility = yes + } + add_county_modifier = { + modifier = paiza_fertility_modifier_3 + years = 6 + } + } + } + } + } + } + if = { + limit = { + has_domicile_building_or_higher = herd_trade_yurt_01 + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_herd_gain_lvl_1= { + change_herd = { + value = root.var:trade_gold_value + multiply = 0.05 + } + } + nomad_yurt_paiza_herd_gain_lvl_2 = { + change_herd = { + value = root.var:trade_gold_value + multiply = 0.05 + } + } + nomad_yurt_paiza_herd_gain_lvl_3 = { + change_herd = { + value = root.var:trade_gold_value + multiply = 0.2 + } + } + } + } + if = { + limit = { + has_domicile_building_or_higher = knight_trade_yurt_01 + } + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_maa_gain_lvl_1 = { + root = { + spawn_army = { + name = paiza_troops + men_at_arms = { + type = accolade_maa_archers + stacks = 1 + } + location = root.location + origin = scope:merchant_origin + inheritable = yes + } + } + } + nomad_yurt_paiza_maa_gain_lvl_2 = { + root = { + spawn_army = { + name = paiza_troops + men_at_arms = { + type = accolade_maa_archers + stacks = 4 + } + location = root.location + origin = scope:merchant_origin + inheritable = yes + } + } + } + nomad_yurt_paiza_maa_gain_lvl_3 = { + root = { + spawn_army = { + name = paiza_troops + men_at_arms = { + type = accolade_maa_archers + stacks = 4 + } + men_at_arms = { + type = accolade_maa_vanguards + stacks = 4 + } + location = root.location + origin = scope:merchant_origin + inheritable = yes + } + } + } + } + } + if = { + limit = { + has_domicile_building_or_higher = char_trade_yurt_01 + } + + switch = { + trigger = has_domicile_parameter + nomad_yurt_paiza_char_gain_lvl_1 = { + root = { + hidden_effect = { + create_character = { + location = root.location + culture = scope:merchant_origin.county.culture + faith = scope:merchant_origin.county.faith + gender_female_chance = 50 + template = peasant_character + save_scope_as = yurt_merchant_char + } + scope:yurt_merchant_char = { + add_trait = lifestyle_traveler + } + add_courtier = scope:yurt_merchant_char + } + + } + } + nomad_yurt_paiza_char_gain_lvl_2 = { + root = { + hidden_effect = { + create_character = { + location = root.location + culture = scope:merchant_origin.county.culture + faith = scope:merchant_origin.county.faith + gender_female_chance = 50 + template = merchant_template + save_scope_as = yurt_merchant_char + } + scope:yurt_merchant_char = { + add_trait = lifestyle_traveler + } + add_courtier = scope:yurt_merchant_char + } + } + } + nomad_yurt_paiza_char_gain_lvl_3 = { + root = { + hidden_effect = { + create_character = { + location = root.location + culture = scope:merchant_origin.county.culture + faith = scope:merchant_origin.county.faith + gender_female_chance = 50 + template = merchant_template + save_scope_as = yurt_merchant_char + } + scope:yurt_merchant_char = { + add_random_skill_point_effect = yes + add_random_skill_point_effect = yes + add_random_skill_point_effect = yes + add_random_skill_point_effect = yes + add_random_skill_point_effect = yes + add_random_skill_point_effect = yes + random_list = { + 1 = { add_trait = avaricious } + 1 = { add_trait = diplomat } + 1 = { add_trait = overseer } + } + add_trait = lifestyle_traveler + } + add_courtier = scope:yurt_merchant_char + } + } + } + } + } + } + } + } + + + option = { #rejoice! + name = mpo_decisions_events.0101.a + ai_chance = { + base = 10 + } + } + + option = { + name = mpo_decisions_events.0101.b + custom_tooltip = mpo_decisions_events.0101.b.desc + trigger_event = mpo_decisions_events.2137 + + ai_chance = { + base = 0 + } + } + + after = { + if = { + limit = { + domicile = { has_domicile_building_or_higher = char_trade_yurt_01 } + } + show_as_tooltip = { add_courtier = scope:yurt_merchant_char } + } + switch = { + trigger = scope:merchant_goods + flag:artifact_material = { + add_character_modifier = { + modifier = mpo_artifact_material_modifier + years = 4 + } + } + flag:innovation = { + domicile ?= { + mpo_paiza_innovation_reward_effect = yes + } + } + flag:armaments = { + if = { + limit = { + scope:paiza_merchant = { + has_character_flag = established_paiza_system + } + } + mpo_paiza_improve_maa_smol_effect = yes + } + else = { + mpo_paiza_improve_maa_effect = yes + } + } + } + + scope:paiza_merchant = { + hidden_effect = { + add_gold = root.var:trade_gold_value + } + pay_short_term_gold = { + target = root + gold = root.var:trade_gold_value + } + } + } +} + +mpo_decisions_events.2137 = { + type = character_event + theme = nomads + + title = mpo_decisions_events.0101.t + desc = { + desc = mpo_decisions_events.2137.desc_intro + first_valid = { + triggered_desc = { + trigger = { scope:first_story = flag:desc_1 } + desc = marco_polo_quote_desc_1 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_2 } + desc = marco_polo_quote_desc_2 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_3 } + desc = marco_polo_quote_desc_3 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_4 } + desc = marco_polo_quote_desc_4 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_5 } + desc = marco_polo_quote_desc_5 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_6 } + desc = marco_polo_quote_desc_6 + } + triggered_desc = { + trigger = { scope:first_story = flag:desc_7 } + desc = marco_polo_quote_desc_7 + } + } + desc = mpo_decisions_events.2137.desc_interludium + first_valid = { + triggered_desc = { + trigger = { scope:second_story = flag:desc_1 } + desc = marco_polo_quote_desc_1 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_2 } + desc = marco_polo_quote_desc_2 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_3 } + desc = marco_polo_quote_desc_3 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_4 } + desc = marco_polo_quote_desc_4 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_5 } + desc = marco_polo_quote_desc_5 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_6 } + desc = marco_polo_quote_desc_6 + } + triggered_desc = { + trigger = { scope:second_story = flag:desc_7 } + desc = marco_polo_quote_desc_7 + } + } + } + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = disbelief + } + + right_portrait = { + character = scope:paiza_merchant + animation = admiration + } + + immediate = { + random_list = { #since the event can happen twice, we are rolling for the first and second paragraph in such way to make sure player sees unique content + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_1 scope:first_story ?= flag:desc_1 } } + save_scope_value_as = { + name = first_story + value = flag:desc_1 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_2 scope:first_story ?= flag:desc_2 } } + save_scope_value_as = { + name = first_story + value = flag:desc_2 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_3 scope:first_story ?= flag:desc_3 } culture = culture:mongol } + save_scope_value_as = { + name = first_story + value = flag:desc_3 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_4 scope:first_story ?= flag:desc_4 } } + save_scope_value_as = { + name = first_story + value = flag:desc_4 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_5 scope:first_story ?= flag:desc_5 } } + save_scope_value_as = { + name = first_story + value = flag:desc_5 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_6 scope:first_story ?= flag:desc_6 } } + save_scope_value_as = { + name = first_story + value = flag:desc_6 + } + } + 1 = { + trigger = { NOT = { scope:first_story ?= flag:desc_7 scope:first_story ?= flag:desc_7 } } + save_scope_value_as = { + name = first_story + value = flag:desc_7 + } + } + } + random_list= { + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_1 scope:second_story ?= flag:desc_1 } } + save_scope_value_as = { + name = second_story + value = flag:desc_1 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_2 scope:second_story ?= flag:desc_2 } } + save_scope_value_as = { + name = second_story + value = flag:desc_2 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_3 scope:second_story ?= flag:desc_3 } culture = culture:mongol } + save_scope_value_as = { + name = second_story + value = flag:desc_3 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_4 scope:second_story ?= flag:desc_4 } } + save_scope_value_as = { + name = second_story + value = flag:desc_4 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_5 scope:second_story ?= flag:desc_5 } } + save_scope_value_as = { + name = second_story + value = flag:desc_5 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_6 scope:second_story ?= flag:desc_6 } } + save_scope_value_as = { + name = second_story + value = flag:desc_6 + } + } + 1 = { + trigger = { NOT = { scope:second_story ?= flag:desc_7 scope:second_story ?= flag:desc_7 } } + save_scope_value_as = { + name = second_story + value = flag:desc_7 + } + } + } + } + + option = { + name = mpo_decisions_events.2137.a + } + + option = { + name = mpo_decisions_events.2137.b + trigger_event = mpo_decisions_events.2137 + } + + option = { + name = mpo_decisions_events.2137.c + add_courtier = scope:paiza_merchant + } +} + +mpo_decisions_events.0102 = { + hidden = yes + + immediate = { + save_scope_as = paiza_merchant + var:merchant_origin = { + save_scope_as = merchant_origin + } + var:requested_merchant_goods = { + save_scope_as = merchant_goods + } + + var:merchant_employer = { + if = { + limit = { + is_alive = yes + } + if = { + limit = { + NOT = { + root.location = location + } + } + root = { + set_location = { location = var:merchant_employer.location } + } + } + trigger_event = mpo_decisions_events.0101 + } + } + } +} + + + +mpo_decisions_events.0110 = { #mpo_abuse_authority_paiza_decision initial event + type = character_event + theme = nomads + + title = mpo_decisions_events.0110.t + desc = mpo_decisions_events.0110.desc + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = personality_bold + } + + right_portrait = { + character = scope:local_boi + animation = beg + } + + lower_center_portrait = { + character = scope:paiza_patron + } + + artifact = { + target = scope:paiza_artifact + position = lower_right_portrait + } + + immediate = { + random_character_artifact = { + limit = { + root = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron = { + is_alive = yes + is_gurkhan = yes + } + } + save_scope_as = paiza_artifact + var:paiza_patron ?= { + save_scope_as = paiza_patron + } + } + location.duchy = { + random_de_jure_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = holder.primary_title.tier + } + } + holder = { + save_scope_as = local_boi + } + } + } + } + + option = { #yeah, go for it + name = mpo_decisions_events.0110.a + mpo_paiza_abuse_counter_effect = { + PAIZA_PATRON = scope:paiza_patron + PAIZA_ABUSER = root + } + mpo_abuse_authority_county_effect = yes + } + + option = { #try to be sneaky about it + name = mpo_decisions_events.0110.b + + duel = { + skill = intrigue + value = very_high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + mpo_abuse_authority_county_effect = yes + send_interface_toast = { + type = event_toast_effect_good + title = mpo_decisions_events.0110.b.success + custom_tooltip = mpo_decisions_events.0110.b.success_desc + left_icon = root + right_icon = scope:paiza_patron + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 10 + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_decisions_events.0110.b.failure + left_icon = root + right_icon = scope:paiza_patron + mpo_paiza_abuse_counter_effect = { + PAIZA_PATRON = scope:paiza_patron + PAIZA_ABUSER = root + } + } + } + } + } + + option = { + name = mpo_decisions_events.0110.d + add_prestige = -200 + } +} + +mpo_decisions_events.0111 = { #mpo_abuse_authority_paiza_decision consequences + type = character_event + theme = nomads + + title = mpo_decisions_events.0111.t + desc = mpo_decisions_events.0111.desc + + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = fear + } + + right_portrait = { + character = scope:paiza_patron + animation = anger + } + + artifact = { + target = scope:paiza_artifact + position = lower_right_portrait + } + + immediate = { + liege = { save_scope_as = paiza_patron } + add_character_flag = no_more_paiza_abuse + + random_equipped_character_artifact = { + limit = { + root = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron = { + is_alive = yes + is_gurkhan = yes + } + } + save_scope_as = paiza_artifact + var:paiza_patron ?= { + save_scope_as = paiza_patron + } + } + } + + option = { #whoooops + name = mpo_decisions_events.0111.a + #what do you mean my actions have consequences + custom_tooltip = mpo_decisions_events.0111.a.effects + scope:paiza_patron = { + add_opinion = { + target = root + modifier = abused_paiza_authority + } + } + } + + option = { #its a prank bro + trigger = { + scope:paiza_patron = { + is_ai = yes + } + } + name = mpo_decisions_events.0111.b + add_prestige_level = -1 + duel = { + skill = diplomacy + target = scope:paiza_patron + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + custom_tooltip = mpo_decisions_events.0111.a.survived_khans_wrath + scope:paiza_patron = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -30 + } + } + } + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 10 + custom_tooltip = mpo_decisions_events.0111.a.severe_effects + scope:paiza_patron = { + add_opinion = { + target = root + modifier = gravely_abused_paiza_authority + } + } + every_close_family_member = { + limit = { + is_ai = yes + } + scope:paiza_patron = { + add_opinion = { + target = prev + modifier = abused_paiza_authority_family + } + } + } + } + } + } +} + +mpo_decisions_events.0112 = { #mpo_abuse_authority_paiza_decision consequences decision for a player + type = character_event + theme = nomads + + override_background = { reference = mpo_campfire_steppe } + + title = mpo_decisions_events.0112.t + desc = mpo_decisions_events.0112.desc + + left_portrait = { + character = scope:paiza_abuser_1 + animation = personality_coward + } + + right_portrait = { + character = scope:paiza_abuser + animation = fear + } + + artifact = { + target = scope:paiza_artifact + position = lower_right_portrait + } + + trigger = { + NOT = { + has_character_flag = refused_paiza_abuse_notifications + } + scope:paiza_abuser = { + any_dynasty_member = { + location = scope:paiza_abuser + is_ai = yes + is_adult = yes + } + } + } + + immediate = { + scope:paiza_abuser = { + random_dynasty_member = { + limit = { + location = scope:paiza_abuser + is_ai = yes + is_adult = yes + } + save_scope_as = paiza_abuser_1 + } + random_equipped_character_artifact = { + limit = { + root = { can_benefit_from_artifact = prev } + exists = var:paiza_patron + var:paiza_patron = { + is_alive = yes + is_gurkhan = yes + } + } + save_scope_as = paiza_artifact + var:paiza_patron ?= { + save_scope_as = paiza_patron + } + } + } + } + + option = { #take action + name = mpo_decisions_events.0112.a + custom_tooltip = mpo_decisions_events.0112.a.desc + reverse_add_opinion = { + target = scope:paiza_abuser + modifier = gravely_abused_paiza_authority + } + reverse_add_opinion = { + target = scope:paiza_abuser_1 + modifier = gravely_abused_paiza_authority + } + } + + option = { #not for now + name = mpo_decisions_events.0112.b + scope:paiza_abuser = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_paiza_abuse_counter_effect.indifferent + left_icon = root + } + } + scope:paiza_abuser_1 = { + send_interface_toast = { + type = event_toast_effect_good + title = mpo_paiza_abuse_counter_effect.indifferent + left_icon = root + } + } + } + + option = { #do not notify me ever again (ever for like, 10 years) + name = mpo_decisions_events.0112.c + + add_character_flag = { + flag = refused_paiza_abuse_notifications + years = 10 + } + } +} + +scripted_effect localize_study_commander_success_chance_change = { + if = { + limit = { + $VALUE$ >= 25 + } + custom_tooltip = study_commander_trait_current_success_chance_increase_monumental + } + else_if = { + limit = { + $VALUE$ >= 15 + } + custom_tooltip = study_commander_trait_current_success_chance_increase_great + } + else_if = { + limit = { + $VALUE$ >= 1 + } + custom_tooltip = study_commander_trait_current_success_chance_increase + } + else_if = { + limit = { + $VALUE$ = 0 + } + custom_tooltip = study_commander_trait_current_success_chance_none + } + else_if = { + limit = { + $VALUE$ >= -15 + } + custom_tooltip = study_commander_trait_current_success_chance_decrease + } + else = { + custom_tooltip = study_commander_trait_current_success_chance_decrease_great + } + if = { + limit = { + NOT = { has_variable = study_commander_trait_success_chance_var } + } + set_variable = { + name = study_commander_trait_success_chance_var + value = 0 + } + } + change_variable = { + name = study_commander_trait_success_chance_var + add = $VALUE$ + } +} +scripted_effect mentor_option_seed_effect = { + random_list = { + 1 = { save_scope_value_as = { name = mentor_option_seed value = 1 } } + 1 = { save_scope_value_as = { name = mentor_option_seed value = 2 } } + } +} +scripted_effect trait_weighting_effect = { + if = { + limit = { + can_weigh_trait_trigger = { + TRAIT = $WEIGHTED_TRAIT$ + } + } + if = { + limit = { + NOT = { has_variable = $WEIGHTED_TRAIT$_weight } + } + set_variable = { + name = $WEIGHTED_TRAIT$_weight + value = 0 + } + } + change_variable = { + name = $WEIGHTED_TRAIT$_weight + add = $WEIGHT$ + } + every_trait = { + limit = { + this = trait:$WEIGHTED_TRAIT$ + } + save_scope_as = weighted_trait + } + if = { + limit = { + $WEIGHT$ > 0 + } + custom_tooltip = study_commander_trait_weight_tooltip_pos + } + else = { + custom_tooltip = study_commander_trait_weight_tooltip_neg + } + } + else = { + add_prestige = 10 + } +} +scripted_effect trait_weighting_effect_mentor = { + if = { + limit = { + scope:commander_trait_mentor = { has_trait = $TRAIT$ } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = $TRAIT$ + WEIGHT = 10 + } + } +} +scripted_trigger can_weigh_trait_trigger = { + trigger_if = { + limit = { + NOT = { has_trait = $TRAIT$ } + } + # Exceptions + trigger_if = { + limit = { + flag:$TRAIT$ = flag:reckless + } + NOT = { has_trait = cautious_leader } + } + trigger_else_if = { + limit = { + flag:$TRAIT$ = flag:cautious_leader + + } + NOT = { has_trait = reckless } + } + trigger_else = { + always = yes + } + } + trigger_else = { + always = no + } +} + +# Study Commander Trait Events +mpo_decisions_events.0200 = { + type = character_event + title = mpo_decisions_events.0200.t + desc = { + desc = mpo_decisions_events.0200.desc + first_valid = { + triggered_desc = { + trigger = { + has_variable = commander_trait_mentor + var:commander_trait_mentor = scope:commander_trait_mentor + } + desc = mpo_decisions_events.0200.desc_my_mentor + } + triggered_desc = { + trigger = { + scope:commander_trait_mentor = { has_variable = commander_trait_mentor } + } + desc = mpo_decisions_events.0200.desc_mentor + } + } + } + theme = nomads + + left_portrait = { + character = root + animation = marshal + } + + right_portrait = { + character = scope:commander_trait_mentor + animation = inspect_weapon + } + + immediate = { + stress_impact = { + base = medium_stress_impact_gain + } + add_character_flag = is_learning_commander_trait + # Find a mentor + if = { + limit = { + OR = { + NOT = { has_variable = commander_trait_mentor } + AND = { + has_variable = commander_trait_mentor + var:commander_trait_mentor = { is_available_adult = no } + } + } + } + every_knight = { + limit = { + is_available_adult = yes + } + save_scope_as = possible_mentor + root = { + add_to_variable_list = { + name = possible_mentor_list + target = scope:possible_mentor + } + } + } + every_vassal_or_below = { + limit = { + is_available_adult = yes + } + save_scope_as = possible_mentor + root = { + add_to_variable_list = { + name = possible_mentor_list + target = scope:possible_mentor + } + } + } + every_councillor = { + limit = { + is_available_adult = yes + } + save_scope_as = possible_mentor + root = { + add_to_variable_list = { + name = possible_mentor_list + target = scope:possible_mentor + } + } + } + ordered_in_list = { + variable = possible_mentor_list + limit = { + martial > decent_skill_rating + } + order_by = { + add = martial + if = { + limit = { + number_of_commander_traits >= 1 + } + add = 5 + } + } + save_scope_as = commander_trait_mentor + } + if = { + limit = { + NOT = { exists = scope:commander_trait_mentor } + } + create_character = { + random_traits = yes + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + random_traits_list = { + count = 1 + education_martial_2 = {} + education_martial_3 = {} + education_martial_4 = {} + } + random_traits_list = { + count = 1 + brave = {} + just = {} + gallant = {} + honest = {} + gregarious = {} + generous = {} + diligent = {} + wrathful = {} + } + prowess = { + min_template_decent_skill + min_template_decent_skill + } + martial = { + min_template_high_skill + max_template_high_skill + } + intrigue = { + min_template_decent_skill + max_template_medium_skill + } + learning = { + min_template_decent_skill + max_template_medium_skill + } + save_scope_as = commander_trait_mentor + after_creation = { + give_random_commander_trait_effect = yes + } + } + } + } + else = { + var:commander_trait_mentor = { save_scope_as = commander_trait_mentor } + } + if = { + limit = { + debug_only = yes + } + custom_tooltip = study_commander_trait_current_success_chance_debug + } + else = { + custom_tooltip = study_commander_trait_current_success_chance + } + set_variable = { + name = study_commander_trait_success_chance_var + value = 0 + } + } + + option = { #Study under mentor + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_variable = commander_trait_mentor + var:commander_trait_mentor = scope:commander_trait_mentor + } + desc = mpo_decisions_events.0200.my_mentor + } + desc = mpo_decisions_events.0200.mentor + } + } + } + trigger = { + short_term_gold >= scope:commander_trait_mentor.study_commander_trait_mentor_hire_cost + } + show_as_unavailable = { always = yes } + flavor = mpo_decisions_events.0200.mentor_flavor + save_scope_value_as = { + name = training_method + value = flag:mentor + } + pay_short_term_gold = { + target = scope:commander_trait_mentor + gold = scope:commander_trait_mentor.study_commander_trait_mentor_hire_cost + } + localize_study_commander_success_chance_change = { + VALUE = 25 + } + set_variable = { + name = commander_trait_mentor + value = scope:commander_trait_mentor + } + scope:commander_trait_mentor = { + add_character_flag = commander_trait_mentor + } + if = { + limit = { + scope:commander_trait_mentor = { number_of_commander_traits >= 1 } + } + custom_tooltip = mpo_decisions_events.0200.mentor_traits + trait_weighting_effect_mentor = { TRAIT = logistician } + trait_weighting_effect_mentor = { TRAIT = military_engineer } + trait_weighting_effect_mentor = { TRAIT = aggressive_attacker } + trait_weighting_effect_mentor = { TRAIT = unyielding_defender } + trait_weighting_effect_mentor = { TRAIT = forder } + trait_weighting_effect_mentor = { TRAIT = flexible_leader } + trait_weighting_effect_mentor = { TRAIT = desert_warrior } + trait_weighting_effect_mentor = { TRAIT = jungle_stalker } + trait_weighting_effect_mentor = { TRAIT = reaver } + trait_weighting_effect_mentor = { TRAIT = reckless } + trait_weighting_effect_mentor = { TRAIT = holy_warrior } + trait_weighting_effect_mentor = { TRAIT = open_terrain_expert } + trait_weighting_effect_mentor = { TRAIT = rough_terrain_expert } + trait_weighting_effect_mentor = { TRAIT = forest_fighter } + trait_weighting_effect_mentor = { TRAIT = cautious_leader } + trait_weighting_effect_mentor = { TRAIT = organizer } + trait_weighting_effect_mentor = { TRAIT = winter_soldier } + } + stress_impact = { + greedy = medium_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.1 + ai_energy = 1 + } + modifier = { + scope:commander_trait_mentor.martial >= root.martial + factor = 1.25 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + + option = { #Study on your own + name = mpo_decisions_events.0200.a + flavor = mpo_decisions_events.0200.alone + save_scope_value_as = { + name = training_method + value = flag:none + } + localize_study_commander_success_chance_change = { + VALUE = 0 + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + has_trait = craven + factor = 0.5 + } + } + } + + option = { #Study on your own - Martial + name = mpo_decisions_events.0200.martial + flavor = mpo_decisions_events.0200.martial_flavor + trigger = { + martial >= high_skill_rating + } + save_scope_value_as = { + name = training_method + value = flag:martial + } + if = { + limit = { + highest_skill = martial + } + localize_study_commander_success_chance_change = { + VALUE = 15 + } + } + else = { + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + highest_skill = martial + factor = 1.5 + } + } + } + + option = { #Study on your own - Learning + name = mpo_decisions_events.0200.learning + flavor = mpo_decisions_events.0200.learning_flavor + trigger = { + learning >= high_skill_rating + } + show_as_unavailable = { learning >= low_skill_rating } + save_scope_value_as = { + name = training_method + value = flag:learning + } + if = { + limit = { + highest_skill = learning + } + localize_study_commander_success_chance_change = { + VALUE = 15 + } + } + else = { + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + highest_skill = learning + factor = 1.5 + } + } + } + + option = { #Study on your own - Intrigue + name = mpo_decisions_events.0200.intrigue + flavor = mpo_decisions_events.0200.intrigue_flavor + trigger = { + intrigue >= high_skill_rating + } + show_as_unavailable = { intrigue >= low_skill_rating } + save_scope_value_as = { + name = training_method + value = flag:intrigue + } + if = { + limit = { + highest_skill = intrigue + } + localize_study_commander_success_chance_change = { + VALUE = 15 + } + } + else = { + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + highest_skill = intrigue + factor = 1.5 + } + } + } + + after = { + if = { + limit = { + OR = { + has_trait = vengeful + has_trait = wrathful + has_trait = paranoid + has_trait = arbitrary + has_trait = zealous + has_trait = temperate + has_trait = gluttonous + has_trait = greedy + has_trait = diligent + has_trait = administrator + has_trait = architect + } + } + custom_tooltip = study_commander_trait_bonus + if = { + limit = { + OR = { + has_trait = vengeful + has_trait = wrathful + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = aggressive_attacker + WEIGHT = 10 + } + } + if = { + limit = { + has_trait = paranoid + } + trait_weighting_effect = { + WEIGHTED_TRAIT = cautious_leader + WEIGHT = 10 + } + } + if = { + limit = { + has_trait = arbitrary + } + trait_weighting_effect = { + WEIGHTED_TRAIT = reckless + WEIGHT = 10 + } + } + if = { + limit = { + has_trait = zealous + } + trait_weighting_effect = { + WEIGHTED_TRAIT = holy_warrior + WEIGHT = 10 + } + } + if = { + limit = { + has_trait = temperate + } + trait_weighting_effect = { + WEIGHTED_TRAIT = logistician + WEIGHT = 10 + } + } + if = { + limit = { + has_trait = gluttonous + } + trait_weighting_effect = { + WEIGHTED_TRAIT = logistician + WEIGHT = -10 + } + } + if = { + limit = { + has_trait = greedy + } + trait_weighting_effect = { + WEIGHTED_TRAIT = reaver + WEIGHT = 10 + } + } + if = { + limit = { + OR = { + has_trait = diligent + has_trait = administrator + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = organizer + WEIGHT = 5 + } + } + if = { + limit = { + has_trait = architect + } + trait_weighting_effect = { + WEIGHTED_TRAIT = military_engineer + WEIGHT = 10 + } + } + } + if = { + limit = { + NOR = { + scope:commander_trait_mentor = { is_courtier_of = root } + scope:commander_trait_mentor = { is_councillor_of = root } + scope:commander_trait_mentor = { is_knight_of = root } + scope:training_method ?= flag:mentor + } + } + scope:commander_trait_mentor = { + silent_disappearance_effect = yes + } + } + trigger_event = { + id = mpo_decisions_events.0201 + days = { 5 10 } + } + } +} + +scripted_effect study_commander_trait_option_mentor = { + if = { + limit = { + $DUEL$ = yes + } + duel = { + skill = $SKILL$ + target = scope:commander_trait_mentor + desc = study_commander_trait_option_mentor_desc + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = $SUCCESS_DESC$ + send_interface_toast = { + type = event_toast_effect_good + title = $SUCCESS_DESC$ + left_icon = root + right_icon = scope:commander_trait_mentor + if = { + limit = { + $WOUND_CHANCE$ = yes + } + random = { + chance = 10 + scope:commander_trait_mentor = { + increase_wounds_effect = { REASON = fight } + } + } + } + random_list = { + 50 = { + desc = study_commander_trait_option_success_ok + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 10 } + } + 50 = { + desc = study_commander_trait_option_success + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 20 } + } + } + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = $FAIL_DESC$ + send_interface_toast = { + type = event_toast_effect_bad + title = $FAIL_DESC$ + left_icon = root + right_icon = scope:commander_trait_mentor + if = { + limit = { + $WOUND_CHANCE$ = yes + } + random = { + chance = 10 + increase_wounds_effect = { REASON = fight } + } + } + random_list = { + 50 = { + desc = study_commander_trait_option_fail_ok + localize_study_commander_success_chance_change = { VALUE = -10 } + } + 50 = { + desc = study_commander_trait_option_fail + localize_study_commander_success_chance_change = { VALUE = -20 } + } + } + } + } + } + } + else = { + duel = { + skill = $SKILL$ + value = decent_skill_rating + 75 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = $SUCCESS_DESC$ + send_interface_toast = { + type = event_toast_effect_good + title = $SUCCESS_DESC$ + left_icon = root + right_icon = scope:commander_trait_mentor + if = { + limit = { + $WOUND_CHANCE$ = yes + } + random = { + chance = 10 + scope:commander_trait_mentor = { + increase_wounds_effect = { REASON = fight } + } + } + } + random_list = { + 50 = { + desc = study_commander_trait_option_success_ok + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 10 } + } + 50 = { + desc = study_commander_trait_option_success + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 20 } + } + } + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = $FAIL_DESC$ + send_interface_toast = { + type = event_toast_effect_bad + title = $FAIL_DESC$ + left_icon = root + right_icon = scope:commander_trait_mentor + if = { + limit = { + $WOUND_CHANCE$ = yes + } + random = { + chance = 10 + increase_wounds_effect = { REASON = fight } + } + } + random_list = { + 50 = { + desc = study_commander_trait_option_fail_ok + localize_study_commander_success_chance_change = { VALUE = -10 } + } + 50 = { + desc = study_commander_trait_option_fail + localize_study_commander_success_chance_change = { VALUE = -20 } + } + } + } + } + } + } +} + +scripted_effect study_commander_trait_option_no_mentor = { + if = { + limit = { + $DUEL$ = yes + } + duel = { + skill = $SKILL$ + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = $SUCCESS_DESC$ + send_interface_toast = { + type = event_toast_effect_good + title = $SUCCESS_DESC$ + left_icon = root + random_list = { + 50 = { + desc = study_commander_trait_option_success_ok + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 10 } + } + 50 = { + desc = study_commander_trait_option_success + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 20 } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = $FAIL_DESC$ + send_interface_toast = { + type = event_toast_effect_bad + title = $FAIL_DESC$ + left_icon = root + if = { + limit = { + $WOUND_CHANCE$ = yes + } + random = { + chance = 10 + increase_wounds_effect = { REASON = fight } + } + } + random_list = { + 50 = { + desc = study_commander_trait_option_fail_ok + localize_study_commander_success_chance_change = { VALUE = -10 } + } + 50 = { + desc = study_commander_trait_option_fail + localize_study_commander_success_chance_change = { VALUE = -20 } + } + } + } + } + } + } + else = { + random_list = { + 50 = { + desc = $SUCCESS_DESC$ + show_chance = no + localize_study_commander_success_chance_change = { VALUE = 10 } + } + 50 = { + desc = $FAIL_DESC$ + show_chance = no + localize_study_commander_success_chance_change = { VALUE = -10 } + } + } + } +} + + +mpo_decisions_events.0201 = { # Training Session 1 + type = character_event + title = mpo_decisions_events.0201.t + desc = { + desc = mpo_decisions_events.0201.desc_intro + triggered_desc = { + trigger = { + scope:training_method = flag:mentor + } + desc = mpo_decisions_events.0201.desc_mentor + } + } + theme = nomads + + left_portrait = { + character = root + animation = marshal + } + + right_portrait = { + trigger = { + scope:training_method = flag:mentor + } + character = scope:commander_trait_mentor + animation = personality_honorable + } + + immediate = { + stress_impact = { + base = medium_stress_impact_gain + } + if = { + limit = { + debug_only = yes + } + custom_tooltip = study_commander_trait_current_success_chance_debug + } + else = { + custom_tooltip = study_commander_trait_current_success_chance + } + if = { + limit = { + scope:training_method = flag:mentor + } + mentor_option_seed_effect = yes + } + } + + option = { # Single Combat + name = mpo_decisions_events.0201.martial_1 + trigger = { + OR = { + scope:training_method = flag:martial + scope:mentor_option_seed ?= 1 + } + } + flavor = mpo_decisions_events.0201.martial_1_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0201.martial_1_mentor_success + FAIL_DESC = mpo_decisions_events.0201.martial_1_mentor_fail + WOUND_CHANCE = yes + } + } + else = { + custom_tooltip = mpo_decisions_events.0201.martial_1_tt + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0201.martial_1_success + FAIL_DESC = mpo_decisions_events.0201.martial_1_fail + WOUND_CHANCE = yes + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = aggressive_attacker + WEIGHT = 15 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = martial + } + modifier = { + factor = 0 + has_trait = aggressive_attacker + } + } + } + + option = { # Small-scale Battle + name = mpo_decisions_events.0201.martial_2 + trigger = { + OR = { + scope:training_method = flag:martial + scope:mentor_option_seed ?= 2 + } + } + flavor = mpo_decisions_events.0201.martial_2_flavor + custom_tooltip = mpo_decisions_events.0201.martial_2_tt + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0201.martial_2_success + FAIL_DESC = mpo_decisions_events.0201.martial_2_fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0201.martial_2_success + FAIL_DESC = mpo_decisions_events.0201.martial_2_fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = unyielding_defender + WEIGHT = 15 + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:battlefield + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = martial + } + modifier = { + factor = 1.2 + martial >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = unyielding_defender + } + } + } + + option = { # Landscape + name = mpo_decisions_events.0201.learning_1 + trigger = { + OR = { + scope:training_method = flag:learning + scope:mentor_option_seed ?= 1 + } + } + flavor = mpo_decisions_events.0201.learning_1_flavor + custom_tooltip = mpo_decisions_events.0201.learning_1_tt + if = { + limit = { + scope:training_method = flag:mentor + } + custom_tooltip = mpo_decisions_events.0201.learning_1_mentor + study_commander_trait_option_mentor = { + DUEL = no + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0201.learning_1_success + FAIL_DESC = mpo_decisions_events.0201.learning_1_fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0201.learning_1_success + FAIL_DESC = mpo_decisions_events.0201.learning_1_fail + WOUND_CHANCE = no + } + } + if = { + limit = { + can_weigh_trait_trigger = { TRAIT = open_terrain_expert } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = open_terrain_expert + WEIGHT = 15 + } + } + else_if = { + limit = { + can_weigh_trait_trigger = { TRAIT = rough_terrain_expert } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = rough_terrain_expert + WEIGHT = 15 + } + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:terrain + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 1.2 + learning >= decent_skill_rating + } + modifier = { + factor = 0.5 + has_trait = rough_terrain_expert + } + modifier = { + factor = 0.5 + has_trait = open_terrain_expert + } + } + } + + option = { # Study military innovations + name = mpo_decisions_events.0201.learning_2 + trigger = { + OR = { + scope:training_method = flag:learning + scope:mentor_option_seed ?= 2 + } + } + custom_tooltip = mpo_decisions_events.0201.learning_2_tt + flavor = mpo_decisions_events.0201.learning_2_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + custom_tooltip = mpo_decisions_events.0201.learning_2_mentor + study_commander_trait_option_mentor = { + DUEL = no + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0201.learning_2_success + FAIL_DESC = mpo_decisions_events.0201.learning_2_fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0201.learning_2_success + FAIL_DESC = mpo_decisions_events.0201.learning_2_fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = military_engineer + WEIGHT = 15 + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:study + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 1.2 + learning >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = military_engineer + } + } + } + + option = { # Boost morale / manipulate enemy + name = mpo_decisions_events.0201.intrigue_1 + trigger = { + OR = { + scope:training_method = flag:intrigue + scope:mentor_option_seed ?= 1 + } + } + custom_tooltip = mpo_decisions_events.0201.intrigue_1_tt + flavor = mpo_decisions_events.0201.intrigue_1_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + custom_tooltip = mpo_decisions_events.0201.intrigue_1_mentor + study_commander_trait_option_mentor = { + DUEL = no + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0201.intrigue_1_success + FAIL_DESC = mpo_decisions_events.0201.intrigue_1_fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0201.intrigue_1_success + FAIL_DESC = mpo_decisions_events.0201.intrigue_1_fail + WOUND_CHANCE = no + } + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:town + } + trait_weighting_effect = { + WEIGHTED_TRAIT = flexible_leader + WEIGHT = 15 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = intrigue + } + modifier = { + factor = 1.2 + intrigue >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = flexible_leader + } + } + } + + option = { # Negotiate with enemy + name = mpo_decisions_events.0201.intrigue_2 + trigger = { + OR = { + scope:training_method = flag:intrigue + scope:mentor_option_seed ?= 2 + } + } + custom_tooltip = mpo_decisions_events.0201.intrigue_2_tt + flavor = mpo_decisions_events.0201.intrigue_2_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = no + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0201.intrigue_2_success + FAIL_DESC = mpo_decisions_events.0201.intrigue_2_fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0201.intrigue_2_success + FAIL_DESC = mpo_decisions_events.0201.intrigue_2_fail + WOUND_CHANCE = yes + } + } + if = { + limit = { + can_weigh_trait_trigger = { TRAIT = cautious_leader } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = cautious_leader + WEIGHT = 15 + } + } + else = { + trait_weighting_effect = { + WEIGHTED_TRAIT = organizer + WEIGHT = 15 + } + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:town + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = intrigue + } + modifier = { + factor = 1.2 + intrigue >= decent_skill_rating + } + modifier = { + factor = 0.5 + has_trait = organizer + } + modifier = { + factor = 0.5 + has_trait = cautious_leader + } + } + } + + option = { # Supply Crisis + name = mpo_decisions_events.0201.none_1 + trigger = { + OR = { + scope:mentor_option_seed ?= 1 + scope:training_method = flag:none + } + } + flavor = mpo_decisions_events.0201.none_1_flavor + trait_weighting_effect = { + WEIGHTED_TRAIT = logistician + WEIGHT = 5 + } + study_commander_trait_option_no_mentor = { + DUEL = no + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0201.none_1_success + FAIL_DESC = mpo_decisions_events.0201.none_1_fail + WOUND_CHANCE = yes + } + save_scope_value_as = { + name = last_location_study_commander + value = flag:town + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + has_trait = logistician + } + } + } + + option = { # Simple Training Exercise + name = mpo_decisions_events.0201.none_2 + trigger = { + OR = { + scope:mentor_option_seed ?= 2 + scope:training_method = flag:none + } + } + flavor = mpo_decisions_events.0201.none_2_flavor + add_prowess_skill = 2 + random = { + chance = 10 + if = { + limit = { + has_trait = craven + } + remove_trait = craven + } + add_trait = brave + } + } + + after = { + trigger_event = { + id = mpo_decisions_events.0202 + days = { 15 20 } + } + } +} + +mpo_decisions_events.0202 = { # Random Situation + type = character_event + title = mpo_decisions_events.0202.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:last_location_study_commander ?= flag:battlefield + } + desc = mpo_decisions_events.0202.desc_battlefield + } + triggered_desc = { + trigger = { + scope:last_location_study_commander ?= flag:terrain + } + desc = mpo_decisions_events.0202.desc_terrain + } + triggered_desc = { + trigger = { + scope:last_location_study_commander ?= flag:study + } + desc = mpo_decisions_events.0202.desc_study + } + triggered_desc = { + trigger = { + scope:last_location_study_commander ?= flag:town + } + desc = mpo_decisions_events.0202.desc_town + } + } + desc = mpo_decisions_events.0202.desc + first_valid = { + triggered_desc = { + trigger = { + scope:random_situation = 1 + } + desc = mpo_decisions_events.0202.desc_1_intro + } + triggered_desc = { + trigger = { + scope:random_situation = 2 + } + desc = mpo_decisions_events.0202.desc_2 + } + triggered_desc = { + trigger = { + scope:random_situation = 3 + } + desc = mpo_decisions_events.0202.desc_3 + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:forest + } + desc = terrain_forest + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:taiga + } + desc = terrain_taiga + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:jungle + } + desc = terrain_jungle + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:wetlands + } + desc = terrain_wetlands + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:floodplains + } + desc = terrain_floodplains + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:desert + } + desc = terrain_desert + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:desert_mountains + } + desc = terrain_desert_mountains + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:oasis + } + desc = terrain_oasis + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:steppe + } + desc = terrain_steppe + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:farmlands + } + desc = terrain_farmlands + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:plains + } + desc = terrain_plains + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:drylands + } + desc = terrain_drylands + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:mountains + } + desc = terrain_mountains + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + scope:situation_1_terrain ?= flag:hills + } + desc = terrain_hills + } + + } + random_valid = { + triggered_desc = { + trigger = { + scope:situation_1_terrain ?= flag:taiga + } + desc = terrain_disadvantage_freeze + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:forest + scope:situation_1_terrain ?= flag:jungle + } + } + desc = terrain_disadvantage_foliage + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:forest + scope:situation_1_terrain ?= flag:jungle + scope:situation_1_terrain ?= flag:wetlands + scope:situation_1_terrain ?= flag:floodplains + } + } + desc = terrain_disadvantage_heavy_rain + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:desert + scope:situation_1_terrain ?= flag:desert_mountains + } + } + desc = terrain_disadvantage_sand + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:desert + scope:situation_1_terrain ?= flag:desert_mountains + scope:situation_1_terrain ?= flag:oasis + scope:situation_1_terrain ?= flag:steppe + scope:situation_1_terrain ?= flag:farmlands + scope:situation_1_terrain ?= flag:plains + scope:situation_1_terrain ?= flag:drylands + } + } + desc = terrain_disadvantage_heat + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:mountains + scope:situation_1_terrain ?= flag:hills + } + } + desc = terrain_disadvantage_hike + } + triggered_desc = { + trigger = { + OR = { + scope:situation_1_terrain ?= flag:steppe + scope:situation_1_terrain ?= flag:farmlands + scope:situation_1_terrain ?= flag:plains + scope:situation_1_terrain ?= flag:drylands + } + } + desc = terrain_disadvantage_endless_field + } + triggered_desc = { + trigger = { + scope:random_situation = 1 + } + desc = terrain_disadvantage_difficult + } + } + desc = mpo_decisions_events.0202.desc_outro + } + + theme = nomads + + override_background = { + trigger = { + scope:last_location_study_commander ?= flag:battlefield + } + reference = battlefield + } + + override_background = { + trigger = { + scope:last_location_study_commander ?= flag:terrain + } + reference = terrain + } + + override_background = { + trigger = { + scope:last_location_study_commander ?= flag:study + } + reference = study + } + + override_background = { + trigger = { + scope:last_location_study_commander ?= flag:town + } + reference = courtyard + } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:situation_alerter + animation = storyteller + } + + immediate = { + stress_impact = { + base = miniscule_stress_impact_gain + } + if = { + limit = { + debug_only = yes + } + custom_tooltip = study_commander_trait_current_success_chance_debug + } + else = { + custom_tooltip = study_commander_trait_current_success_chance + } + if = { + limit = { + scope:training_method = flag:mentor + } + mentor_option_seed_effect = yes + } + if = { + limit = { + NOT = { scope:training_method = flag:mentor } + } + if = { + limit = { + any_courtier = { + NOT = { + this = root + } + is_available_adult = yes + } + } + random_courtier = { + limit = { + NOT = { + this = root + } + is_available_adult = yes + } + save_scope_as = situation_alerter + } + } + else = { + create_character = { + dynasty = none + template = soldier_friend_character + location = root.location + age = { 16 30 } + save_scope_as = situation_alerter + } + } + } + else = { + # For loc + scope:commander_trait_mentor = { save_scope_as = situation_alerter } + } + # Find random situation + random_list = { + 15 = { + save_scope_value_as = { # Battlefield/Terrain + name = random_situation + value = 1 + } + random_list = { + 10 = { + modifier = { + add = 5 + OR = { + location = { terrain = drylands } + location = { terrain = desert } + location = { terrain = desert_mountains } + location = { terrain = oasis } + any_sub_realm_barony = { + title_province = { + OR = { + terrain = drylands + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + } + } + modifier = { + add = -100 + NOT = { can_weigh_trait_trigger = { TRAIT = desert_warrior } } + } + save_scope_value_as = { name = situation_1_terrain value = flag:desert } + } + 10 = { + modifier = { + add = 5 + OR = { + location = { terrain = jungle } + any_sub_realm_barony = { + title_province = { + terrain = jungle + } + } + } + } + modifier = { + add = -100 + NOT = { can_weigh_trait_trigger = { TRAIT = jungle_stalker } } + } + save_scope_value_as = { name = situation_1_terrain value = flag:jungle } + } + 10 = { + modifier = { + add = 5 + OR = { + location = { terrain = forest } + location = { terrain = taiga } + any_sub_realm_barony = { + title_province = { + OR = { + terrain = forest + terrain = taiga + } + } + } + } + } + modifier = { + add = -100 + NOT = { can_weigh_trait_trigger = { TRAIT = forest_fighter } } + } + save_scope_value_as = { name = situation_1_terrain value = flag:forest } + } + 10 = { + modifier = { + add = 5 + OR = { + location = { terrain = farmlands } + location = { terrain = plains } + location = { terrain = steppe } + any_sub_realm_barony = { + title_province = { + OR = { + terrain = farmlands + terrain = plains + terrain = steppe + } + } + } + } + } + modifier = { + add = -100 + NOT = { can_weigh_trait_trigger = { TRAIT = open_terrain_expert } } + } + save_scope_value_as = { name = situation_1_terrain value = flag:plains } + } + 10 = { + modifier = { + add = 5 + OR = { + location = { terrain = hills } + location = { terrain = mountains } + location = { terrain = wetlands } + any_sub_realm_barony = { + title_province = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + } + } + } + modifier = { + add = -100 + NOT = { can_weigh_trait_trigger = { TRAIT = rough_terrain_expert } } + } + save_scope_value_as = { name = situation_1_terrain value = flag:mountains } + } + 20 = { + trigger = { + current_season_trigger = { SEASON = winter } + } + modifier = { + add = -100 + NOT = { + can_weigh_trait_trigger = { TRAIT = reaver } + can_weigh_trait_trigger = { TRAIT = winter_soldier } + } + } + save_scope_value_as = { name = situation_1_terrain value = flag:winter_terrain } + } + } + } + 10 = { + save_scope_value_as = { # Siege + name = random_situation + value = 2 + } + } + 10 = { + save_scope_value_as = { # Sabotage + name = random_situation + value = 3 + } + } + } + + } + + option = { + name = mpo_decisions_events.0202.martial_situation_1 + trigger = { + scope:random_situation = 1 + } + flavor = mpo_decisions_events.0202.martial_situation_1_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + switch = { + trigger = scope:situation_1_terrain + flag:desert = { + trait_weighting_effect = { + WEIGHTED_TRAIT = desert_warrior + WEIGHT = 20 + } + } + flag:jungle = { + trait_weighting_effect = { + WEIGHTED_TRAIT = jungle_stalker + WEIGHT = 20 + } + } + flag:forest = { + trait_weighting_effect = { + WEIGHTED_TRAIT = forest_fighter + WEIGHT = 20 + } + } + flag:plains = { + trait_weighting_effect = { + WEIGHTED_TRAIT = open_terrain_expert + WEIGHT = 20 + } + } + flag:mountains = { + trait_weighting_effect = { + WEIGHTED_TRAIT = rough_terrain_expert + WEIGHT = 20 + } + } + flag:winter_terrain = { + random_list = { + 1 = { + trigger = { can_weigh_trait_trigger = { TRAIT = reaver } } + trait_weighting_effect = { + WEIGHTED_TRAIT = reaver + WEIGHT = 15 + } + } + 1 = { + trigger = { can_weigh_trait_trigger = { TRAIT = winter_soldier } } + trait_weighting_effect = { + WEIGHTED_TRAIT = winter_soldier + WEIGHT = 15 + } + } + } + } + flag:wetlands = { + trait_weighting_effect = { + WEIGHTED_TRAIT = forder + WEIGHT = 20 + } + } + flag:floodplains = { + trait_weighting_effect = { + WEIGHTED_TRAIT = forder + WEIGHT = 20 + } + } + } + ai_chance = { + base = 150 + modifier = { + factor = 1.5 + highest_skill = martial + } + modifier = { + factor = 1.2 + martial >= decent_skill_rating + } + } + } + + option = { + name = mpo_decisions_events.0202.martial_situation_2 + trigger = { + scope:random_situation = 2 + OR = { + scope:training_method = flag:martial + scope:mentor_option_seed ?= 1 + } + } + flavor = mpo_decisions_events.0202.martial_situation_2_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = aggressive_attacker + WEIGHT = 20 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = martial + } + modifier = { + factor = 1.2 + martial >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = aggressive_attacker + } + } + } + + option = { + name = mpo_decisions_events.0202.martial_situation_3 + trigger = { + scope:random_situation = 3 + OR = { + scope:training_method = flag:martial + scope:mentor_option_seed ?= 2 + } + } + flavor = mpo_decisions_events.0202.martial_situation_3_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + random = { + chance = 10 + if = { + limit = { + has_trait = craven + } + remove_trait = craven + } + add_trait = brave + } + ai_chance = { + base = 100 + } + } + + option = { + name = mpo_decisions_events.0202.learning_situation_1 + trigger = { + scope:random_situation = 1 + OR = { + scope:training_method = flag:learning + scope:mentor_option_seed ?= 2 + } + } + flavor = mpo_decisions_events.0202.learning_situation_1_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = flexible_leader + WEIGHT = 20 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 1.2 + learning >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = flexible_leader + } + } + } + + option = { + name = mpo_decisions_events.0202.learning_situation_2 + trigger = { + scope:random_situation = 2 + } + flavor = mpo_decisions_events.0202.learning_situation_2_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = military_engineer + WEIGHT = 20 + } + ai_chance = { + base = 150 + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 1.2 + learning >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = military_engineer + } + } + } + + option = { + name = mpo_decisions_events.0202.learning_situation_3 + trigger = { + scope:random_situation = 3 + OR = { + scope:training_method = flag:learning + scope:mentor_option_seed ?= 2 + } + } + flavor = mpo_decisions_events.0202.learning_situation_3_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = reckless + WEIGHT = -5 + } + ai_chance = { + base = 75 + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 1.2 + learning >= decent_skill_rating + } + } + } + + option = { + name = mpo_decisions_events.0202.intrigue_situation_1 + trigger = { + scope:random_situation = 1 + OR = { + scope:training_method = flag:intrigue + scope:mentor_option_seed ?= 1 + } + } + flavor = mpo_decisions_events.0202.intrigue_situation_1_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = organizer + WEIGHT = 20 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = intrigue + } + modifier = { + factor = 1.2 + intrigue >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = organizer + } + } + } + + option = { + name = mpo_decisions_events.0202.intrigue_situation_2 + trigger = { + scope:random_situation = 2 + OR = { + scope:training_method = flag:intrigue + scope:mentor_option_seed ?= 2 + } + } + flavor = mpo_decisions_events.0202.intrigue_situation_2_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = reckless + WEIGHT = 20 + } + trait_weighting_effect = { + WEIGHTED_TRAIT = cautious_leader + WEIGHT = -5 + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + highest_skill = intrigue + } + modifier = { + factor = 1.2 + intrigue >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = reckless + } + } + } + + option = { + name = mpo_decisions_events.0202.intrigue_situation_3 + trigger = { + scope:random_situation = 3 + } + trait_weighting_effect = { + WEIGHTED_TRAIT = cautious_leader + WEIGHT = 20 + } + flavor = mpo_decisions_events.0202.intrigue_situation_3_flavor + if = { + limit = { + scope:training_method = flag:mentor + } + study_commander_trait_option_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + else = { + study_commander_trait_option_no_mentor = { + DUEL = yes + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = no + } + } + ai_chance = { + base = 150 + modifier = { + factor = 1.5 + highest_skill = intrigue + } + modifier = { + factor = 1.2 + intrigue >= decent_skill_rating + } + modifier = { + factor = 0 + has_trait = cautious_leader + } + } + } + + option = { + name = mpo_decisions_events.0202.none_situation_1 + trigger = { + scope:random_situation = 1 + } + flavor = mpo_decisions_events.0202.none_situation_1_flavor + study_commander_trait_option_no_mentor = { + DUEL = no + SKILL = martial + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = yes + } + trait_weighting_effect = { + WEIGHTED_TRAIT = unyielding_defender + WEIGHT = 5 + } + trait_weighting_effect = { + WEIGHTED_TRAIT = aggressive_attacker + WEIGHT = -5 + } + ai_chance = { + base = 75 + modifier = { + factor = 0 + has_trait = unyielding_defender + } + } + } + + option = { + name = mpo_decisions_events.0202.none_situation_2 + trigger = { + scope:random_situation = 2 + } + flavor = mpo_decisions_events.0202.none_situation_2_flavor + trait_weighting_effect = { + WEIGHTED_TRAIT = cautious_leader + WEIGHT = 20 + } + study_commander_trait_option_no_mentor = { + DUEL = no + SKILL = learning + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = yes + } + ai_chance = { + base = 75 + } + } + + option = { + name = mpo_decisions_events.0202.none_situation_3 + trigger = { + scope:random_situation = 3 + } + flavor = mpo_decisions_events.0202.none_situation_3_flavor + study_commander_trait_option_no_mentor = { + DUEL = no + SKILL = intrigue + SUCCESS_DESC = mpo_decisions_events.0202.success + FAIL_DESC = mpo_decisions_events.0202.fail + WOUND_CHANCE = yes + } + add_dread = miniscule_dread_gain + ai_chance = { + base = 75 + } + } + + after = { + trigger_event = { + id = mpo_decisions_events.0203 + days = { 3 7 } + } + if = { + limit = { + NOR = { + scope:situation_alerter = { is_courtier_of = root } + scope:commander_trait_mentor ?= scope:situation_alerter + } + } + scope:situation_alerter = { + silent_disappearance_effect = yes + } + } + } +} + +mpo_decisions_events.0203 = { # Reflection + type = character_event + title = mpo_decisions_events.0203.t + desc = { + desc = mpo_decisions_events.0203.desc_intro + first_valid = { + triggered_desc = { + trigger = { + scope:training_method = flag:mentor + } + desc = mpo_decisions_events.0203.desc_mentor + } + desc = mpo_decisions_events.0203.desc + } + } + theme = nomads + + override_background = { + reference = study + } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + trigger = { + scope:training_method = flag:mentor + } + character = scope:commander_trait_mentor + animation = storyteller + } + + lower_center_portrait = { + trigger = { + exists = scope:heir_person + } + character = scope:heir_person + } + + lower_right_portrait = { + trigger = { + exists = scope:love_person + } + character = scope:love_person + } + + lower_left_portrait = { + trigger = { + exists = scope:hate_person + } + character = scope:hate_person + } + + immediate = { + stress_impact = { + base = miniscule_stress_impact_gain + } + if = { + limit = { + debug_only = yes + } + custom_tooltip = study_commander_trait_current_success_chance_debug + } + else = { + custom_tooltip = study_commander_trait_current_success_chance + } + # Get some people + # Heir (family member or designated) + if = { + limit = { + any_close_family_member = { + is_player_heir_of = root + is_primary_heir_of = root + } + } + random_close_family_member = { + limit = { + OR = { + is_player_heir_of = root + is_primary_heir_of = root + } + } + save_scope_as = heir_person + } + } + else_if = { + limit = { + exists = designated_heir + } + designated_heir = { save_scope_as = heir_person } + } + # Lover / Spouse + if = { + limit = { + any_spouse = { count >= 1 } + } + ordered_spouse = { + order_by = { + value = 10 + if = { + limit = { + has_opinion_modifier = { + modifier = love_opinion + target = root + } + } + add = 25 + } + } + save_scope_as = love_person + } + } + else_if = { + limit = { + num_of_relation_lover >= 1 + } + ordered_relation = { + type = lover + order_by = "opinion(root)" + save_scope_as = love_person + } + } + # Rival(s) + if = { + limit = { + num_of_relation_rival >= 1 + } + random_relation = { + type = rival + save_scope_as = hate_person + } + } + } + + option = { # Heir (if they're your relative or designated heir) + name = mpo_decisions_events.0203.a + trigger = { + exists = scope:heir_person + } + dynasty = { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + } + if = { + limit = { + OR = { + scope:heir_person = { + has_relation_friend = root + } + has_trait = family_first + } + } + stress_impact = { + base = minor_stress_impact_loss + } + } + if = { + limit = { + scope:heir_person = { + opinion = { + target = root + value >= 40 + } + } + } + scope:heir_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + scope:heir_person = { + opinion = { + target = root + value >= 15 + } + } + } + scope:heir_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = family_first + } + opinion_modifier = { + opinion_target = scope:heir_person + multiplier = 0.5 + } + } + } + + option = { # Lover or Spouse + name = mpo_decisions_events.0203.b + trigger = { + exists = scope:love_person + } + + if = { + limit = { + scope:love_person = { + opinion = { + target = root + value >= 40 + } + } + } + scope:love_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + scope:love_person = { + opinion = { + target = root + value >= 15 + } + } + } + scope:love_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + if = { + limit = { + scope:love_person = { + OR = { + has_opinion_modifier = { + modifier = love_opinion + target = root + } + has_relation_lover = root + } + } + } + stress_impact = { + base = minor_stress_impact_loss + lustful = minor_stress_impact_loss + } + } + scope:love_person = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 15 + } + } + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lustful + } + opinion_modifier = { + opinion_target = scope:love_person + multiplier = 0.5 + } + } + } + + option = { # Rival(s) / Enemies + name = { + text = { + triggered_desc = { + trigger = { + exists = scope:hate_person + } + desc = mpo_decisions_events.0203.c_rival + } + desc = mpo_decisions_events.0203.c + } + } + trait_weighting_effect = { + WEIGHTED_TRAIT = aggressive_attacker + WEIGHT = 20 + } + stress_impact = { + vengeful = minor_stress_impact_loss + } + if = { + limit = { + exists = scope:hate_person + scope:hate_person = { + opinion = { + target = root + value <= -40 + } + } + } + scope:hate_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + exists = scope:hate_person + scope:hate_person ?= { + opinion = { + target = root + value <= -15 + } + } + } + scope:hate_person = { save_scope_as = target_person } # For loc + custom_tooltip = mpo_decisions_events.0203.sentiment + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + else_if = { + limit = { + dread > 40 + } + custom_tooltip = mpo_decisions_events.0203.dread + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + dread > 15 + } + custom_tooltip = mpo_decisions_events.0203.dread + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + add_dread = miniscule_dread_gain + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = vengeful + } + modifier = { + factor = 1.2 + has_trait = wrathful + } + modifier = { + factor = 0 + NOT = { can_weigh_trait_trigger = { TRAIT = aggressive_attacker } } + } + } + } + + option = { # Title + name = { + text = { + triggered_desc = { + trigger = { + is_landed = no + } + desc = mpo_decisions_events.0203.d_landless + } + desc = mpo_decisions_events.0203.d + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + } + if = { + limit = { + prestige_level >= 4 + } + custom_tooltip = mpo_decisions_events.0203.prestige + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + prestige_level >= 2 + } + custom_tooltip = mpo_decisions_events.0203.prestige + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + add_prestige = miniscule_prestige_gain + ai_chance = { + base = 110 + modifier = { + factor = 1.25 + has_trait = ambitious + } + } + } + + option = { # Faith + name = mpo_decisions_events.0203.e + trigger = { + NOT = { has_trait = cynical } + } + stress_impact = { + zealous = minor_stress_impact_loss + } + trait_weighting_effect = { + WEIGHTED_TRAIT = holy_warrior + WEIGHT = 15 + } + if = { + limit = { + piety_level >= 4 + } + custom_tooltip = mpo_decisions_events.0203.piety + localize_study_commander_success_chance_change = { + VALUE = 25 + } + } + else_if = { + limit = { + piety_level >= 2 + } + custom_tooltip = mpo_decisions_events.0203.piety + localize_study_commander_success_chance_change = { + VALUE = 10 + } + } + add_piety = miniscule_piety_gain + ai_chance = { + base = 110 + modifier = { + factor = 1.25 + has_trait = zealous + } + modifier = { + factor = 0 + NOT = { can_weigh_trait_trigger = { TRAIT = holy_warrior } } + } + } + } + + after = { + trigger_event = { + id = mpo_decisions_events.0204 + days = { 3 7 } + } + } +} + +mpo_decisions_events.0204 = { # Get Trait - Or not! + type = character_event + title = mpo_decisions_events.0204.t + desc = { + desc = mpo_decisions_events.0204.desc + triggered_desc = { + trigger = { + scope:training_method = flag:mentor + } + desc = mpo_decisions_events.0204.desc_mentor + } + } + theme = nomads + + left_portrait = { + character = root + animation = marshal + } + + right_portrait = { + trigger = { + scope:training_method = flag:mentor + } + character = scope:commander_trait_mentor + animation = admiration + } + + option = { # Ok + name = mpo_decisions_events.0204.a + if = { + limit = { + scope:training_method = flag:mentor + } + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:commander_trait_mentor + opinion = 30 + } + } + random_list = { + 1 = { + modifier = { + always = yes + add = study_commander_trait_success_chance_value + } + custom_tooltip = mpo_decisions_events.0204.a_success + if = { + limit = { + number_of_commander_traits <= 1 # Because otherwise they hit limit and can't actually retry + } + custom_tooltip = mpo_decisions_events.0204.a_success_desc + } + hidden_effect = { + random_list = { # A little less likely to get the terrain ones cuz they're more situational + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = logistician } } + modifier = { has_variable = logistician_weight add = var:logistician_weight } + add_trait = logistician + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = military_engineer } } + modifier = { has_variable = military_engineer_weight add = var:military_engineer_weight } + add_trait = military_engineer + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = aggressive_attacker } } + modifier = { has_variable = aggressive_attacker_weight add = var:aggressive_attacker_weight } + add_trait = aggressive_attacker + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = unyielding_defender } } + modifier = { has_variable = unyielding_defender_weight add = var:unyielding_defender_weight } + add_trait = unyielding_defender + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = forder } } + modifier = { has_variable = forder_weight add = var:forder_weight } + add_trait = forder + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = flexible_leader } } + modifier = { has_variable = flexible_leader_weight add = var:flexible_leader_weight } + add_trait = flexible_leader + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = desert_warrior } } + modifier = { has_variable = desert_warrior_weight add = var:desert_warrior_weight } + add_trait = desert_warrior + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = jungle_stalker } } + modifier = { has_variable = jungle_stalker_weight add = var:jungle_stalker_weight } + add_trait = jungle_stalker + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = reaver } } + modifier = { has_variable = reaver_weight add = var:reaver_weight } + add_trait = reaver + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = reckless } } + modifier = { has_variable = reckless_weight add = var:reckless_weight } + add_trait = reckless + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = holy_warrior } } + modifier = { has_variable = holy_warrior_weight add = var:holy_warrior_weight } + modifier = { has_trait = zealous add = 5 } + modifier = { has_trait = cynical add = -5 } + add_trait = holy_warrior + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = open_terrain_expert } } + modifier = { has_variable = open_terrain_expert_weight add = var:open_terrain_expert_weight } + add_trait = open_terrain_expert + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = rough_terrain_expert } } + modifier = { has_variable = rough_terrain_expert_weight add = var:rough_terrain_expert_weight } + add_trait = rough_terrain_expert + } + 5 = { + trigger = { can_weigh_trait_trigger = { TRAIT = forest_fighter } } + modifier = { has_variable = forest_fighter_weight add = var:forest_fighter_weight } + add_trait = forest_fighter + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = cautious_leader } } + modifier = { has_variable = cautious_leader_weight add = var:cautious_leader_weight } + add_trait = cautious_leader + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = organizer } } + modifier = { has_variable = organizer_weight add = var:organizer_weight } + add_trait = organizer + } + 10 = { + trigger = { can_weigh_trait_trigger = { TRAIT = winter_soldier } } + modifier = { has_variable = winter_soldier_weight add = var:winter_soldier_weight } + add_trait = winter_soldier + } + } + } + add_character_flag = { + flag = study_commander_trait_cooldown + years = 10 + } + } + 100 = { + modifier = { + always = yes + add = study_commander_trait_success_chance_value_neg + } + custom_tooltip = mpo_decisions_events.0204.a_fail + send_interface_toast = { + title = mpo_decisions_events.0204.a_fail + type = event_toast_effect_bad + left_icon = root + custom_tooltip = mpo_decisions_events.0204.a_fail_desc + } + add_character_flag = { + flag = study_commander_trait_cooldown + years = 5 + } + } + } + } + + after = { + if = { + limit = { + NOT = { has_variable = study_commander_trait_tally } + } + set_variable = { + name = study_commander_trait_tally + value = 0 + } + } + change_variable = { + name = study_commander_trait_tally + add = 1 + } + if = { + limit = { + number_of_commander_traits = commander_trait_limit + } + remove_variable = study_commander_trait_tally + } + # Remove vars + remove_variable = winter_soldier_weight + remove_variable = organizer_weight + remove_variable = cautious_leader_weight + remove_variable = forest_fighter_weight + remove_variable = rough_terrain_expert_weight + remove_variable = open_terrain_expert_weight + remove_variable = holy_warrior_weight + remove_variable = reckless_weight + remove_variable = reaver_weight + remove_variable = jungle_stalker_weight + remove_variable = desert_warrior_weight + remove_variable = flexible_leader_weight + remove_variable = forder_weight + remove_variable = unyielding_defender_weight + remove_variable = aggressive_attacker_weight + remove_variable = military_engineer_weight + remove_variable = logistician_weight + remove_variable = study_commander_trait_success_chance_var + remove_character_flag = is_learning_commander_trait + } +} + +#Fertility Dance event +mpo_decisions_events.0300 = { + type = character_event + title = mpo_decisions_events.0300.t + desc = mpo_decisions_events.0300.desc + theme = nomads + override_background = { reference = temple } + + left_portrait = { + character = root + animation = prayer + } + + right_portrait = { + character = scope:shaman + animation = personality_zealous + } + + immediate = { + court_position:court_astrologer_court_position = { save_scope_as = shaman } + } + + # Regular option + option = { + name = mpo_decisions_events.0300.a + if = { + limit = { + scope:fertility_county = { county_fertility >= 90 } + } + scope:fertility_county = { + change_county_fertility = fertility_dance_bonus_value + } + } + else = { + scope:fertility_county = { + add_county_modifier = { + modifier = mpo_fertility_dance_county_modifier + years = 5 + } + } + } + if = { + limit = { + domicile ?= { + has_domicile_parameter = nomad_yurt_improved_fertility_dance + } + } + scope:fertility_county = { + every_neighboring_county = { + limit = { + OR = { + holder = root + holder = { + government_has_flag = government_is_herder + } + } + } + add_county_modifier = { + modifier = mpo_fertility_dance_county_modifier + years = 2 + } + } + } + } + + ai_chance = { + base = 50 + } + } +} + +# Pax Mongolica event +mpo_decisions_events.0400 = { + type = character_event + title = mpo_decisions_events.0400.t + desc = mpo_decisions_events.0400.desc + theme = nomads + override_background = { reference = mpo_city_steppe } + + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left + } + + right_portrait = { + character = scope:courtier + animation = obsequious_bow + } + + immediate = { + if = { + limit = { + any_courtier = { + is_available_ai_adult = yes + } + } + ordered_courtier = { + limit = { + is_available_ai_adult = yes + } + order_by = stewardship + save_scope_as = courtier + } + } + else = { + create_character = { + location = root.capital_province + template = merchant_template + culture = root.location.culture + faith = root.location.faith + save_scope_as = merchant + } + } + } + + # Happy day + option = { + name = mpo_decisions_events.0400.a + add_character_modifier = { + modifier = pax_mongolica_ruler_modifier # Forever + } + custom_tooltip = pax_mongolica_every_county_in_steppe_tt + every_realm_county = { + limit = { + is_landless_type_title = no + any_county_situation = { this = situation:the_great_steppe } + holder.dynasty = root.dynasty + } + random_county_province = { + limit = { has_holding = no } + set_holding_type = city_holding + } + } + culture = { + if = { + limit = { + NOT = { has_innovation = innovation_city_planning } + } + add_innovation = innovation_city_planning + } + else_if = { + limit = { + NOT = { has_innovation = innovation_development_01 } + } + add_innovation = innovation_development_01 + } + else = { + add_random_innovation = culture_group_civic + } + } + + ai_chance = { + base = 50 + } + } +} + +# Desperate Stance event +mpo_decisions_events.0500 = { + type = character_event + title = mpo_decisions_events.0500.t + desc = mpo_decisions_events.0500.desc + theme = nomads + override_background = { reference = mpo_campfire_steppe } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:courtier + animation = beg + } + + immediate = { + if = { + limit = { + any_spouse = { count >= 1 } + } + random_spouse = { + save_scope_as = courtier + } + } + else_if = { + limit = { + any_child = { count >= 1 } + } + random_child = { + save_scope_as = courtier + } + } + else_if = { + limit = { + any_courtier_or_guest = { count >= 1 } + } + random_courtier_or_guest = { + limit = { is_available_ai_adult = yes } + save_scope_as = courtier + } + } + else = { + create_character = { + location = root.location + dynasty = none + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + template = peasant_character + save_scope_as = courtier + } + } + hidden_effect = { + scope:courtier = { + change_current_weight = -50 + } + } + } + + # Let's get out of here + option = { + name = mpo_decisions_events.0500.a + mpo_decisions_events_0500_effect = yes + ai_chance = { + base = 100 + } + } +} + +# Invite Stargazer +scripted_trigger mpo_decisions_events_0070_basic_requirements_trigger = { + is_adult = yes + is_imprisoned = no + is_alive = yes # Because apparently there can be dead characters in the pool (remove when fixed) + is_claimant = no # We don't want recruiting physicians to be a cheap way of getting claimants + learning >= low_skill_rating +} + +scripted_trigger mpo_decisions_events_0070_low_skill_trigger = { + mpo_decisions_events_0070_basic_requirements_trigger = yes + #Empire/kingdom + trigger_if = { + limit = { + root = { highest_held_title_tier >= tier_kingdom } + } + learning <= high_skill_rating + learning >= mediocre_skill_rating # 8 + } + #Duchy/county + trigger_else = { + learning <= decent_skill_rating + learning >= low_skill_rating # 5 + } +} + +scripted_trigger mpo_decisions_events_0070_high_skill_trigger = { + mpo_decisions_events_0070_basic_requirements_trigger = yes + #Empire/kingdom + trigger_if = { + limit = { + root = { highest_held_title_tier >= tier_kingdom } + } + learning <= extremely_high_skill_rating + learning >= decent_skill_rating # 12 + } + #Duchy/county + trigger_else = { + learning <= high_skill_rating + learning >= medium_skill_rating # 10 + } +} +mpo_decisions_events.0070 = { + type = character_event + title = mpo_decisions_events.0070.t + desc = mpo_decisions_events.0070.desc + theme = nomads + left_portrait = { + character = scope:great_court_astrologer_option + animation = holding_staff + camera = camera_event_left_forward + } + right_portrait = { + character = scope:good_court_astrologer_option + animation = personality_zealous + camera = camera_event_right_forward + } + override_background = { + reference = mpo_temple_steppe + } + trigger = { + exists = capital_province + } + immediate = { + # Good Character + if = { # check for a GOOD character in the pool + limit = { + any_pool_character = { + province = root.capital_province + mpo_decisions_events_0070_low_skill_trigger = yes + can_be_employed_as = court_astrologer_court_position + } + } + random_pool_character = { + province = root.capital_province + limit = { + mpo_decisions_events_0070_low_skill_trigger = yes + can_be_employed_as = court_astrologer_court_position + } + save_scope_as = good_court_astrologer_option + } + } + else = { # otherwise create one + create_character = { + location = root.capital_province + gender_female_chance = root_faith_clergy_gender_female_chance + template_character = root + random_traits = yes + random_traits_list = { + count = 1 + education_learning_1 = {} + education_learning_2 = {} + } + age = { 18 50 } + learning = { + min_template_medium_skill + max_template_decent_skill + } + save_scope_as = good_court_astrologer_option + } + hidden_effect = { + scope:good_court_astrologer_option = { + save_scope_as = goodly_created + } + } + } + # Great Character + if = { # check for a GREAT character in the pool + limit = { + any_pool_character = { + province = root.capital_province + mpo_decisions_events_0070_high_skill_trigger = yes + NOT = { this = scope:good_court_astrologer_option } + can_be_employed_as = court_astrologer_court_position + } + } + ordered_pool_character = { + order_by = { + # Ok, first we group by aptitude. + value = "aptitude(court_astrologer_court_position)" + # Then we want to use learning as a tiebreaker... + ## ... so make it a decimal of aptitude... + multiply = 100 + ## ... and _then_ add it. + add = learning + } + province = root.capital_province + limit = { + mpo_decisions_events_0070_high_skill_trigger = yes + NOT = { this = scope:good_court_astrologer_option } + can_be_employed_as = court_astrologer_court_position + } + save_scope_as = great_court_astrologer_option + } + } + else = { # otherwise create one + create_character = { + location = root.capital_province + gender_female_chance = root_faith_clergy_gender_female_chance + template_character = root + random_traits = yes + random_traits_list = { + count = 1 + education_learning_2 = {} + education_learning_3 = {} + education_learning_4 = {} + } + age = { 18 50 } + learning = { + min_template_high_skill + max_template_high_skill + } + save_scope_as = great_court_astrologer_option + } + hidden_effect = { + scope:great_court_astrologer_option = { + save_scope_as = greatly_created + random_list = { + 100 = {} + 20 = { + add_trait = lifestyle_herbalist + } + 10 = { + add_trait = lifestyle_mystic + } + 10 = { + add_trait = lifestyle_mystic + add_trait_xp = { + trait = lifestyle_mystic + value = 25 + } + } + 5 = { + add_trait = lifestyle_mystic + add_trait_xp = { + trait = lifestyle_mystic + value = 50 + } + } + 5 = { + add_trait = lifestyle_mystic + add_trait_xp = { + trait = lifestyle_mystic + value = 75 + } + } + } + } + } + } + } + #Great option + option = { + name = mpo_decisions_events.0070.a + custom_tooltip = mpo_decisions_events.0070.a.aptitude + pay_short_term_gold = { + target = scope:great_court_astrologer_option + gold = high_skill_court_astrologer_cost + } + add_courtier = scope:great_court_astrologer_option + if = { + limit = { + can_employ_court_position_type = court_astrologer_court_position + } + appoint_court_position = { + recipient = scope:great_court_astrologer_option + court_position = court_astrologer_court_position + } + } + else_if = { + limit = { + employs_court_position = court_astrologer_court_position + } + random_court_position_holder = { + type = court_astrologer_court_position + save_scope_as = current_court_astrologer + } + replace_court_position = { + recipient = scope:great_court_astrologer_option + holder = scope:current_court_astrologer + court_position = court_astrologer_court_position + } + } + ai_chance = { + base = 100 + modifier = { + gold < high_skill_court_astrologer_cost + } + } + } + #Good option + option = { + name = mpo_decisions_events.0070.b + custom_tooltip = mpo_decisions_events.0070.b.aptitude + pay_short_term_gold = { + target = scope:good_court_astrologer_option + gold = low_skill_court_astrologer_cost + } + add_courtier = scope:good_court_astrologer_option + if = { + limit = { + can_employ_court_position_type = court_astrologer_court_position + } + appoint_court_position = { + recipient = scope:good_court_astrologer_option + court_position = court_astrologer_court_position + } + } + else_if = { + limit = { + employs_court_position = court_astrologer_court_position + } + random_court_position_holder = { + type = court_astrologer_court_position + save_scope_as = current_court_astrologer + } + replace_court_position = { + recipient = scope:good_court_astrologer_option + holder = scope:current_court_astrologer + court_position = court_astrologer_court_position + } + } + } + #Nah + option = { + name = mpo_decisions_events.0070.c + } + after = { + if = { + limit = { + exists = scope:goodly_created + NOT = { + scope:goodly_created = { + is_courtier_of = root + } + } + } + scope:goodly_created = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + exists = scope:greatly_created + NOT = { + scope:greatly_created = { + is_courtier_of = root + } + } + } + scope:greatly_created = { + silent_disappearance_effect = yes + } + } + } +} + +mpo_decisions_events.0120 = { + type = character_event + title = mpo_decisions_events.0120.t + desc = { + desc = mpo_decisions_events.0120.desc.intro + first_valid = { + triggered_desc = { + trigger = { + var:previous_holder = flag:subject + } + desc = mpo_decisions_events.0120.desc.subject + } + } + } + + theme = nomads + left_portrait = { + character = root + animation = jockey_idle + camera = camera_event_horse_left + } + right_portrait = { + character = scope:herder + animation = obsequious_bow + } + lower_right_portrait = { + trigger = { exists = scope:nomad } + character = scope:nomad + } + + immediate = { + set_variable = adventurer_to_nomad_tributary_var + location.county.holder = { save_scope_as = herder } + if = { + limit = { + scope:herder = { + is_independent_ruler = yes + is_tributary = no + } + } + set_variable = { + name = previous_holder + value = flag:independent + } + } + else = { + set_variable = { + name = previous_holder + value = flag:subject + } + if = { + limit = { exists = scope:herder.suzerain } + scope:herder.suzerain = { save_scope_as = nomad } + } + else = { + scope:herder.liege = { save_scope_as = nomad } + } + } + } + + option = { # Become Tributary + name = mpo_decisions_events.0120.a + trigger = { + var:previous_holder = flag:subject + NOT = { is_tributary_of = scope:nomad } # If you are already a Tributary of overlord + } + start_tributary_interaction_effect = { + TRIBUTARY = this + SUZERAIN = scope:nomad + } + + stress_impact = { + ambitious = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 0 + } + ai_value_modifier = { + ai_boldness = -0.5 + } + } + } + + option = { # Refuse to become Tributary + name = mpo_decisions_events.0120.b + trigger = { + var:previous_holder = flag:subject + NOT = { is_tributary_of = scope:nomad } # If you are already a Tributary of overlord + } + add_prestige_level = -1 + scope:nomad = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -50 + } + } + + stress_impact = { + craven = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } + + option = { # Wait, join our court + name = mpo_decisions_events.0120.c + trigger = { + var:previous_holder = flag:independent + } + add_courtier = scope:herder + + stress_impact = { + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + factor = 0 + } + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + option = { # We'll take it from here + name = mpo_decisions_events.0120.d + trigger = { + var:previous_holder = flag:independent + } + + stress_impact = { + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 0 + } + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + after = { + adopt_nomadic_ways_decision_event_effect = yes + remove_variable = previous_holder + remove_variable = previous_provisions + remove_variable = adventurer_to_nomad_tributary_var + } +} + +# Invite Siege Engineer +scripted_trigger invite_siege_engineer_requirements = { + can_be_employed_as = siege_engineer_court_position + is_adult = yes + is_imprisoned = no + is_alive = yes # Because apparently there can be dead characters in the pool (remove when fixed) + is_claimant = no # We don't want recruiting physicians to be a cheap way of getting claimants + "aptitude(siege_engineer_court_position)" = $APTITUDE$ +} + +scripted_effect invite_siege_engineer_find_example = { + if = { # check for a GOOD character in the pool + limit = { + any_pool_character = { + province = root.capital_province + invite_siege_engineer_requirements = { APTITUDE = $APTITUDE$ } + } + } + random_pool_character = { + province = root.capital_province + limit = { + invite_siege_engineer_requirements = { APTITUDE = $APTITUDE$ } + } + save_scope_as = $LEVEL$_siege_engineer_option + } + } + else = { # otherwise create one + random_independent_ruler = { + weight = { + modifier = { + factor = 100 + culture = { + has_same_culture_heritage = root.culture + } + } + modifier = { + factor = 100 + faith.religion = root.faith.religion + } + modifier = { + factor = 1000 + character_is_land_realm_neighbor = root.top_liege + } + } + limit = { + is_landed = yes + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + save_scope_as = target_character + } + create_character = { + location = root.capital_province + gender_female_chance = root_soldier_female_chance + template_character = root + random_traits = yes + culture = scope:target_character.culture + faith = scope:target_character.faith + random_traits_list = { + count = 1 + education_learning_$EDUCATION_1$ = {} + education_learning_$EDUCATION_2$ = {} + } + age = { 18 50 } + learning = { + min_template_$MAIN_SKILL_MIN$_skill + max_template_$MAIN_SKILL_MAX$_skill + } + martial = { + min_template_$OTHER_SKILL_MIN$_skill + max_template_$OTHER_SKILL_MAX$_skill + } + stewardship = { + min_template_$OTHER_SKILL_MIN$_skill + max_template_$OTHER_SKILL_MAX$_skill + } + save_scope_as = $LEVEL$_siege_engineer_option + after_creation = { + save_scope_as = $LEVEL$ly_created + add_trait = military_engineer + add_trait_xp = { + trait = military_engineer + value = { + integer_range = { + min = $TRAIT_XP_MIN$ + max = $TRAIT_XP_MAX$ + } + } + } + } + } + } +} + +scripted_effect invite_siege_engineer_appointment = { + pay_short_term_gold = { + target = scope:$SCOPE$_siege_engineer_option + gold = $LEVEL$_skill_siege_engineer_cost + } + add_courtier = scope:$SCOPE$_siege_engineer_option + if = { + limit = { + NOT = { employs_court_position = siege_engineer_court_position } + } + appoint_court_position = { + recipient = scope:$SCOPE$_siege_engineer_option + court_position = siege_engineer_court_position + } + } + else_if = { + limit = { + employs_court_position = siege_engineer_court_position + } + random_court_position_holder = { + type = siege_engineer_court_position + save_scope_as = current_siege_engineer + } + replace_court_position = { + recipient = scope:$SCOPE$_siege_engineer_option + holder = scope:current_siege_engineer + court_position = siege_engineer_court_position + } + } + hidden_effect = { + scope:$SCOPE$_siege_engineer_option = { + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 25 + } + } + } +} + +mpo_decisions_events.0080 = { + type = character_event + title = mpo_decisions_events.0080.t + desc = mpo_decisions_events.0080.desc + theme = nomads + + left_portrait = { + character = scope:great_siege_engineer_option + animation = thinking + } + + right_portrait = { + character = scope:good_siege_engineer_option + animation = storyteller + } + + override_background = { + reference = mpo_camp_steppe + } + + immediate = { + # Good Character + invite_siege_engineer_find_example = { + APTITUDE = 4 + LEVEL = good + EDUCATION_1 = 1 + EDUCATION_2 = 2 + MAIN_SKILL_MIN = average + MAIN_SKILL_MAX = medium + OTHER_SKILL_MIN = low + OTHER_SKILL_MAX = low + TRAIT_XP_MIN = 5 + TRAIT_XP_MAX = 25 + } + # Great Character + invite_siege_engineer_find_example = { + APTITUDE = 5 + LEVEL = great + EDUCATION_1 = 3 + EDUCATION_2 = 4 + MAIN_SKILL_MIN = decent + MAIN_SKILL_MAX = decent + OTHER_SKILL_MIN = average + OTHER_SKILL_MAX = average + TRAIT_XP_MIN = 33 + TRAIT_XP_MAX = 66 + } + + if = { + limit = { + exists = scope:good_siege_engineer_option + exists = scope:great_siege_engineer_option + "scope:good_siege_engineer_option.aptitude(siege_engineer_court_position)" > "scope:great_siege_engineer_option.aptitude(siege_engineer_court_position)" + } + scope:great_siege_engineer_option = { save_scope_as = temp_scope } + scope:good_siege_engineer_option = { save_scope_as = great_siege_engineer_option } + scope:temp_scope = { save_scope_as = good_siege_engineer_option } + } + } + #Great option + option = { + name = mpo_decisions_events.0080.a + custom_tooltip = mpo_decisions_events.0080.a.aptitude + invite_siege_engineer_appointment = { + SCOPE = great + LEVEL = high + } + ai_chance = { + base = 100 + modifier = { + gold < high_skill_court_astrologer_cost + } + } + } + #Good option + option = { + name = mpo_decisions_events.0080.b + custom_tooltip = mpo_decisions_events.0080.b.aptitude + invite_siege_engineer_appointment = { + SCOPE = good + LEVEL = low + } + } + #Nah + option = { + name = mpo_decisions_events.0080.c + } + after = { + if = { + limit = { + exists = scope:goodly_created + NOT = { + scope:goodly_created = { + is_courtier_of = root + } + } + } + scope:goodly_created = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + exists = scope:greatly_created + NOT = { + scope:greatly_created = { + is_courtier_of = root + } + } + } + scope:greatly_created = { + silent_disappearance_effect = yes + } + } + } +} + +# Invite Foreign Emissary +scripted_trigger invite_foreign_emissary_requirements = { + can_be_employed_as = foreign_emissary_court_position + is_adult = yes + is_imprisoned = no + is_alive = yes # Because apparently there can be dead characters in the pool (remove when fixed) + is_claimant = no # We don't want recruiting physicians to be a cheap way of getting claimants + "aptitude(foreign_emissary_court_position)" = $APTITUDE$ +} + +scripted_effect invite_foreign_emissary_find_example = { + if = { # check for a GOOD character in the pool + limit = { + any_pool_character = { + province = root.capital_province + invite_foreign_emissary_requirements = { APTITUDE = $APTITUDE$ } + } + } + random_pool_character = { + province = root.capital_province + limit = { + invite_foreign_emissary_requirements = { APTITUDE = $APTITUDE$ } + } + save_scope_as = $LEVEL$_foreign_emissary_option + } + } + else = { # otherwise create one + random_independent_ruler = { + weight = { + modifier = { + factor = 1000 + government_has_flag = government_is_republic + } + } + limit = { + is_landed = yes + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + } + save_scope_as = target_character + } + create_character = { + location = root.capital_province + gender_female_chance = root_soldier_female_chance + template_character = root + random_traits = yes + culture = scope:target_character.culture + faith = scope:target_character.faith + random_traits_list = { + count = 1 + education_diplomacy_$EDUCATION_1$ = {} + education_diplomacy_$EDUCATION_2$ = {} + } + random_traits_list = { + count = 1 + diplomat = {} + lifestyle_reveler = {} + } + age = { 18 50 } + diplomacy = { + min_template_$MAIN_SKILL_MIN$_skill + max_template_$MAIN_SKILL_MAX$_skill + } + stewardship = { + min_template_$OTHER_SKILL_MIN$_skill + max_template_$OTHER_SKILL_MAX$_skill + } + save_scope_as = $LEVEL$_foreign_emissary_option + after_creation = { + save_scope_as = $LEVEL$ly_created + } + } + } +} + +scripted_effect invite_foreign_emissary_appointment = { + pay_short_term_gold = { + target = scope:$SCOPE$_foreign_emissary_option + gold = $LEVEL$_skill_foreign_emissary_cost + } + add_courtier = scope:$SCOPE$_foreign_emissary_option + if = { + limit = { + NOT = { employs_court_position = foreign_emissary_court_position } + } + appoint_court_position = { + recipient = scope:$SCOPE$_foreign_emissary_option + court_position = foreign_emissary_court_position + } + } + else_if = { + limit = { + employs_court_position = foreign_emissary_court_position + } + random_court_position_holder = { + type = foreign_emissary_court_position + save_scope_as = current_foreign_emissary + } + replace_court_position = { + recipient = scope:$SCOPE$_foreign_emissary_option + holder = scope:current_foreign_emissary + court_position = foreign_emissary_court_position + } + } + hidden_effect = { + scope:$SCOPE$_foreign_emissary_option = { + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 25 + } + } + } +} + +mpo_decisions_events.0090 = { + type = character_event + title = mpo_decisions_events.0090.t + desc = mpo_decisions_events.0090.desc + theme = nomads + + left_portrait = { + character = scope:great_foreign_emissary_option + animation = debating + } + + right_portrait = { + character = scope:good_foreign_emissary_option + animation = thinking + } + + override_background = { + reference = mpo_tent_interior_mongol + } + + immediate = { + ordered_courtier_or_guest = { + order_by = diplomacy + limit = { + age >= 10 + } + save_scope_as = courtier + } + # Good Character + invite_foreign_emissary_find_example = { + APTITUDE = 4 + LEVEL = good + EDUCATION_1 = 1 + EDUCATION_2 = 2 + MAIN_SKILL_MIN = average + MAIN_SKILL_MAX = medium + OTHER_SKILL_MIN = low + OTHER_SKILL_MAX = low + } + # Great Character + invite_foreign_emissary_find_example = { + APTITUDE = 5 + LEVEL = great + EDUCATION_1 = 3 + EDUCATION_2 = 4 + MAIN_SKILL_MIN = high + MAIN_SKILL_MAX = high + OTHER_SKILL_MIN = medium + OTHER_SKILL_MAX = medium + } + + if = { + limit = { + exists = scope:good_foreign_emissary_option + exists = scope:great_foreign_emissary_option + "scope:good_foreign_emissary_option.aptitude(foreign_emissary_court_position)" > "scope:great_foreign_emissary_option.aptitude(foreign_emissary_court_position)" + } + scope:great_foreign_emissary_option = { save_scope_as = temp_scope } + scope:good_foreign_emissary_option = { save_scope_as = great_foreign_emissary_option } + scope:temp_scope = { save_scope_as = good_foreign_emissary_option } + } + } + #Great option + option = { + name = mpo_decisions_events.0090.a + custom_tooltip = mpo_decisions_events.0090.a.aptitude + invite_foreign_emissary_appointment = { + SCOPE = great + LEVEL = high + } + ai_chance = { + base = 100 + modifier = { + gold < high_skill_court_astrologer_cost + } + } + } + #Good option + option = { + name = mpo_decisions_events.0090.b + custom_tooltip = mpo_decisions_events.0090.b.aptitude + invite_foreign_emissary_appointment = { + SCOPE = good + LEVEL = low + } + } + #Nah + option = { + name = mpo_decisions_events.0090.c + } + after = { + if = { + limit = { + exists = scope:goodly_created + NOT = { + scope:goodly_created = { + is_courtier_of = root + } + } + } + scope:goodly_created = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + exists = scope:greatly_created + NOT = { + scope:greatly_created = { + is_courtier_of = root + } + } + } + scope:greatly_created = { + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/mpo/mpo_events_ariana.txt b/events/dlc/mpo/mpo_events_ariana.txt new file mode 100644 index 00000000..c2391005 --- /dev/null +++ b/events/dlc/mpo/mpo_events_ariana.txt @@ -0,0 +1,4825 @@ +namespace = mpo_events_ariana +################################################## +# Ariana's Events for MPO + +# Nest Sighting - You spot a nest, and decide if you would like to capture the eaglets in it +mpo_events_ariana.0001 = { + type = character_event + title = mpo_events_ariana.0001.t + desc = { + desc = mpo_events_ariana.0001.desc + first_valid = { + triggered_desc = { # Had an eagle before, and doesn't have one now + trigger = { + has_variable = had_eagle_story + NOT = { has_eagle_trigger = yes } + } + desc = mpo_events_ariana.0001.desc_had_story + } + triggered_desc = { # Has one now + trigger = { + has_eagle_trigger = yes + } + desc = mpo_events_ariana.0001.desc_has_eagle + } + desc = mpo_events_ariana.0001.desc_ending + } + } + + theme = nomads + + cooldown = { years = 10 } + + weight_multiplier = { + base = 1 + modifier = { + add = 10 + current_season_trigger = { SEASON = spring } + } + } + + left_portrait = { + character = root + animation = admiration + } + + trigger = { + has_mpo_dlc_trigger = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + is_available_adult = yes + NOT = { current_season_trigger = { SEASON = winter } } + } + + immediate = { + if = { + limit = { + is_ai = no # So AI don't spam add modifiers + } + if = { + limit = { # Your observant eagle helps you here + location.county = { NOT = { has_county_modifier = hunt_sighting_legendary_modifier } } + has_eagle_trigger = yes + var:eagle_personality_trait_2 ?= flag:observant + } + hunt_activity_deer_game_effect = { PROVINCE = root.location } + location.county = { + hunt_create_sighting_effect = { + TYPE = legendary + ANIMAL = root.var:animal_type + OWNER = root + } + } + } + else_if = { + limit = { + location.county = { NOT = { has_county_modifier = hunt_sighting_falconry_modifier } } + } + location.county = { + random_county_province = { + save_scope_as = falconry_province + } + hunt_activity_falconry_game_effect = { PROVINCE = scope:falconry_province } + hunt_create_sighting_effect = { + TYPE = falconry + ANIMAL = var:animal_type + OWNER = root + } + } + } + } + } + + + option = { # Standard capture method + name = mpo_events_ariana.0001.a + duel = { + skill = prowess + value = decent_skill_rating + desc = mpo_events_ariana.0001.a_tt + 70 = { + desc = mpo_events_ariana.0001.a_win + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -69 + } + modifier = { + factor = 1.2 + has_trait = lifestyle_hunter + } + save_scope_value_as = { + name = eagle_capture_method + value = flag:standard + } + hidden_effect = { + random = { + chance = 30 # Get both eaglets + add_character_flag = { + flag = mpo_events_ariana.0001.both_eaglets + days = 10 + } + } + } + show_as_tooltip = { + add_prestige = medium_prestige_gain + add_trait_xp = { + trait = trait:lifestyle_hunter + track = falconer + value = 10 + } + } + custom_tooltip = mpo_events_ariana.0001.a_win_desc + trigger_event = { + id = mpo_events_ariana.0002 + } + } + 30 = { + desc = travel_events_mpo.0001_lose + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + send_interface_toast = { + type = event_toast_effect_bad + title = travel_events_mpo.0001_lose + left_icon = root + add_prestige = minor_prestige_loss + random_list = { + 50 = { + show_chance = no + desc = mpo_events_ariana.0001.a_lose_ok + } + 50 = { + show_chance = no + desc = mpo_events_ariana.0001.a_lose_bad + change_trait_rank = { + trait = wounded + rank = 1 + max = 3 + } + } + } + + } + } + } + + ai_chance = { + base = 15 + ai_value_modifier = { + ai_energy = 0.7 + } + modifier = { + has_trait = lifestyle_hunter + add = 5 + } + modifier = { + has_trait = brave + add = 5 + } + modifier = { + has_trait = compassionate + add = 5 + } + } + } + + option = { # Lure the eaglets + name = mpo_events_ariana.0001.b + trigger = { + learning >= 10 + } + show_as_unavailable = { + always = yes + } + save_scope_value_as = { + name = eagle_capture_method + value = flag:lure + } + hidden_effect = { + random_list = { + 50 = { } + 30 = { # Get both eaglets + modifier = { add = learning } + add_character_flag = { + flag = mpo_events_ariana.0001.both_eaglets + days = 10 + } + } + } + } + show_as_tooltip = { + add_prestige = medium_prestige_gain + add_trait_xp = { + trait = lifestyle_hunter + track = falconer + value = 10 + } + } + custom_tooltip = mpo_events_ariana.0001.b_win_desc + + trigger_event = { + id = mpo_events_ariana.0002 + } + + ai_chance = { + base = 15 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + has_trait = shrewd + factor = 1.3 + } + modifier = { + has_trait = lifestyle_hunter + add = 5 + } + modifier = { + has_trait = craven + add = 5 + } + } + } + + option = { # Observe them + name = mpo_events_ariana.0001.c + stress_impact = { + base = minor_stress_impact_loss + } + add_character_modifier = { + modifier = mpo_daydreaming_birds_modifier + years = 5 + } + + ai_chance = { + base = 10 + modifier = { + has_trait = compassionate + add = 5 + } + modifier = { + has_trait = calm + add = 5 + } + modifier = { + has_trait = content + add = 10 + } + } + } +} + +scripted_effect mpo_events_ariana_002_gift_effect = { + save_scope_as = target + root = { + send_interface_toast = { + type = event_toast_effect_good + title = court_ongoing.1030.d.success + left_icon = root + right_icon = scope:target + scope:target = { + save_scope_value_as = { + name = eagle_capture_method + value = flag:gift + } + start_eagle_story_cycle_effect = yes + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 10 + } + } + } + } +} + +# Nest Sighting follow up - You've captured the eaglets, now what? +mpo_events_ariana.0002 = { + type = character_event + title = mpo_events_ariana.0001.t + desc = { + desc = mpo_events_ariana.0002.desc_intro + first_valid = { # Describing the capture + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:standard + } + desc = mpo_events_ariana.0002.desc_standard + } + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:lure + } + desc = mpo_events_ariana.0002.desc_lure + } + } + first_valid = { # If the result is one or both + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:standard + has_character_flag = mpo_events_ariana.0001.both_eaglets + } + desc = mpo_events_ariana.0002.desc_both_standard + } + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:standard + } + desc = mpo_events_ariana.0002.desc_one_standard + } + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:lure + has_character_flag = mpo_events_ariana.0001.both_eaglets + } + desc = mpo_events_ariana.0002.desc_both_lure + } + triggered_desc = { + trigger = { + scope:eagle_capture_method = flag:lure + } + desc = mpo_events_ariana.0002.desc_one_lure + } + } + } + + theme = nomads + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + trigger = { + exists = scope:eagle_first_recipient + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + character = scope:eagle_first_recipient + animation = admiration + } + + lower_center_portrait = { + trigger = { + exists = scope:eagle_second_recipient + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + character = scope:eagle_second_recipient + } + + trigger = { + has_mpo_dlc_trigger = yes + exists = scope:eagle_capture_method + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + } + + immediate = { + add_prestige = medium_prestige_gain + if = { + limit = { + NOT = { + has_trait = lifestyle_hunter + } + } + add_trait = lifestyle_hunter + } + add_trait_xp = { + trait = lifestyle_hunter + track = falconer + value = 10 + } + + # Looking for possible recipients + # A romantic relation + if = { # Find your main spouse first if you have one + limit = { + exists = primary_spouse + primary_spouse = { + NOT = { has_eagle_trigger = yes } + } + } + primary_spouse = { save_scope_as = eagle_first_recipient } + } + else_if = { # Maybe a concubine instead + limit = { + any_consort = { + NOT = { has_eagle_trigger = yes } + } + } + random_consort = { + limit = { + NOT = { has_eagle_trigger = yes } + } + save_scope_as = eagle_first_recipient + } + } + else_if = { # Maybe a lover + limit = { + any_relation = { + type = lover + NOT = { has_eagle_trigger = yes } + } + } + random_relation = { + type = lover + limit = { + NOT = { has_eagle_trigger = yes } + } + save_scope_as = eagle_first_recipient + } + } + # Do I have a child or ward old enough to care for an eagle? + if = { + limit = { + any_child = { + age >= 13 + is_courtier_of = root + NOT = { has_eagle_trigger = yes } + } + } + random_child = { + limit = { + age >= 13 + is_courtier_of = root + NOT = { has_eagle_trigger = yes } + } + if = { + limit = { + exists = scope:eagle_first_recipient + } + save_scope_as = eagle_second_recipient + } + else = { + save_scope_as = eagle_first_recipient + } + } + } + else_if = { + limit = { + any_relation = { + type = ward + age >= 13 + NOT = { has_eagle_trigger = yes } + } + } + random_relation = { + type = ward + limit = { + age >= 13 + NOT = { has_eagle_trigger = yes } + } + if = { + limit = { + exists = scope:eagle_first_recipient + } + save_scope_as = eagle_second_recipient + } + else = { + save_scope_as = eagle_first_recipient + } + } + } + if = { + limit = { + NOT = { exists = scope:eagle_second_recipient } # If we already have a second recipient by now, we don't need to find another + } + if = { # Maybe a friend + limit = { + any_relation = { + type = friend + age >= 13 + NOT = { has_eagle_trigger = yes } + } + } + random_relation = { + type = friend + limit = { + age >= 13 + NOT = { has_eagle_trigger = yes } + } + if = { + limit = { + exists = scope:eagle_first_recipient + } + save_scope_as = eagle_second_recipient + } + else = { + save_scope_as = eagle_first_recipient + } + } + } + # Or a hunt guy? + if = { + limit = { + exists = court_position:master_of_hunt_court_position + } + court_position:master_of_hunt_court_position = { + if = { + limit = { + exists = scope:eagle_first_recipient + } + save_scope_as = eagle_second_recipient + } + else = { + save_scope_as = eagle_first_recipient + } + } + } + else_if = { + limit = { + exists = court_position:huntperson_camp_officer + } + court_position:huntperson_camp_officer = { + if = { + limit = { + exists = scope:eagle_first_recipient + } + save_scope_as = eagle_second_recipient + } + else = { + save_scope_as = eagle_first_recipient + } + } + } + } + } + + + option = { # Keep the one for yourself + name = mpo_events_ariana.0002.a + trigger = { + NOT = { has_character_flag = mpo_events_ariana.0001.both_eaglets } + NOT = { has_eagle_trigger = yes } # You don't have an eagle + } + start_eagle_story_cycle_effect = yes + + ai_chance = { + base = 200 + } + } + + option = { # Give the one to your first recipient + name = mpo_events_ariana.0002.b + trigger = { + exists = scope:eagle_first_recipient + NOT = { has_character_flag = mpo_events_ariana.0001.both_eaglets } + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + + scope:eagle_first_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + modifier = { # They already like you + add = 50 + scope:eagle_first_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_first_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_first_recipient + } + } + } + } + + option = { # Keep one for yourself, and give the other to your first recipient + name = mpo_events_ariana.0002.b_two + trigger = { + exists = scope:eagle_first_recipient + has_character_flag = mpo_events_ariana.0001.both_eaglets + NOT = { has_eagle_trigger = yes } # You don't have an eagle + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + start_eagle_story_cycle_effect = yes + scope:eagle_first_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + modifier = { # They already like you + add = 50 + scope:eagle_first_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_first_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_first_recipient + } + } + } + } + + option = { # Give the one to your second recipient + name = mpo_events_ariana.0002.c + trigger = { + exists = scope:eagle_second_recipient + NOT = { has_character_flag = mpo_events_ariana.0001.both_eaglets } + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + scope:eagle_second_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + modifier = { # They already like you + add = 50 + scope:eagle_second_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_second_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_second_recipient + } + } + } + } + + option = { # Keep one for yourself, and give the other to your second recipient + name = mpo_events_ariana.0002.c_two + trigger = { + exists = scope:eagle_second_recipient + has_character_flag = mpo_events_ariana.0001.both_eaglets + NOT = { has_eagle_trigger = yes } # You don't have an eagle + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + start_eagle_story_cycle_effect = yes + scope:eagle_second_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + modifier = { # They already like you + add = 50 + scope:eagle_second_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_second_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_second_recipient + } + } + } + } + + option = { # Give to each recipient + name = mpo_events_ariana.0002.d + trigger = { + exists = scope:eagle_first_recipient + exists = scope:eagle_second_recipient + has_character_flag = mpo_events_ariana.0001.both_eaglets + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + scope:eagle_first_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + scope:eagle_second_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 2 + ai_honor = 1 + } + modifier = { + add = 50 + scope:eagle_first_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + scope:eagle_second_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_first_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_first_recipient + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_second_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_second_recipient + } + } + } + } + + option = { # Keep one, sell one + name = mpo_events_ariana.0002.e + trigger = { + has_character_flag = mpo_events_ariana.0001.both_eaglets + NOT = { has_eagle_trigger = yes } # You don't have an eagle + } + send_interface_toast = { + title = mpo_events_ariana.0002.e_tt + type = event_toast_effect_good + left_icon = root + start_eagle_story_cycle_effect = yes + add_short_term_gold = medium_gold_value + if = { + limit = { + exists = scope:eagle_first_recipient + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_first_recipient + modifier = disappointed_opinion + opinion = -10 + } + } + if = { + limit = { + exists = scope:eagle_second_recipient + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_second_recipient + modifier = disappointed_opinion + opinion = -10 + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + add = 50 + scope:eagle_first_recipient ?= { + opinion = { + target = root + value <= low_positive_opinion + } + } + } + modifier = { + add = 50 + scope:eagle_second_recipient ?= { + opinion = { + target = root + value <= low_positive_opinion + } + } + } + } + } + + option = { # Give one to first recipient, sell one (only if you have one already) + name = mpo_events_ariana.0002.e_sell_first + trigger = { + has_character_flag = mpo_events_ariana.0001.both_eaglets + exists = scope:eagle_first_recipient + has_eagle_trigger = yes + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + scope:eagle_first_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + custom_tooltip = mpo_events_ariana.0002.e_tt + add_short_term_gold = medium_gold_value + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = 0.8 + } + modifier = { + add = 50 + scope:eagle_first_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_first_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_first_recipient + } + } + } + } + + option = { # Give one to second recipient, sell one (only if you have one already) + name = mpo_events_ariana.0002.e_sell_second + trigger = { + has_character_flag = mpo_events_ariana.0001.both_eaglets + exists = scope:eagle_second_recipient + has_eagle_trigger = yes + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + scope:eagle_second_recipient = { + save_scope_as = target + mpo_events_ariana_002_gift_effect = yes + } + custom_tooltip = mpo_events_ariana.0002.e_tt + add_short_term_gold = medium_gold_value + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = 0.8 + } + modifier = { + add = 50 + scope:eagle_second_recipient = { + opinion = { + target = root + value >= low_positive_opinion + } + } + } + modifier = { + add = 50 + any_relation = { + type = lover + this = scope:eagle_second_recipient + } + } + modifier = { + add = 25 + any_relation = { + type = friend + this = scope:eagle_second_recipient + } + } + } + } + + option = { # Sell the one (or both) + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = mpo_events_ariana.0001.both_eaglets + } + desc = mpo_events_ariana.0002.f_two + } + desc = mpo_events_ariana.0002.f_one + } + } + } + + + if = { + limit = { + has_character_flag = mpo_events_ariana.0001.both_eaglets + } + send_interface_toast = { + title = mpo_events_ariana.0002.f_tt_two + type = event_toast_effect_good + add_short_term_gold = major_gold_value + if = { + limit = { + exists = scope:eagle_first_recipient + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_first_recipient + modifier = disappointed_opinion + opinion = -15 + } + } + if = { + limit = { + exists = scope:eagle_second_recipient + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_second_recipient + modifier = disappointed_opinion + opinion = -15 + } + } + left_icon = root + } + + } + else = { + send_interface_toast = { + title = mpo_events_ariana.0002.f_tt + type = event_toast_effect_good + add_short_term_gold = medium_gold_value + if = { + limit = { + exists = scope:eagle_first_recipient + scope:eagle_first_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_first_recipient + modifier = disappointed_opinion + opinion = -15 + } + } + if = { + limit = { + exists = scope:eagle_second_recipient + scope:eagle_second_recipient = { + NOT = { has_eagle_trigger = yes } + } + } + reverse_add_opinion = { + target = scope:eagle_second_recipient + modifier = disappointed_opinion + opinion = -15 + } + } + left_icon = root + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + add = 50 + scope:eagle_second_recipient ?= { + opinion = { + target = root + value <= low_positive_opinion + } + } + } + modifier = { + add = 50 + scope:eagle_first_recipient ?= { + opinion = { + target = root + value <= low_positive_opinion + } + } + } + } + } +} + +# The Fire Inside - Your heir wants to convert to a different faith in your realm +mpo_events_ariana.0010 = { + type = character_event + title = mpo_events_ariana.0010.t + + desc = { + desc = mpo_events_ariana.0010.desc + triggered_desc = { + trigger = { + has_trait = zealous + } + desc = mpo_events_ariana.0010.desc_zealous + } + } + + theme = faith + override_background = { reference = throne_room } + + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = zealous } + animation = disapproval + } + animation = personality_rational + } + + right_portrait = { + character = scope:converting_heir + animation = worry + } + + cooldown = { years = 50 } + + weight_multiplier = { + base = 1 + modifier = { + add = 10 + scope:converting_heir = { has_trait = fickle } + } + } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + exists = scope:converting_heir + scope:converting_heir = { + NOT = { has_trait = zealous } + faith = scope:old_faith + is_available_adult = yes + } + exists = scope:new_faith + } + + immediate = { + player_heir ?= { save_scope_as = converting_heir } + + faith = { save_scope_as = old_faith } + + every_sub_realm_county = { + limit = { + NOR = { + faith = scope:old_faith + faith = scope:converting_heir.faith + } + } + save_scope_as = possible_faith_county + root = { + add_to_variable_list = { + name = possible_faiths + target = scope:possible_faith_county.faith + } + } + } + + # Find a faith to convert to + ordered_in_list = { + variable = possible_faiths + order_by = { + value = 0 + # Do not convert to a Righteous faith + if = { + limit = { + faith_hostility_level = { + target = scope:old_faith + value = faith_fully_accepted_level + } + } + add = -1 + } + else_if = { + limit = { + faith_hostility_level = { + target = scope:old_faith + value = faith_astray_level + } + } + add = 3 + } + else_if = { + limit = { + faith_hostility_level = { + target = scope:old_faith + value = faith_hostile_level + } + } + add = 2 + } + else_if = { + limit = { + faith_hostility_level = { + target = scope:old_faith + value = faith_evil_level + } + } + add = 1 + } + } + save_scope_as = new_faith + } + } + + option = { # Accept the conversion + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = zealous + } + desc = mpo_events_ariana.0010.a_zealous + } + desc = mpo_events_ariana.0010.a + } + } + } + + scope:converting_heir = { + set_character_faith = scope:new_faith + } + + set_character_faith = scope:new_faith + if = { + limit = { + scope:new_faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + stress_impact = { + zealous = major_stress_impact_gain + eccentric = minor_stress_impact_loss + cynical = minor_stress_impact_loss + stubborn = medium_stress_impact_gain + } + scope:converting_heir = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_boldness = 0.1 + ai_zeal = -1.5 + } + modifier = { + factor = 1 + scope:old_faith = { + faith_hostility_level = { + target = scope:new_faith + value >= faith_astray_level + } + } + } + modifier = { + factor = 0.5 + scope:old_faith = { + faith_hostility_level = { + target = scope:new_faith + value = faith_hostile_level + } + } + } + modifier = { + factor = 0.25 + scope:old_faith = { + faith_hostility_level = { + target = scope:new_faith + value = faith_evil_level + } + } + } + } + } + + option = { # Accept it, but secretly continue to practice the old faith + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = zealous + } + desc = mpo_events_ariana.0010.b_zealous + } + desc = mpo_events_ariana.0010.b + } + } + } + + trigger = { + NOT = { any_secret = { secret_type = secret_crypto_religionist } } + untrustworthy_trigger = yes + } + + scope:converting_heir = { + set_character_faith = scope:new_faith + } + + custom_tooltip = mpo_events_ariana.0010.b.tt + + hidden_effect = { + set_character_faith = scope:new_faith + } + if = { + limit = { + scope:new_faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + show_as_tooltip = { + add_secret = { + type = secret_crypto_religionist + } + } + stress_impact = { + honest = medium_stress_impact_gain + zealous = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + } + scope:converting_heir = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + + hidden_effect = { + make_character_crypto_religionist_effect = { CRYPTO_RELIGION = scope:old_faith } + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_zeal = -0.5 + ai_honor = -1 + } + } + } + + option = { # Reject the conversion + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = zealous + } + desc = mpo_events_ariana.0010.c_zealous + } + triggered_desc = { + trigger = { + has_trait = cynical + } + desc = mpo_events_ariana.0010.c_cynical + } + desc = mpo_events_ariana.0010.c + } + } + } + + add_piety = medium_piety_gain + + hidden_effect = { + if = { + limit = { + NOT = { has_trait = zealous } + } + add_piety = medium_piety_gain + scope:converting_heir = { + add_opinion = { + target = root + modifier = hurt_opinion + opinion = -25 + } + } + } + else = { + add_piety = medium_piety_gain + scope:converting_heir = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + } + } + + scope:converting_heir = { + set_character_faith = scope:new_faith + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 1 + } + } + } + + option = { + name = mpo_events_ariana.0010.d + trigger = { + has_trait = zealous + } + custom_tooltip = mpo_events_ariana.0010.d_tt + duel = { + skill = learning + target = scope:converting_heir + 60 = { + desc = mpo_events_ariana.0010.d_success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -59 + } + send_interface_toast = { + title = mpo_events_ariana.0010.d_success + type = event_toast_effect_good + left_icon = root + right_icon = scope:converting_heir + add_piety = major_piety_gain + } + } + 40 = { + desc = mpo_events_ariana.0010.d_failure + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 39 + } + send_interface_toast = { + title = mpo_events_ariana.0010.d_failure + type = event_toast_effect_bad + left_icon = root + right_icon = scope:converting_heir + scope:converting_heir = { + set_character_faith = scope:new_faith + } + add_stress = minor_stress_gain + } + } + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_zeal = 1 + ai_rationality = 1 + } + modifier = { + factor = 1.5 + highest_skill = learning + } + modifier = { + factor = 0.5 + learning <= scope:converting_heir.learning + } + } + } + + after = { + clear_variable_list = possible_faiths + } +} + +scripted_trigger is_valid_spouse_mpo_events_ariana_0020 = { + probably_superstitious = yes + is_available_adult = yes + culture = root.culture +} + +scripted_trigger is_valid_councillor_mpo_events_ariana_0020 = { + NOT = { culture = root.culture } + culture = { + cultural_acceptance = { target = root.culture value <= 75 } + } +} + +# Untrustworthy - A spouse is suspicious of a councillor that has a different culture +mpo_events_ariana.0020 = { + type = character_event + title = mpo_events_ariana.0020.t + desc = { + desc = mpo_events_ariana.0020.desc_intro + first_valid = { + triggered_desc = { + trigger = { + scope:sus_councillor = { is_kurultai_trigger = yes } + } + desc = mpo_events_ariana.0020.desc_marshal + } + triggered_desc = { + trigger = { + scope:sus_councillor = { has_council_position = councillor_spymaster } + } + desc = mpo_events_ariana.0020.desc_spymaster + } + } + desc = mpo_events_ariana.0020.desc_end + } + + theme = court + override_background = { reference = study } + + left_portrait = { + character = root + animation = disbelief + } + + right_portrait = { + character = scope:worried_spouse + animation = worry + } + + lower_center_portrait = scope:sus_councillor + + cooldown = { years = 10 } + + weight_multiplier = { + base = 1 + modifier = { + factor = 0.5 + scope:worried_spouse ?= { has_personality_levelheaded_trigger = yes } + } + } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + any_spouse = { is_valid_spouse_mpo_events_ariana_0020 = yes } + any_councillor = { is_valid_councillor_mpo_events_ariana_0020 = yes } + } + + immediate = { + random_spouse = { + limit = { + is_valid_spouse_mpo_events_ariana_0020 = yes + } + save_scope_as = worried_spouse + } + random_councillor = { + limit = { + is_valid_councillor_mpo_events_ariana_0020 = yes + } + save_scope_as = sus_councillor + } + scope:sus_councillor.culture = { + save_scope_as = councillor_culture + } + } + + option = { # No worries, they'll be gone + name = mpo_events_ariana.0020.a + fire_councillor = scope:sus_councillor + show_as_tooltip = { + scope:sus_councillor = { + add_opinion = { + target = root + modifier = fired_from_council_opinion + opinion = -20 + } + } + } + scope:worried_spouse = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + } + culture = { + change_cultural_acceptance = { + target = scope:councillor_culture + value = low_negative_culture_acceptance + desc = cultural_acceptance_gain_event + } + } + custom_tooltip = mpo_events_ariana.0020.a_tt + hidden_effect = { + every_vassal = { + limit = { + culture = scope:councillor_culture + } + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + } + + stress_impact = { + honest = minor_stress_impact_gain + paranoid = medium_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 0.5 + ai_honor = 0.5 + } + modifier = { + factor = 1.5 + has_trait = paranoid + } + opinion_modifier = { opinion_target = scope:worried_spouse multiplier = 1.5 } + opinion_modifier = { opinion_target = scope:sus_councillor multiplier = 0.5 } + } + } + + option = { # I suppose I can be more careful + name = mpo_events_ariana.0020.b + scope:worried_spouse = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -5 + } + } + add_character_modifier = { + modifier = cultural_suspicion_modifier + years = 5 + } + + stress_impact = { + paranoid = minor_stress_impact_loss + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 1.5 + has_trait = paranoid + } + opinion_modifier = { opinion_target = scope:worried_spouse multiplier = 1.5 } + } + } + + option = { # They're fine... + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:worried_spouse = { has_trait = paranoid } + } + desc = mpo_events_ariana.0020.c_paranoid + } + desc = mpo_events_ariana.0020.c + } + } + } + add_prestige = minor_prestige_gain + scope:worried_spouse = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -20 + } + } + scope:sus_councillor = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + culture = { + change_cultural_acceptance = { + target = scope:councillor_culture + value = low_positive_culture_acceptance + desc = cultural_acceptance_gain_event + } + } + custom_tooltip = mpo_events_ariana.0020.c_tt + hidden_effect = { + every_vassal = { + limit = { + culture = scope:councillor_culture + } + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 10 + } + } + } + + stress_impact = { + paranoid = medium_stress_impact_gain + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 1.5 + has_personality_levelheaded_trigger = yes + } + opinion_modifier = { opinion_target = scope:worried_spouse multiplier = 0.5 } + modifier = { + factor = 1.3 + scope:worried_spouse = { has_trait = paranoid } + } + } + } +} + +# Forbidden Drinks - Someone is selling sus drinks at your feast +mpo_events_ariana.0030 = { + type = activity_event + title = mpo_events_ariana.0030.t + desc = mpo_events_ariana.0030.desc + + theme = feast_activity + + left_portrait = { + character = root + animation = stress + } + + lower_center_portrait = scope:bartender + + right_portrait = { + character = scope:spymaster + animation = disapproval + } + + cooldown = { years = 15 } + + trigger = { + has_mpo_dlc_trigger = yes + is_adult = yes + is_landed = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + involved_activity = { + any_attending_character = { + is_lowborn = yes + is_adult = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 1.5 + involved_activity = { + has_activity_option = { + category = special_type + option = feast_type_tsagaan_sar + } + } + } + } + + immediate = { + if = { + limit = { + involved_activity = { + any_attending_character = { + is_lowborn = no + NOT = { this = root } + has_council_position = councillor_spymaster + } + } + } + cp:councillor_spymaster = { + save_scope_as = spymaster + } + } + else = { + involved_activity = { + ordered_attending_character = { + limit = { + is_lowborn = no + NOT = { this = root } + } + order_by = intrigue + save_scope_as = spymaster + } + } + } + involved_activity = { + random_attending_character = { + limit = { + is_lowborn = yes + NOT = { this = root } + } + save_scope_as = bartender + } + } + } + + option = { # Ok go to jail + name = mpo_events_ariana.0030.jail + custom_tooltip = mpo_events_ariana.0030.jail_effect + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:bartender + IMPRISONER = root + } + + add_dread = minor_dread_gain + + stress_impact = { + just = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + + custom_tooltip = { + text = mpo_events_ariana.0030.jail_tt + involved_activity = { + every_attending_character = { + limit = { + is_lowborn = no + NOT = { this = root } + } + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 10 + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + } + modifier = { + has_trait = gregarious + factor = 0.5 + } + } + } + + option = { # Don't care + name = mpo_events_ariana.0030.ignore + custom_tooltip = mpo_events_ariana.0030.ignore_effect + + location.county = { + add_county_modifier = { + modifier = buzzed_peasants_county_modifier + years = 3 + } + } + + scope:bartender = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 10 + } + } + + custom_tooltip = { + text = mpo_events_ariana.0030.ignore_tt + involved_activity = { + every_attending_character = { + limit = { + is_lowborn = no + NOT = { this = root } + } + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -10 + } + } + } + } + + custom_tooltip = { + text = mpo_events_ariana.0030.ignore_tt_lowborn + involved_activity = { + every_attending_character = { + limit = { + is_lowborn = yes + } + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 10 + } + } + } + } + + stress_impact = { + base = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_compassion = 0.5 + } + modifier = { + has_trait = gregarious + factor = 1 + } + } + } + + option = { # Let them go, but only if you get some of the cut + name = mpo_events_ariana.0030.greedy + trigger = { + has_trait = greedy + } + custom_tooltip = mpo_events_ariana.0030.greedy_tt + + add_stress = medium_stress_loss + add_short_term_gold = minor_gold_value + add_character_modifier = { + modifier = kumi_tax_modifier + years = 2 + } + + scope:bartender = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -5 + } + } + + scope:spymaster = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } +} + +scripted_trigger is_valid_lover_mpo_events_ariana_0040 = { + is_ai = yes + is_adult = yes + NOR = { + is_spouse_of = root + has_relation_lover = root + has_trait = celibate + is_eunuch_trigger = yes + } + OR = { + is_sibling_of = root + has_relation_rival = root + } + is_attracted_to_gender_of = root + root = { is_attracted_to_gender_of = prev } +} + + +# Unmasked - You flirt with an masked person at an event +mpo_events_ariana.0040 = { + type = activity_event + title = { + first_valid = { + triggered_desc = { + trigger = { + involved_activity = { has_activity_type = activity_feast } + } + desc = mpo_events_ariana.0040.title_feast + } + triggered_desc = { + trigger = { + involved_activity = { has_activity_type = activity_wedding } + } + desc = mpo_events_ariana.0040.title_wedding + } + triggered_desc = { + trigger = { + involved_activity = { has_activity_type = activity_camp_party } + } + desc = mpo_events_ariana.0040.title_camp_party + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + involved_activity = { has_activity_type = activity_feast } + involved_activity = { has_activity_type = activity_wedding } + } + } + desc = mpo_events_ariana.0040.desc_wedding_feast + } + triggered_desc = { + trigger = { + involved_activity = { has_activity_type = activity_camp_party } + } + desc = mpo_events_ariana.0040.desc_camp_party + } + } + } + + theme = love + override_background = { + trigger = { + OR = { + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + } + reference = corridor_night + } + override_background = { + trigger = { + involved_activity ?= { has_activity_type = activity_camp_party } + } + reference = bp1_bonfire + } + + left_portrait = { + character = root + animation = flirtation + } + + right_portrait = { + trigger = { + exists = scope:talker + } + character = scope:talker + animation = happiness + } + + cooldown = { years = 50 } + + trigger = { + has_mpo_dlc_trigger = yes + is_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + involved_activity ?= { + any_attending_character = { + is_valid_lover_mpo_events_ariana_0040 = yes + } + } + OR = { + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + involved_activity ?= { has_activity_type = activity_camp_party } + } + NOT = { + has_trait = celibate + is_eunuch_trigger = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = -0.3 + num_of_relation_lover > 1 + } + modifier = { + add = 0.5 + has_trait = rakish + } + modifier = { + add = 1 + has_trait = lustful + } + modifier = { + add = -0.5 + any_spouse = { + reverse_opinion = { + target = root + value >= 60 + } + } + } + modifier = { + add = -0.4 + any_spouse = { + reverse_has_opinion_modifier = { + target = root + modifier = love_opinion + } + } + } + } + + immediate = { + involved_activity = { save_scope_as = activity } + involved_activity = { + every_attending_character = { + limit = { + is_valid_lover_mpo_events_ariana_0040 = yes + } + save_scope_as = possible_lover + root = { + add_to_variable_list = { + name = possible_lovers + target = scope:possible_lover + } + } + if = { + limit = { + involved_activity = { + any_attending_character = { is_spouse_of = scope:possible_lover } + } + } + involved_activity = { + every_attending_character = { + limit = { is_spouse_of = scope:possible_lover } + save_scope_as = possible_lover_spouse + root = { + add_to_variable_list = { + name = possible_lovers + target = scope:possible_lover_spouse + } + } + } + } + } + } + } + # Find a person + ordered_in_list = { + variable = possible_lovers + order_by = { + value = 1 + add = intrigue + if = { + limit = { + matching_gender_and_sexuality_trigger = { + CHARACTER_1 = root + CHARACTER_2 = this + } + } + add = 10 + } + if = { + limit = { + has_trait = beauty_good + } + add = 5 + } + if = { + limit = { + has_trait = intellect_good + } + add = 5 + } + if = { + limit = { + any_spouse = { + count = 0 + } + } + add = 3 + } + if = { + limit = { + OR = { + has_trait = lustful + has_trait = rakish + } + } + add = 5 + } + } + save_scope_as = masked_guest + } + clear_variable_list = possible_lovers + if = { + limit = { + involved_activity = { has_activity_type = activity_camp_party } + exists = scope:masked_guest + } + involved_activity = { + random_attending_character = { + limit = { + NOT = { this = root } + NOT = { this = scope:masked_guest } + } + save_scope_as = talker + } + } + } + } + + option = { + name = mpo_events_ariana.0040.a + + custom_tooltip = mpo_events_ariana.0040.a_tt + trigger_event = mpo_events_ariana.0041 + + stress_impact = { + base = minor_stress_impact_loss + lustful = minor_stress_impact_loss + chaste = medium_stress_impact_gain + } + } + + option = { + name = mpo_events_ariana.0040.b + trigger = { + OR = { + has_trait = chaste + has_trait = shy + } + } + add_prestige = miniscule_prestige_loss + + stress_impact = { + base = minor_stress_impact_loss + } + } +} + +# Unmasked follow up - You find out who the masked person was +mpo_events_ariana.0041 = { + type = activity_event + title = mpo_events_ariana.0041.title + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + involved_activity = { has_activity_type = activity_feast } + involved_activity = { has_activity_type = activity_wedding } + } + } + desc = mpo_events_ariana.0041.desc_wedding_feast + } + triggered_desc = { + trigger = { + involved_activity = { has_activity_type = activity_camp_party } + } + desc = mpo_events_ariana.0041.desc_camp_party + } + } + desc = mpo_events_ariana.0041.desc_middle + first_valid = { + triggered_desc = { + trigger = { + has_relation_rival = scope:masked_guest + } + desc = mpo_events_ariana.0041.desc_rival + } + triggered_desc = { + trigger = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + desc = mpo_events_ariana.0041.desc_family + } + triggered_desc = { + trigger = { + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + } + } + desc = mpo_events_ariana.0041.desc_family_spouse + } + triggered_desc = { + trigger = { + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + desc = mpo_events_ariana.0041.desc_rival_spouse + } + } + desc = mpo_events_ariana.0041.desc_outro + triggered_desc = { + trigger = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + desc = mpo_events_ariana.0041.desc_family_outro + } + } + + theme = love + override_background = { + trigger = { + OR = { + involved_activity ?= { has_activity_type = activity_feast } + involved_activity ?= { has_activity_type = activity_wedding } + } + } + reference = bedchamber + } + override_background = { + trigger = { + involved_activity ?= { has_activity_type = activity_camp_party } + } + reference = bp1_bonfire + } + + left_portrait = { + character = root + animation = shock + } + + lower_left_portrait = { + trigger = { + exists = primary_spouse + primary_spouse = { has_relation_lover = root } + } + character = primary_spouse + } + + lower_center_portrait = { + trigger = { exists = scope:masked_guest_spouse } + character = scope:masked_guest_spouse + } + + right_portrait = { + character = scope:masked_guest + animation = flirtation + } + + immediate = { + if = { + limit = { + scope:masked_guest = { + any_spouse = { + is_sibling_of = root + } + } + } + scope:masked_guest = { + random_spouse = { + limit = { is_sibling_of = root } + save_scope_as = masked_guest_spouse + } + } + } + else_if = { + limit = { + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + scope:masked_guest = { + random_spouse = { + limit = { has_relation_rival = root } + save_scope_as = masked_guest_spouse + } + } + } + } + + # Sleep with them anyways + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + desc = mpo_events_ariana.0041.a_family + } + triggered_desc = { + trigger = { + has_relation_rival = scope:masked_guest + } + desc = mpo_events_ariana.0041.a_rival + } + triggered_desc = { + trigger = { + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + desc = mpo_events_ariana.0041.a_rival_spouse + } + desc = mpo_events_ariana.0041.a + } + } + } + trigger = { + is_attracted_to_gender_of = scope:masked_guest + scope:masked_guest = { is_attracted_to_gender_of = root } + } + had_sex_with_effect = { + CHARACTER = scope:masked_guest + PREGNANCY_CHANCE = pregnancy_chance + } + if = { + limit = { + has_trait = lustful + root.faith = { trait_is_virtue = lustful } + } + add_piety = minor_piety_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.25 + ai_boldness = 0.75 + } + modifier = { + factor = 1.2 + OR = { + has_trait = lustful + has_trait = rakish + } + } + modifier = { + factor = 1.1 + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + modifier = { + factor = 0.8 + has_relation_rival = scope:masked_guest + } + modifier = { + factor = 0.1 + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + modifier = { + factor = 0.75 + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = root + is_child_of = root + root = { is_child_of = prev } + } + } + } + } + modifier = { + factor = 0.5 + OR = { + scope:activity.var:spouse_2_var ?= root + scope:activity.special_guest:spouse_1 ?= root + } + } + } + } + + # Become lovers + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + desc = mpo_events_ariana.0041.b_family + } + triggered_desc = { + trigger = { + has_relation_rival = scope:masked_guest + } + desc = mpo_events_ariana.0041.b_rival + } + triggered_desc = { + trigger = { + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + desc = mpo_events_ariana.0041.b_rival_spouse + } + desc = mpo_events_ariana.0041.b + } + } + } + trigger = { + is_attracted_to_gender_of = scope:masked_guest + scope:masked_guest = { is_attracted_to_gender_of = root } + } + had_sex_with_effect = { + CHARACTER = scope:masked_guest + PREGNANCY_CHANCE = pregnancy_chance + } + progress_towards_lover_effect = { + CHARACTER = scope:masked_guest + REASON = lover_masked_activity + OPINION = 0 + } + if = { + limit = { + has_trait = lustful + root.faith = { trait_is_virtue = lustful } + } + add_piety = minor_piety_gain + } + ai_chance = { + base = 60 + ai_value_modifier = { + ai_honor = -0.25 + ai_boldness = 1 + ai_greed = 0.1 + } + modifier = { + factor = 1.2 + OR = { + has_trait = lustful + has_trait = rakish + } + } + modifier = { + factor = 1.1 + scope:masked_guest = { + any_spouse = { + has_relation_rival = root + } + } + } + modifier = { + factor = 0.7 + has_relation_rival = scope:masked_guest + } + modifier = { + factor = 0.1 + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + modifier = { + factor = 0.5 + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = root + is_child_of = root + root = { is_child_of = prev } + } + } + } + } + modifier = { + factor = 0.5 + OR = { + scope:activity.var:spouse_2_var ?= root + scope:activity.special_guest:spouse_1 ?= root + } + } + } + } + + # Reject them + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + is_sibling_of = scope:masked_guest + is_child_of = scope:masked_guest + scope:masked_guest = { is_child_of = root } + } + } + desc = mpo_events_ariana.0041.c_family + } + triggered_desc = { + trigger = { + has_relation_rival = scope:masked_guest + } + desc = mpo_events_ariana.0041.c_rival + } + triggered_desc = { + trigger = { + exists = primary_spouse + primary_spouse = { has_relation_lover = root } + } + desc = mpo_events_ariana.0041.c_spouse + } + triggered_desc = { + trigger = { + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = root + is_child_of = root + is_parent_of = root + } + } + } + } + desc = mpo_events_ariana.0041.c_family_spouse + } + desc = mpo_events_ariana.0041.c + } + } + } + custom_tooltip = mpo_events_ariana.0041.c_tt + + reverse_add_opinion = { + target = scope:masked_guest + modifier = hurt_opinion + opinion = -20 + } + + if = { + limit = { + OR = { + AND = { + any_spouse = { + count > 0 + } + trait_is_shunned_or_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:adulterer + GENDER_CHARACTER = root + } + } + trait_is_shunned_or_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:fornicator + GENDER_CHARACTER = root + } + } + } + add_piety = minor_piety_gain + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_honor = 0.5 + ai_vengefulness = 1 + } + modifier = { + factor = 1.5 + has_relation_rival = scope:masked_guest + } + modifier = { + factor = 1.5 + OR = { + is_sibling_of = root + is_child_of = root + is_parent_of = root + } + } + modifier = { + factor = 1.2 + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = root + is_child_of = root + is_parent_of = root + } + } + } + } + } + } + + # Reject them, but stop being rivals + option = { + name = mpo_events_ariana.0041.d + trigger = { + has_relation_rival = scope:masked_guest + } + custom_tooltip = mpo_events_ariana.0041.d_tt + duel = { + skill = intrigue + target = scope:masked_guest + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -59 + } + send_interface_toast = { + title = mpo_events_ariana.0041.d_success + type = event_toast_effect_good + left_icon = root + right_icon = scope:masked_guest + remove_relation_rival = scope:masked_guest + + if = { + limit = { + OR = { + AND = { + any_spouse = { + count > 0 + } + trait_is_shunned_or_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:adulterer + GENDER_CHARACTER = root + } + } + trait_is_shunned_or_criminal_in_faith_trigger = { + FAITH = faith + TRAIT = trait:fornicator + GENDER_CHARACTER = root + } + } + } + if = { + limit = { + has_trait = forgiving + faith = { trait_is_virtue = forgiving } + } + add_piety = medium_piety_gain + } + else = { + add_piety = minor_piety_gain + } + } + + add_prestige = minor_prestige_gain + + stress_impact = { + base = minor_stress_impact_loss + forgiving = medium_stress_impact_loss + vengeful = medium_stress_impact_gain + } + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 39 + } + + send_interface_toast = { + title = mpo_events_ariana.0041.d_failure + type = event_toast_effect_bad + left_icon = root + right_icon = scope:masked_guest + stress_impact = { + base = miniscule_stress_impact_gain + } + } + } + } + + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = -0.5 + } + modifier = { + factor = 1.2 + OR = { + is_sibling_of = root + is_child_of = root + is_parent_of = root + } + } + modifier = { + factor = 1.2 + scope:masked_guest = { + any_spouse = { + OR = { + is_sibling_of = root + is_child_of = root + is_parent_of = root + } + } + } + } + } + } +} + +scripted_effect mpo_events_ariana_0050_lose_effect = { + add_prestige = major_prestige_loss + custom_tooltip = mpo_events_ariana_0050_lose_effect_tt + dynasty = { + add_dynasty_modifier = { + modifier = criminal_family_dynasty_modifier + years = 10 + } + } + hidden_effect = { + every_held_title = { + limit = { + is_landless_type_title = no + tier > tier_barony + } + add_to_list = target_titles + } + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + every_in_list = { + list = target_titles + change_title_holder_include_vassals = { + holder = scope:criminal_family.primary_heir + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + } + if = { + limit = { + is_valid_for_laampdom = yes + scope:criminal_family.ep3_laamp_chance_score_value >= 8 + } + create_landless_adventurer_title_effect = { + REASON = flag:voluntary + FLAVOR_CHAR = root + } + add_trait_xp = { + trait = gallowsbait + track = thief + value = 10 + } + } + scope:criminal_family = { + add_stress = major_stress_gain + } +} + +scripted_effect mpo_events_ariana_0050_win_effect = { + add_hook = { + target = scope:criminal_family + type = loyalty_hook + } + dynasty ?= { add_dynasty_prestige = medium_dynasty_prestige_value } + scope:criminal_family = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 30 + } + } +} + +scripted_trigger is_valid_family_mpo_events_ariana_0050 = { + is_landed = yes + is_available_adult = yes + dynasty = root.dynasty + exists = primary_heir + highest_held_title_tier <= tier_duchy + is_ai = yes + OR = { + has_trait = avaricious + has_trait = deceitful + has_trait = schemer + has_trait = greedy + has_trait = ambitious + } +} + +# Branded - A family member is caught in a scandal +mpo_events_ariana.0050 = { + type = character_event + title = mpo_events_ariana.0050.t + desc = mpo_events_ariana.0050.desc + + theme = realm + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:criminal_family + animation = beg + } + + cooldown = { years = 50 } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + any_close_or_extended_family_member = { + is_valid_family_mpo_events_ariana_0050 = yes + } + } + + immediate = { + random_close_or_extended_family_member = { + limit = { + is_valid_family_mpo_events_ariana_0050 = yes + } + save_scope_as = criminal_family + } + } + + option = { + name = mpo_events_ariana.0050.a + trigger = { + short_term_gold >= massive_gold_value + } + show_as_unavailable = { + always = yes + } + custom_tooltip = mpo_events_ariana.0050.a_tt + remove_short_term_gold = massive_gold_value + add_prestige = medium_prestige_gain + mpo_events_ariana_0050_win_effect = yes + stress_impact = { + greedy = medium_stress_impact_gain + avaricious = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + just = minor_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + short_term_gold < massive_gold_value + } + desc = mpo_events_ariana.0050.b_broke + } + desc = mpo_events_ariana.0050.b + } + } + } + add_prestige = medium_prestige_loss + scope:criminal_family = { + mpo_events_ariana_0050_lose_effect = yes + } + stress_impact = { + callous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + opinion_modifier = { + opinion_target = scope:criminal_family + multiplier = -2 + } + } + } + + option = { + name = mpo_events_ariana.0050.c + trigger = { + diplomacy >= high_skill_rating + } + show_as_unavailable = { + always = yes + } + custom_tooltip = mpo_events_ariana.0050.c_tt + duel = { + skill = diplomacy + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = mpo_events_ariana.0050.win + send_interface_toast = { + title = mpo_events_ariana.0050.win + type = event_toast_effect_good + left_icon = root + right_icon = scope:criminal_family + mpo_events_ariana_0050_win_effect = yes + stress_impact = { + compassionate = medium_stress_impact_loss + just = minor_stress_impact_loss + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = mpo_events_ariana.0050.lose + send_interface_toast = { + title = mpo_events_ariana.0050.lose + type = event_toast_effect_bad + left_icon = root + right_icon = scope:criminal_family + add_prestige = medium_prestige_loss + scope:criminal_family = { + mpo_events_ariana_0050_lose_effect = yes + } + stress_impact = { + callous = medium_stress_impact_loss + } + } + } + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_compassion = -1 + } + opinion_modifier = { + opinion_target = scope:criminal_family + multiplier = -2 + } + } + } +} + +scripted_trigger is_valid_child_mpo_events_ariana_0060 = { + age > 4 + age <= 14 + is_available = yes + is_ai = yes + is_courtier_of = root +} +scripted_effect mpo_events_ariana_0060_lose_effect = { + send_interface_toast = { + title = mpo_events_ariana.0010.failure + type = event_toast_effect_bad + left_icon = root + right_icon = scope:appropriate_child + random = { + chance = 10 + increase_wounds_effect = { REASON = fall } + } + scope:appropriate_child = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + } +} +scripted_effect mpo_events_ariana_0060_win_effect = { + custom_tooltip = mpo_events_ariana.0060.success_tt + add_prestige = miniscule_prestige_gain + trigger_event = mpo_events_ariana.0070 +} + +# Treasure Nest - A child comes to you saying they found treasure in an eagle's nest +mpo_events_ariana.0060 = { + type = character_event + title = mpo_events_ariana.0060.t + desc = mpo_events_ariana.0060.desc + + theme = court + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:appropriate_child + animation = storyteller + } + + cooldown = { years = 15 } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + OR = { + any_close_family_member = { is_valid_child_mpo_events_ariana_0060 = yes } + any_relation = { type = ward is_valid_child_mpo_events_ariana_0060 = yes } + any_warden_hostage = { opinion = { target = root value >= low_negative_opinion } is_valid_child_mpo_events_ariana_0060 = yes } + } + } + + immediate = { + if = { + limit = { + any_close_family_member = { + is_valid_child_mpo_events_ariana_0060 = yes + } + } + random_close_family_member = { + #A child you care about + limit = { + opinion = { + target = root + value >= low_positive_opinion + } + is_valid_child_mpo_events_ariana_0060 = yes + } + #Otherwise pick whoever + alternative_limit = { is_valid_child_mpo_events_ariana_0060 = yes } + save_scope_as = appropriate_child + } + } + else_if = { + limit = { + any_relation = { + type = ward + is_valid_child_mpo_events_ariana_0060 = yes + } + } + random_relation = { + type = ward + #A child you care about + limit = { + opinion = { + target = root + value >= low_positive_opinion + } + is_valid_child_mpo_events_ariana_0060 = yes + } + #Otherwise pick whoever + alternative_limit = { is_valid_child_mpo_events_ariana_0060 = yes } + save_scope_as = appropriate_child + } + } + else_if = { + limit = { + any_warden_hostage = { + opinion = { + target = root + value >= low_negative_opinion + } + is_valid_child_mpo_events_ariana_0060 = yes + } + } + random_warden_hostage = { + limit = { + opinion = { + target = root + value >= low_negative_opinion + } + is_valid_child_mpo_events_ariana_0060 = yes + } + save_scope_as = appropriate_child + } + } + add_short_term_gold = 5 + } + + # Climb to the nest + option = { + name = mpo_events_ariana.0060.a + duel = { + skill = prowess + value = decent_skill_rating + desc = mpo_events_ariana.0060.a_tt + 60 = { + desc = mpo_events_ariana.0060.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -59 + } + mpo_events_ariana_0060_win_effect = yes + } + 40 = { + desc = mpo_events_ariana.0010.a_failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + mpo_events_ariana_0060_lose_effect = yes + } + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_greed = 0.1 + } + modifier = { + factor = 1.5 + prowess > intrigue + } + } + } + + # Sneak to the nest + option = { + name = mpo_events_ariana.0060.b + duel = { + skill = intrigue + value = decent_skill_rating + desc = mpo_events_ariana.0060.b_tt + 60 = { + desc = mpo_events_ariana.0060.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -59 + } + mpo_events_ariana_0060_win_effect = yes + } + 40 = { + desc = mpo_events_ariana.0010.b_failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -39 + } + mpo_events_ariana_0060_lose_effect = yes + } + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_greed = 0.1 + } + modifier = { + factor = 1.5 + intrigue > prowess + } + } + } + + # That's nice dear + option = { + name = mpo_events_ariana.0060.d + scope:appropriate_child = { + add_opinion = { + target = root + modifier = hurt_opinion + opinion = -15 + } + } + stress_impact = { + lazy = minor_stress_impact_loss + craven = minor_stress_impact_loss + } + ai_chance = { + base = 75 + opinion_modifier = { + opinion_target = scope:appropriate_child + multiplier = -1 + } + ai_value_modifier = { + ai_energy = -1 + } + } + } +} + +mpo_events_ariana.0070 = { + type = character_event + title = mpo_events_ariana.0060.t + desc = mpo_events_ariana.0070.desc + + theme = court + override_background = { reference = terrain } + + left_portrait = { + character = root + animation = hunting_falcon + } + + right_portrait = { + character = scope:appropriate_child + animation = happiness + } + + immediate = { + add_character_flag = used_in_mpo_events_ariana_0070 + generate_trinket_effect = { + TRINKET_RECEIVER = root + TRINKET_GIVER = root + GRAB_ALL_TRINKETS = no + HISTORY_TYPE = discovered + } + if = { + limit = { exists = scope:new_trinket } + scope:new_trinket = { + save_scope_as = newly_created_artifact + } + } + } + + # Take the sachel + option = { + name = mpo_events_ariana.0070.a + random_list = { + desc = mpo_events_ariana.0070.a_tt + 20 = { + desc = mpo_events_ariana.0070.a_trinket + trigger = { + exists = scope:newly_created_artifact + } + send_interface_toast = { + title = mpo_events_ariana.0070.a_trinket + type = event_toast_effect_good + left_icon = root + scope:newly_created_artifact = { set_owner = root } + add_short_term_gold = 15 + } + } + 30 = { + desc = mpo_events_ariana.0070.a_good + send_interface_toast = { + title = mpo_events_ariana.0070.a_good + type = event_toast_effect_good + left_icon = root + add_short_term_gold = 50 + } + } + 15 = { + desc = mpo_events_ariana.0070.a_great + send_interface_toast = { + title = mpo_events_ariana.0070.a_great + type = event_toast_effect_good + left_icon = root + add_short_term_gold = 100 + } + } + 5 = { + desc = mpo_events_ariana.0070.a_none + send_interface_toast = { + title = mpo_events_ariana.0070.a_none + type = event_toast_effect_bad + left_icon = root + } + hidden_effect = { + stress_impact = { + greedy = minor_stress_impact_gain + } + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + # Take the eagle + option = { + name = mpo_events_ariana.0070.b + + trigger = { + OR = { + has_eagle_trigger = no + scope:appropriate_child = { has_eagle_trigger = no } + } + } + if = { + limit = { + has_eagle_trigger = no + } + custom_tooltip = mpo_events_ariana.0070.b_self + start_eagle_story_cycle_effect = yes + } + else_if = { + limit = { + scope:appropriate_child = { has_eagle_trigger = no } + } + custom_tooltip = mpo_events_ariana.0070.b_child + scope:appropriate_child = { start_eagle_story_cycle_effect = yes } + scope:appropriate_child = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + + # Give the sachel to bro + option = { + name = mpo_events_ariana.0070.c + random_list = { + desc = mpo_events_ariana.0070.c_tt + 20 = { + desc = mpo_events_ariana.0070.a_trinket + trigger = { + exists = scope:newly_created_artifact + } + send_interface_toast = { + title = mpo_events_ariana.0070.a_trinket + type = event_toast_effect_good + left_icon = root + right_icon = scope:appropriate_child + scope:newly_created_artifact = { set_owner = root } + scope:appropriate_child = { add_short_term_gold = 15 } + } + } + 30 = { + desc = mpo_events_ariana.0070.a_good + send_interface_toast = { + title = mpo_events_ariana.0070.a_good + type = event_toast_effect_good + left_icon = root + right_icon = scope:appropriate_child + add_short_term_gold = 25 + scope:appropriate_child = { add_short_term_gold = 25 } + } + } + 15 = { + desc = mpo_events_ariana.0070.a_great + send_interface_toast = { + title = mpo_events_ariana.0070.a_great + type = event_toast_effect_good + left_icon = root + right_icon = scope:appropriate_child + add_short_term_gold = 50 + scope:appropriate_child = { add_short_term_gold = 50 } + } + } + 5 = { + desc = mpo_events_ariana.0070.a_none + custom_tooltip = mpo_events_ariana.0070.c_none_tt + send_interface_toast = { + title = mpo_events_ariana.0070.a_none + type = event_toast_effect_bad + left_icon = root + right_icon = scope:appropriate_child + pay_short_term_gold = { + gold = 5 + target = scope:appropriate_child + } + } + hidden_effect = { + stress_impact = { + greedy = minor_stress_impact_gain + } + } + } + } + + scope:appropriate_child = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + generous = major_stress_impact_loss + compassionate = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -1 + } + opinion_modifier = { + opinion_target = scope:appropriate_child + multiplier = 2 + } + } + } + + # Leave it be + option = { + name = mpo_events_ariana.0070.d + + add_piety = minor_piety_gain + + scope:appropriate_child = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -15 + } + } + + stress_impact = { + temperate = minor_stress_impact_loss + greedy = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.1 + ai_greed = -1 + } + modifier = { + factor = 1.5 + has_trait = temperate + } + } + } + + after = { + remove_character_flag = used_in_mpo_events_ariana_0070 + } +} + +# Someone tells you about a magical tree +mpo_events_ariana.0080 = { + type = character_event + title = mpo_events_ariana.0080.t + desc = mpo_events_ariana.0080.desc + + theme = nomads + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:tree_lover + animation = storyteller + } + + cooldown = { years = 25 } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + location = { geographical_region = world_steppe } + government_has_flag = government_is_nomadic + any_courtier = { + is_available_healthy_ai_adult = yes + } + any_county_in_region = { + region = world_steppe + NOR = { + holder ?= root + holder.liege ?= root + holder.top_liege ?= root + } + squared_distance = { + target = root.capital_county + value >= squared_distance_medium + } + squared_distance = { + target = root.capital_county + value < squared_distance_almost_massive + } + any_county_province = { + OR = { + terrain = forest + terrain = taiga + } + } + } + } + + immediate = { + ordered_courtier = { + limit = { + is_available_healthy_ai_adult = yes + } + order_by = learning + save_scope_as = tree_lover + } + random_county_in_region = { + region = world_steppe + limit = { + NOR = { + holder ?= root + holder.liege ?= root + holder.top_liege ?= root + } + squared_distance = { + target = root.capital_county + value >= squared_distance_medium + } + squared_distance = { + target = root.capital_county + value < squared_distance_almost_massive + } + any_county_province = { + OR = { + terrain = forest + terrain = taiga + } + } + } + random_county_province = { + limit = { + OR = { + terrain = forest + terrain = taiga + } + } + save_scope_as = tree_barony + } + } + } + + # ok you can go + option = { + name = mpo_events_ariana.0080.a + + + custom_tooltip = mpo_events_ariana.0080.a_tt + save_scope_value_as = { + name = tree_method + value = flag:tree_guy + } + + pay_short_term_gold = { + gold = major_gold_value + target = scope:tree_lover + } + + scope:tree_lover = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + + trigger_event = { + id = mpo_events_ariana.0081 + days = { 30 90 } + } + + stress_impact = { + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 150 + ai_value_modifier = { + ai_greed = -0.5 + ai_energy = -0.1 + } + modifier = { + factor = 1.25 + scope:tree_lover.learning >= root.learning + } + modifier = { + gold <= massive_gold_value + factor = 0 + } + } + } + + # ill go + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = arrogant + } + desc = mpo_events_ariana.0080.b_arrogant + } + desc = mpo_events_ariana.0080.b + } + } + } + trigger = { + learning >= high_skill_rating + } + show_as_unavailable = { + always = yes + } + + custom_tooltip = mpo_events_ariana.0080.b_tt + save_scope_value_as = { + name = tree_method + value = flag:self + } + + start_travel_plan = { + destination = scope:tree_barony + on_arrival_event = mpo_events_ariana.0081 + } + + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_rationality = 1 + ai_greed = 0.5 + } + modifier = { + factor = 2 + has_trait = arrogant + } + } + } + + # who cares + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + probably_superstitious = yes + } + desc = mpo_events_ariana.0080.c_sus + } + desc = mpo_events_ariana.0080.c + } + } + } + flavor = mpo_events_ariana.0080.c_flavor + + stress_impact = { + base = minor_stress_impact_loss + cynical = minor_stress_impact_loss + } + + scope:tree_lover = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + + + ai_chance = { + base = 50 + modifier = { + factor = 1.5 + probably_superstitious = yes + } + modifier = { + factor = 1.5 + has_trait = cynical + } + } + } +} + +# The magical tree is brought to you or you find it +mpo_events_ariana.0081 = { + type = character_event + title = mpo_events_ariana.0080.t + desc = { + triggered_desc = { + trigger = { + scope:tree_method = flag:self + } + desc = mpo_events_ariana.0081.desc_self + } + triggered_desc = { + trigger = { + scope:tree_method = flag:tree_guy + scope:tree_lover = { is_alive = yes } + } + desc = mpo_events_ariana.0081.desc_guy + } + triggered_desc = { + trigger = { + scope:tree_method = flag:tree_guy + scope:tree_lover = { is_alive = no } + } + desc = mpo_events_ariana.0081.desc_dead + } + triggered_desc = { + trigger = { + scope:tree_method = flag:tree_guy + scope:tree_lover = { is_alive = yes } + } + desc = mpo_events_ariana.0081.desc + } + desc = mpo_events_ariana.0081.desc_outro + } + + theme = realm + override_background = { + trigger = { + scope:tree_method = flag:tree_guy + } + reference = courtyard + } + override_background = { + trigger = { + scope:tree_method = flag:self + } + reference = terrain + } + + left_portrait = { + character = root + animation = happiness + } + + right_portrait = { + trigger = { + scope:tree_method = flag:tree_guy + } + character = scope:tree_giver + animation = storyteller + } + + lower_center_portrait = { + trigger = { + scope:tree_lover = { is_alive = no } + } + character = scope:tree_lover + } + + immediate = { + # If the guy is dead for whatever reason we need to find a new one + if = { + limit = { + scope:tree_lover = { is_alive = yes } + } + scope:tree_lover = { save_scope_as = tree_giver } + } + else = { + random_courtier = { + limit = { + is_available_healthy_ai_adult = yes + } + save_scope_as = tree_giver + } + } + } + + # Wish for Fertility + option = { + name = mpo_events_ariana.0081.a + + duel = { + skill = learning + value = decent_skill_rating + desc = mpo_events_ariana.0081.wish + 70 = { + desc = mpo_events_ariana.0081.success + modifier = { + factor = 1.5 + scope:tree_method = flag:tree_guy + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -69 + } + send_interface_toast = { + title = mpo_events_ariana.0081.success + type = event_toast_effect_good + left_icon = root + add_character_modifier = { + modifier = mpo_magical_tree_fertility_modifier + years = 10 + } + } + } + 30 = { + desc = mpo_events_ariana.0081.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + send_interface_toast = { + title = mpo_events_ariana.0081.failure + type = event_toast_effect_neutral + left_icon = root + add_character_modifier = { + modifier = mpo_magical_tree_modifier + years = 10 + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = lustful + } + } + } + + # Wish for Power + option = { + name = mpo_events_ariana.0081.b + + duel = { + skill = learning + value = decent_skill_rating + desc = mpo_events_ariana.0081.wish + 70 = { + desc = mpo_events_ariana.0081.success + modifier = { + factor = 1.5 + scope:tree_method = flag:tree_guy + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -69 + } + send_interface_toast = { + title = mpo_events_ariana.0081.success + type = event_toast_effect_good + left_icon = root + if = { + limit = { + domicile ?= { herd <= max_herd } + } + domicile ?= { + change_herd = medium_herd_gain + } + } + else = { + add_prestige = medium_prestige_gain + } + add_character_modifier = { + modifier = mpo_magical_tree_power_modifier + years = 10 + } + } + } + 30 = { + desc = mpo_events_ariana.0081.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + send_interface_toast = { + title = mpo_events_ariana.0081.failure + type = event_toast_effect_neutral + left_icon = root + add_character_modifier = { + modifier = mpo_magical_tree_modifier + years = 10 + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 1.5 + has_trait = wrathful + } + } + } + + # Wish for Wisdom + option = { + name = mpo_events_ariana.0081.c + + duel = { + skill = learning + value = decent_skill_rating + desc = mpo_events_ariana.0081.wish + 70 = { + desc = mpo_events_ariana.0081.success + modifier = { + factor = 1.5 + scope:tree_method = flag:tree_guy + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -69 + } + send_interface_toast = { + title = mpo_events_ariana.0081.success + type = event_toast_effect_good + left_icon = root + add_character_modifier = { + modifier = mpo_magical_tree_wisdom_modifier + years = 10 + } + } + } + 30 = { + desc = mpo_events_ariana.0081.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -29 + } + send_interface_toast = { + title = mpo_events_ariana.0081.failure + type = event_toast_effect_neutral + left_icon = root + add_character_modifier = { + modifier = mpo_magical_tree_modifier + years = 10 + } + } + } + } + + ai_chance = { + base = 100 + } + } +} + +scripted_trigger is_valid_family_mpo_events_ariana_0090 = { + is_available = yes + is_adult = no + age >= 8 # Can't be too young + number_of_personality_traits < personality_trait_limit + NAND = { + OR = { + has_trait = content + has_trait = ambitious + } + OR = { + has_trait = lazy + has_trait = diligent + } + } + NOT = { + has_character_modifier = mpo_destined_leader_modifier + } +} + +# Your child wants to be a herder when they grow up +mpo_events_ariana.0090 = { + type = character_event + title = mpo_events_ariana.0090.t + desc = { + desc = mpo_events_ariana.0090.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { age >= 12 } + } + desc = mpo_events_ariana.0090.desc_older + } + desc = mpo_events_ariana.0090.desc_younger + } + } + theme = nomads + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:child + animation = holding_staff + } + + cooldown = { years = 10 } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + government_has_flag = government_is_nomadic + any_child = { + is_valid_family_mpo_events_ariana_0090 = yes + } + } + + immediate = { + random_child = { + limit = { + is_valid_family_mpo_events_ariana_0090 = yes + } + weight = { + base = 1 + modifier = { + factor = 2 + OR = { + has_trait = shy + has_trait = craven + } + } + } + save_scope_as = child + } + } + + # I'll show you their life before you decide + option = { + name = mpo_events_ariana.0090.c + trigger = { + scope:child = { age >= 10 } + OR = { + has_trait = callous + has_trait = peasant_leader + has_trait = diligent + } + } + + reverse_add_opinion = { + target = scope:child + modifier = annoyed_opinion + opinion = -10 + } + + stress_impact = { + callous = minor_stress_impact_loss + } + + random_list = { + desc = mpo_events_ariana.0090.c_duel + 50 = { + desc = mpo_events_ariana.0090.c_1 + send_interface_toast = { + title = mpo_events_ariana.0090.c_1 + type = event_toast_effect_good + left_icon = root + right_icon = scope:child + scope:child = { add_trait_force_tooltip = diligent } + } + } + 50 = { + desc = mpo_events_ariana.0090.c_2 + send_interface_toast = { + title = mpo_events_ariana.0090.c_2 + type = event_toast_effect_good + left_icon = root + right_icon = scope:child + scope:child = { add_prowess_skill = 2 } + } + } + } + + ai_chance = { + base = 75 + modifier = { + factor = 1.5 + has_trait = diligent + } + } + } + + # That's nice dear + option = { + name = mpo_events_ariana.0090.a + flavor = mpo_events_ariana.0090.a_flavor + + reverse_add_opinion = { + target = scope:child + modifier = grateful_opinion + opinion = 15 + } + + scope:child = { + add_trait = content + add_character_modifier = { + modifier = mpo_child_herder_modifier + years = 15 + } + } + + stress_impact = { + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + content = minor_stress_impact_loss + } + + ai_chance = { + base = 50 + modifier = { + factor = 0 + OR = { + has_trait = ambitious + has_trait = arrogant + } + } + modifier = { + factor = 1.5 + has_trait = lazy + } + modifier = { + scope:child.age <= 12 + factor = 1.5 + } + } + } + + # You're destined for more + option = { + name = mpo_events_ariana.0090.b + + reverse_add_opinion = { + target = scope:child + modifier = disappointed_opinion + opinion = -15 + } + + random = { + chance = 50 + scope:child = { add_trait = ambitious } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = humble + } + } + modifier = { + factor = 1.5 + has_trait = ambitious + } + } + } +} + +scripted_trigger is_valid_family_mpo_events_ariana_0100 = { + is_available = yes + age >= 14 + OR = { + is_courtier_of = root + is_vassal_or_below_of = root + } + OR = { + prowess >= decent_skill_rating + martial >= decent_skill_rating + } + NOR = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_eunuch_trigger = yes + has_trait = disinherited + has_trait = devoted + has_trait = order_member + has_trait = bastard + } + dynasty = root.dynasty + NOT = { root.primary_heir ?= this } +} + +# A non-marital gender relative is beasting people +mpo_events_ariana.0100 = { + type = character_event + title = mpo_events_ariana.0100.t + desc = mpo_events_ariana.0100.desc + + theme = nomads + + override_background = { reference = mpo_camp_steppe } + + left_portrait = { + character = root + animation = admiration + } + + right_portrait = { + character = scope:warrior + animation = wrestling_victory + } + + cooldown = { years = 10 } + + weight_multiplier = { + base = 1 + modifier = { + add = 10 + OR = { + NOT = { exists = primary_heir } + primary_heir ?= { + NOT = { dynasty = root.dynasty } + } + } + } + } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + government_has_flag = government_is_nomadic + NOT = { exists = designated_heir } + any_child = { + is_valid_family_mpo_events_ariana_0100 = yes + } + } + + immediate = { + random_child = { + limit = { + is_valid_family_mpo_events_ariana_0100 = yes + } + save_scope_as = warrior + add_character_flag = wear_armor + } + } + + option = { + name = mpo_events_ariana.0100.a + + add_prestige = medium_prestige_loss + add_legitimacy = minor_legitimacy_loss + + if = { + limit = { + exists = primary_heir + } + reverse_add_opinion = { + target = primary_heir + modifier = angry_opinion + opinion = -30 + } + } + + set_designated_heir = scope:warrior + + reverse_add_opinion = { + target = scope:warrior + modifier = grateful_opinion + opinion = 30 + } + + every_vassal = { + limit = { has_vassal_stance = parochial } + custom = every_parochial_vassal + add_opinion = { + modifier = disapproval_opinion + target = root + opinion = -15 + } + } + + if = { + limit = { + scope:warrior = { is_wrong_gender_in_faith_trigger = { FAITH = root.faith } } + } + every_vassal = { + limit = { has_vassal_stance = zealot } + custom = every_zealot_vassal + add_opinion = { + modifier = disapproval_opinion + target = root + opinion = -15 + } + } + } + + scope:warrior = { + add_prestige = minor_prestige_gain + add_character_modifier = mpo_destined_leader_modifier + set_knight_status = default + } + + stress_impact = { + base = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + trusting = minor_stress_impact_loss + stubborn = minor_stress_impact_gain + } + + ai_chance = { + base = 10 + opinion_modifier = { opinion_target = scope:warrior multiplier = 2 } + modifier = { + factor = 0 + has_trait = stubborn + } + } + } + + option = { + name = mpo_events_ariana.0100.b + + if = { + limit = { + scope:warrior = { is_wrong_gender_in_faith_trigger = { FAITH = root.faith } } + } + every_vassal = { + limit = { has_vassal_stance = zealot } + custom = every_zealot_vassal + add_opinion = { + modifier = disapproval_opinion + target = root + opinion = -15 + } + } + } + + scope:warrior = { + add_prestige = miniscule_prestige_gain + add_character_modifier = ignores_gender_army_rules + set_knight_status = default + } + + if = { + limit = { + scope:warrior = { NOT = { has_trait = craven } } + } + reverse_add_opinion = { + target = scope:warrior + modifier = grateful_opinion + opinion = 15 + } + } + + ai_chance = { + base = 50 + opinion_modifier = { opinion_target = scope:warrior multiplier = 2 } + } + } + + option = { + name = mpo_events_ariana.0100.c + trigger = { + has_dlc_feature = reform_culture + } + + add_character_modifier = { + modifier = mpo_diverse_warriors_modifier + years = 10 + } + + stress_impact = { + ambitious = minor_stress_impact_loss + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_rationality = 0.5 + ai_boldness = 1 + } + modifier = { + factor = 2 + culture.culture_head = root + } + } + } + + option = { + name = mpo_events_ariana.0100.d + + if = { + limit = { + scope:warrior = { is_wrong_gender_in_faith_trigger = { FAITH = root.faith } } + } + add_piety = minor_piety_gain + } + + reverse_add_opinion = { + target = scope:warrior + modifier = disappointed_opinion + opinion = -15 + } + + stress_impact = { + callous = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + opinion_modifier = { opinion_target = scope:warrior multiplier = -1 } + } + } + + after = { + scope:warrior = { remove_character_flag = wear_armor } + } +} + +scripted_trigger is_valid_county_0110 = { + uses_county_fertility = yes + is_landless_type_title = no + NOT = { this = root.capital_county } + OR = { + county_fertility > root.capital_county.county_fertility + county_opinion > root.capital_county.county_opinion + } +} + +# Your court astrologer wants you to move your capital +mpo_events_ariana.0110 = { + type = character_event + title = mpo_events_ariana.0110.t + desc = { + desc = mpo_events_ariana.0110.desc + random_valid = { + triggered_desc = { + trigger = { + scope:current_capital = { county_fertility <= 25 } + } + desc = mpo_events_ariana.0110.desc_fertility + } + triggered_desc = { + trigger = { + scope:current_capital = { county_opinion < 0 } + } + desc = mpo_events_ariana.0110.desc_opinion + } + } + desc = mpo_events_ariana.0110.desc_ending + } + + theme = nomads + + override_background = { reference = mpo_camp_steppe } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:astrologer + animation = storyteller + } + + cooldown = { years = 25 } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + government_has_flag = government_is_nomadic + employs_court_position = court_astrologer_court_position + capital_county ?= { + OR = { + county_fertility <= 25 + county_opinion < 0 + } + } + any_held_title = { + tier = tier_county + is_valid_county_0110 = yes + } + } + + immediate = { + random_courtier = { + limit = { + has_court_position = court_astrologer_court_position + } + save_scope_as = astrologer + } + capital_county = { + save_scope_as = current_capital + } + random_held_title = { + limit = { + tier = tier_county + is_valid_county_0110 = yes + } + save_scope_as = new_capital + } + } + + option = { + name = mpo_events_ariana.0110.a + primary_title = { set_capital_county = scope:new_capital } + set_realm_capital = scope:new_capital + hidden_effect = { domicile = { move_domicile = scope:new_capital.title_province } } + + add_piety = minor_piety_gain + + reverse_add_opinion = { + target = scope:astrologer + modifier = pleased_opinion + opinion = 15 + } + + stress_impact = { + loyal = minor_stress_impact_loss + trusting = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + cynical = minor_stress_impact_gain + } + + hidden_effect = { + random = { + chance = 50 + trigger_event = { + id = mpo_events_ariana.0111 + days = { 30 90 } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = paranoid + has_trait = arbitrary + has_trait = cynical + } + } + modifier = { + factor = 2 + OR = { + has_trait = trusting + has_trait = loyal + } + } + opinion_modifier = { opinion_target = scope:astrologer multiplier = 2 } + } + } + + option = { + name = mpo_events_ariana.0110.b + + reverse_add_opinion = { + target = scope:astrologer + modifier = disappointed_opinion + opinion = -15 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -0.5 + } + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + has_trait = cynical + } + desc = mpo_events_ariana.0110.c_cynical + } + desc = mpo_events_ariana.0110.c + } + } + } + + add_piety = minor_piety_loss + + stress_impact = { + zealous = minor_stress_impact_gain + cynical = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + } + + revoke_court_position = { + recipient = scope:astrologer + court_position = court_astrologer_court_position + } + + add_character_modifier = { + modifier = mpo_home_sweet_home_modifier + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + } + modifier = { + factor = 2 + OR = { + has_trait = paranoid + has_trait = arbitrary + } + } + opinion_modifier = { opinion_target = scope:astrologer multiplier = -2 } + } + } +} + +mpo_events_ariana.0111 = { + type = character_event + title = mpo_events_ariana.0111.t + desc = mpo_events_ariana.0111.desc + + theme = nomads + + override_background = { reference = mpo_camp_steppe } + + left_portrait = { + character = root + animation = admiration + } + + right_portrait = { + character = scope:astrologer + animation = happiness + } + + option = { + name = mpo_events_ariana.0111.a + add_prestige = minor_prestige_gain + scope:new_capital = { change_county_fertility = major_county_fertility_gain } + scope:astrologer = { + add_learning_skill = 1 + } + } +} diff --git a/events/dlc/mpo/mpo_events_tova.txt b/events/dlc/mpo/mpo_events_tova.txt new file mode 100644 index 00000000..8bcc2fb4 --- /dev/null +++ b/events/dlc/mpo/mpo_events_tova.txt @@ -0,0 +1,1870 @@ +namespace = mpo_events_tova + +mpo_events_tova.0001 = { #Child expects gift after long journey + type = character_event + title = mpo_events_tova.0001.t + desc = mpo_events_tova.0001.desc + + theme = nomads + override_background = { + trigger = { + is_landed = yes + } + reference = corridor_day + } + override_background = { + trigger = { + is_landed = no + } + reference = bp1_bonfire + } + + cooldown = { years = 10 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + root = { + OR = { + has_trait = cynical + has_trait = callous + } + } + } + animation = personality_cynical + } + animation = shame + } + + right_portrait = { + character = scope:demanding_relation + animation = admiration + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available = yes + } + + option = { #Increase Wanderer Lifestyle Experience by telling the child of your travels. + name = mpo_events_tova.0001.a + + duel = { + skill = learning + target = scope:demanding_relation + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0001.a.tt.success + add_wanderer_lifestyle_xp = medium_lifestyle_experience + send_interface_toast = { + title = mpo_events_tova.0001.a.tt.success + left_icon = root + right_icon = scope:demanding_relation + reverse_add_opinion = { + target = scope:demanding_relation + modifier = pleased_opinion + opinion = 25 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0001.a.tt.failure + send_interface_toast = { + title = mpo_events_tova.0001.a.tt.failure + left_icon = scope:demanding_relation + reverse_add_opinion = { + target = scope:demanding_relation + modifier = insult_opinion + opinion = -25 + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + } + } + + option = { #Purchase child a gift. + name = mpo_events_tova.0001.b + + hidden_effect = { + create_artifact = { + name = gifted_toy_name + description = gifted_toy_desc + modifier = artifact_learning_1_modifier + type = miscellaneous + visuals = pocket_toy + save_scope_as = wanderer_toy + } + } + + remove_short_term_gold = tiny_gold_value + reverse_add_opinion = { + target = scope:demanding_relation + modifier = pleased_opinion + opinion = 15 + } + + send_interface_toast = { + title = mpo_events_tova.0001.b.equipped_tt + left_icon = scope:demanding_relation + right_icon = scope:wanderer_toy + scope:wanderer_toy = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 1 + } + set_owner = { + target = scope:demanding_relation + history = { + location = root.capital_province + actor = root + recipient = scope:demanding_relation + type = given + } + } + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + modifier = { + gold <= medium_gold_value + factor = 0 + } + } + } + + option = { #Gift false relic. + name = mpo_events_tova.0001.c + + duel = { + skill = intrigue + target = scope:demanding_relation + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0001.c.tt.success + send_interface_toast = { + title = mpo_events_tova.0001.c.tt.success + left_icon = scope:demanding_relation + reverse_add_opinion = { + target = scope:demanding_relation + modifier = pleased_opinion + opinion = 25 + } + scope:demanding_relation = { + if = { + limit = { + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = honest + number_of_personality_traits < childhood_personality_trait_gain_limit + } + } + add_diplomacy_skill = 1 + add_intrigue_skill = -1 + } + else = { + random_list = { + 3 = { + add_trait = trusting + } + 3 = { + add_trait = compassionate + } + 3 = { + add_trait = honest + } + } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0001.c.tt.failure + send_interface_toast = { + title = mpo_events_tova.0001.c.tt.failure + left_icon = scope:demanding_relation + reverse_add_opinion = { + target = scope:demanding_relation + modifier = insult_opinion + opinion = -25 + } + scope:demanding_relation = { + if = { + limit = { + OR = { + has_trait = paranoid + has_trait = shy + has_trait = craven + number_of_personality_traits < childhood_personality_trait_gain_limit + } + } + add_diplomacy_skill = -1 + add_intrigue_skill = 1 + } + else = { + random_list = { + 3 = { + add_trait = paranoid + } + 3 = { + add_trait = shy + } + 3 = { + add_trait = craven + } + } + } + } + } + } + } + stress_impact = { + base = minor_stress_impact_gain + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + craven = minor_stress_impact_loss + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } +} + +#Check for province that could be interesting for a Monument Expedition. +scripted_trigger tova_events_2_province_requirements = { + NOT = { + culture = root.culture + } + has_special_building = yes + NOR = { + has_building_or_higher = generic_copper_mines_01 + has_building_or_higher = generic_silver_mines_01 + has_building_or_higher = generic_gold_mines_01 + has_building_with_flag = special_mine + } + "squared_distance(root.location)" <= squared_distance_monstrous +} + +mpo_events_tova.0002 = { #Hear musician playing unrecognized song about distant home. + type = character_event + title = mpo_events_tova.0002.t + desc = mpo_events_tova.0002.desc + + theme = nomads + + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = happiness + } + + right_portrait = { + character = scope:musician + animation = alto_flute_active + } + + override_background = { + trigger = { + is_landed = yes + } + reference = corridor_day + } + + override_background = { + trigger = { + is_landed = no + } + reference = bp1_bonfire + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available = yes + any_special_building_province = { + tova_events_2_province_requirements = yes + } + } + + immediate = { + random_special_building_province = { + limit = { + tova_events_2_province_requirements = yes + } + save_scope_as = journey_province + } + if = { + limit = { + any_pool_character = { + province = scope:journey_province + NOT = { + culture = scope:journey_province.county.culture + } + is_available_ai_adult = yes + } + } + random_pool_character = { + province = scope:journey_province + limit = { + NOT = { + culture = scope:journey_province.county.culture + } + is_available_ai_adult = yes + } + save_scope_as = musician + } + } + else = { + create_character = { + template = poet_template + location = root.location + culture = scope:journey_province.county.culture + save_scope_as = musician + } + } + } + + option = { #Talk to musician to discover POI and improve cultural acceptance. + name = mpo_events_tova.0002.a + custom_tooltip = mpo_events_tova.0002.a.tt + + add_to_variable_list = { + name = extra_journey_target + target = scope:journey_province + } + culture = { + change_cultural_acceptance = { + target = scope:journey_province.county.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_enjoyed_music + } + } + stress_impact = { + ambitious = minor_stress_impact_loss + shy = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_compassion = 1 + } + } + } + + option = { #Recruit musician over shared love of music. + name = mpo_events_tova.0002.b + flavor = mpo_events_tova.0002.b.flavor + + duel = { + skill = learning + target = scope:musician + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0002.b.tt.success + send_interface_toast = { + title = mpo_events_tova.0002.b.tt.success + left_icon = scope:musician + add_courtier = scope:musician + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0002.b.tt.failure + send_interface_toast = { + title = mpo_events_tova.0002.b.tt.failure + left_icon = scope:musician + add_prestige = minor_prestige_loss + } + } + } + } + + option = { #Rest and reduce stress. + name = mpo_events_tova.0002.c + + if = { + limit = { + has_trait = impatient + } + add_stress = miniscule_stress_loss + } + else_if = { + limit = { + has_trait = lazy + } + add_stress = medium_stress_loss + } + else = { + add_stress = minor_stress_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_greed = -1 + } + } + } +} + +mpo_events_tova.0003 = { #Peasants mock ruler and face deadly consequences. + type = character_event + title = mpo_events_tova.0003.t + desc = mpo_events_tova.0003.desc + + theme = migration + + override_background = { reference = ep2_hunt_foggy_forest } + + override_effect_2d = { + reference = fog + } + + cooldown = { years = 20 } + + left_portrait = { + character = scope:peasant_actor_eldest + animation = prisonhouse + } + right_portrait = { + character = scope:stray_executioner + animation = menacing + } + lower_left_portrait = { + character = scope:peasant_actor_middle + } + lower_right_portrait = { + character = scope:peasant_actor_youngest + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_travelling_adult = yes + is_landed = yes + is_ai = no + is_location_valid_for_travel_event_on_land = yes + location = { + has_holding = yes + terrain = forest + } + exists = location.county.holder + location.county.holder = { is_ai = yes } + NOR = { + this = location.county.holder + is_liege_or_above_of = location.county.holder + } + } + + immediate = { + location = { + save_scope_as = unruly_province + } + location.county.holder = { + save_scope_as = unruly_province_owner + } + create_character = { + template = new_warrior_character + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + gender = male + save_scope_as = stray_executioner + } + create_character = { + template = peasant_character + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + gender = female + age = 57 + save_scope_as = actor_mother + } + hidden_effect = { + scope:actor_mother ?= { + silent_disappearance_effect = yes + } + } + create_character = { + template = peasant_character + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + gender = male + age = 63 + save_scope_as = actor_father + } + hidden_effect = { + scope:actor_father ?= { + silent_disappearance_effect = yes + } + } + create_character = { + template = bp1_doppelganger_template + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + mother = scope:actor_mother + father = scope:actor_father + random_traits = yes + gender = male + age = 31 + save_scope_as = peasant_actor_eldest + } + hidden_effect = { + scope:peasant_actor_eldest = { + copy_inheritable_appearance_from = scope:unruly_province_owner + } + } + create_character = { + template = peasant_character + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + mother = scope:actor_mother + father = scope:actor_father + random_traits = yes + gender = male + age = 28 + save_scope_as = peasant_actor_middle + } + create_character = { + template = peasant_character + location = root.location + culture = scope:unruly_province.culture + faith = scope:unruly_province.faith + mother = scope:actor_mother + father = scope:actor_father + random_traits = yes + gender = male + age = 27 + save_scope_as = peasant_actor_youngest + } + } + + option = { #Actually, the actors are mine and I want them back. + name = mpo_events_tova.0003.a + custom_tooltip = mpo_events_tova.0003.a.tt + + duel = { + skill = intrigue + target = scope:stray_executioner + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0003.a.tt.success + send_interface_toast = { + title = mpo_events_tova.0003.a.tt.success + add_courtier = scope:peasant_actor_eldest + add_courtier = scope:peasant_actor_middle + add_courtier = scope:peasant_actor_youngest + root = { + add_character_modifier = { + modifier = charlatan_inspiration + years = 5 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0003.a.tt.failure + send_interface_toast = { + title = mpo_events_tova.0003.a.tt.failure + left_icon = scope:unruly_province_owner + reverse_add_opinion = { + target = scope:unruly_province_owner + modifier = insult_opinion + opinion = -25 + } + scope:peasant_actor_eldest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_middle = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_youngest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + } + } + } + } + + option = { #Convince the executioner to spare the prisoners' lives. + name = mpo_events_tova.0003.b + custom_tooltip = mpo_events_tova.0003.b.tt + + duel = { + skill = diplomacy + target = scope:stray_executioner + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0003.b.tt.success + send_interface_toast = { + title = mpo_events_tova.0003.b.tt.success + left_icon = scope:unruly_province_owner + add_prestige = medium_prestige_gain + add_piety = medium_piety_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0003.b.tt.failure + send_interface_toast = { + title = mpo_events_tova.0003.b.tt.failure + left_icon = scope:unruly_province_owner + reverse_add_opinion = { + target = scope:unruly_province_owner + modifier = insult_opinion + opinion = -25 + } + scope:peasant_actor_eldest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_middle = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_youngest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + } + } + } + } + + option = { #I have places to be. + name = mpo_events_tova.0003.c + + scope:peasant_actor_eldest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_middle = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + scope:peasant_actor_youngest = { + death = { + death_reason = death_execution + killer = scope:stray_executioner + } + } + + current_travel_plan = { + add_travel_plan_modifier = travel_speed_actor + } + + if = { + limit = { + root.faith = { + religion_tag = christianity_religion + } + has_trait = zealous + } + add_stress = medium_stress_loss + } + else_if = { + limit = { + NOT = { + has_trait = sadistic + has_trait = vengeful + has_trait = compassionate + } + } + add_stress = medium_stress_gain + } + else = { + stress_impact = { + sadistic = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + compassionate = major_stress_impact_gain + } + } + } + after = { + scope:stray_executioner = { + silent_disappearance_effect = yes + } + } +} + +mpo_events_tova.0004 = { #Rank Disloyalty + type = character_event + title = mpo_events_tova.0004.t + desc = mpo_events_tova.0004.desc + + theme = migration + + override_background = { + reference = bp1_bonfire + } + cooldown = { years = 20 } + + left_portrait = { + character = root + animation = anger + } + + right_portrait = { + character = scope:maa_leader + animation = drink + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_travelling_adult = yes + is_landed = yes + is_ai = no + is_location_valid_for_travel_event_on_land = yes + exists = location.county.holder + location.county.holder = root + location = { + has_stationed_regiment = yes + } + location.county = { + county_opinion <= -10 + } + } + + immediate = { + location = { + save_scope_as = maa_province + } + create_character = { + template = new_warrior_character + location = root.location + culture = root.culture + faith = root.faith + trait = drunkard + gender = male + save_scope_as = maa_leader + } + } + + option = { #Stricter rations will teach them dicipline. + name = mpo_events_tova.0004.a + flavor = mpo_events_tova.0004.a.flavor + custom_tooltip = mpo_events_tova.0004.a.tt + + add_short_term_gold = medium_gold_value + + scope:maa_province = { + add_province_modifier = { + modifier = sold_provisions + years = 5 + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + } + + hidden_effect = { + random = { + chance = 15 + trigger_event = { + ID = mpo_events_tova.0006 + days = { 2 3 } + } + } + } + } + option = { #I will have the leader's head. + name = mpo_events_tova.0004.b + custom_tooltip = mpo_events_tova.0004.b.tt + + scope:maa_province = { + add_province_modifier = { + modifier = diminished_regiment + years = 5 + } + } + add_character_modifier = { + modifier = reluctant_recruits + years = 5 + } + + if = { + limit = { + OR = { + has_trait = sadistic + has_trait = vengeful + has_trait = wrathful + } + } + add_stress = medium_stress_loss + } + else_if = { + limit = { + OR = { + has_trait = forgiving + has_trait = compassionate + has_trait = calm + } + } + add_stress = medium_stress_gain + } + else = { + add_stress = minor_stress_gain + } + } + option = { #I will pay for better provisions. + name = mpo_events_tova.0004.c + + remove_treasury_or_gold = medium_treasury_or_gold_value + + add_character_modifier = { + modifier = celebrated_leader + years = 5 + } + + stress_impact = { + greedy = medium_stress_impact_gain + generous = medium_stress_impact_loss + } + ai_chance = { + base = 1 + modifier = { + treasury_or_gold <= major_treasury_or_gold_value + factor = 0 + } + } + } + after = { + scope:maa_leader = { + silent_disappearance_effect = yes + } + } +} + +mpo_events_tova.0005 = { #Happy Soldiers + title = mpo_events_tova.0005.t + desc = mpo_events_tova.0005.desc + type = character_event + + theme = migration + + override_background = { reference = bp1_bonfire } + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = happiness + } + + right_portrait = { + character = scope:maa_happy_leader + animation = drink + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_travelling_adult = yes + is_landed = yes + is_ai = no + is_location_valid_for_travel_event_on_land = yes + days_of_continuous_peace = 365 + exists = location.county.holder + location.county.holder = root + location = { + has_stationed_regiment = yes + } + location.county = { + county_opinion >= 10 + } + } + + immediate = { + location = { + save_scope_as = maa_happy_province + } + create_character = { + template = new_warrior_character + location = root.location + culture = root.culture + faith = root.faith + gender = male + save_scope_as = maa_happy_leader + } + } + + option = { #Whip the lazy bums into shape + name = mpo_events_tova.0005.a + + scope:maa_happy_province = { + add_province_modifier = { + modifier = whipped_soldiers + years = 5 + } + } + + stress_impact = { + patient = medium_stress_impact_gain + calm = medium_stress_impact_gain + } + } + + option = { #Dicipline them for not being vigilant. + name = mpo_events_tova.0005.b + + add_character_modifier = { + modifier = alert_soldiers + years = 5 + } + stress_impact = { + patient = medium_stress_impact_gain + calm = medium_stress_impact_gain + } + } + + option = { #Take their happiness and kind words to heart. + name = mpo_events_tova.0005.c + + stress_impact = { + base = major_stress_loss + paranoid = minor_stress_impact_gain + } + } +} + +mpo_events_tova.0006 = { #Just Desserts + opening = mpo_events_tova.0006.t + desc = mpo_events_tova.0006.desc + type = letter_event + + sender = scope:sender + + immediate = { + if = { + limit = { + exists = cp:councillor_steward + } + cp:councillor_steward = { + save_scope_as = sender + } + } + else_if = { + limit = { + exists = cp:councillor_marshal + } + cp:councillor_marshal = { + save_scope_as = sender + } + } + else_if = { + limit = { + exists = cp:councillor_chancellor + } + cp:councillor_chancellor = { + save_scope_as = sender + } + } + } + + trigger = { + OR = { + exists = cp:councillor_steward + exists = cp:councillor_marshal + exists = cp:councillor_chancellor + } + } + + option = { #Hunger makes men desperate, it seems. + name = mpo_events_tova.0006.a + + scope:maa_province.county = { + change_development_level = -2 + } + } +} + +mpo_events_tova.0025 = { # You are invited to a knucklebone shooting game + type = character_event + title = mpo_events_tova.0025.t + desc = mpo_events_tova.0025.desc + + theme = nomads + + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:challenger_anda + animation = hero_flex + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + culture = { + OR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + } + } + is_available_adult = yes + any_courtier = { + has_relation_blood_brother = root + is_available_ai_adult = yes + } + } + + immediate = { + random_courtier = { + limit = { + has_relation_blood_brother = root + is_available_ai_adult = yes + } + save_scope_as = challenger_anda + } + } + + option = { # I will outsmart them all! + name = mpo_events_tova.0025.a + duel = { + skill = intrigue + target = scope:challenger_anda + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0025.a.tt.success + send_interface_toast = { + title = mpo_events_tova.0025.a.tt.success + left_icon = root + right_icon = scope:challenger_anda + reverse_add_opinion = { + target = scope:challenger_anda + modifier = impressed_opinion + opinion = 25 + } + add_character_modifier = { + modifier = mpo_sharp_wits_modifier + years = 10 + } + stress_impact = { + deceitful = minor_stress_loss + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0025.a.tt.failure + send_interface_toast = { + title = mpo_events_tova.0025.a.tt.failure + left_icon = root + reverse_add_opinion = { + target = scope:challenger_anda + modifier = disappointed_opinion + opinion = -25 + } + add_prestige = minor_prestige_loss + stress_impact = { + just = minor_stress_gain + honest = minor_stress_gain + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -2 + ai_compassion = -1 + ai_rationality = -1 + ai_boldness = -1 + } + } + } + + option = { # I will crush my opponents' tokens! + name = mpo_events_tova.0025.b + duel = { + skill = prowess + target = scope:challenger_anda + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0025.b.tt.success + send_interface_toast = { + title = mpo_events_tova.0025.b.tt.success + left_icon = root + right_icon = scope:challenger_anda + reverse_add_opinion = { + target = scope:challenger_anda + modifier = impressed_opinion + opinion = 25 + } + add_character_modifier = { + modifier = mpo_thunder_knuckles_modifier + years = 10 + } + stress_impact = { + ambitious = medium_stress_impact_loss + + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_events_tova.0025.b.tt.failure + send_interface_toast = { + title = mpo_events_tova.0025.b.tt.failure + left_icon = scope:challenger_anda + reverse_add_opinion = { + target = scope:challenger_anda + modifier = disappointed_opinion + opinion = -25 + } + add_prestige = minor_prestige_loss + stress_impact = { + brave = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_sociability = 0.5 + } + modifier = { + OR = { + has_trait = lazy + has_trait = craven + } + factor = 0 + } + } + } + + option = { # Nah + name = mpo_events_tova.0025.c + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + factor = 20 + } + } + } +} + +mpo_events_tova.0030 = { # No astrologer? Someone comes to you with a vision + type = character_event + title = mpo_events_tova.0030.t + desc = { + desc = mpo_events_tova.0030.desc + random_valid = { + desc = mpo_events_tova.0030.desc_red + desc = mpo_events_tova.0030.desc_white + desc = mpo_events_tova.0030.desc_green + } + desc = mpo_events_tova.0030.desc_outro + } + + theme = nomads + override_background = { reference = mpo_steppe_evening } + + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:visionary + animation = personality_zealous + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + NOT = { + employs_court_position = court_astrologer_court_position + } + any_courtier_or_guest = { + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + can_be_employed_as = court_astrologer_court_position + } + + } + + immediate = { + ordered_courtier = { + limit = { + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + can_be_employed_as = court_astrologer_court_position + } + order_by = { + value = learning + if = { + limit = { has_trait = lifestyle_mystic } + add = 2 + } + } + if = { + limit = { + NOT = { has_trait = lifestyle_mystic } + } + add_trait = lifestyle_mystic + } + else = { + add_learning_skill = 2 + } + save_scope_as = visionary + } + } + + option = { # You are truly blessed with special talents! + name = mpo_events_tova.0030.a + add_hook = { + target = scope:visionary + type = obligation_hook + } + custom_tooltip = obligation_hook_tt + court_position_grant_effect = { + EMPLOYER = root + POS = court_astrologer + CANDIDATE = scope:visionary + } + reverse_add_opinion = { + target = scope:visionary + modifier = grateful_opinion + opinion = 30 + } + + stress_impact = { + zealous = minor_stress_impact_loss + cynical = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_zeal = 1 + } + modifier = { + factor = 0 + has_trait = cynical + } + } + } + + option = { # The heavens must favor me and my deeds + name = mpo_events_tova.0030.b + if = { + limit = { + has_focus_martial = yes + } + add_character_modifier = { + modifier = mpo_heavens_favor_martial_modifier + years = 10 + } + } + else_if = { + limit = { + has_focus_intrigue = yes + } + add_character_modifier = { + modifier = mpo_heavens_favor_modifier + years = 10 + } + } + else_if = { + limit = { + has_focus_diplomacy = yes + } + add_character_modifier = { + modifier = mpo_heavens_favor_diplo_modifier + years = 10 + } + } + else = { + add_legitimacy = medium_legitimacy_gain + } + + stress_impact = { + zealous = minor_stress_impact_loss + cynical = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_greed = -1 + } + } + } + + option = { # What a story! + name = mpo_events_tova.0030.c + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } +} + +mpo_events_tova.0035 = { # Anda comes to you with marital concerns + type = character_event + title = mpo_events_tova.0035.t + desc = mpo_events_tova.0035.desc + + theme = nomads + override_background = { reference = mpo_tent_interior_mongol } + + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = shock + } + + right_portrait = { + character = scope:distressed_anda + animation = worry + } + + lower_right_portrait = { + character = scope:pregnant_woman + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_courtier = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + is_married = yes + is_male = yes + is_attracted_to_women = yes + primary_spouse = { + can_have_children = yes + is_available_ai = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 3 + any_courtier = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + is_married = yes + is_male = yes + is_attracted_to_women = yes + primary_spouse = { + is_pregnant = yes + } + } + } + modifier = { + add = -0.5 + any_courtier = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + is_married = yes + is_male = yes + is_attracted_to_women = yes + primary_spouse = { + is_pregnant = no + } + } + } + } + + immediate = { + random_courtier = { + limit = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + is_married = yes + is_male = yes + is_attracted_to_women = yes + primary_spouse = { + can_have_children = yes + is_available_ai = yes + } + } + save_scope_as = distressed_anda + } + scope:distressed_anda = { + primary_spouse = { + save_scope_as = pregnant_woman + } + } + hidden_effect = { + scope:pregnant_woman = { + if = { + limit = { + NOT = { + has_trait = pregnant + } + } + make_pregnant = { father = scope:distressed_anda } + } + } + } + } + + option = { # Rejoice! The heavens sent you a child. + name = mpo_events_tova.0035.a + custom_tooltip = mpo_events_tova.0035.a.tt + add_piety = medium_piety_gain + reverse_add_opinion = { + target = scope:pregnant_woman + modifier = grateful_opinion + opinion = 30 + } + hidden_effect = { + random = { + chance = 33 + scope:pregnant_woman = { + add_character_flag = blessed_baby + } + } + } + stress_impact = { + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = cynical + factor = 0 + } + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + option = { # Blatant lies! + name = mpo_events_tova.0035.b + scope:distressed_anda = { + divorce_effect = { + DIVORCER = scope:distressed_anda + DIVORCEE = scope:pregnant_woman + } + random = { + chance = 33 + if = { + limit = { + NOT = { + has_trait = shrewd + } + } + add_trait = shrewd + } + else = { add_intrigue_skill = 2 } + } + } + reverse_add_opinion = { + target = scope:distressed_anda + modifier = grateful_opinion + opinion = 30 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { # That is the funniest thing I ever heard! + name = mpo_events_tova.0035.c + stress_impact = { + base = medium_stress_impact_loss + compassionate = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + reverse_add_opinion = { + target = scope:distressed_anda + modifier = insulted_opinion + opinion = -30 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -1 + } + } + } +} + +mpo_events_tova.0045 = { # Anda comes bearing gifts + type = character_event + title = mpo_events_tova.0045.t + desc = { + desc = mpo_events_tova.0045.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:knucklebone_gift } + desc = mpo_events_tova.0045.desc_knucklebone + } + triggered_desc = { + trigger = { exists = scope:herd_gift } + desc = mpo_events_tova.0045.desc_herd + } + desc = mpo_events_tova.0045.desc_axe + } + } + + theme = nomads + override_background = { reference = mpo_campfire_steppe } + + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = happiness + } + + right_portrait = { + character = scope:generous_anda + triggered_animation = { + trigger = { + exists = scope:knucklebone_gift + } + animation = steward + } + triggered_animation = { + trigger = { + exists = scope:herd_gift + } + animation = admiration + } + animation = marshal_axe + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + culture = { + OR = { + has_cultural_pillar = heritage_mongolic + has_cultural_pillar = heritage_turkic + } + } + is_available_adult = yes + any_courtier = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + } + NOT = { + AND = { + has_character_flag = knucklebone_gift + has_character_flag = herd_gift + has_character_flag = axe_gift + } + } + } + + immediate = { + random_courtier = { + limit = { + has_relation_blood_brother = root + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + } + save_scope_as = generous_anda + } + random_list = { + 3 = { + trigger = { + NOT = { + has_character_flag = knucklebone_gift + } + } + hidden_effect = { + create_artifact = { + name = gifted_bone_name + description = gifted_bone_desc + modifier = artifact_monthly_prestige_3_modifier + type = miscellaneous + visuals = pocket_pouch + save_scope_as = gift + } + } + add_character_flag = knucklebone_gift + save_scope_as = knucklebone_gift + } + 3 = { + trigger = { + NOT = { + has_character_flag = herd_gift + domicile = { + herd >= major_herd_value + } + } + } + add_character_flag = herd_gift + save_scope_as = herd_gift + } + 3 = { + trigger = { + NOT = { + has_character_flag = axe_gift + } + } + hidden_effect = { + create_artifact = { + name = gifted_axe_name + description = gifted_axe_desc + modifier = artifact_prowess_3_modifier + type = axe + visuals = axe + save_scope_as = gift + } + } + add_character_flag = axe_gift + } + } + } + + option = { # I will treasure this gift. + name = mpo_events_tova.0045.a + if = { + limit = { + exists = scope:gift + } + send_interface_toast = { + title = mpo_events_tova.0045.a.equipped_tt + left_icon = root + right_icon = scope:gift + scope:gift = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 1 + } + set_owner = { + target = root + history = { + location = root.capital_province + actor = scope:generous_anda + recipient = root + type = given + } + } + } + } + } + else = { + domicile ?= { change_herd = medium_herd_gain } + } + + stress_impact = { + greedy = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + option = { # Your friendship is the only gift I need. + name = mpo_events_tova.0045.b + if = { + limit = { + exists = scope:gift + } + send_interface_toast = { + title = mpo_events_tova.0045.a.equipped_tt + left_icon = scope:generous_anda + right_icon = scope:gift + scope:gift = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 1 + } + set_owner = { + target = scope:generous_anda + history = { + location = root.capital_province + actor = scope:generous_anda + recipient = scope:generous_anda + type = given + } + } + } + } + } + reverse_add_opinion = { + target = scope:generous_anda + modifier = grateful_opinion + opinion = 30 + } + + stress_impact = { + base = medium_stress_impact_loss + greedy = major_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_sociability = 0.5 + } + } + } +} diff --git a/events/dlc/mpo/mpo_flavor_events_settled.txt b/events/dlc/mpo/mpo_flavor_events_settled.txt new file mode 100644 index 00000000..c9135fde --- /dev/null +++ b/events/dlc/mpo/mpo_flavor_events_settled.txt @@ -0,0 +1,456 @@ +namespace = mpo_flavor_events_settled + +# mpo_flavor_events_settled.0001 - You hear of a Havsarsan Zud +# mpo_flavor_events_settled.0010 - Horse Lord at your door + +####################### +# You hear of a Havsarsan Zud +####################### +mpo_flavor_events_settled.0001 = { + type = character_event + title = mpo_flavor_events_settled.0001.t + desc = mpo_flavor_events_settled.0001.desc + theme = nomads + override_background = { reference = ep3_city_gate } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + animation = schadenfreude + } + triggered_animation = { + trigger = { + OR = { + has_trait = brave + has_trait = arrogant + } + } + animation = dismissal + } + animation = worry + } + right_portrait = { + character = scope:nomad + animation = horse_exhausted + camera = camera_event_horse_right + } + widget = { + gui = "event_window_widget_vfx_snowstorm" + container = "foreground_shader_vfx_container" + } + cooldown = { years = 10 } + + trigger = { + has_mpo_dlc_trigger = yes + NOT = { government_has_flag = government_is_nomadic } + OR = { + any_character_situation = { # You are a settled ruler in the Great Steppe + any_participant_group = { + participant_group_type = settled_rulers + participant_group_has_character = root + } + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + any_sub_realm_county = { # You are neighbouring the Great Steppe + any_neighboring_county = { + holder != root + any_county_situation = { + situation:the_great_steppe ?= this + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + } + } + } + } + } + } + + immediate = { + if = { + limit = { + any_neighboring_top_liege_realm_owner = { + government_has_flag = government_is_nomadic + } + } + random_neighboring_top_liege_realm_owner = { + limit = { government_has_flag = government_is_nomadic } + save_scope_as = nomad_lord + } + } + else = { + random_ruler = { + limit = { + in_diplomatic_range = root + government_has_flag = government_is_nomadic + } + save_scope_as = nomad_lord + } + } + create_character = { + location = root.location + template = nomadic_hunter_template + faith = scope:nomad_lord.faith + culture = scope:nomad_lord.culture + save_scope_as = nomad + } + scope:nomad = { add_trait = nomadic_philosophy } + } + + option = { # Get out + name = mpo_flavor_events_settled.0001.aa + reason = faith + add_internal_flag = special + trigger = { + faith = { + trait_is_virtue = callous + } + } + add_piety = medium_piety_gain + stress_impact = { + callous = major_stress_impact_loss + generous = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = callous + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = paranoid + } + } + } + } + + option = { # Let's prepare + name = mpo_flavor_events_settled.0001.a + remove_short_term_gold = medium_gold_value + every_sub_realm_county = { + limit = { holder = root } + add_county_modifier = { + modifier = mpo_settled_preparations_war_county_modifier + years = 15 + } + } + stress_impact = { + wrathful = medium_stress_impact_loss + brave = medium_stress_impact_loss + craven = medium_stress_impact_gain + greedy = medium_stress_impact_gain + avaricious = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = brave + } + factor = 0 + } + modifier = { + OR = { + short_term_gold <= major_gold_value + has_trait = greedy + has_trait = avaricious + has_trait = craven + } + factor = 0 + } + } + } + + option = { # We should focus on building + name = mpo_flavor_events_settled.0001.b + every_sub_realm_county = { + limit = { holder = root } + add_county_modifier = { + modifier = mpo_settled_preparations_building_county_modifier + years = 10 + } + } + stress_impact = { + compassionate = major_stress_impact_loss + greedy = medium_stress_impact_gain + avaricious = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # Recruit this guy + name = mpo_flavor_events_settled.0001.c + trigger = { + NOT = { + faith = { + trait_is_virtue = callous + } + } + } + add_courtier = scope:nomad + if = { + limit = { + faith = { trait_is_virtue = compassionate } + } + add_piety = major_piety_gain + } + else = { + add_piety = medium_piety_gain + } + stress_impact = { + compassionate = major_stress_impact_loss + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + after = { + custom_tooltip = mpo_flavor_events_settled.0001.tt + if = { + limit = { is_ai = yes } + scope:nomad = { silent_disappearance_effect = yes } + } + } +} + +####################### +# Horse Lord at your door +####################### +scripted_trigger mpo_flavor_events_settled_0010_valid_nomad_lord_trigger = { + government_has_flag = government_is_nomadic + NOR = { + is_close_family_of = root + is_vassal_of = root + is_tributary_of = root + this = root.liege + this = root.suzerain + } + any_character_situation = { + situation:the_great_steppe ?= this + } +} + +mpo_flavor_events_settled.0010 = { + type = character_event + title = mpo_flavor_events_settled.0010.t + desc = mpo_flavor_events_settled.0010.desc + theme = nomads + override_background = { reference = ep3_city_gate } + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:nomad + animation = horse_conversing_left + camera = camera_event_horse_right + } + lower_right_portrait = scope:nomad_lord + cooldown = { years = 10 } + + trigger = { + has_mpo_dlc_trigger = yes + NOR = { + government_has_flag = government_is_nomadic + any_primary_war_enemy = { government_has_flag = government_is_nomadic } + } + any_neighboring_top_liege_realm_owner = { + mpo_flavor_events_settled_0010_valid_nomad_lord_trigger = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + any_neighboring_top_liege_realm_owner = { + government_has_flag = government_is_nomadic + highest_held_title_tier >= tier_kingdom + } + factor = 2 + } + } + + immediate = { + random_neighboring_top_liege_realm_owner = { + limit = { mpo_flavor_events_settled_0010_valid_nomad_lord_trigger = yes } + weight = { + base = 1 + modifier = { + highest_held_title_tier >= tier_kingdom + add = 5 + } + } + save_scope_as = nomad_lord + } + create_character = { + location = root.location + template = nomadic_commander_template + faith = scope:nomad_lord.faith + culture = scope:nomad_lord.culture + save_scope_as = nomad + } + hidden_effect = { + scope:nomad = { add_trait = nomadic_philosophy } + scope:nomad_lord = { add_courtier = scope:nomad } + } + } + + option = { # Pay tribute + name = mpo_flavor_events_settled.0010.a + trigger = { + OR = { + scope:nomad_lord.primary_title.tier > root.primary_title.tier + scope:nomad_lord.current_military_strength > root.current_military_strength + } + } + start_tributary_interaction_effect = { + TRIBUTARY = root + SUZERAIN = scope:nomad_lord + } + scope:nomad_lord = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 25 + } + } + add_prestige = medium_prestige_gain + stress_impact = { + vengeful = major_stress_impact_loss + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } + + option = { # Pay to get truce + name = mpo_flavor_events_settled.0010.b + trigger = { + NOR = { + scope:nomad_lord.primary_title.tier > root.primary_title.tier + scope:nomad_lord.current_military_strength > root.current_military_strength + } + } + if = { + limit = { + has_perk = defensive_measures_perk + } + custom_tooltip = mpo_flavor_events_settled.0010.b_perk_tt + pay_short_term_gold = { + target = scope:nomad_lord + gold = root.purchase_truce_interaction_small_sum + } + add_truce_both_ways = { + character = scope:nomad_lord + days = purchase_truce_interaction_truce_days_medium_value + name = TRUCE_PURCHASED + } + } + else = { + pay_short_term_gold = { + target = scope:nomad_lord + gold = root.purchase_truce_interaction_medium_sum + } + add_truce_both_ways = { + character = scope:nomad_lord + days = purchase_truce_interaction_truce_days_medium_value + name = TRUCE_PURCHASED + } + } + stress_impact = { + brave = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + + ai_chance = { + base = 50 + modifier = { + OR = { + has_trait = content + has_trait = craven + } + factor = 2 + } + modifier = { + OR = { + has_trait = brave + has_trait = ambitious + has_trait = arrogant + has_trait = greedy + gold <= root.purchase_truce_interaction_major_sum + } + factor = 0 + } + } + } + + option = { # Offend them + name = mpo_flavor_events_settled.0010.c + add_dread = medium_dread_value + scope:nomad_lord = { + progress_towards_rival_effect = { + CHARACTER = root + OPINION = -40 + REASON = rival_disrespected_envoy + } + } + stress_impact = { + callous = major_stress_impact_loss + craven = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 0 + modifier = { + add = 150 + has_trait = callous + current_military_strength > scope:nomad_lord.current_military_strength + } + } + } + + option = { # Let's just be friends + name = mpo_flavor_events_settled.0010.d + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + scope:nomad_lord = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 5 + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + } + ai_chance = { + base = 200 + } + } + + after = { + if = { + limit = { is_ai = yes } + scope:nomad = { silent_disappearance_effect = yes } + } + } +} \ No newline at end of file diff --git a/events/dlc/mpo/mpo_jamukha_flavor_events.txt b/events/dlc/mpo/mpo_jamukha_flavor_events.txt new file mode 100644 index 00000000..e7216f79 --- /dev/null +++ b/events/dlc/mpo/mpo_jamukha_flavor_events.txt @@ -0,0 +1,450 @@ +namespace = mpo_jamukha_flavor + +####################### +# Become Blood Brothers with Temujin +####################### + +mpo_jamukha_flavor.0001 = { + type = character_event + title = mpo_jamukha_flavor.0001.t + desc = mpo_jamukha_flavor.0001.desc + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = happiness + camera = camera_event_very_left + } + right_portrait = { + character = scope:temujin + animation = inspect_weapon + } + + trigger = { + scope:temujin = { + is_alive = yes + NOR = { + has_relation_blood_brother = root + has_relation_rival = root + } + } + is_alive = yes + } + + immediate = { + play_music_cue = "mx_cue_touching_moment" + scope:temujin = { + save_scope_as = blood_bro + } + } + + option = { # Yay + name = mpo_jamukha_flavor.0001.a + name = mpo_jamukha_flavor.0001.a.tt + scope:temujin = { + set_relation_blood_brother = { + target = scope:jamukha + reason = blood_brother_temujin_jamukha + } + } + + if = { + limit = { + NOR = { + has_character_flag = had_warhorse_story + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + scope:jamukha = { + NOR = { + has_character_flag = had_warhorse_story + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + } + } + custom_tooltip = temujin_warhorse_jamukha_tt + custom_tooltip = jamukha_warhorse_jamukha_tt + hidden_effect = { + start_warhorse_story_cycle_effect = yes + scope:temujin = { + start_warhorse_story_cycle_effect = yes + } + } + } + custom_tooltip = blood_brother_gains_hook_tt + custom_tooltip = blood_brother_gains_hook_other_tt + + add_character_modifier = blood_brother_warrior_modifier + scope:temujin = { + add_character_modifier = blood_brother_warrior_modifier + } + + stress_impact = { + gregarious = medium_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # Not a chance + name = mpo_jamukha_flavor.0001.b + add_dread = minor_dread_gain + add_prestige = minor_prestige_gain + scope:temujin = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -25 + } + } + stress_impact = { + base = minor_stress_impact_gain + callous = medium_stress_impact_loss + gregarious = medium_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } +} + +####################### +# You consider breaking free from Temujin +####################### + +scripted_effect mpo_jamukha_flavor_0010_jamukha_leaving_effect = { + if = { + limit = { is_vassal_of = scope:temujin } + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + becomes_independent = { + change = scope:change + } + resolve_title_and_vassal_change = scope:change + } + else = { + end_tributary = yes + } + add_truce_both_ways = { + character = scope:temujin + years = 5 + name = temujin_jamukha_truce + } + if = { + limit = { + current_military_strength < scope:temujin.current_military_strength + } + domicile ?= { + change_herd = { + value = scope:temujin.domicile.herd + multiply = 0.5 + } + } + } + if = { + limit = { + exists = scope:togrul + } + show_as_tooltip = { + custom_tooltip = negotiate_togrul_alliance_effect_tooltip + create_alliance = { + target = scope:togrul + allied_through_owner = root + allied_through_target = scope:togrul + } + scope:togrul = { + add_opinion = { + target = scope:jamukha + modifier = event_negotiated_alliance_opinion + } + } + } + } + custom_tooltip = jamukha_temujin_response_warning_tt +} + +scripted_trigger mpo_jamukha_flavor_0010_togrul_trigger = { + is_ai = yes + is_at_war = no + is_alive = yes + is_ruler = yes + NOR = { + is_at_war_with = root + has_relation_rival = root + is_vassal_of = scope:temujin + } + in_diplomatic_range = root + NOT = { + government_has_flag = government_is_herder + } +} + +mpo_jamukha_flavor.0010 = { + type = character_event + title = mpo_jamukha_flavor.0010.t + desc = { + desc = mpo_jamukha_flavor.0010.desc + triggered_desc = { + trigger = { + exists = scope:togrul + } + desc = mpo_jamukha_flavor.0010.desc_togrul + } + } + theme = nomads + override_background = { + reference = mpo_steppe_evening + } + left_portrait = { + character = root + animation = war_attacker + camera = camera_event_very_left + } + right_portrait = { + character = scope:temujin + animation = dismissal + camera = camera_event_very_right + } + lower_right_portrait = scope:togrul + + trigger = { + character:125501 = { + has_variable = had_mpo_temujin_flavor_0001 + } + is_alive = yes + is_ruler = yes + character:125501 = { + is_alive = yes + is_available = yes + } + OR = { + is_vassal_of = character:125501 + is_tributary_of = character:125501 + } + NOT = { + is_at_war_with = character:125501 + } + } + + immediate = { + save_scope_as = jamukha + character:125501 = { + save_scope_as = temujin + } + if = { + limit = { + character:303211 = { + mpo_jamukha_flavor_0010_togrul_trigger = yes + } + } + character:303211 = { + save_scope_as = togrul + } + } + else_if = { + limit = { + character:303211.house ?= { + any_house_member = { + mpo_jamukha_flavor_0010_togrul_trigger = yes + } + } + } + character:303211.house ?= { + ordered_house_member = { + order_by = current_military_strength + limit = { + mpo_jamukha_flavor_0010_togrul_trigger = yes + } + save_scope_as = togrul + } + } + } + else = { + capital_county.empire ?= { + ordered_de_jure_county_holder = { + order_by = current_military_strength + limit = { + highest_held_title_tier <= tier_duchy + mpo_jamukha_flavor_0010_togrul_trigger = yes + } + save_scope_as = togrul + } + } + } + } + + #I want to leave Temujin and take Togrul as an ally + option = { + name = mpo_jamukha_flavor.0010.a + show_as_tooltip = { + mpo_jamukha_flavor_0010_jamukha_leaving_effect = yes + } + scope:temujin = { + trigger_event = mpo_temujin_flavor.0010 + add_opinion = { + target = root + modifier = betrayal_opinion + opinion = -40 + } + } + ai_chance = { + base = 100 + } + } + + #I want to stay with Temujin and be friends forever + option = { + name = mpo_jamukha_flavor.0010.b + add_character_modifier = { + modifier = jamukha_chose_loyalty_modifier + years = 5 + } + scope:temujin = { + add_opinion = { + target = root + modifier = loyalty_opinion + opinion = 30 + } + } + stress_impact = { + base = miniscule_stress_impact_gain + } + ai_chance = { + base = 0 + } + } + + on_trigger_fail = { # Jamukha becomes your rival anyways if you've migrated away + if = { + limit = { + is_independent_ruler = yes + NOT = { is_tributary_of = scope:temujin } + } + hidden_effect = { + scope:temujin = { + trigger_event = { + days = { 360 420 } + id = mpo_temujin_flavor.0020 + } + } + } + } + } +} + +####################### +# Temujin becomes your rival -- now you must kill him +####################### + +mpo_jamukha_flavor.0020 = { + type = character_event + title = mpo_jamukha_flavor.0020.t + desc = mpo_jamukha_flavor.0020.desc + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = threatening + camera = camera_event_very_left + } + right_portrait = { + character = scope:temujin + animation = aggressive_sword + outfit_tags = { nightgown } + camera = camera_event_very_right + } + window = scheme_conclusion_event_no_header + + immediate = { + play_music_cue = "mx_cue_murder" + custom_tooltip = jamukha_temujin_no_more_positive_tt + custom_tooltip = jamukha_temujin_rivals_tt + custom_tooltip = mpo_temujin_flavor.0020.cb.tt + if = { + limit = { + current_military_strength < scope:temujin.current_military_strength + } + domicile ?= { + change_herd = { + value = scope:temujin.domicile.herd + multiply = 1.5 + } + } + add_prestige = major_prestige_gain # For MAA maintenance, mainly + custom_tooltip = jamukha_gain_from_defectors_tt + } + } + + option = { # You who I once called brother + name = mpo_jamukha_flavor.0020.a + reason = blood_brother + add_internal_flag = special + trigger = { has_character_flag = was_temujins_bro } + custom_tooltip = { + text = mpo_jamukha_flavor.0020.a_war_win + set_variable = temujin_jamukha_war_var + } + add_character_modifier = { + modifier = temujin_jamukha_war_modifier + years = 5 + } + stress_impact = { + base = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Murderrrrrrr + name = mpo_jamukha_flavor.0020.b + custom_tooltip = { + text = mpo_jamukha_flavor.0020.b_murder + set_variable = { + name = temujin_jamukha_murder_var + value = scope:temujin + } + } + stress_impact = { + deceitful = massive_stress_impact_loss + sadistic = massive_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + + option = { # I'm going to crush your skull + name = mpo_jamukha_flavor.0020.c + trigger = { + NOT = { has_relation_blood_brother = scope:jamukha } + } + add_character_modifier = { + modifier = temujin_jamukha_war_smaller_modifier + years = 5 + } + stress_impact = { + wrathful = massive_stress_impact_loss + vengeful = massive_stress_impact_loss + } + ai_chance = { + base = 100 + } + } +} diff --git a/events/dlc/mpo/mpo_migration_events.txt b/events/dlc/mpo/mpo_migration_events.txt new file mode 100644 index 00000000..a89ad8ee --- /dev/null +++ b/events/dlc/mpo/mpo_migration_events.txt @@ -0,0 +1,4571 @@ +namespace = migration_events + +############################ +## Mechanical Migration Events +## 0001-0099 +############################ + +# migration_events.0001 - Arrival at Migration destination, title transfer + +# Arrival at Migration destination, title transfer +migration_events.0001 = { + type = character_event + title = migration_events.0001.t + desc = { + first_valid = { # Season + triggered_desc = { + trigger = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_severe_drought_season + situation_sub_region_has_county = root.location.county + } + } + } + desc = migration_events.0001.desc.drought + } + triggered_desc = { + trigger = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + desc = migration_events.0001.desc.white_zud + } + triggered_desc = { + trigger = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + desc = migration_events.0001.desc.havsarsan_zud + } + triggered_desc = { + trigger = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + situation_sub_region_has_county = root.location.county + } + } + } + desc = migration_events.0001.desc.blessing + } + desc = migration_events.0001.desc.intro + } + first_valid = { # Relationship + triggered_desc = { + trigger = { + has_variable = migrating_into_tributary_var + } + desc = migration_events.0001.desc.tributary + } + triggered_desc = { + trigger = { + scope:recipient = { government_has_flag = government_is_herder } + } + desc = migration_events.0001.desc.herder + } + triggered_desc = { + trigger = { + scope:recipient = { + OR = { + is_obedient_to = root + has_any_good_relationship_with_root_trigger = yes + } + } + } + desc = migration_events.0001.desc.nomad_obedient + } + triggered_desc = { + trigger = { + scope:recipient = { + has_any_bad_relationship_with_root_trigger = yes + } + } + desc = migration_events.0001.desc.nomad_angry + } + desc = migration_events.0001.desc.nomad + } + first_valid = { # Fertility + triggered_desc = { + trigger = { + location.county.county_fertility >= good_county_fertility_level + } + desc = migration_events.0001.desc.good + } + triggered_desc = { + trigger = { + location.county.county_fertility <= bad_county_fertility_level + } + desc = migration_events.0001.desc.bad + } + desc = migration_events.0001.desc.meh + } + } + theme = migration + override_background = { + trigger = { + OR = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + } + reference = bp3_steppe_winter + } + override_background = { + trigger = { + NOR = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_sky_blessing_season + situation_sub_region_has_county = root.location.county + } + } + } + } + reference = mpo_steppe_evening + } + widgets = { + widget = { + is_shown = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + widget = { + is_shown = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + gui = "event_window_widget_vfx_snowstorm" + container = "foreground_shader_vfx_container" + } + } + left_portrait = { + character = scope:actor + animation = horse_archer_idle + camera = camera_event_horse_left + } + right_portrait = { + character = scope:recipient + triggered_animation = { + trigger = { + scope:recipient = { government_has_flag = government_is_herder } + } + animation = shepherd_with_sheep + } + triggered_animation = { + trigger = { + scope:recipient = { has_any_bad_relationship_with_root_trigger = yes } + } + animation = personality_callous + } + animation = throne_room_bow_1 + camera = camera_event_right_away + } + lower_right_portrait = { + trigger = { exists = scope:overlord } + character = scope:overlord + } + + immediate = { + remove_variable = migration_title + if = { + limit = { + has_variable = migrating_into_tributary_var + } + var:migrating_into_tributary_var = { + save_scope_as = overlord + } + save_scope_as = new_tributary # For the toasts to overlord + } + if = { + limit = { + NOT = { exists = scope:recipient } + } + hidden_effect = { + create_character = { + template = herder_character + faith = root.location.county.faith + culture = root.location.county.culture + location = root.location + save_scope_as = recipient + after_creation = { + remove_character_flag = peasant_outfit + add_to_list = government_change + add_character_flag = created + } + } + } + } + } + + option = { # If you're moving to a Tributary's land we ask you to become a Tributary yourself - Accept + name = migration_events.0001.aaa + trigger = { + has_variable = migrating_into_tributary_var + } + start_tributary_interaction_effect = { + TRIBUTARY = root + SUZERAIN = scope:overlord + } + hidden_effect = { + scope:overlord = { + send_interface_toast = { + left_icon = scope:new_tributary + title = msg_tributary_toast + custom_tooltip = msg_tributary_toast_tt + } + } + } + ai_chance = { + base = 100 + } + } + + option = { # If you're moving to a Tributary's land we ask you to become a Tributary yourself - Refuse + name = migration_events.0001.aa + trigger = { + has_variable = migrating_into_tributary_var + } + scope:overlord = { + custom_tooltip = { + text = migration_events.0001.aa.cb_tt + if = { + limit = { + NOT = { # You don't already have a Retaliation CB on this guy + is_target_in_variable_list = { + name = retaliation_cb_var_list + target = root + } + } + } + add_to_variable_list = { + name = retaliation_cb_var_list + target = root + years = 5 + } + } + } + add_opinion = { + target = root + modifier = angry_opinion + opinion = -50 + } + hidden_effect = { + scope:overlord = { + send_interface_toast = { + left_icon = scope:new_tributary + title = msg_tributary_toast_bad + custom_tooltip = msg_tributary_toast_bad_tt + } + } + } + } + ai_chance = { # AI normally doesn't refuse + base = 10 + modifier = { # Unless... + OR = { + has_trait = ambitious + has_trait = arrogant + } + NOT = { has_trait = craven } + add = 25 + } + modifier = { + current_military_strength >= scope:overlord.current_military_strength + add = 125 + } + } + } + + option = { # Special option if your Astrologer wanted you to come here + name = migration_events.0001.a + add_internal_flag = special + trigger = { + var:astrologer_desired_area ?= root.primary_title + NOT = { has_variable = migrating_into_tributary_var } + } + custom_tooltip = migration_events.0001.a.tt + add_character_modifier = { + modifier = astrologer_desired_area_modifier + years = 5 + } + ai_chance = { + base = 100 + } + } + + option = { + name = migration_events.0001.b + trigger = { + NOR = { + var:astrologer_desired_area ?= root.primary_title + has_variable = migrating_into_tributary_var + } + } + ai_chance = { + base = 100 + } + } + + after = { + remove_variable = migrating_into_tributary_var + scope:recipient = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Arrival at Migration destination through war, triggered if you're moving into a Tributary's lands +migration_events.0002 = { + type = character_event + title = migration_events.0002.t + desc = { + desc = migration_events.0002.desc.intro + first_valid = { + triggered_desc = { + trigger = { + higher_or_equal_dominance_trigger = { + FIRST_TARGET = root + SECOND_TARGET = scope:overlord + } + } + desc = migration_events.0002.desc.high_dominance + } + desc = migration_events.0002.desc + } + } + theme = migration + override_background = { + trigger = { + OR = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_white_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.location.county + } + } + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + } + reference = bp3_steppe_winter + } + widgets = { + widget = { + is_shown = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_cold_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + widget = { + is_shown = { + any_character_situation = { + any_situation_sub_region = { + sub_region_current_phase = situation_steppe_havsarsan_zud_season + situation_sub_region_has_county = root.location.county + } + } + } + gui = "event_window_widget_vfx_snowstorm" + container = "foreground_shader_vfx_container" + } + } + left_portrait = { + character = scope:actor + animation = horse_archer_aggressive + camera = camera_event_horse_left + } + lower_right_portrait = { + trigger = { exists = scope:overlord } + character = scope:overlord + } + + immediate = { + var:migrating_into_tributary_war_var = { + save_scope_as = overlord + } + save_scope_as = new_tributary # For the toasts to overlord + } + + option = { # Accept + name = migration_events.0002.a + trigger = { + higher_dominance_trigger = { + FIRST_TARGET = scope:overlord + SECOND_TARGET = root + } + } + start_tributary_interaction_effect = { + TRIBUTARY = root + SUZERAIN = scope:overlord + } + hidden_effect = { + scope:overlord = { + send_interface_toast = { + left_icon = scope:new_tributary + title = msg_tributary_toast + custom_tooltip = msg_tributary_toast_tt + } + } + } + ai_chance = { + base = 100 + } + } + + option = { # Refuse + name = { + trigger = { + higher_dominance_trigger = { + FIRST_TARGET = scope:overlord + SECOND_TARGET = root + } + } + text = migration_events.0002.b + } + name = { + trigger = { + higher_or_equal_dominance_trigger = { + FIRST_TARGET = root + SECOND_TARGET = scope:overlord + } + } + text = migration_events.0002.b.alt + } + if = { + limit = { + higher_or_equal_dominance_trigger = { + FIRST_TARGET = root + SECOND_TARGET = scope:overlord + } + } + add_legitimacy = medium_legitimacy_gain + } + scope:overlord = { + custom_tooltip = { + text = migration_events.0001.aa.cb_tt + if = { + limit = { + NOT = { # You don't already have a Retaliation CB on this guy + is_target_in_variable_list = { + name = retaliation_cb_var_list + target = root + } + } + } + add_to_variable_list = { + name = retaliation_cb_var_list + target = root + years = 5 + } + } + } + add_opinion = { + target = root + modifier = angry_opinion + opinion = -50 + } + hidden_effect = { + scope:overlord = { + send_interface_toast = { + left_icon = scope:new_tributary + title = msg_tributary_toast_bad + custom_tooltip = msg_tributary_toast_bad_tt + } + } + } + } + ai_chance = { # AI normally doesn't refuse + base = 10 + modifier = { # Unless... + OR = { + has_trait = ambitious + has_trait = arrogant + } + NOT = { has_trait = craven } + add = 120 + } + } + } + + after = { + remove_variable = migrating_into_tributary_war_var + } +} + +scripted_trigger migration_events_1000_local_ruler_trigger = { + NOR = { + this = root + is_allied_to = root + has_truce = root + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + is_liege_or_above_of = root + is_vassal_or_below_of = root + } + OR = { + NOT = { + capital_county ?= root.location.county + } + highest_held_title_tier <= tier_duchy + } + gold >= 0 + NOT = { + has_character_flag = migration_events_1000_victim_flag + } + #If they're present and able to defend, should be weak + trigger_if = { + limit = { + government_has_flag = government_is_nomadic + capital_county ?= root.location.county + } + domicile.herd <= root.domicile.herd + } +} + +###################### +#Migration flavor events +#1000-1999 +# by Jason Cantalini +###################### + +#There's some good hunting and plundering to be had here... +migration_events.1000 = { + type = character_event + title = migration_events.1000.t + desc = { + desc = migration_events.1000.desc + first_valid = { + triggered_desc = { + trigger = { + scope:local_ruler.capital_county ?= root.location.county + } + desc = migration_events.1000.desc.ruler_present + } + desc = migration_events.1000.desc.ruler_away + } + desc = migration_events.1000.desc_outro + } + theme = migration + override_background = { + reference = terrain + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:local_rep + animation = war_defender + } + lower_right_portrait = scope:local_overlord + + trigger = { + age >= 10 + is_migrating = yes + has_mpo_dlc_trigger = yes + location.county = { + uses_county_fertility = yes + } + OR = { + #Holder has lots of gold + AND = { + location.county = { + uses_county_fertility = yes + county_fertility >= 40 + } + location.county.holder = { + gold >= 200 + } + } + #Location is very fertile + location.county = { + county_fertility >= 70 + } + } + location.county.holder = { + migration_events_1000_local_ruler_trigger = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + location.county.holder = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + } + modifier = { + add = 1 + location.county.holder = { + gold > 500 + } + } + modifier = { + add = 1 + location.county = { + county_fertility >= 95 + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + location.county = { + save_scope_as = location_county + } + location.county.holder = { + save_scope_as = local_ruler + add_character_flag = { + flag = migration_events_1000_victim_flag + years = 5 + } + } + #Put in ruler if they are low tier + if = { + limit = { + scope:location_county = scope:local_ruler.capital_county + scope:local_ruler = { + location.county = scope:location_county + NOR = { + is_incapable = yes + has_trait = infirm + age <= 8 + } + } + } + scope:local_ruler = { + save_scope_as = local_rep + } + } + if = { + limit = { + NOT = { + exists = scope:local_rep + } + } + scope:local_ruler = { + random_councillor = { + limit = { + NOT = { + is_spouse_of = root + } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:local_ruler } + } + save_scope_as = local_rep + } + save_scope_as = local_overlord + } + } + if = { + limit = { + NOT = { + exists = scope:local_rep + } + } + scope:local_ruler = { + random_knight = { + save_scope_as = local_rep + } + save_scope_as = local_overlord + } + } + if = { + limit = { + NOT = { + exists = scope:local_rep + } + } + scope:local_ruler = { + random_courtier = { + limit = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:local_ruler } + is_adult = yes + basic_is_available_ai = yes + } + save_scope_as = local_rep + } + save_scope_as = local_overlord + } + } + } + #We can hunt for pelts too! + option = { + trigger = { + has_trait = lifestyle_hunter + NOT = { + location = { + terrain = desert + } + } + } + name = migration_events.1000.a + flavor = migration_events.1000.a.flavor + + add_trait_xp = { + trait = lifestyle_hunter + value = medium_trait_xp + track = hunter + } + add_trait_xp = { + trait = lifestyle_hunter + value = medium_trait_xp + track = falconer + } + mpo_dominance_scaled_minor_gold_gain = yes + reverse_add_opinion = { + modifier = angry_opinion + target = scope:local_ruler + opinion = -20 + } + stress_impact = { + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_energy = 1 + } + modifier = { + factor = 0.5 + scope:local_ruler = { + government_has_flag = government_is_nomadic + domicile.herd > root.domicile.herd + } + } + modifier = { + factor = 0 + has_trait = lazy + } + } + } + #I'm not leaving these people to their riches + option = { + trigger = { + OR = { + scope:local_ruler = { + is_ai = yes + } + is_ai = no + } + } + name = migration_events.1000.b + flavor = migration_events.1000.b.flavor + scope:local_ruler = { + if = { + limit = { + treasury_or_gold >= minor_treasury_or_gold_value + } + pay_treasury_or_gold = { + target = root + value = minor_treasury_or_gold_value + } + } + } + if = { + limit = { + scope:local_ruler = { + government_has_flag = government_is_herder + } + } + domicile = { + change_herd = miniscule_herd_gain + } + reverse_add_opinion = { + target = scope:local_ruler + modifier = angry_opinion + opinion = -40 + } + } + else = { + scope:local_ruler = { + pay_herd = { + target = root + value = domicile.minor_herd_value + } + progress_towards_rival_effect = { + REASON = rival_raided_me + CHARACTER = root + OPINION = -40 + } + } + } + scope:location_county = { + change_county_control = minor_county_control_loss + } + stress_impact = { + greedy = miniscule_stress_impact_loss + fickle = miniscule_stress_impact_loss + just = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + generous = minor_stress_impact_gain + craven = minor_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_compassion = -0.5 + ai_greed = 0.5 + ai_honor = -0.5 + } + modifier = { + factor = 1.5 + scope:local_ruler = { + government_has_flag = government_is_herder + } + } + modifier = { + factor = 0.25 + scope:local_ruler = { + government_has_flag = government_is_nomadic + domicile.herd > root.domicile.herd + } + } + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = just + has_trait = generous + has_trait = craven + } + } + } + } + #Let the animals graze a while; lets grab some horses + option = { + name = migration_events.1000.c + + domicile = { + change_herd = medium_herd_gain + } + reverse_add_opinion = { + modifier = angry_opinion + target = scope:local_ruler + opinion = -20 + } + current_travel_plan = { + delay_travel_plan = { days = 30 } + } + stress_impact = { + content = miniscule_stress_impact_loss + impatient = medium_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.5 + ai_greed = 0.5 + } + modifier = { + factor = 0.5 + scope:local_ruler = { + government_has_flag = government_is_nomadic + domicile.herd > root.domicile.herd + } + } + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = humble + } + } + } + } + #Better to just keep moving + option = { + name = migration_events.1000.d + scope:local_ruler = { + add_opinion = { + modifier = friendliness_opinion + target = root + opinion = 20 + } + } + stress_impact = { + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_compassion = 0.5 + } + modifier = { + factor = 1.5 + scope:local_ruler = { + government_has_flag = government_is_nomadic + domicile.herd > root.domicile.herd + } + } + modifier = { + factor = 0 + has_trait = greedy + } + } + } +} + +scripted_trigger migration_events_1010_deserves_rest_trigger = { + OR = { + has_trait = wounded_2 + has_trait = wounded_3 + health <= poor_health + has_trait = maimed + has_trait = infirm + } +} + +#Wife wants you to get into the great yurt +migration_events.1010 = { + type = character_event + title = migration_events.1010.t + desc = migration_events.1010.desc + theme = migration + override_background = { + reference = wilderness + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:spouse + animation = flirtation_left + } + cooldown = { years = 5 } + + trigger = { + is_married = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_migrating = yes + has_mpo_dlc_trigger = yes + NOT = { + has_realm_law = nomadic_authority_1 + } + is_available_travelling_adult = yes + NOR = { + has_trait = infirm + has_character_modifier = obese_modifier + } + primary_spouse ?= { + is_available_allow_travelling = yes + NOT = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + opinion = { + target = root + value > 0 + } + NOT = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + OR = { + migration_events_1010_deserves_rest_trigger = yes + has_trait = wounded_1 + } + } + modifier = { + add = 1 + primary_spouse ?= { + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + } + } + } + + immediate = { + location.county = { + save_scope_as = location_county + } + primary_spouse = { + save_scope_as = spouse + } + } + #Yeah... I need that anyway + option = { + trigger = { + OR = { + migration_events_1010_deserves_rest_trigger = yes + has_trait = wounded_1 + } + } + name = migration_events.1010.a + random_list = { + 10 = { + trigger = { + has_trait = wounded_1 + } + remove_trait = wounded_1 + } + 10 = { + trigger = { + has_trait = wounded_2 + } + remove_trait = wounded_2 + } + 10 = { + trigger = { + has_trait = wounded_3 + } + remove_trait = wounded_3 + } + 10 = { + trigger = { + has_trait = ill + } + remove_trait = ill + } + 10 = { + trigger = { + has_trait = pneumonic + } + remove_trait = pneumonic + } + 10 = { + add_character_modifier = { + modifier = nomadic_comforts_modifier + years = 5 + } + } + } + + stress_impact = { + base = minor_stress_impact_loss + craven = miniscule_stress_impact_loss + paranoid = miniscule_stress_impact_loss + diligent = miniscule_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_energy = -0.5 + } + modifier = { + factor = 0.5 + has_trait = diligent + } + } + } + #Yeah of course, I love you wife + option = { + trigger = { + OR = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse } + scope:spouse = { + opinion = { + target = root + value >= 80 + } + } + has_trait = gregarious + has_trait = compassionate + has_trait = lustful + has_trait = generous + } + is_attracted_to_gender_of = scope:spouse + scope:spouse = { + is_attracted_to_gender_of = root + NOR = { + has_trait = celibate + has_trait = chaste + } + } + NOR = { + has_trait = celibate + } + } + add_internal_flag = special + name = migration_events.1010.b + if = { + limit = { + scope:spouse = { + is_obedient_to = root + } + } + reverse_add_opinion = { + target = scope:spouse + modifier = love_opinion + opinion = 40 + } + } + else = { + scope:spouse = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + + had_sex_with_effect = { + CHARACTER = scope:spouse + PREGNANCY_CHANCE = pregnancy_chance + } + if = { + limit = { + has_relation_lover = scope:spouse + NOT = { + has_relation_soulmate = scope:spouse + } + } + set_relation_soulmate = { + target = scope:spouse + reason = lover_made_love_on_yurt_wagon + } + } + else = { + progress_towards_lover_effect = { + REASON = lover_made_love_on_yurt_wagon + CHARACTER = scope:spouse + OPINION = 0 + } + } + + stress_impact = { + lustful = miniscule_stress_impact_gain + chaste = medium_stress_impact_gain + humble = miniscule_stress_impact_gain + just = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_honor = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = chaste + has_trait = humble + has_trait = just + } + } + } + } + #I need to be seen riding with my men + option = { + name = migration_events.1010.c + + if = { + limit = { + migration_events_1010_deserves_rest_trigger = yes + health < fine_health + } + add_legitimacy = minor_legitimacy_gain + every_knight = { + custom = custom.every_knight + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + stress_impact = { + base = medium_stress_impact_gain + lazy = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + fickle = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + else = { + add_legitimacy = miniscule_legitimacy_gain + every_knight = { + custom = custom.every_knight + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + stress_impact = { + base = miniscule_stress_impact_gain + lazy = medium_stress_impact_gain + arbitrary = minor_stress_impact_gain + fickle = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = arbitrary + has_trait = fickle + has_trait = arrogant + } + } + } + } + #It does sound comfy... + option = { + name = migration_events.1010.d + flavor = migration_events.1010.d.flavor + if = { + limit = { + any_consort = { + NOT = { + this = scope:spouse + } + } + } + every_consort = { + custom = custom.every_consort + scope:spouse = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 10 + } + } + } + } + else = { + scope:spouse = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 20 + } + } + } + + if = { + limit = { + migration_events_1010_deserves_rest_trigger = no + health < fine_health + } + add_prestige = miniscule_prestige_loss + } + + + stress_impact = { + base = minor_stress_impact_loss + lazy = miniscule_stress_impact_loss + content = miniscule_stress_impact_loss + diligent = minor_stress_impact_gain + humble = miniscule_stress_impact_gain + just = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_energy = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = just + } + } + } + } +} + +scripted_trigger migration_events_1020_valid_aspirant_trigger = { + NOR = { + is_primary_heir_of = root + is_player_heir_of = root + is_heir_of = root + has_trait = loyal + is_obedient_to = root + has_dread_level_towards = { + target = root + level >= 2 + } + } + is_adult = yes + is_courtier_of = root + is_imprisoned = no + is_healthy = yes + OR = { + AND = { + is_male = yes + faith_dominant_gender_male_or_equal = yes + } + AND = { + is_female = yes + faith_dominant_gender_female_or_equal = yes + } + } + ai_boldness >= 0 + ai_energy >= 0 + ai_compassion < medium_positive_ai_value + health >= fine_health +} + +scripted_trigger migration_events_1020_very_eager_trigger = { + OR = { + AND = { + ai_boldness > medium_positive_ai_value + ai_energy > medium_positive_ai_value + } + opinion = { + target = root + value < -60 + } + NOT = { is_obedient_to = root } + } + NOT = { + has_dread_level_towards = { + target = root + level >= 1 + } + } + migration_events_1020_valid_aspirant_trigger = yes +} + +scripted_effect migration_events_1020_pay_minor_herd_effect = { + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_4 + } + } + } + else_if = { + limit = { + has_realm_law = nomadic_authority_3 + } + } + else_if = { + limit = { + has_realm_law = nomadic_authority_2 + } + } + else = { + + } +} + +#Family member wants to take land from local herder +migration_events.1020 = { + type = character_event + title = migration_events.1020.t + desc = migration_events.1020.desc + theme = migration + override_background = { + reference = terrain + } + left_portrait = { + character = root + animation = jockey_walk + camera = camera_event_horse_left_forward + } + right_portrait = { + character = scope:aspirant + animation = horse_surveying + camera = camera_event_horse_right_forward + } + lower_right_portrait = scope:herder + lower_left_portrait = scope:herder_liege + + trigger = { + age >= 6 + is_migrating = yes + has_mpo_dlc_trigger = yes + highest_held_title_tier >= tier_county + is_available_allow_travelling = yes + + #location is takeable herder county + location.county.holder = { + government_has_flag = government_is_herder + OR = { + is_independent_ruler = yes + liege = { + OR = { + is_ai = yes + this = root + } + NOR = { + is_at_war_with = root + is_causing_raid_hostility_towards = root + root = { + is_causing_raid_hostility_towards = prev + } + } + } + } + } + location.county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + } + + #valid breakoff ruler + OR = { + any_child = { + migration_events_1020_valid_aspirant_trigger = yes + } + any_sibling = { + migration_events_1020_valid_aspirant_trigger = yes + } + dynasty ?= { + any_dynasty_member = { + migration_events_1020_valid_aspirant_trigger = yes + } + } + } + #A bit weird if you are great khan and your relatives are begging for some sheep + NOT = { + has_realm_law = nomadic_authority_5 + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + OR = { + any_child = { + migration_events_1020_very_eager_trigger = yes + } + any_sibling = { + migration_events_1020_very_eager_trigger = yes + } + dynasty ?= { + any_dynasty_member = { + migration_events_1020_very_eager_trigger = yes + } + } + } + } + modifier = { + add = -1 + has_realm_law = nomadic_authority_4 + } + } + + cooldown = { + years = 5 + } + + immediate = { + location.county = { + save_scope_as = location_county + holder = { + save_scope_as = herder + if = { + limit = { + is_independent_ruler = no + } + liege = { + save_scope_as = herder_liege + } + } + } + } + if = { + limit = { + exists = dynasty + } + dynasty = { + ordered_dynasty_member = { + order_by = age + limit = { + migration_events_1020_valid_aspirant_trigger = yes + } + save_scope_as = aspirant + } + } + } + if = { + limit = { + NOT = { + exists = scope:aspirant + } + } + ordered_sibling = { + order_by = age + limit = { + migration_events_1020_valid_aspirant_trigger = yes + } + save_scope_as = aspirant + } + } + if = { + limit = { + NOT = { + exists = scope:aspirant + } + } + ordered_child = { + order_by = age + limit = { + migration_events_1020_valid_aspirant_trigger = yes + } + save_scope_as = aspirant + } + } + random_knight = { + limit = { + is_landed = no + is_councillor = no + has_any_court_position = no + NOR = { + is_spouse_of = root + is_heir_of = root + this = scope:aspirant + } + is_available_allow_travelling = yes + is_acclaimed = no + } + save_scope_as = knight_1 + } + random_knight = { + limit = { + is_landed = no + is_councillor = no + has_any_court_position = no + NOR = { + is_spouse_of = root + is_heir_of = root + this = scope:aspirant + this = scope:knight_1 + } + is_available_allow_travelling = yes + is_acclaimed = no + } + save_scope_as = knight_2 + } + save_scope_as = root_scope + } + #Yes, as my tributary of course! + option = { + trigger = { + NOT = { + exists = scope:herder_liege + } + 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_internal_flag = special + name = migration_events.1020.a + + add_prestige = minor_prestige_gain + + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = no + } + scope:location_county = { + change_title_holder = { + holder = scope:aspirant + change = scope:change + } + } + scope:aspirant = { + add_opinion = { + target = root + modifier = helpful_opinion + opinion = 20 + } + } + resolve_title_and_vassal_change = scope:change + scope:aspirant = { + change_government = nomad_government + add_courtier = scope:herder + scope:herder = { + pay_short_term_gold = { + target = scope:aspirant + gold = current_gold_value + } + } + start_tributary_interaction_effect = { + TRIBUTARY = scope:aspirant + SUZERAIN = root + } + } + pay_herd = { + target = scope:aspirant + value = domicile.minor_herd_value + } + + stress_impact = { + generous = medium_stress_impact_gain + humble = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = humble + has_trait = compassionate + } + } + } + } + #I will establish you here properly + option = { + trigger = { + culture = scope:aspirant.culture + domicile = { + herd >= major_herd_value + } + } + name = migration_events.1020.b + flavor = migration_events.1020.b.flavor + + dynasty ?= { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + + } + + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = no + } + scope:location_county = { + change_title_holder = { + holder = scope:aspirant + change = scope:change + } + } + scope:aspirant = { + add_opinion = { + target = root + modifier = helpful_opinion + opinion = 60 + } + progress_towards_friend_effect = { + REASON = friend_granted_title + CHARACTER = root + OPINION = 0 + } + if = { + limit = { + exists = scope:herder_liege + } + change_liege = { + liege = scope:herder_liege + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change + scope:aspirant = { + change_government = nomad_government + } + scope:aspirant = { + add_prestige = medium_prestige_gain + } + scope:location_county = { + if = { + limit = { + NOT = { + culture = scope:aspirant.culture + } + } + set_county_culture = scope:aspirant.culture + } + if = { + limit = { + NOT = { + faith = scope:aspirant.faith + } + } + set_county_faith = scope:aspirant.faith + } + } + scope:aspirant = { + add_courtier = scope:herder + scope:herder = { + pay_short_term_gold = { + target = scope:aspirant + gold = current_gold_value + } + } + if = { + limit = { + exists = scope:knight_1 + } + add_courtier = scope:knight_1 + scope:knight_1 = { + every_spouse = { + limit = { + is_imprisoned = no + is_courtier_of = root + } + scope:aspirant = { + add_courtier = prev + } + } + hidden_effect = { + every_child = { + limit = { + is_imprisoned = no + is_courtier_of = root + is_adult = no + } + scope:aspirant = { + add_courtier = prev + } + } + } + } + } + if = { + limit = { + exists = scope:knight_2 + } + add_courtier = scope:knight_2 + scope:knight_2 = { + every_spouse = { + limit = { + is_imprisoned = no + is_courtier_of = root + } + scope:aspirant = { + add_courtier = prev + } + } + hidden_effect = { + every_child = { + limit = { + is_imprisoned = no + is_courtier_of = root + is_adult = no + } + scope:aspirant = { + add_courtier = prev + } + } + } + } + } + } + pay_herd = { + target = scope:aspirant + value = domicile.major_herd_value + } + add_prestige = medium_prestige_loss + + if = { + limit = { + scope:herder_liege ?= { + NOT = { + this = root + } + } + } + scope:herder_liege = { + reverse_add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -30 + } + } + } + + stress_impact = { + greedy = medium_stress_impact_gain + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_greed = -0.5 + ai_compassion = 0.5 + } + modifier = { + factor = 0 + has_trait = greedy + } + } + } + #Good luck kid + option = { + name = migration_events.1020.c + create_title_and_vassal_change = { + type = usurped + save_scope_as = change + add_claim_on_loss = no + } + scope:location_county = { + change_title_holder = { + holder = scope:aspirant + change = scope:change + } + } + scope:aspirant = { + add_opinion = { + target = root + modifier = helpful_opinion + opinion = 30 + } + if = { + limit = { + exists = scope:herder_liege + } + change_liege = { + liege = scope:herder_liege + change = scope:change + } + } + } + resolve_title_and_vassal_change = scope:change + scope:aspirant = { + change_government = nomad_government + add_courtier = scope:herder + scope:herder = { + pay_short_term_gold = { + target = scope:aspirant + gold = current_gold_value + } + } + } + pay_herd = { + target = scope:aspirant + value = domicile.minor_herd_value + } + + if = { + limit = { + scope:herder_liege ?= { + NOT = { + this = root + } + } + } + scope:herder_liege = { + reverse_add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -30 + } + } + } + + stress_impact = { + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_greed = 0.5 + } + } + } + #No, remain with your people + option = { + name = migration_events.1020.d + + if = { + limit = { + OR = { + has_trait = wrathful + has_trait = sadistic + has_trait = vengeful + has_trait = paranoid + has_trait = torturer + has_trait = overseer + has_trait = greatest_of_khans + has_trait = irritable + } + } + add_dread = miniscule_dread_gain + } + scope:aspirant = { + add_opinion = { + target = root + modifier = refusal_opinion + opinion = -15 + } + } + + stress_impact = { + generous = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = trusting + } + } + } + } +} + +#Your animals are hungry +migration_events.1030 = { + type = character_event + title = migration_events.1030.t + desc = migration_events.1030.desc + theme = migration + override_background = { + reference = mpo_steppe_evening + } + left_portrait = { + character = root + animation = horse_exhausted + camera = camera_event_horse_left + } + lower_right_portrait = scope:local_ruler + + trigger = { + age >= 6 + is_migrating = yes + has_mpo_dlc_trigger = yes + highest_held_title_tier >= tier_county + is_available_allow_travelling = yes + location.county.holder = { + is_ai = yes + NOR = { + has_relation_rival = root + has_relation_nemesis = root + is_at_war_with = root + } + } + location.county = { + uses_county_fertility = yes + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + county_fertility <= 40 + } + domicile = { + herd >= major_herd_value + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + modifier = { + add = 1 + location.county = { + county_fertility <= 10 + } + } + modifier = { + add = 1 + location.county = { + county_fertility <= 20 + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + location.county = { + save_scope_as = location_county + holder = { + save_scope_as = local_ruler + } + } + } + #The local ruler WILL provide good pasture + option = { + trigger = { + dread >= 50 + OR = { + scope:local_ruler = { + has_dread_level_towards = { + target = root + level >= 1 + } + } + has_realm_law = nomadic_authority_5 + AND = { + has_realm_law = nomadic_authority_4 + scope:local_ruler = { + OR = { + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_1 + } + } + } + AND = { + has_realm_law = nomadic_authority_3 + scope:local_ruler = { + has_realm_law = nomadic_authority_1 + } + } + } + } + name = migration_events.1030.a + + add_dread = minor_dread_gain + + reverse_add_opinion = { + modifier = threatened_opinion + target = scope:local_ruler + opinion = -20 + } + current_travel_plan = { + delay_travel_plan = { days = 10 } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + craven = minor_stress_impact_gain + just = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 300 + ai_value_modifier = { + ai_boldness = 0.5 + ai_honor = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = just + has_trait = humble + } + } + } + } + #Sell the animals to the local ruler + option = { + trigger = { + diplomacy > high_skill_rating + trigger_if = { + limit = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + scope:local_ruler.gold >= root.monumental_gold_value + } + trigger_if = { + limit = { + has_realm_law = nomadic_authority_3 + } + scope:local_ruler.gold >= root.massive_gold_value + } + trigger_if = { + limit = { + has_realm_law = nomadic_authority_2 + } + scope:local_ruler.gold >= root.major_gold_value + } + trigger_if = { + limit = { + has_realm_law = nomadic_authority_1 + } + scope:local_ruler.gold >= root.medium_gold_value + } + } + name = migration_events.1030.b + flavor = migration_events.1030.b.flavor + + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + scope:local_ruler = { + pay_treasury_or_gold = { + target = root + value = root.monumental_treasury_or_gold_value + } + } + } + if = { + limit = { + has_realm_law = nomadic_authority_3 + } + scope:local_ruler = { + pay_treasury_or_gold = { + target = root + value = root.massive_treasury_or_gold_value + } + } + } + if = { + limit = { + has_realm_law = nomadic_authority_2 + } + scope:local_ruler = { + pay_treasury_or_gold = { + target = root + value = root.major_treasury_or_gold_value + } + } + } + if = { + limit = { + has_realm_law = nomadic_authority_1 + } + scope:local_ruler = { + pay_treasury_or_gold = { + target = root + value = root.medium_treasury_or_gold_value + } + } + } + + pay_herd = { + target = scope:local_ruler + value = domicile.medium_herd_value + } + reverse_add_opinion = { + modifier = pleased_opinion + target = scope:local_ruler + opinion = 20 + } + + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + generous = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_greed = 0.5 + ai_honor = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = honest + has_trait = just + has_trait = generous + } + } + } + } + #Slaughter the animals and have a feast + option = { + name = migration_events.1030.c + flavor = migration_events.1030.c.flavor + + if = { + limit = { + has_trait = lifestyle_reveler + } + add_trait_xp = { + trait = lifestyle_reveler + value = 10 + } + } + add_prestige = medium_prestige_gain + every_courtier = { + custom = custom.every_courtier + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 20 + } + } + domicile = { + change_herd = major_herd_loss + } + + stress_impact = { + gluttonous = minor_stress_impact_loss + generous = miniscule_stress_impact_loss + gregarious = miniscule_stress_impact_loss + temperate = minor_stress_impact_gain + stubborn = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_greed = -0.5 + } + modifier = { + factor = 0 + has_trait = temperate + } + } + } + #We need to search for somewhere they can graze + option = { + name = migration_events.1030.d + + duel = { + skill = stewardship + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_realm_law = nomadic_authority_1 + add = 20 + } + modifier = { + has_realm_law = nomadic_authority_2 + add = 10 + } + desc = migration_events.1030.d.success + send_interface_toast = { + type = event_toast_effect_good + title = migration_events.1030.d.success + left_icon = root + if = { + limit = { + NOT = { + has_trait = lifestyle_traveler + } + } + add_trait = lifestyle_traveler + } + else = { + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = small_lifestyle_random_xp_mid + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + OR = { + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_4 + } + add = 20 + } + desc = migration_events.1030.d.failure + send_interface_toast = { + type = event_toast_effect_bad + title = migration_events.1030.d.failure + left_icon = root + + domicile = { + change_herd = medium_herd_loss + } + } + } + } + current_travel_plan = { + delay_travel_plan = { days = 20 } + } + + stress_impact = { + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + } + modifier = { + factor = 0 + has_trait = impatient + } + } + } +} + +#Local ruler offers you traditional hospitality and a gift +migration_events.1040 = { + type = character_event + title = migration_events.1040.t + desc = { + desc = migration_events.1040.desc + first_valid = { + triggered_desc = { + trigger = { + root.current_location = { + OR = { + terrain = taiga + terrain = forest + terrain = jungle + terrain = wetlands + } + } + } + desc = migration_events.1040.furs + } + triggered_desc = { + trigger = { + root.current_location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + } + desc = migration_events.1040.camels + } + triggered_desc = { + trigger = { + root.current_location = { + OR = { + terrain = hills + terrain = mountains + terrain = drylands + } + } + } + desc = migration_events.1040.wool + } + desc = migration_events.1040.horses + } + } + theme = migration + override_background = { + reference = mpo_camp_steppe + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:local_ruler + animation = throne_room_bow_1 + } + + trigger = { + age >= 10 + is_migrating = yes + has_mpo_dlc_trigger = yes + location.county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + } + location.county.holder = { + NOT = { this = root } + age >= 12 + basic_is_available_ai = yes + mpo_lower_nomad_authority_trigger = { CHARACTER = root } + OR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + } + NOR = { + has_character_flag = migration_events_1040_giver_flag + is_at_war_with = root + is_causing_raid_hostility_towards = root + root = { + is_causing_raid_hostility_towards = prev + } + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + ai_greed <= low_positive_ai_value + OR = { + opinion = { + target = root + value >= -20 + } + has_dread_level_towards = { + target = root + level >= 1 + } + } + } + } + + weight_multiplier = { + base = 2 + modifier = { + add = -1 + location.county.holder = { + opinion = { + target = root + value <= 0 + } + } + } + modifier = { + add = 1 + location.county.holder = { + opinion = { + target = root + value >= 70 + } + } + } + modifier = { + add = 1 + location.county.holder = { + is_vassal_or_below_of = root + } + } + modifier = { + add = 1 + location.county.holder = { + is_allied_to = root + } + } + modifier = { + add = 1 + location.county.holder = { + has_dread_level_towards = { + target = root + level >= 2 + } + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + location.county = { + save_scope_as = location_county + } + location.county.holder = { + save_scope_as = local_ruler + add_character_flag = { + flag = migration_events_1040_giver_flag + years = 1 + } + } + } + #That's all...? + option = { + trigger = { + OR = { + has_realm_law = nomadic_authority_5 + AND = { + has_realm_law = nomadic_authority_4 + scope:local_ruler = { + NOT = { has_realm_law = nomadic_authority_4 } + } + } + AND = { + has_realm_law = nomadic_authority_3 + scope:local_ruler = { + NOT = { has_realm_law = nomadic_authority_3 } + } + } + } + OR = { + has_trait = avaricious + has_trait = conqueror + has_trait = greatest_of_khans + is_gurkhan = yes + scope:local_ruler = { + has_dread_level_towards = { + target = root + level >= 2 + } + } + } + } + name = migration_events.1040.a + add_internal_flag = special + + add_prestige = minor_prestige_gain + scope:local_ruler = { + pay_herd = { + target = root + value = domicile.medium_herd_value + } + } + scope:local_ruler = { + add_opinion = { + target = root + modifier = humiliated_opinion + opinion = -50 + } + progress_towards_rival_effect = { + REASON = rival_extorted_me_for_gifts + CHARACTER = root + OPINION = 0 + } + } + stress_impact = { + base = minor_stress_impact_loss + greedy = miniscule_stress_impact_loss + temperate = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + humble = miniscule_stress_impact_gain + generous = major_stress_impact_gain + compassionate = medium_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = compassionate + has_trait = content + } + } + } + } + #We can trade gifts! + option = { + trigger = { + domicile = { + herd >= minor_herd_value + } + } + name = migration_events.1040.b + + #Cultural acceptance gain + if = { + limit = { + NOT = { + culture = scope:local_ruler.culture + } + OR = { + root.culture = { + culture_head = root + } + scope:local_ruler.culture = { + culture_head = scope:local_ruler + } + } + } + culture = { + change_cultural_acceptance = { + target = scope:local_ruler.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_meal_of_hospitality + } + } + } + else_if = { + limit = { + NOT = { + culture = scope:local_ruler.culture + } + #These rulers should be at least a little significant + NOT = { + has_realm_law = nomadic_authority_1 + } + is_ai = no + } + culture = { + change_cultural_acceptance = { + target = scope:local_ruler.culture + value = miniscule_cultural_acceptance_gain + desc = cultural_acceptance_meal_of_hospitality + } + } + } + scope:local_ruler = { + add_opinion = { + target = root + modifier = friendliness_opinion + opinion = 20 + } + } + stress_impact = { + base = minor_stress_impact_loss + gluttonous = miniscule_stress_impact_loss + generous = miniscule_stress_impact_loss + temperate = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + paranoid = miniscule_stress_impact_gain + greedy = medium_stress_impact_gain + callous = minor_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_sociability = 1 + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = callous + has_trait = sadistic + AND = { + OR = { + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_4 + } + scope:local_ruler = { + has_realm_law = nomadic_authority_1 + } + } + } + } + } + } + #We have no time to dawdle + option = { + name = migration_events.1040.c + add_character_modifier = { + modifier = mpo_refusing_diplomatic_stops_modifier + months = 6 + } + reverse_add_opinion = { + target = scope:local_ruler + modifier = spurned_gift_opinion + opinion = -25 + } + if = { + limit = { + is_ai = no + } + scope:local_ruler = { + add_prestige = minor_prestige_loss + } + } + stress_impact = { + impatient = minor_stress_impact_loss + gregarious = medium_stress_impact_gain + gluttonous = medium_stress_impact_gain + humble = minor_stress_impact_gain + patient = minor_stress_impact_gain + lazy = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = -1 + ai_energy = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = gregarious + has_trait = gluttonous + has_trait = humble + has_trait = patient + + } + } + } + } + #Yeah, thanks + option = { + name = migration_events.1040.d + + scope:local_ruler = { + pay_herd = { + target = root + value = domicile.miniscule_herd_value + } + } + stress_impact = { + base = minor_stress_impact_loss + gluttonous = miniscule_stress_impact_loss + temperate = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + paranoid = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_greed = 1 + } + } + } +} + +#Your warriors overrun a local settlement and offer you spoils +migration_events.1050 = { + type = character_event + title = migration_events.1050.t + desc = migration_events.1050.desc + theme = migration + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = personality_dishonorable + } + right_portrait = { + character = scope:warrior + animation = random_weapon_celebrate + } + lower_right_portrait = scope:local_ruler + + trigger = { + age >= 6 + is_migrating = yes + has_mpo_dlc_trigger = yes + location.county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + } + location.county.holder = { + NOR = { + has_character_flag = migration_events_1050_raided_flag + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + is_tributary_of = root + root = { + is_tributary_of = prev + } + is_vassal_or_below_of = root + root = { + is_vassal_or_below_of = prev + } + is_allied_to = root + house ?= root.house + has_truce = root + } + } + any_courtier = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + } + } + + weight_multiplier = { + base = 2 + modifier = { + add = -1 + location.county.holder = { + opinion = { + target = root + value >= 60 + } + } + } + modifier = { + add = -1 + location.county.holder = { + culture = root.culture + } + } + modifier = { + add = 1 + location.county.holder = { + OR = { + is_at_war_with = root + is_causing_raid_hostility_towards = root + root = { + is_causing_raid_hostility_towards = prev + } + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + + location.county = { + save_scope_as = location_county + } + location.county.holder = { + save_scope_as = local_ruler + add_character_flag = { + flag = migration_events_1050_raided_flag + years = 1 + } + } + random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } + hidden_effect = { + scope:local_ruler = { + random_list = { + 45 = { + save_scope_value_as = { + name = quality + value = 5 + } + save_scope_value_as = { + name = wealth + value = 5 + } + } + 45 = { + save_scope_value_as = { + name = quality + value = 10 + } + save_scope_value_as = { + name = wealth + value = 10 + } + } + 5 = { + save_scope_value_as = { + name = quality + value = 20 + } + save_scope_value_as = { + name = wealth + value = 20 + } + } + 5 = { + save_scope_value_as = { + name = quality + value = 30 + } + save_scope_value_as = { + name = wealth + value = 30 + } + } + 5 = { + trigger = { + scope:local_ruler = { + highest_held_title_tier >= tier_kingdom + } + } + save_scope_value_as = { + name = quality + value = 40 + } + save_scope_value_as = { + name = wealth + value = 40 + } + } + 5 = { + trigger = { + scope:local_ruler = { + highest_held_title_tier >= tier_empire + } + } + save_scope_value_as = { + name = quality + value = 50 + } + save_scope_value_as = { + name = wealth + value = 50 + } + } + } + clear_saved_scope = root + save_scope_as = root + random_list = { + 1 = { + create_artifact_bow_effect = { OWNER = scope:local_ruler CREATOR = scope:dummy_gender SET_BOW_TYPE = flag:artifact_bow_type_composite } + } + 1 = { + create_artifact_necklace_effect = { OWNER = scope:local_ruler SMITH = scope:dummy_gender } + } + 1 = { + create_artifact_armor_effect = { + OWNER = scope:local_ruler + CREATOR = scope:dummy_gender + SET_ARMOR_TYPE = flag:no + } + } + 1 = { + create_artifact_animal_hide_effect = { + OWNER = scope:local_ruler + HUNTER = scope:local_ruler + LEGENDARY = no + ANIMAL = flag:none + } + } + 1 = { + create_artifact_weapon_effect = { + OWNER = scope:local_ruler + CREATOR = scope:dummy_gender + SET_WEAPON_TYPE = flag:no + } + } + 1 = { + create_artifact_ring_effect = { + OWNER = scope:local_ruler + SMITH = scope:dummy_gender + } + } + 1 = { + create_artifact_bowl_effect = { + OWNER = scope:local_ruler + SMITH = scope:dummy_gender + } + } + 1 = { + create_artifact_brooch_effect = { + OWNER = scope:local_ruler + SMITH = scope:dummy_gender + } + } + } + } + } + clear_saved_scope = root + save_scope_as = root + + random_knight = { + limit = { + is_acclaimed = yes + is_courtier_of = root + } + save_scope_as = warrior + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_knight = { + limit = { + is_courtier_of = root + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_courtier = { + limit = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + } + save_scope_as = warrior + } + } + scope:warrior = { + add_character_flag = need_military_outfit + } + scope:local_ruler = { + add_opinion = { + target = root + opinion = -25 + modifier = raided_me_opinion + } + #Steal from AI if root is player + if = { + limit = { + root = { + is_ai = no + } + } + if = { + limit = { + government_has_flag = government_is_nomadic + } + pay_herd = { + target = root + value = root.domicile.minor_herd_value + } + } + else = { + root.domicile = { + change_herd = minor_herd_gain + } + } + pay_short_term_gold = { + target = root + gold = root.minor_gold_value + } + root.location.county = { + change_county_control = minor_county_control_loss + } + } + #Simply gain resources if not + else = { + root = { + domicile = { + change_herd = minor_herd_gain + } + add_gold = minor_gold_value + } + } + } + } + #You're a bold captain, warrior, and deserve acknowledgement + option = { + trigger = { + OR = { + has_trait = gallant + has_trait = strategist + has_trait = education_martial_prowess_2 + has_trait = education_martial_prowess_3 + has_trait = education_martial_prowess_4 + has_trait = education_martial_3 + has_trait = education_martial_4 + has_trait = education_martial_5 + } + } + name = migration_events.1050.a + + scope:newly_created_artifact = { + add_artifact_history = { + location = root.location + actor = scope:local_ruler + recipient = scope:warrior + type = stolen + } + set_owner = scope:warrior + } + if = { + limit = { + scope:warrior = { + is_acclaimed = yes + } + } + scope:warrior.accolade = { + add_glory = minor_glory_gain + } + scope:warrior = { + add_martial_skill = 1 + } + } + else_if = { + limit = { + scope:warrior = { + NOT = { + has_trait = reaver + } + } + } + scope:warrior = { + add_trait = reaver + add_martial_skill = 1 + } + } + else = { + scope:warrior = { + add_martial_skill = 1 + add_prowess_skill = 1 + } + } + if = { + limit = { + scope:warrior = { + NOT = { is_obedient_to = root } + } + } + scope:warrior = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + else_if = { + limit = { + scope:warrior = { + NOT = { + has_trait = disloyal + } + } + } + scope:warrior = { + add_trait = loyal + } + } + + stress_impact = { + greedy = miniscule_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + + } + } + } + } + #BURN AND DESPOIL AS WE GO + option = { + trigger = { + NOT = { + has_realm_law = nomadic_authority_1 + } + OR = { + has_trait = sadistic + has_trait = greedy + has_trait = wrathful + has_trait = arbitrary + has_trait = avaricious + has_trait = torturer + has_trait = conqueror + has_trait = greatest_of_khans + has_trait = overseer + has_trait = viking + } + } + name = migration_events.1050.b + + #Gain gold and herd every time you travel into a new province + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_3 + culture = { + culture_head = root + } + } + } + custom_tooltip = migration_raiding_effect_tt + } + else = { + custom_tooltip = migration_raiding_effect_no_culture_tt + } + scope:newly_created_artifact = { + add_artifact_history = { + location = root.location + actor = scope:local_ruler + recipient = root + type = stolen + } + set_owner = root + } + + add_character_flag = { + flag = migration_raiding_flag + years = 1 + } + add_dread = minor_dread_gain + + stress_impact = { + compassionate = minor_stress_impact_gain + craven = minor_stress_impact_gain + just = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = -1 + ai_greed = 1 + } + modifier = { + factor = 0.5 + has_realm_law = nomadic_authority_3 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = craven + has_trait = compassionate + has_trait = just + has_trait = paranoid + } + } + } + } + #This was cruel, and all loot should be returned to the survivors + option = { + trigger = { + OR = { + has_trait = just + has_trait = compassionate + has_trait = generous + has_trait = forgiving + has_trait = trusting + has_trait = humble + has_trait = diplomat + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + } + } + name = migration_events.1050.c + + hidden_effect = { + destroy_artifact = scope:newly_created_artifact + } + #Increase culture acceptance + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_3 + culture = { + culture_head = root + } + } + NOT = { + culture = scope:local_ruler.culture + } + } + culture = { + change_cultural_acceptance = { + target = scope:local_ruler.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_recompense_for_raiding + } + } + + } + else = { + add_piety = medium_piety_gain + } + scope:local_ruler = { + add_opinion = { + target = root + modifier = kindness_opinion + opinion = 50 + } + } + location.county = { + change_county_control = minor_county_control_gain + } + remove_short_term_gold = minor_gold_value + domicile = { + change_herd = minor_herd_loss + } + + stress_impact = { + greedy = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + vengeful = miniscule_stress_impact_gain + sadistic = minor_stress_impact_gain + callous = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_compassion = 1 + ai_greed = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = arbitrary + has_trait = arrogant + has_trait = sadistic + has_trait = callous + } + } + } + } + #Distribute my share among my men + option = { + name = migration_events.1050.d + + scope:newly_created_artifact = { + add_artifact_history = { + location = root.location + actor = scope:local_ruler + recipient = scope:warrior + type = stolen + } + set_owner = scope:warrior + } + + remove_short_term_gold = minor_gold_value + domicile = { + change_herd = minor_herd_loss + } + if = { + limit = { + any_knight = { + NOT = { + this = scope:warrior + } + } + } + every_knight = { + custom = custom.every_knight + if = { + limit = { + root = { has_realm_law = nomadic_authority_1 } + } + add_opinion = { + target = root + opinion = 25 + modifier = loyalty_opinion + } + add_prowess_skill = 1 + } + else_if = { + limit = { + root = { has_realm_law = nomadic_authority_2 } + } + add_opinion = { + target = root + opinion = 20 + modifier = loyalty_opinion + } + add_prowess_skill = 1 + } + else_if = { + limit = { + root = { has_realm_law = nomadic_authority_3 } + } + add_opinion = { + target = root + opinion = 15 + modifier = loyalty_opinion + } + add_stress = minor_stress_impact_loss + } + else = { + add_opinion = { + target = root + opinion = 10 + modifier = loyalty_opinion + } + add_stress = minor_stress_impact_loss + } + } + } + else = { + scope:warrior = { + if = { + limit = { + root = { has_realm_law = nomadic_authority_1 } + } + add_prowess_skill = 1 + } + else_if = { + limit = { + root = { has_realm_law = nomadic_authority_2 } + } + add_prowess_skill = 1 + } + else_if = { + limit = { + root = { has_realm_law = nomadic_authority_3 } + } + add_stress = minor_stress_impact_loss + } + else = { + add_stress = minor_stress_impact_loss + } + } + } + + if = { + limit = { + any_knight = { + NOT = { is_obedient_to = root } + } + } + random_knight = { + limit = { NOT = { is_obedient_to = root } } + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + stress_impact = { + greedy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = arrogant + } + } + } + } + #I will take my share + option = { + name = migration_events.1050.e + + #Gain artifact + + scope:newly_created_artifact = { + add_artifact_history = { + location = root.location + actor = scope:local_ruler + recipient = root + type = stolen + } + set_owner = root + } + + stress_impact = { + generous = minor_stress_impact_gain + humble = minor_stress_impact_gain + just = miniscule_stress_impact_gain + compassionate = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = humble + } + } + } + } + after = { + scope:warrior = { + remove_character_flag = need_military_outfit + } + } +} + +migration_events.1051 = { + hidden = yes + + immediate = { + location = { + save_scope_as = raided_settlement + } + send_interface_message = { + type = event_raiding_good_with_text + title = migration_events.1051_title + desc = migration_events.1051_tooltip + left_icon = scope:local_ruler + + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + } + } + add_gold = medium_gold_value + } + if = { + limit = { + OR = { + has_realm_law = nomadic_authority_3 + has_realm_law = nomadic_authority_2 + } + } + add_gold = minor_gold_value + } + if = { + limit = { + has_realm_law = nomadic_authority_1 + } + add_gold = miniscule_gold_value + } + domicile = { + change_herd = miniscule_herd_gain + } + #Decrease culture acceptance and opinion wherever you go + reverse_add_opinion = { + opinion = -20 + modifier = raided_me_opinion + target = scope:local_ruler + } + if = { + limit = { + NOT = { + culture = scope:local_ruler.culture + } + OR = { + has_realm_law = nomadic_authority_4 + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_3 + culture = { + culture_head = root + } + } + } + culture = { + change_cultural_acceptance = { + target = scope:local_ruler.culture + value = miniscule_cultural_acceptance_loss + desc = cultural_acceptance_raiding_migrators + } + } + } + if = { + limit = { + scope:local_ruler = { + is_ai = yes + } + } + location.county = { + change_county_control = miniscule_county_control_loss + } + } + } + } +} + +#It's tough going getting through the local terrain. Your young warriors are frustrated and want to ride ahead to the destination +migration_events.1060 = { + type = character_event + title = migration_events.1060.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + root = { + location_has_harsh_winter_trigger = yes + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + desc = migration_events.1060.desc_winter + } + triggered_desc = { + trigger = { + root.location = { + terrain = desert + } + } + desc = migration_events.1060.desc_desert + } + triggered_desc = { + trigger = { + root.location = { + OR = { + terrain = forest + terrain = taiga + } + } + } + desc = migration_events.1060.desc_forest + } + triggered_desc = { + trigger = { + root.location = { + terrain = wetlands + } + } + desc = migration_events.1060.desc_wetlands + } + desc = migration_events.1060.desc_hilly + } + desc = migration_events.1060.desc + } + theme = migration + override_background = { + reference = wilderness + } + left_portrait = { + character = root + animation = horse_exhausted + camera = camera_event_horse_very_left + } + right_portrait = { + character = scope:warrior + animation = horse_surveying + camera = camera_event_horse_right_facing_left + } + + trigger = { + age >= 10 + is_migrating = yes + has_mpo_dlc_trigger = yes + location = { + OR = { + terrain = desert_mountains + terrain = mountains + terrain = hills + terrain = desert + terrain = forest + terrain = wetlands + terrain = taiga + AND = { + has_province_modifier = winter_harsh_modifier + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + } + any_courtier = { + is_adult = yes + age < 50 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + ai_energy >= 0 + } + current_travel_plan = { + final_destination_province.county = { + NOT = { + has_county_modifier = mpo_migration_prepared_home_modifier + } + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 1 + location = { + OR = { + terrain = desert_mountains + terrain = mountains + terrain = desert + terrain = wetlands + } + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + location.county = { + save_scope_as = location_county + } + location = { + save_scope_as = root_location + } + location.county.holder = { + save_scope_as = local_ruler + add_character_flag = { + flag = migration_events_1040_giver_flag + years = 1 + } + } + if = { + limit = { + primary_heir = { + is_courtier_of = root + is_adult = yes + age < 50 + basic_is_available_ai = yes + ai_energy >= low_negative_ai_value + } + } + primary_heir = { + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + exists = house + } + random_close_family_member = { + limit = { + is_courtier_of = root + is_adult = yes + age < 50 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + ai_energy >= low_negative_ai_value + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + exists = house + } + random_councillor = { + limit = { + is_courtier_of = root + is_adult = yes + age < 50 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + ai_energy >= 0 + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + exists = house + } + house = { + random_house_member = { + limit = { + is_knight_of = root + is_courtier_of = root + is_adult = yes + age < 50 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + ai_energy >= 0 + } + save_scope_as = warrior + } + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_knight = { + limit = { + age < 50 + basic_is_available_ai = yes + ai_energy >= 0 + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_courtier = { + limit = { + is_adult = yes + age < 50 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + basic_is_available_ai = yes + ai_energy >= 0 + } + save_scope_as = warrior + } + } + domicile = { + change_herd = miniscule_herd_loss + } + current_travel_plan = { + final_destination_province.county = { + save_scope_as = destination + } + } + } + #Come with me, I'll find us an easier route + option = { + trigger = { + OR = { + has_trait = lifestyle_traveler + has_trait = organizer + has_trait = logistician + AND = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + has_trait = rough_terrain_expert + } + AND = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + has_trait = desert_warrior + } + AND = { + location = { + OR = { + terrain = forest + terrain = taiga + } + } + has_trait = forest_fighter + } + AND = { + location_has_harsh_winter_trigger = yes + has_trait = winter_soldier + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + } + name = migration_events.1060.a + + duel = { + skills = { martial stewardship } + value = medium_skill_rating + + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + modifier = { + add = 30 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + } + modifier = { + add = 30 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 100 + } + } + modifier = { + add = 30 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + } + modifier = { + add = 30 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 100 + } + } + modifier = { + add = 15 + OR = { + has_trait = organizer + has_trait = logistician + AND = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + has_trait = rough_terrain_expert + } + AND = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + has_trait = desert_warrior + } + AND = { + location = { + OR = { + terrain = forest + terrain = taiga + } + } + has_trait = forest_fighter + } + AND = { + location_has_harsh_winter_trigger = yes + has_trait = winter_soldier + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + } + modifier = { + add = 30 + OR = { + AND = { + has_trait = organizer + has_trait_xp = { + trait = organizer + value >= 50 + } + } + AND = { + has_trait = logistician + has_trait_xp = { + trait = logistician + value >= 50 + } + } + AND = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + AND = { + has_trait = rough_terrain_expert + has_trait_xp = { + trait = rough_terrain_expert + value >= 50 + } + } + } + AND = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + AND = { + has_trait = desert_warrior + has_trait_xp = { + trait = desert_warrior + value >= 50 + } + } + } + AND = { + location = { + OR = { + terrain = forest + terrain = taiga + } + } + AND = { + has_trait = forest_fighter + has_trait_xp = { + trait = forest_fighter + value >= 50 + } + } + } + AND = { + location_has_harsh_winter_trigger = yes + AND = { + has_trait = winter_soldier + has_trait_xp = { + trait = winter_soldier + value >= 50 + } + } + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + } + modifier = { + add = 30 + OR = { + AND = { + has_trait = organizer + has_trait_xp = { + trait = organizer + value >= 100 + } + } + AND = { + has_trait = logistician + has_trait_xp = { + trait = logistician + value >= 100 + } + } + AND = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + AND = { + has_trait = rough_terrain_expert + has_trait_xp = { + trait = rough_terrain_expert + value >= 100 + } + } + } + AND = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + AND = { + has_trait = desert_warrior + has_trait_xp = { + trait = desert_warrior + value >= 100 + } + } + } + AND = { + location = { + OR = { + terrain = forest + terrain = taiga + } + } + AND = { + has_trait = forest_fighter + has_trait_xp = { + trait = forest_fighter + value >= 100 + } + } + } + AND = { + location_has_harsh_winter_trigger = yes + AND = { + has_trait = winter_soldier + has_trait_xp = { + trait = winter_soldier + value >= 100 + } + } + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + } + desc = mpo_migration_events.1060.a.success + send_interface_toast = { + type = event_toast_effect_good + title = mpo_migration_events.1060.a.success + left_icon = root + + if = { + limit = { + AND = { + location = { + OR = { + terrain = hills + terrain = mountains + terrain = wetlands + } + } + has_trait = rough_terrain_expert + } + } + add_trait_xp = { + trait = rough_terrain_expert + value = 33 + } + } + else_if = { + limit = { + AND = { + location = { + OR = { + terrain = desert + terrain = desert_mountains + } + } + has_trait = desert_warrior + } + } + add_trait_xp = { + trait = desert_warrior + value = 33 + } + } + else_if = { + limit = { + AND = { + location = { + OR = { + terrain = forest + terrain = taiga + } + } + has_trait = forest_fighter + } + } + add_trait_xp = { + trait = forest_fighter + value = 33 + } + } + else_if = { + limit = { + AND = { + location_has_harsh_winter_trigger = yes + has_trait = winter_soldier + OR = { + current_month >= 11 + current_month <= 4 + } + } + } + add_trait_xp = { + trait = winter_soldier + value = 33 + } + } + else_if = { + limit = { + has_trait = organizer + } + add_trait_xp = { + trait = organizer + value = 33 + } + } + else_if = { + limit = { + has_trait = logistician + } + add_trait_xp = { + trait = logistician + value = 33 + } + } + else_if = { + limit = { + has_trait = lifestyle_traveler + } + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 15 + } + } + add_character_modifier = { + modifier = mpo_found_paths_for_herds_modifier + months = 6 + } + reverse_add_opinion = { + modifier = impressed_opinion + target = scope:warrior + opinion = 15 + } + + } + } + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + modifier = { + add = 20 + health < fine_health + } + modifier = { + add = 20 + health < poor_health + } + modifier = { + add = 20 + NOR = { + knows_language_of_culture = root.location.county.culture + is_allied_to = root.location.county.holder + has_any_good_relationship_with_character_trigger = { CHARACTER = root.location.county.holder } + is_liege_or_above_of = root.location.county.holder + is_vassal_of = root.location.county.holder + } + } + desc = mpo_migration_events.1060.a.failure + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_migration_events.1060.a.failure + left_icon = root + + add_stress = miniscule_stress_impact_gain + domicile = { + change_herd = minor_herd_loss + } + current_travel_plan = { + delay_travel_plan = { days = 15 } + } + } + } + } + + + stress_impact = { + trusting = minor_stress_impact_gain + content = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + add = 50 + stewardship >= high_skill_rating + } + modifier = { + add = 50 + martial >= high_skill_rating + } + modifier = { + add = 50 + stewardship >= extremely_high_skill_rating + } + modifier = { + add = 50 + martial >= extremely_high_skill_rating + } + modifier = { + add = -50 + stewardship < medium_skill_rating + } + modifier = { + add = -50 + martial < medium_skill_rating + } + modifier = { + add = -50 + stewardship <= low_skill_rating + } + modifier = { + add = -50 + martial <= low_skill_rating + } + modifier = { + add = -50 + health < poor_health + } + modifier = { + add = 50 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = danger + value >= 50 + } + } + modifier = { + add = 50 + has_trait = lifestyle_traveler + has_trait_xp = { + trait = lifestyle_traveler + track = travel + value >= 50 + } + } + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = content + } + } + } + } + #You can ride ahead, but scout out our destination and prepare it well + option = { + name = migration_events.1060.b + + if = { + limit = { + scope:warrior = { + NOT = { is_obedient_to = root } + } + } + scope:warrior = { + add_stress = medium_stress_loss + } + } + else = { + scope:warrior = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + scope:warrior = { + if = { + limit = { + 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 + } + } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + else_if = { + limit = { + 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 + } + } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + } + else = { + add_prestige = medium_prestige_gain + } + } + scope:destination = { + add_county_modifier = { + modifier = mpo_migration_prepared_home_modifier + years = 5 + } + } + add_character_modifier = { + modifier = mpo_migrating_without_labor_modifier + months = 6 + } + + stress_impact = { + craven = minor_stress_impact_gain + stubborn = minor_stress_impact_gain + impatient = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = stubborn + has_trait = impatient + has_trait = paranoid + } + } + } + } + #You remain with us. There's hard labor to do + option = { + name = migration_events.1060.c + + scope:warrior = { + if = { + limit = { + NOT = { + has_trait = lifestyle_traveler + } + } + add_trait = lifestyle_traveler + } + else = { + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 20 + } + } + add_stress = miniscule_stress_gain + } + reverse_add_opinion = { + modifier = refusal_opinion + target = scope:warrior + opinion = -20 + } + + + stress_impact = { + fickle = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_rationality = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = fickle + has_trait = arbitrary + has_trait = trusting + } + } + } + } +} diff --git a/events/dlc/mpo/mpo_nomad_events_1.txt b/events/dlc/mpo/mpo_nomad_events_1.txt new file mode 100644 index 00000000..451f0d39 --- /dev/null +++ b/events/dlc/mpo/mpo_nomad_events_1.txt @@ -0,0 +1,8959 @@ +namespace = mpo_nomad_events + +############################ +## Nomadic flavor events +## 0001-0099 +## By Jason Cantalini +############################ + +mpo_nomad_events.1001 = { + hidden = yes + immediate = { + var:beheaded_warrior = { + save_scope_as = beheaded_warrior + } + var:beheaded_warrior_foe = { + save_scope_as = beheaded_warrior_foe + } + var:beheaded_warrior_location = { + save_scope_as = beheaded_warrior_location + } + if = { + limit = { + has_variable = beheaded_warrior_accolade + exists = var:beheaded_warrior_accolade + } + var:beheaded_warrior_accolade = { + save_scope_as = beheaded_warrior_accolade + } + } + #ROOT might be in army camp and knight would be more appropriate + random_courtier = { + limit = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + OR = { + is_available = yes + AND = { + is_in_army = yes + root = { + is_in_army = yes + } + } + } + } + save_scope_as = head_bearer + } + if = { + limit = { + NOT = { + exists = scope:head_bearer + } + } + random_vassal = { + limit = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + OR = { + is_available = yes + AND = { + is_in_army = yes + root = { + is_in_army = yes + } + } + } + } + save_scope_as = head_bearer + } + } + if = { + limit = { + NOT = { + exists = scope:head_bearer + } + } + random_courtier = { + limit = { + is_adult = yes + OR = { + is_available = yes + AND = { + is_in_army = yes + root = { + is_in_army = yes + } + } + } + } + save_scope_as = head_bearer + } + } + if = { + limit = { + NOT = { + exists = scope:head_bearer + } + } + random_pool_guest = { + limit = { + is_adult = yes + is_available = yes + } + save_scope_as = head_bearer + } + } + if = { + limit = { + NOT = { + exists = scope:head_bearer + } + exists = root.capital_province + } + random_pool_character = { + province = root.capital_province + limit = { + is_adult = yes + is_available = yes + } + save_scope_as = head_bearer + } + } + #Save family member to send the head to + if = { + limit = { + scope:beheaded_warrior = { + exists = house + } + } + scope:beheaded_warrior = { + ordered_parent = { + order_by = max_military_strength + limit = { + is_ai = yes + is_ruler = yes + highest_held_title_tier >= tier_county + NOT = { + this = root + } + } + save_scope_as = beheaded_relative + } + if = { + limit = { + NOT = { + exists = scope:beheaded_relative + } + } + ordered_child = { + order_by = max_military_strength + limit = { + is_ai = yes + is_ruler = yes + highest_held_title_tier >= tier_county + NOT = { + this = root + } + } + save_scope_as = beheaded_relative + } + } + if = { + limit = { + NOT = { + exists = scope:beheaded_relative + } + } + ordered_sibling = { + order_by = max_military_strength + limit = { + is_ai = yes + is_ruler = yes + highest_held_title_tier >= tier_county + NOR = { + this = root + scope:beheaded_warrior = { + is_close_family_of = root + } + } + } + save_scope_as = beheaded_relative + } + } + if = { + limit = { + NOT = { + exists = scope:beheaded_relative + } + exists = scope:beheaded_warrior.house.house_head + scope:beheaded_warrior.house.house_head = { + NOR = { + this = scope:beheaded_warrior + this = root + } + } + } + house = { + house_head = { + save_scope_as = beheaded_relative + } + } + } + } + } + #Create an artifact based on rank of dead person + mpo_beheaded_warrior_artifact_creation_effect = yes + trigger_event = mpo_nomad_events.1000 + } +} + +#One of your dead baghaturs' heads is recovered +mpo_nomad_events.1000 = { + type = character_event + theme = battle + title = mpo_nomad_events.1000.t + desc = { + #Triggered desc based on whether you're in an army + first_valid = { + triggered_desc = { + trigger = { + is_in_army = yes + } + desc = mpo_nomad_events.1000.army_camp + } + desc = mpo_nomad_events.1000.capital + } + #Triggered desc based on relation + first_valid = { + triggered_desc = { + trigger = { + scope:beheaded_warrior = { + is_close_family_of = root + } + } + desc = mpo_nomad_events.1000.family + } + triggered_desc = { + trigger = { + has_variable = beheaded_warrior_powerful_vassal + } + desc = mpo_nomad_events.1000.vassal + } + triggered_desc = { + trigger = { + has_variable = beheaded_warrior_councillor + } + desc = mpo_nomad_events.1000.councillor + } + desc = mpo_nomad_events.1000.generic_knight + } + desc = mpo_nomad_events.1000.desc + } + override_background = { + trigger = { + is_in_army = no + } + reference = courtyard + } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:beheaded_warrior = { + OR = { + is_consort_of = root + is_close_family_of = root + } + } + } + animation = grief + } + triggered_animation = { + trigger = { + scope:beheaded_warrior = { + NOR = { + is_consort_of = root + is_close_family_of = root + } + } + } + animation = sadness + } + } + right_portrait = { + character = scope:head_bearer + animation = standing_horse + camera = camera_event_standing_with_horse_right + } + artifact = { + target = scope:head_artifact + position = lower_center_portrait + } + immediate = { + if = { + limit = { + exists = scope:beheaded_warrior.house + } + scope:beheaded_warrior = { + house = { + add_house_artifact_claim = scope:head_artifact + } + } + } + } + #Keep the head + option = { + name = mpo_nomad_events.1000.a + flavor = mpo_nomad_events.1000.a.flavor + + custom_tooltip = keep_warrior_head_tt + + stress_impact = { + cynical = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.5 + } + } + } + #Send it to its people + option = { + trigger = { + exists = scope:beheaded_relative + } + name = mpo_nomad_events.1000.b + scope:beheaded_relative = { + #Gains the artifact + scope:head_artifact = { + set_owner = { + target = scope:beheaded_relative + history = { + location = root.capital_province + actor = root + recipient = scope:beheaded_relative + type = given + } + } + } + } + if = { + limit = { + can_add_hook = { + target = scope:beheaded_relative + type = favor_hook + } + } + add_hook = { + type = favor_hook + target = scope:beheaded_relative + } + } + + scope:beheaded_warrior = { + every_close_family_member = { + custom = custom.every_beheaded_family + limit = { + NOR = { + this = root + this = scope:beheaded_relative + } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + } + stress_impact = { + greedy = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_greed = -0.5 + } + modifier = { + factor = 0 + has_trait = greedy + } + } + } + #The glory of the accolade grows + option = { + name = mpo_nomad_events.1000.c + trigger = { + has_variable = beheaded_warrior_accolade + var:beheaded_warrior_accolade = { + exists = acclaimed_knight + } + } + var:beheaded_warrior_accolade = { + add_glory = medium_glory_gain + acclaimed_knight = { + save_scope_as = beheaded_accolade_knight + #Give artifact to accolade knight + scope:head_artifact = { + set_owner = { + target = scope:book_recipient + history = { + location = root.capital_province + actor = root + recipient = scope:beheaded_accolade_knight + type = given + } + } + } + #gain opinion with accolade knight + add_opinion = { + target = root + modifier = respect_opinion + opinion = 25 + } + } + } + stress_impact = { + content = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_vengefulness = 1 + } + modifier = { + factor = 0 + has_trait = eccentric + } + } + } + #Bury this head with honors + option = { + name = mpo_nomad_events.1000.d + + if = { + limit = { + mpo_important_beheaded_warrior_trigger = yes + } + capital_county = { + add_county_modifier = { + modifier = mpo_noble_warriors_grave_modifier + years = 10 + } + } + } + else = { + capital_county = { + add_county_modifier = { + modifier = mpo_warriors_grave_modifier + years = 10 + } + } + } + add_piety = minor_piety_gain + + destroy_artifact = scope:head_artifact + stress_impact = { + eccentric = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_vengefulness = -0.5 + ai_rationality = 0.5 + } + modifier = { + factor = 0 + has_trait = eccentric + } + } + } + after = { + remove_variable = beheaded_warrior + remove_variable = beheaded_warrior_foe + remove_variable = beheaded_warrior_councillor + remove_variable = beheaded_warrior_powerful_vassal + remove_variable = beheaded_warrior_accolade + remove_variable = beheaded_warrior_location + } +} + +#Hidden ruler's head artifact creation event +mpo_nomad_events.1010 = { + hidden = yes + immediate = { + #Create head artifact + if = { + limit = { + OR = { + has_character_flag = execution_head_illustrious_flag + has_character_flag = execution_head_famed_flag + } + } + mpo_execution_head_artifact_creation_effect = yes + } + trigger_event = mpo_nomad_events.1011 + } +} + +scripted_effect remove_execution_head_flags_effect = { + scope:executioner = { + remove_character_flag = execution_head_famed_flag + remove_character_flag = execution_head_illustrious_flag + remove_character_flag = execution_head_warscore_flag + remove_character_flag = execution_head_vassalization_flag + remove_character_flag = execution_head_prestige_flag + remove_character_flag = execution_head_obedience_flag + remove_character_flag = execution_head_hook_flag + } +} + +scripted_effect mpo_nomad_events_1011_heir_resents_effect = { + if = { + limit = { + tier_difference = { + target = scope:executioner + value <= 1 + } + tier_difference = { + target = scope:executioner + value >= -1 + } + house.house_head = { + this = scope:headless_heir + } + NOT = { + scope:executioner = { + exists = house + house = scope:headless_heir.house + } + } + scope:executioner = { + exists = house + house.house_head = { + this = scope:executioner + } + } + valid_for_feud_events_with_target_trigger = { TARGET = scope:executioner } + } + house_feud_start_effect = { + # Feuding House Head + ACTOR = scope:headless_heir + # Target House Head + TARGET = scope:executioner + # Feud Reason + REASON = head_killed + # House Member attacker if relevant + ATTACKER = scope:executioner + # House Member victim if relevant + VICTIM = scope:victim + } + } + else = { + if = { + limit = { + NOT = { + has_relation_rival = scope:executioner + } + } + set_relation_rival = { + target = scope:executioner + reason = rival_sent_predecessors_head + } + } + else = { + progress_towards_rival_effect = { + REASON = rival_sent_predecessors_head + CHARACTER = scope:executioner + OPINION = default_rival_opinion + } + } + if = { + limit = { + NAND = { + scope:headless_heir = { + has_variable = severed_head_cb_revenge + var:severed_head_cb_revenge = { + this = scope:executioner + } + } + } + } + scope:headless_heir = { + custom_tooltip = severed_head_cb_revenge_tt + set_variable = { + name = severed_head_cb_revenge + value = scope:headless_heir + } + } + } + } +} +scripted_effect mpo_nomad_events_1011_heir_cowed_effect = { + if = { + limit = { + has_character_flag = execution_head_warscore_flag + } + custom_tooltip = peace_acceptance_head_scare_tt + set_variable = { + name = peace_acceptance_head_scare + value = scope:headless_heir + years = 20 + } + } + else_if = { + limit = { + has_character_flag = execution_head_vassalization_flag + } + custom_tooltip = severed_head_vassalization_tt + set_variable = { + name = severed_head_vassalization + value = scope:headless_heir + years = 20 + } + } + else_if = { + limit = { + has_character_flag = execution_head_prestige_flag + } + #Lots of prestige for much higher tier + if = { + limit = { + tier_difference = { + target = scope:headless_heir + value <= -3 + } + } + add_prestige = monumental_prestige_gain + } + else_if = { + limit = { + tier_difference = { + target = scope:headless_heir + value <= -2 + } + } + add_prestige = massive_prestige_gain + } + #Good prestige for higher tier + else_if = { + limit = { + tier_difference = { + target = scope:headless_heir + value <= -1 + } + } + add_prestige = major_prestige_gain + } + #Some prestige + else = { + add_prestige = medium_prestige_gain + } + } + else_if = { + limit = { + has_character_flag = execution_head_obedience_flag + scope:headless_heir = { obedience_target = root } + } + scope:headless_heir = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + else = { + add_hook = { + type = threat_hook + target = scope:headless_heir + } + } +} + +scripted_trigger mpo_nomad_events_1011_heir_unafraid_trigger = { + scope:headless_heir.top_liege = { + current_military_strength > scope:executioner.current_military_strength + tier_difference = { + target = scope:executioner + value >= -1 + } + } + scope:headless_heir = { + NOT = { + has_dread_level_towards = { + target = scope:executioner + level >= 1 + } + } + } +} + +#You have taken the head of a ruler prisoner +mpo_nomad_events.1011 = { + type = character_event + theme = death + title = mpo_nomad_events.1011.t + desc = { + random_valid = { + triggered_desc = { + trigger = { + scope:victim = { + OR = { + has_trait = brave + has_trait = arrogant + has_trait = vengeful + has_trait = wrathful + has_trait = sadistic + has_trait = cynical + } + NOR = { + has_trait = craven + has_trait = paranoid + has_trait = forgiving + } + } + } + desc = mpo_nomad_events.1011.desc_execution_spite + } + triggered_desc = { + trigger = { + scope:victim = { + OR = { + has_trait = ambitious + has_trait = craven + has_trait = paranoid + has_trait = deceitful + has_trait = greedy + has_trait = fickle + has_trait = arbitrary + } + NOR = { + has_trait = content + has_trait = calm + has_trait = humble + has_trait = zealous + } + } + } + desc = mpo_nomad_events.1011.desc_execution_beg + } + triggered_desc = { + trigger = { + scope:victim = { + NOT = { + has_trait = cynical + } + } + } + desc = mpo_nomad_events.1011.desc_execution_pray + } + triggered_desc = { + trigger = { + OR = { + AND = { + exists = scope:court_executioner + scope:court_executioner = { + prowess < decent_skill_rating + } + } + scope:victim = { + has_trait = cynical + } + } + } + desc = mpo_nomad_events.1011.desc_bad_execution + } + } + desc = mpo_nomad_events.1011.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:headless_heir + } + desc = mpo_nomad_events.1011.desc_send_head + } + desc = mpo_nomad_events.1011.desc_cant_send + } + triggered_desc = { + trigger = { + exists = scope:head_artifact + } + desc = mpo_nomad_events.1011.desc_keep_head + } + } + override_background = { + trigger = { + NOR = { + is_in_army = yes + is_travelling = yes + } + } + reference = dungeon + } + override_background = { + trigger = { + OR = { + is_in_army = yes + is_travelling = yes + } + } + reference = army_camp + } + left_portrait = { + character = root + animation = personality_vengeful + } + right_portrait = { + character = scope:court_executioner + animation = celebrate_sword + camera = camera_event_right_forward + hide_info = yes + } + artifact = { + target = scope:head_artifact + position = lower_left_portrait + } + lower_center_portrait = scope:victim + lower_right_portrait = scope:headless_heir + immediate = { + if = { + limit = { + exists = court_position:executioner_court_position + court_position:executioner_court_position = { + is_available_allow_travelling = yes + } + } + court_position:executioner_court_position = { + save_scope_as = court_executioner + } + } + else_if = { + limit = { + any_knight = { + OR = { + is_available_allow_travelling = yes + AND = { + is_in_army = yes + root = { + is_in_army = yes + } + } + } + is_ruler = no + } + } + ordered_knight = { + order_by = prowess + limit = { + OR = { + is_available_allow_travelling = yes + AND = { + is_in_army = yes + root = { + is_in_army = yes + } + } + } + is_ruler = no + } + save_scope_as = court_executioner + } + } + else_if = { + limit = { + any_courtier = { + NOT = { + is_close_family_of = root + } + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available_allow_travelling = yes + } + } + ordered_courtier = { + order_by = prowess + limit = { + NOT = { + is_close_family_of = root + } + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available_allow_travelling = yes + } + save_scope_as = court_executioner + } + } + #Setting up house feud that might happen + if = { + limit = { + exists = scope:headless_heir + tier_difference = { + target = scope:executioner + value <= 1 + } + house.house_head = { + this = scope:headless_heir + } + NOT = { + scope:executioner = { + exists = house + house = scope:headless_heir.house + house.house_head = { + this = scope:executioner + } + } + } + valid_for_feud_events_with_target_trigger = { TARGET = scope:executioner } + } + scope:headless_heir = { + save_ongoing_house_relation_effect = { TARGET = scope:executioner } + } + } + } + #Keep the head + option = { + trigger = { + exists = scope:head_artifact + } + name = mpo_nomad_events.1011.a + flavor = mpo_nomad_events.1011.a.flavor + custom_tooltip = keep_warrior_head_tt + #NOTIFY HEIR THAT HEAD ARTIFACT WAS CREATED AND THEY HAVE CLAIM + if = { + limit = { + exists = scope:victim.house + exists = scope:headless_heir.house + scope:victim.house = { + this = scope:headless_heir.house + } + } + scope:headless_heir = { + house = { + add_house_artifact_claim = scope:head_artifact + } + } + } + remove_execution_head_flags_effect = yes + ai_chance = { + base = 500 + ai_value_modifier = { + ai_zeal = 0.5 + ai_honor = 0.5 + } + modifier = { + has_character_flag = execution_head_illustrious_flag + add = 500 + } + modifier = { + all_inventory_artifact_slots = full + add = -800 + } + } + } + + #Send the head - but it might cause rivalry + option = { + trigger = { + exists = scope:headless_heir + } + name = mpo_nomad_events.1011.b + flavor = mpo_nomad_events.1011.b.flavor + + add_dread = miniscule_dread_gain + #Random chance calculation used for AI (they get no event) + if = { + limit = { + scope:headless_heir = { + is_ai = yes + } + } + random_list = { + #they are cowed + 50 = { + desc = mpo_nomad_events.1011.b.success + modifier = { + is_gurkhan = yes + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value <= -1 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value <= -2 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value <= -3 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value <= -1 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value <= -2 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value <= -3 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + current_military_strength < root.current_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir = { + max_military_strength < root.max_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir.top_liege = { + current_military_strength < root.top_liege.current_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir.top_liege = { + max_military_strength < root.top_liege.max_military_strength + } + add = 30 + } + #Has unrelated wars to deal with + modifier = { + scope:headless_heir = { + any_character_war = { + NOT = { + any_war_participant = { + this = root + } + } + } + } + add = 20 + } + #Root holds family hostage + modifier = { + scope:headless_heir = { + any_close_family_member = { + is_imprisoned_by = root + } + } + add = 15 + } + modifier = { + scope:headless_heir = { + exists = player_heir + player_heir = { + is_imprisoned_by = root + } + } + add = 30 + } + modifier = { + scope:headless_heir = { + age <= 12 + } + add = 25 + } + modifier = { + scope:headless_heir = { + legitimacy_level <= 0 + } + add = 20 + } + modifier = { + has_trait = conqueror + add = 40 + } + modifier = { + has_trait = greatest_of_khans + add = 40 + } + modifier = { + scope:headless_heir = { + gold < 0 + } + add = 15 + } + modifier = { + scope:headless_heir = { + has_dread_level_towards = { + target = scope:executioner + level >= 1 + } + } + factor = 5 + } + modifier = { + scope:headless_heir = { + has_dread_level_towards = { + target = scope:executioner + level >= 2 + } + } + factor = 10 + } + modifier = { + scope:headless_heir = { + ai_vengefulness <= low_negative_ai_value + } + add = 40 + } + modifier = { + scope:headless_heir = { + ai_vengefulness <= high_negative_ai_value + } + add = 80 + } + modifier = { + scope:headless_heir = { + ai_boldness <= low_negative_ai_value + } + add = 15 + } + modifier = { + scope:headless_heir = { + ai_boldness <= high_negative_ai_value + } + add = 30 + } + modifier = { + scope:headless_heir = { + ai_honor <= low_negative_ai_value + } + add = 20 + } + modifier = { + scope:headless_heir = { + ai_honor <= high_negative_ai_value + } + add = 40 + } + modifier = { + scope:headless_heir = { + NOR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + add = -20 + } + hidden_effect = { + scope:headless_heir = { + #Prestige option does nothing to this char, add malus + if = { + limit = { + scope:executioner = { has_character_flag = execution_head_prestige_flag } + } + if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -2 + } + } + add_prestige = massive_prestige_loss + } + else_if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -1 + } + } + add_prestige = major_prestige_loss + } + else = { + add_prestige = medium_prestige_loss + } + } + if = { + limit = { + mpo_keep_prisoners_heads_trigger = yes + exists = scope:victim.house + } + scope:victim.house = { + every_house_member = { + custom = custom.every_house_member + limit = { + NOR = { + this = scope:headless_heir + this = scope:executioner + } + } + add_opinion = { + modifier = sullied_our_house_opinion + target = scope:headless_heir + opinion = -20 + } + } + } + } + create_character_memory = { + type = sent_predecessors_head_memory + participants = { + executioner = scope:executioner + victim = scope:victim + } + } + + add_character_flag = { + flag = head_recipient_just_takes_it + days = 30 + } + } + } + show_as_tooltip = { + mpo_nomad_events_1011_heir_cowed_effect = yes + } + } + #they swear revenge + 50 = { + desc = mpo_nomad_events.1011.b.fail + modifier = { + scope:headless_heir = { + is_gurkhan = yes + } + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 1 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 2 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 3 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 1 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 2 + } + } + add = 20 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 3 + } + } + add = 20 + } + modifier = { + scope:headless_heir = { + current_military_strength > root.current_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir = { + max_military_strength > root.max_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir.top_liege = { + current_military_strength > root.top_liege.current_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir.top_liege = { + max_military_strength > root.top_liege.max_military_strength + } + add = 30 + } + modifier = { + scope:headless_heir = { + legitimacy_level >= 4 + } + add = 20 + } + modifier = { + scope:headless_heir = { + has_trait = conqueror + } + add = 60 + } + modifier = { + scope:headless_heir = { + has_trait = greatest_of_khans + } + add = 60 + } + modifier = { + scope:headless_heir = { + ai_vengefulness >= low_positive_ai_value + } + add = 40 + } + modifier = { + scope:headless_heir = { + ai_vengefulness >= high_positive_ai_value + } + add = 80 + } + modifier = { + scope:headless_heir = { + ai_boldness >= low_positive_ai_value + } + add = 15 + } + modifier = { + scope:headless_heir = { + ai_boldness >= high_positive_ai_value + } + add = 30 + } + modifier = { + scope:headless_heir = { + ai_honor >= low_positive_ai_value + } + add = 20 + } + modifier = { + scope:headless_heir = { + ai_honor >= high_positive_ai_value + } + add = 40 + } + modifier = { + scope:headless_heir = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + add = 20 + } + show_as_tooltip = { + scope:headless_heir = { + mpo_nomad_events_1011_heir_resents_effect = yes + } + } + } + } + #Receive letter event with response + trigger_event = { + id = mpo_nomad_events.1013 + days = 3 + } + } + #Players get event and will choose for themselves + else = { + custom_description_no_bullet = { + text = headless_heir_ignores_challenge_tt + } + show_as_tooltip = { + mpo_nomad_events_1011_heir_cowed_effect = yes + } + + custom_description_no_bullet = { + text = headless_heir_rises_to_challenge_tt + } + show_as_tooltip = { + scope:headless_heir = { + mpo_nomad_events_1011_heir_resents_effect = yes + } + } + + if = { + limit = { + scope:headless_heir.top_liege = { + current_military_strength > scope:executioner.current_military_strength + tier_difference = { + target = scope:executioner + value >= -1 + } + } + } + custom_tooltip = headless_heir_high_tier_warning_tt + } + scope:headless_heir = { + trigger_event = { + id = mpo_nomad_events.1012 + days = 1 + } + } + } + + if = { + limit = { + scope:headless_heir = { + max_military_strength > root.max_military_strength + } + } + stress_impact = { + craven = major_stress_impact_gain + compassionate = medium_stress_impact_gain + content = medium_stress_impact_gain + } + } + stress_impact = { + craven = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + content = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_boldness = 1 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 1 + } + } + add = -15 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 2 + } + } + add = -15 + } + modifier = { + scope:headless_heir = { + tier_difference = { + target = root + value >= 3 + } + } + add = -15 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 1 + } + } + add = -15 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 2 + } + } + add = -15 + } + modifier = { + scope:headless_heir.top_liege = { + tier_difference = { + target = root.top_liege + value >= 3 + } + } + add = -15 + } + modifier = { + scope:headless_heir = { + current_military_strength > root.current_military_strength + } + add = -25 + } + modifier = { + scope:headless_heir = { + max_military_strength > root.max_military_strength + } + add = -25 + } + modifier = { + scope:headless_heir.top_liege = { + current_military_strength > root.top_liege.current_military_strength + } + add = -25 + } + modifier = { + scope:headless_heir.top_liege = { + max_military_strength > root.top_liege.max_military_strength + } + add = -25 + } + modifier = { + scope:headless_heir = { + legitimacy_level >= 4 + } + add = -15 + } + modifier = { + scope:headless_heir = { + has_trait = conqueror + } + add = -50 + } + modifier = { + scope:headless_heir = { + has_trait = greatest_of_khans + } + add = -50 + } + modifier = { + scope:headless_heir = { + ai_vengefulness >= low_positive_ai_value + } + add = -30 + } + modifier = { + scope:headless_heir = { + ai_vengefulness >= high_positive_ai_value + } + add = -60 + } + modifier = { + scope:headless_heir = { + ai_boldness >= low_positive_ai_value + } + add = -15 + } + modifier = { + scope:headless_heir = { + ai_boldness >= high_positive_ai_value + } + add = -30 + } + modifier = { + scope:headless_heir = { + ai_honor >= low_positive_ai_value + } + add = -20 + } + modifier = { + scope:headless_heir = { + ai_honor >= high_positive_ai_value + } + add = -40 + } + modifier = { + scope:headless_heir = { + OR = { + government_has_flag = government_is_tribal + government_has_flag = government_is_nomadic + } + } + add = -20 + } + modifier = { + scope:headless_heir = { + has_dread_level_towards = { + target = scope:executioner + level >= 1 + } + } + add = 200 + } + modifier = { + scope:headless_heir = { + has_dread_level_towards = { + target = scope:executioner + level >= 2 + } + } + add = 400 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = content + } + add = -50 + } + modifier = { + OR = { + has_trait = craven + has_trait = compassionate + has_trait = content + } + scope:headless_heir = { + max_military_strength > root.max_military_strength + } + factor = 0 + } + } + } + #Don't want to send or keep head + option = { + name = mpo_nomad_events.1011.c + + remove_execution_head_flags_effect = yes + ai_chance = { + base = 100 + } + } + after = { + # Clear up flags + scope:headless_heir = { + if = { + limit = { + has_character_flag = house_feud_too_young_heir + } + remove_character_flag = house_feud_too_young_heir + } + } + } +} + +#You receive the severed head of your executed predecessor (mirror event) +mpo_nomad_events.1012 = { + type = character_event + theme = death + title = mpo_nomad_events.1012.t + desc = mpo_nomad_events.1012.desc + override_background = { + trigger = { + NOR = { + is_in_army = yes + is_travelling = yes + } + } + reference = throne_room + } + override_background = { + trigger = { + OR = { + is_in_army = yes + is_travelling = yes + } + } + reference = bp1_bonfire + } + left_portrait = { + character = root + animation = wailing + camera = camera_event_left_away_3_4 + } + lower_right_portrait = scope:executioner + lower_left_portrait = scope:victim + + immediate = { + create_character_memory = { + type = sent_predecessors_head_memory + participants = { + executioner = scope:executioner + victim = scope:victim + } + } + } + + #My predecessor was a great man: the most important thing is his head being honored + option = { + trigger = { + OR = { + has_trait = lifestyle_mystic + has_trait = theologian + has_trait = zealous + AND = { + has_trait = pilgrim + has_trait_xp = { + trait = pilgrim + value >= 50 + } + } + has_trait = devoted + } + OR = { + faith.religion = faith:tengri_pagan.religion + has_trait = nomadic_philosophy + government_has_flag = government_is_nomadic + } + } + name = mpo_nomad_events.1012.a + flavor = mpo_nomad_events.1012.a_flavor + show_as_tooltip = { + scope:executioner = { + mpo_nomad_events_1011_heir_cowed_effect = yes + } + } + if = { + limit = { + scope:victim = { + highest_held_title_tier >= tier_kingdom + } + } + add_piety = major_piety_gain + } + else_if = { + limit = { + scope:victim = { + highest_held_title_tier >= tier_duchy + } + } + add_piety = medium_piety_gain + } + else = { + add_piety = minor_piety_gain + } + #Prestige option does nothing to this char, add malus + if = { + limit = { + scope:executioner = { has_character_flag = execution_head_prestige_flag } + } + if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -2 + } + } + add_prestige = major_prestige_loss + } + else_if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -1 + } + } + add_prestige = medium_prestige_loss + } + else = { + add_prestige = minor_prestige_loss + } + } + + add_character_flag = { + flag = head_recipient_just_takes_it + days = 30 + } + if = { + limit = { + mpo_nomad_events_1011_heir_unafraid_trigger = yes + } + stress_impact = { + base = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + calm = miniscule_stress_impact_loss + vengeful = major_stress_impact_gain + wrathful = major_stress_impact_gain + just = major_stress_impact_gain + stubborn = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + brave = major_stress_impact_gain + } + } + else = { + stress_impact = { + base = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + calm = miniscule_stress_impact_loss + vengeful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + just = minor_stress_impact_gain + stubborn = miniscule_stress_impact_gain + sadistic = miniscule_stress_impact_gain + brave = minor_stress_impact_gain + } + } + } + #VENDETTA! VENDETTA! + option = { + name = mpo_nomad_events.1012.b + flavor = mpo_nomad_events.1012.b_flavor + show_as_tooltip = { + mpo_nomad_events_1011_heir_resents_effect = yes + } + if = { + limit = { + mpo_nomad_events_1011_heir_unafraid_trigger = yes + } + stress_impact = { + craven = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + compassionate = miniscule_stress_impact_gain + humble = miniscule_stress_impact_gain + content = miniscule_stress_impact_gain + } + } + else = { + stress_impact = { + craven = major_stress_impact_gain + forgiving = major_stress_impact_gain + compassionate = medium_stress_impact_gain + calm = minor_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + } + } + } + #Yeah uh... this is gross and humiliating + option = { + name = mpo_nomad_events.1012.c + show_as_tooltip = { + scope:executioner = { + mpo_nomad_events_1011_heir_cowed_effect = yes + } + } + #Prestige option does nothing to this char, add malus + if = { + limit = { + scope:executioner = { has_character_flag = execution_head_prestige_flag } + } + if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -2 + } + } + add_prestige = massive_prestige_loss + } + else_if = { + limit = { + tier_difference = { + target = scope:executioner + value <= -1 + } + } + add_prestige = major_prestige_loss + } + else = { + add_prestige = medium_prestige_loss + } + } + if = { + limit = { + mpo_keep_prisoners_heads_trigger = yes + exists = scope:victim.house + } + scope:victim.house = { + every_house_member = { + custom = custom.every_house_member + limit = { + NOR = { + this = scope:headless_heir + this = scope:executioner + } + } + add_opinion = { + modifier = sullied_our_house_opinion + target = scope:headless_heir + opinion = -20 + } + } + } + } + + add_character_flag = { + flag = head_recipient_just_takes_it + days = 30 + } + if = { + limit = { + mpo_nomad_events_1011_heir_unafraid_trigger = yes + } + stress_impact = { + vengeful = major_stress_impact_gain + wrathful = major_stress_impact_gain + just = major_stress_impact_gain + stubborn = medium_stress_impact_gain + sadistic = minor_stress_impact_gain + brave = major_stress_impact_gain + } + } + else = { + stress_impact = { + vengeful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + just = minor_stress_impact_gain + stubborn = miniscule_stress_impact_gain + sadistic = miniscule_stress_impact_gain + brave = minor_stress_impact_gain + } + } + } + after = { + scope:executioner = { + trigger_event = mpo_nomad_events.1013 + } + } +} + +mpo_nomad_events.1013 = { + type = letter_event + opening = { + desc = mpo_nomad_events.1013 + } + desc = { + first_valid = { + #Non-nomad desc + triggered_desc = { + trigger = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + mpo_keep_prisoners_heads_trigger = no + } + } + desc = mpo_nomad_events.1013.desc_takes_it_sedentary + } + triggered_desc = { + trigger = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + } + } + desc = mpo_nomad_events.1013.desc_takes_it + } + desc = mpo_nomad_events.1013.desc_angeee + } + } + sender = scope:headless_heir + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_alive = yes + is_ruler = yes + NOT = { + is_imprisoned_by = scope:headless_heir + } + scope:headless_heir = { + is_alive = yes + is_ruler = yes + NOT = { + is_imprisoned_by = root + } + } + } + on_trigger_fail = { + if = { + limit = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + } + } + scope:headless_heir = { + remove_character_flag = head_recipient_just_takes_it + } + } + scope:executioner = { + remove_execution_head_flags_effect = yes + } + } + immediate = { + #Apply effect of whatever they chose + if = { + limit = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + } + } + mpo_nomad_events_1011_heir_cowed_effect = yes + } + else = { + scope:headless_heir = { + mpo_nomad_events_1011_heir_resents_effect = yes + } + } + } + + option = { + name = { + trigger = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + } + } + text = mpo_nomad_events.1013.a.cowed + } + name = { + trigger = { + scope:headless_heir = { + NOT = { has_character_flag = head_recipient_just_takes_it } + } + } + text = mpo_nomad_events.1013.a.revenge + } + } + after = { + if = { + limit = { + scope:headless_heir = { + has_character_flag = head_recipient_just_takes_it + } + } + scope:headless_heir = { + remove_character_flag = head_recipient_just_takes_it + } + } + scope:executioner = { + remove_execution_head_flags_effect = yes + } + } +} + +scripted_trigger mpo_nomad_events_1011_rowdy_boy_trigger = { + is_adult = yes + is_courtier_of = root + is_imprisoned = no + is_healthy = yes + OR = { + AND = { + is_male = yes + faith_dominant_gender_male_or_equal = yes + } + AND = { + is_female = yes + faith_dominant_gender_female_or_equal = yes + } + } + OR = { + AND = { + ai_boldness > 0 + ai_energy > 0 + } + AND = { + opinion = { + target = root + value <= -30 + } + ai_boldness >= medium_negative_ai_value + ai_energy >= medium_negative_ai_value + } + } + NOR = { + has_trait = loyal + is_primary_heir_of = root + is_player_heir_of = root + is_obedient_to = root + has_dread_level_towards = { + target = root + level >= 2 + } + } + trigger_if = { + limit = { + has_variable = mpo_nomad_events_1020_liege + } + var:mpo_nomad_events_1020_liege = { + NOT = { + this = root + } + } + } +} + +scripted_trigger mpo_nomad_events_1011_rowdiest_trigger = { + OR = { + AND = { + ai_boldness > medium_positive_ai_value + ai_energy > medium_positive_ai_value + } + opinion = { + target = root + value < -60 + } + } + NOT = { + has_dread_level_towards = { + target = root + level >= 1 + } + } + mpo_nomad_events_1011_rowdy_boy_trigger = yes +} + +scripted_trigger mpo_nomad_events_1011_defecting_courtier_trigger = { + save_temporary_scope_as = potential_defector + is_adult = yes + is_courtier_of = root + is_acclaimed = no + is_imprisoned = no + ai_boldness > medium_negative_ai_value + ai_energy > medium_negative_ai_value + NOR = { + is_in_list = defectors + this = scope:rowdy_boy + is_councillor_of = root + is_consort_of = root + has_trait = loyal + is_primary_heir_of = root + is_player_heir_of = root + any_spouse = { + OR = { + is_councillor_of = root + AND = { + is_courtier_of = root + has_any_court_position = yes + } + is_primary_heir_of = root + is_player_heir_of = root + is_acclaimed = yes + } + } + has_any_court_position = yes + } + opinion = { + target = root + value <= 60 + } + opinion = { + target = scope:rowdy_boy + value >= -40 + } +} + +#Your adult family members want to break off and lead their own band +mpo_nomad_events.1020 = { + type = character_event + theme = nomads + title = mpo_nomad_events.1020.t + desc = mpo_nomad_events.1020.desc + override_background = { + reference = relaxing_room + } + left_portrait = { + character = root + animation = hunting_knife_start + } + right_portrait = { + character = scope:rowdy_boy + animation = war_attacker + camera = camera_event_very_right + } + + cooldown = { + years = 5 + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + OR = { + has_realm_law = nomadic_authority_1 + has_realm_law = nomadic_authority_2 + has_realm_law = nomadic_authority_3 + } + is_at_war = no + has_raised_armies = no + highest_held_title_tier >= tier_county + is_available = yes + is_healthy = yes + OR = { + any_child = { + mpo_nomad_events_1011_rowdy_boy_trigger = yes + } + any_sibling = { + mpo_nomad_events_1011_rowdy_boy_trigger = yes + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + has_realm_law = nomadic_authority_1 + } + modifier = { + add = 2 + has_realm_law = nomadic_authority_2 + } + modifier = { + add = 2 + domicile ?= { + herd >= max_herd + } + } + + #weight up if family member very much wants to leave + modifier = { + add = 3 + OR = { + any_child = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + any_sibling = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + } + } + modifier = { + add = 1 + legitimacy_level < 1 + } + modifier = { + add = -1 + legitimacy_level >= 5 + } + #Weight up/down culturally + modifier = { + add = 1 + culture = { + has_cultural_pillar = ethos_bellicose + } + } + modifier = { + add = -1 + culture = { + has_cultural_pillar = ethos_communal + } + } + #Very likely to happen after a succession leaves someone landless + modifier = { + add = 2 + primary_title = { + title_held_years < 5 + } + } + modifier = { + add = 1 + has_variable = recently_lost_wars + } + min = 1 + } + + immediate = { + random_sibling = { + limit = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + save_scope_as = rowdy_boy + } + if = { + limit = { + NOT = { + exists = scope:rowdy_boy + } + } + random_child = { + limit = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + save_scope_as = rowdy_boy + } + } + if = { + limit = { + NOT = { + exists = scope:rowdy_boy + } + } + random_sibling = { + limit = { + mpo_nomad_events_1011_rowdy_boy_trigger = yes + } + save_scope_as = rowdy_boy + } + } + if = { + limit = { + NOT = { + exists = scope:rowdy_boy + } + } + random_child = { + limit = { + mpo_nomad_events_1011_rowdy_boy_trigger = yes + } + save_scope_as = rowdy_boy + } + } + #Make list of defectors + scope:rowdy_boy = { + every_consort = { + limit = { + is_ruler = no + } + add_to_list = defectors + } + every_child = { + limit = { + is_ruler = no + } + add_to_list = defectors + } + } + random_courtier = { + limit = { + mpo_nomad_events_1011_defecting_courtier_trigger = yes + } + add_to_list = defectors + } + random_courtier = { + limit = { + mpo_nomad_events_1011_defecting_courtier_trigger = yes + } + add_to_list = defectors + } + random_courtier = { + limit = { + mpo_nomad_events_1011_defecting_courtier_trigger = yes + } + add_to_list = defectors + } + #Add all the kids and spouses of defectors + every_in_list = { + list = defectors + every_child = { + limit = { + save_temporary_scope_as = potential_defector + is_courtier_of = root + is_acclaimed = no + is_imprisoned = no + NOR = { + this = scope:rowdy_boy + is_councillor_of = root + is_consort_of = root + is_primary_heir_of = root + is_player_heir_of = root + any_spouse ?= { + save_temporary_scope_as = potential_defector_spouse + is_councillor_of = root + } + any_spouse ?= { + OR = { + is_primary_heir_of = root + is_player_heir_of = root + } + } + any_spouse ?= { + is_acclaimed = yes + } + root = { + any_court_position_holder = { + this = scope:potential_defector + } + } + root = { + any_court_position_holder = { + this ?= scope:potential_defector_spouse + } + } + } + } + add_to_list = defectors + every_spouse = { + limit = { + save_temporary_scope_as = potential_defector + is_courtier_of = root + is_acclaimed = no + is_imprisoned = no + NOR = { + this = scope:rowdy_boy + is_councillor_of = root + is_consort_of = root + is_primary_heir_of = root + is_player_heir_of = root + root = { + any_court_position_holder = { + this = scope:potential_defector + } + } + } + } + add_to_list = defectors + } + every_child = { + limit = { + save_temporary_scope_as = potential_defector + is_courtier_of = root + is_acclaimed = no + is_imprisoned = no + NOR = { + this = scope:rowdy_boy + is_councillor_of = root + is_consort_of = root + is_primary_heir_of = root + is_player_heir_of = root + root = { + any_court_position_holder = { + this = scope:potential_defector + } + } + } + } + add_to_list = defectors + } + } + every_spouse = { + limit = { + NOR = { + this = scope:rowdy_boy + this = root + } + } + add_to_list = defectors + } + } + #Save title if possible + if = { + limit = { + any_held_title = { + tier = tier_county + is_landless_type_title = no + NOR = { + this = root.capital_county + this = root.primary_title + duchy = { + this = root.capital_county.duchy + } + } + } + } + random_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + NOR = { + this = root.capital_county + this = root.primary_title + duchy = { + this = root.capital_county.duchy + } + } + } + save_scope_as = rowdy_title + } + } + else_if = { + limit = { + any_held_title = { + tier = tier_county + is_landless_type_title = no + NOR = { + this = root.capital_county + this = root.primary_title + } + } + } + random_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + NOR = { + this = root.capital_county + this = root.primary_title + } + } + save_scope_as = rowdy_title + } + } + save_scope_as = root_scope + scope:rowdy_boy = { + set_variable = { + name = mpo_nomad_events_1020_liege + value = root + years = 25 + } + } + } + + #Great Khan/Conqueror better forbidding option + option = { + name = mpo_nomad_events.1020.a + trigger = { + OR = { + has_trait = conqueror + has_trait = greatest_of_khans + has_realm_law = nomadic_authority_5 + } + } + add_legitimacy = minor_legitimacy_gain + scope:rowdy_boy = { + add_opinion = { + modifier = humiliated_opinion + target = root + opinion = -30 + } + } + stress_impact = { + generous = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 400 + ai_value_modifier = { + ai_compassion = -1 + ai_greed = 1 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 80 + } + add = -50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < 0 + } + add = -25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -50 + } + add = 50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -75 + } + add = 100 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = humble + } + add = -100 + } + modifier = { + has_trait = generous + factor = 0 + } + } + } + + #Kill him + option = { + name = mpo_nomad_events.1020.b + trigger = { + is_adult = yes + is_incapable = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + scope:rowdy_boy = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + OR = { + AND = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value > 0 + } + } + has_trait = berserker + has_trait = gallant + has_trait = lifestyle_blademaster + has_trait = shieldmaiden + has_trait = brave + has_trait = wrathful + has_trait = callous + has_trait = sadistic + has_trait = vengeful + has_trait = arrogant + has_trait = arbitrary + has_trait = paranoid + has_trait = fickle + has_trait = stubborn + has_trait = just + has_trait = ambitious + } + } + add_internal_flag = dangerous + custom_tooltip = mpo_nomad_events.1020_duel_tt + add_character_flag = { + flag = duelling_defecting_family_flag + months = 6 + } + configure_start_single_combat_effect = { + SC_INITIATOR = root + SC_ATTACKER = root + SC_DEFENDER = scope:rowdy_boy + FATALITY = always + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = mpo_nomad_events.1021 + INVALIDATION_EVENT = perk_interaction.0102 + } + if = { + limit = { + has_relation_blood_brother = scope:rowdy_boy + } + add_stress = major_stress_impact_gain + remove_relation_blood_brother = scope:rowdy_boy + } + if = { + limit = { + has_relation_friend = scope:rowdy_boy + } + add_stress = medium_stress_impact_gain + remove_relation_friend = scope:rowdy_boy + } + if = { + limit = { + has_relation_best_friend = scope:rowdy_boy + } + add_stress = major_stress_impact_gain + remove_relation_best_friend = scope:rowdy_boy + } + if = { + limit = { + has_relation_soulmate = scope:rowdy_boy + is_alive = yes + } + add_stress = major_stress_impact_gain + remove_relation_soulmate = scope:rowdy_boy + } + house = { + every_house_member = { + limit = { + NOT = { + this = root + } + } + custom = custom.every_house_member + add_opinion = { + target = root + modifier = attacked_family_opinion + opinion = -25 + } + } + } + + stress_impact = { + forgiving = major_stress_impact_gain + generous = major_stress_impact_gain + craven = major_stress_impact_gain + compassionate = major_stress_impact_gain + trusting = medium_stress_impact_gain + humble = minor_stress_impact_gain + loyal = medium_stress_impact_gain + } + ai_chance = { + base = 25 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 80 + } + add = -50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < 0 + } + add = -25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -50 + } + add = 50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -75 + } + add = 100 + } + modifier = { + prowess > scope:rowdy_boy.prowess + add = 25 + } + modifier = { + prowess >= high_skill_rating + scope:rowdy_boy.prowess <= average_skill_rating + add = 50 + } + modifier = { + prowess >= very_high_skill_rating + scope:rowdy_boy.prowess <= average_skill_rating + add = 50 + } + modifier = { + prowess >= decent_skill_rating + scope:rowdy_boy.prowess <= low_skill_rating + add = 50 + } + modifier = { + prowess >= extremely_high_skill_rating + scope:rowdy_boy.prowess <= high_skill_rating + add = 50 + } + modifier = { + prowess < scope:rowdy_boy.prowess + add = -25 + } + modifier = { + scope:rowdy_boy.prowess >= high_skill_rating + prowess <= average_skill_rating + add = -50 + } + modifier = { + scope:rowdy_boy.prowess >= very_high_skill_rating + prowess <= average_skill_rating + add = -50 + } + modifier = { + scope:rowdy_boy.prowess >= decent_skill_rating + prowess <= low_skill_rating + add = -50 + } + modifier = { + scope:rowdy_boy.prowess >= extremely_high_skill_rating + prowess <= high_skill_rating + add = -50 + } + modifier = { + has_trait = humble + add = -100 + } + modifier = { + trait_is_criminal_in_faith_trigger = { FAITH = root.faith TRAIT = trait:kinslayer_3 GENDER_CHARACTER = root } + add = -25 + } + modifier = { + NOT = { + trait_is_shunned_or_criminal_in_faith_trigger = { FAITH = root.faith TRAIT = trait:kinslayer_3 GENDER_CHARACTER = root } + } + add = 50 + } + modifier = { + OR = { + has_trait = generous + has_trait = forgiving + has_trait = compassionate + has_trait = trusting + has_trait = loyal + has_trait = craven + } + factor = 0 + } + } + } + + #Make them a landed vassal + option = { + name = mpo_nomad_events.1020.c + flavor = mpo_nomad_events.1020.c.flavor + trigger = { + exists = scope:rowdy_title + highest_held_title_tier > tier_county + } + add_internal_flag = special + create_title_and_vassal_change = { + type = granted + save_scope_as = change + } + if = { + limit = { + domain_size >= 6 + } + add_legitimacy = miniscule_legitimacy_gain + } + else_if = { + limit = { + domain_size >= 4 + } + add_legitimacy = minor_legitimacy_gain + } + else_if = { + limit = { + domain_size >= 3 + } + add_legitimacy = medium_legitimacy_gain + } + else = { + add_legitimacy = major_legitimacy_gain + } + + scope:rowdy_title = { + change_title_holder = { + holder = scope:rowdy_boy + change = scope:change + } + } + scope:rowdy_boy = { + add_opinion = { + target = root + modifier = received_title_county + opinion = 40 + } + progress_towards_friend_effect = { + REASON = friend_granted_title + CHARACTER = root + OPINION = 0 + } + add_opinion = { + modifier = obedience_opinion + target = root + } + } + resolve_title_and_vassal_change = scope:change + + if = { + limit = { + highest_held_title_tier <= tier_duchy + } + pay_herd = { + target = scope:rowdy_boy + value = domicile.twenty_percent_current_herd_value + } + } + else_if = { + limit = { + highest_held_title_tier <= tier_kingdom + } + pay_herd = { + target = scope:rowdy_boy + value = domicile.fifteen_percent_current_herd_value + } + } + else = { + pay_herd = { + target = scope:rowdy_boy + value = domicile.ten_percent_current_herd_value + } + } + + stress_impact = { + greedy = major_stress_impact_gain + ambitious = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_vengefulness = -0.5 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 50 + } + add = 25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 80 + } + add = 50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < 0 + } + add = 25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -50 + } + add = -50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -75 + } + add = -100 + } + modifier = { + domain_limit_available <= 0 + add = 100 + } + modifier = { + domain_limit_available >= 2 + add = -50 + } + modifier = { + domain_size >= 6 + add = 100 + } + modifier = { + domain_size <= 3 + add = -100 + } + modifier = { + OR = { + has_trait = paranoid + has_trait = ambitious + has_trait = vengeful + } + add = -100 + } + modifier = { + OR = { + has_trait = greedy + gold < medium_gold_value + domain_size <= 2 + } + factor = 0 + } + } + } + + #Let them go + option = { + name = mpo_nomad_events.1020.d + flavor = mpo_nomad_events.1020.d.flavor + if = { + limit = { + any_maa_regiment = { + maa_size >= 12 + } + } + scope:rowdy_boy = { + add_prestige = massive_prestige_gain + } + dynasty = { + add_dynasty_prestige = massive_dynasty_prestige_gain + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size >= 8 + } + } + scope:rowdy_boy = { + add_prestige = major_prestige_gain + } + dynasty = { + add_dynasty_prestige = major_dynasty_prestige_gain + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size >= 4 + } + } + scope:rowdy_boy = { + add_prestige = medium_prestige_gain + } + dynasty = { + add_dynasty_prestige = medium_dynasty_prestige_gain + } + } + else = { + scope:rowdy_boy = { + add_prestige = minor_prestige_gain + } + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + + remove_courtier_or_guest = scope:rowdy_boy + scope:rowdy_boy = { + save_scope_as = holder + create_nomad_title = { + name = nomad_title_name + holder = scope:rowdy_boy + government = nomad_government + save_scope_as = new_nomad_title + } + change_government = nomad_government + + progress_towards_friend_effect = { + REASON = friend_granted_following + CHARACTER = root + OPINION = 0 + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 60 + } + if = { + limit = { + any_in_list = { + list = defectors + is_courtier_of = root + } + } + hidden_effect = { + every_in_list = { + list = defectors + limit = { + is_courtier_of = root + } + scope:rowdy_boy = { + add_courtier = prev + } + set_variable = { + name = nomad_defector_var + value = root + years = 5 + } + } + } + if = { + limit = { + any_in_list = { + list = defectors + OR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + is_courtier_of = scope:rowdy_boy + } + } + custom_tooltip = nomad_defector_family_tt + } + if = { + limit = { + any_in_list = { + list = defectors + NOR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + is_courtier_of = root + } + } + custom_tooltip = nomad_defector_gain_all_courtiers_tt + } + } + create_character_memory = { + type = defected_from_kin_memory + participants = { + kin = root + } + } + } + if = { + limit = { + highest_held_title_tier <= tier_duchy + } + pay_herd = { + target = scope:rowdy_boy + value = domicile.twenty_percent_current_herd_value + } + } + else_if = { + limit = { + highest_held_title_tier <= tier_kingdom + } + pay_herd = { + target = scope:rowdy_boy + value = domicile.fifteen_percent_current_herd_value + } + } + else = { + pay_herd = { + target = scope:rowdy_boy + value = domicile.ten_percent_current_herd_value + } + } + if = { + limit = { + any_maa_regiment = { + maa_size > 12 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 12 + } + change_maa_regiment_size = { + size = -6 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 6 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 10 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 10 + } + change_maa_regiment_size = { + size = -5 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 5 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 8 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 8 + } + change_maa_regiment_size = { + size = -4 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 4 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 6 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 6 + } + change_maa_regiment_size = { + size = -3 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 3 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 4 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 4 + } + change_maa_regiment_size = { + size = -2 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 2 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 2 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 2 + } + change_maa_regiment_size = { + size = -1 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 1 + } + } + } + } + stress_impact = { + greedy = major_stress_impact_gain + arrogant = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + vengeful = minor_stress_impact_gain + } + ai_chance = { + base = 0 + ai_value_modifier = { + ai_greed = -1 + ai_vengefulness = -0.5 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 50 + } + add = 25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 80 + } + add = 50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < 0 + } + add = 25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -50 + } + add = -50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -75 + } + add = -100 + } + modifier = { + OR = { + has_trait = greedy + has_trait = arrogant + has_trait = ambitious + gold <= major_gold_value + } + factor = 0 + } + } + } + + #Try to convince them to stay + option = { + name = mpo_nomad_events.1020.e + trigger = { + NOR = { + has_trait = conqueror + has_trait = greatest_of_khans + has_realm_law = nomadic_authority_5 + has_realm_law = nomadic_authority_4 + } + } + duel = { + skills = { diplomacy intrigue } + target = scope:rowdy_boy + #You talk him down + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + legitimacy_level >= 5 + add = 10 + } + modifier = { + legitimacy_level >= 4 + add = 10 + } + modifier = { + scope:rowdy_boy = { + opinion = { + target = root + value >= 75 + } + } + add = 25 + } + desc = mpo_nomad_events.1020.e.success + send_interface_toast = { + title = mpo_nomad_events.1020.e.success + left_icon = scope:rowdy_boy + + if = { + limit = { + has_lifestyle = diplomacy_lifestyle + } + add_diplomacy_lifestyle_xp = major_lifestyle_xp + } + else_if = { + limit = { + has_lifestyle = intrigue_lifestyle + } + add_intrigue_lifestyle_xp = major_lifestyle_xp + } + else = { + add_legitimacy = minor_legitimacy_gain + scope:rowdy_boy = { + add_opinion = { + target = root + modifier = pacified_opinion + opinion = 30 + } + } + } + scope:rowdy_boy = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + } + #He and his supporters sneak off + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + scope:rowdy_boy = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + add = 50 + } + modifier = { + legitimacy_level < 1 + add = 10 + } + modifier = { + legitimacy_level <= 1 + add = 10 + } + modifier = { + legitimacy_level <= 2 + add = 10 + } + modifier = { + scope:rowdy_boy = { + opinion = { + target = root + value <= -25 + } + } + add = 25 + } + desc = mpo_nomad_events.1020.e.failure + send_interface_toast = { + title = mpo_nomad_events.1020.e.failure + left_icon = scope:rowdy_boy + + scope:rowdy_boy = { + save_scope_as = holder + create_nomad_title = { + name = nomad_title_name + holder = scope:rowdy_boy + government = nomad_government + save_scope_as = new_nomad_title + } + change_government = nomad_government + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -30 + } + set_variable = { + name = nomad_defector_var + value = root + years = 5 + } + if = { + limit = { + any_in_list = { + list = defectors + is_courtier_of = root + } + } + hidden_effect = { + every_in_list = { + list = defectors + limit = { + is_courtier_of = root + } + scope:rowdy_boy = { + add_courtier = prev + } + set_variable = { + name = nomad_defector_var + value = root + years = 5 + } + } + } + if = { + limit = { + any_in_list = { + list = defectors + OR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + is_courtier_of = scope:rowdy_boy + } + } + custom_tooltip = nomad_defector_family_tt + } + if = { + limit = { + any_in_list = { + list = defectors + NOR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + is_courtier_of = root + } + } + custom_tooltip = nomad_defector_gain_all_courtiers_tt + } + } + custom_tooltip = nomad_defector_family_wont_come_back_tt + create_character_memory = { + type = defected_from_kin_memory + participants = { + kin = root + } + } + + } + if = { + limit = { + highest_held_title_tier <= tier_duchy + } + pay_herd = { + target = scope:rowdy_boy + value = domicile.ten_percent_current_herd_value + } + } + else = { + pay_herd = { + target = scope:rowdy_boy + value = domicile.five_percent_current_herd_value + } + } + if = { + limit = { + any_maa_regiment = { + maa_size > 15 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 15 + } + change_maa_regiment_size = { + size = -6 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 6 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 12 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 12 + } + change_maa_regiment_size = { + size = -5 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 5 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 10 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 10 + } + change_maa_regiment_size = { + size = -4 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 4 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 8 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 8 + } + change_maa_regiment_size = { + size = -3 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 3 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 6 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 6 + } + change_maa_regiment_size = { + size = -2 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 2 + } + } + } + } + else_if = { + limit = { + any_maa_regiment = { + maa_size > 4 + } + } + ordered_maa_regiment = { + order_by = maa_size + limit = { + maa_size > 4 + } + change_maa_regiment_size = { + size = -1 + reinforce = yes + } + scope:rowdy_boy = { + create_maa_regiment = { + type_of = prev + size = 1 + } + } + } + } + } + } + } + stress_impact = { + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 0 + ai_value_modifier = { + ai_sociability = 1 + } + modifier = { + AND = { + diplomacy > scope:rowdy_boy.diplomacy + intrigue > scope:rowdy_boy.intrigue + } + add = 25 + } + modifier = { + OR = { + AND = { + diplomacy >= high_skill_rating + intrigue >= high_skill_rating + } + diplomacy > extremely_high_skill_rating + intrigue > extremely_high_skill_rating + } + add = 25 + } + modifier = { + scope:rowdy_boy = { + OR = { + AND = { + diplomacy < average_skill_rating + intrigue < average_skill_rating + } + diplomacy <= low_skill_rating + intrigue <= low_skill_rating + } + } + add = 25 + } + modifier = { + AND = { + diplomacy < scope:rowdy_boy.diplomacy + intrigue < scope:rowdy_boy.intrigue + } + add = -25 + } + modifier = { + scope:rowdy_boy = { + OR = { + AND = { + diplomacy >= high_skill_rating + intrigue >= high_skill_rating + } + diplomacy > extremely_high_skill_rating + intrigue > extremely_high_skill_rating + } + } + add = -25 + } + modifier = { + OR = { + AND = { + diplomacy < average_skill_rating + intrigue < average_skill_rating + } + diplomacy <= low_skill_rating + intrigue <= low_skill_rating + } + add = -25 + } + modifier = { + diplomacy < high_skill_rating + intrigue < high_skill_rating + scope:rowdy_boy = { + diplomacy >= low_skill_rating + intrigue >= low_skill_rating + } + add = -25 + } + modifier = { + scope:rowdy_boy = { + mpo_nomad_events_1011_rowdiest_trigger = yes + } + add = -50 + } + modifier = { + legitimacy_level < 1 + add = -10 + } + modifier = { + legitimacy_level <= 1 + add = -10 + } + modifier = { + legitimacy_level <= 2 + add = -10 + } + modifier = { + scope:rowdy_boy = { + opinion = { + target = root + value <= -25 + } + } + add = -25 + } + modifier = { + legitimacy_level >= 5 + add = 10 + } + modifier = { + legitimacy_level >= 4 + add = 10 + } + modifier = { + scope:rowdy_boy = { + opinion = { + target = root + value >= 75 + } + } + add = 25 + } + } + } + #Send them alone into exile + option = { + name = mpo_nomad_events.1020.f + flavor = mpo_nomad_events.1020.f.flavor + + add_dread = minor_dread_gain + create_character_memory = { + type = exiled_kin_memory + participants = { + exile = scope:rowdy_boy + } + } + scope:rowdy_boy = { + progress_towards_rival_effect = { + REASON = rival_banished_kin + CHARACTER = root + OPINION = 0 + } + add_opinion = { + modifier = banished_me + target = root + opinion = -40 + } + set_variable = { + name = nomad_defector_var + value = root + years = 5 + } + create_character_memory = { + type = exiled_by_kin_memory + participants = { + banisher = root + } + } + } + remove_courtier_or_guest = scope:rowdy_boy + hidden_effect = { + every_in_list = { + list = defectors + limit = { + OR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + } + if = { + limit = { + OR = { + is_courtier_of = root + is_pool_guest_of = root + } + } + root = { + remove_courtier_or_guest = prev + } + } + set_variable = { + name = nomad_defector_var + value = root + years = 5 + } + } + } + if = { + limit = { + any_in_list = { + list = defectors + OR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + } + } + custom_tooltip = nomad_defector_family_tt + custom_tooltip = nomad_defector_family_wont_come_back_tt + } + else = { + custom_tooltip = nomad_defector_wont_come_back_tt + } + #Move exiles from root's capital + hidden_effect = { + if = { + limit = { + any_neighboring_and_across_water_top_liege_realm_owner = { + exists = capital_province + } + } + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + exists = capital_province + } + capital_province = { + save_scope_as = exile_destination + } + } + scope:rowdy_boy = { + move_to_pool_at = scope:exile_destination + } + every_in_list = { + list = defectors + limit = { + OR = { + is_child_of = scope:rowdy_boy + is_spouse_of = scope:rowdy_boy + } + } + move_to_pool_at = scope:exile_destination + } + } + scope:rowdy_boy = { + if = { + limit = { + can_start_scheme = { + type = murder + target_character = root + } + } + random_list = { + 1 = { + } + 2 = { + modifier = { + has_relation_rival = root + factor = 5 + } + start_scheme = { + type = murder + target_character = root + } + } + } + } + } + } + stress_impact = { + forgiving = major_stress_impact_gain + generous = major_stress_impact_gain + compassionate = medium_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 1 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value >= 80 + } + add = -50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < 0 + } + add = -25 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -50 + } + add = 50 + } + modifier = { + opinion = { + target = scope:rowdy_boy + value < -75 + } + add = 100 + } + modifier = { + OR = { + has_trait = forgiving + has_trait = generous + has_trait = compassionate + has_trait = trusting + } + factor = 0 + } + } + } +} + +mpo_nomad_events.1021 = { + hidden = yes + immediate = { + if = { + limit = { + scope:sc_attacker = { + is_alive = yes + } + } + scope:sc_attacker = { + remove_character_flag = single_combat_stripped_to_waist + } + } + if = { + limit = { + scope:sc_defender = { + is_alive = yes + } + } + scope:sc_defender = { + remove_character_flag = single_combat_stripped_to_waist + } + } + + + if = { + limit = { + this = scope:sc_attacker + } + trigger_event = mpo_nomad_events.1022 + } + } +} + +mpo_nomad_events.1022 = { + type = character_event + window = duel_event + title = mpo_nomad_events.1022.t + desc = mpo_nomad_events.1022.desc + theme = death + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + character = scope:rowdy_boy + } + override_background = { + reference = terrain_scope + } + + immediate = { + remove_character_flag = duelling_defecting_family_flag + } + + option = { + name = mpo_nomad_events.1022.a + if = { + limit = { + scope:rowdy_boy = { + prowess < high_skill_rating + } + } + add_prestige = medium_prestige_gain + add_dread = medium_dread_gain + } + else = { + add_prestige = major_prestige_gain + add_dread = major_dread_gain + } + add_prowess_skill = 1 + + add_character_modifier = { + modifier = mpo_quelled_family_dissent_modifier + years = 10 + } + stress_impact = { + base = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + forgiving = minor_stress_impact_gain + } + } +} + +scripted_trigger mpo_nomad_events_1030_child_trigger = { + is_available = yes + age < 16 + age >= 3 + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + NOT = { + has_character_flag = had_mpo_nomad_events_1030 + } + is_courtier_of = root + is_hostage = no +} + +#Which manly art do you want your son to practice? +mpo_nomad_events.1030 = { + type = character_event + title = mpo_nomad_events.1030.t + desc = { + desc = mpo_nomad_events.1030.desc + first_valid = { + triggered_desc = { + trigger = { + culture = { + has_cultural_pillar = language_mongolic + } + } + desc = mpo_nomad_events.1030.desc_mongolic + } + desc = mpo_nomad_events.1030.desc_non_mongolic + } + desc = mpo_nomad_events.1030.desc.outro + } + theme = nomads + override_background = { + reference = courtyard + } + left_portrait = { + character = root + animation = hunting_shortbow_rest_arrow_default + camera = camera_event_left_forward + } + right_portrait = { + character = scope:child + animation = clutching_ball + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available = yes + any_child = { + mpo_nomad_events_1030_child_trigger = yes + } + } + + cooldown = { + years = 3 + } + + immediate = { + save_scope_as = root_scope + add_character_flag = need_military_outfit + #Choose primary_heir if possible + if = { + limit = { + any_child = { + is_primary_heir_of = root + mpo_nomad_events_1030_child_trigger = yes + } + } + random_child = { + limit = { + is_primary_heir_of = root + mpo_nomad_events_1030_child_trigger = yes + } + save_scope_as = child + } + } + if = { + limit = { + NOT = { + exists = scope:child + } + } + random_child = { + limit = { + mpo_nomad_events_1030_child_trigger = yes + } + save_scope_as = child + } + } + + scope:child = { + add_character_flag = { + flag = had_mpo_nomad_events_1030 + years = 15 + } + } + } + + weight_multiplier = { + base = 1 + modifier = { + any_child = { + is_primary_heir_of = root + mpo_nomad_events_1030_child_trigger = yes + } + add = 2 + } + } + + #Him? I need practice! + option = { + name = mpo_nomad_events.1030.a + flavor = mpo_nomad_events.1030.a.flavor + trigger = { + OR = { + has_trait = tourney_participant + has_trait = lifestyle_blademaster + has_trait = education_martial_prowess_1 + has_trait = education_martial_prowess_2 + has_trait = education_martial_prowess_3 + has_trait = education_martial_prowess_4 + has_trait = berserker + has_trait = shieldmaiden + has_trait = gallant + has_trait = athletic + has_trait = impatient + has_trait = arrogant + has_trait = ambitious + has_trait = diligent + } + } + #Not specialized + if = { + limit = { + OR = { + NOT = { + has_trait = tourney_participant + } + NOR = { + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 30 + } + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 30 + } + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 30 + } + } + AND = { + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 30 + } + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 30 + } + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 30 + } + } + } + } + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = 10 + } + add_trait_xp = { + trait = tourney_participant + track = bow + value = 10 + } + add_trait_xp = { + trait = tourney_participant + track = horse + value = 10 + } + } + if = { + limit = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = foot + value >= 30 + } + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = 15 + } + } + if = { + limit = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = horse + value >= 30 + } + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = 15 + } + } + if = { + limit = { + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + track = bow + value >= 30 + } + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = 15 + } + } + + stress_impact = { + base = { + add = miniscule_stress_impact_gain + multiply = 0.5 + } + compassionate = miniscule_stress_impact_gain + generous = miniscule_stress_impact_gain + humble = miniscule_stress_impact_gain + lazy = medium_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_energy = 1 + ai_compassion = -0.5 + } + modifier = { + add = -100 + OR = { + has_trait = compassionate + has_trait = generous + } + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + has_trait = content + } + } + } + } + #Wrestling + option = { + name = mpo_nomad_events.1030.b + scope:child = { + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = foot + value = 50 + } + random = { + chance = { + value = 5 + if = { + limit = { + has_trait = rowdy + } + add = 5 + } + if = { + limit = { + OR = { + has_trait = wrathful + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = fickle + has_trait = brave + } + } + add = 5 + } + } + add_trait = strong + } + } + stress_impact = { + craven = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_boldness = 0.5 + } + modifier = { + add = 75 + scope:child = { + OR = { + has_trait = wrathful + has_trait = vengeful + has_trait = sadistic + has_trait = callous + has_trait = fickle + has_trait = brave + has_trait = rowdy + } + } + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = paranoid + } + } + } + } + #Bow + option = { + name = mpo_nomad_events.1030.c + flavor = mpo_nomad_events.1030.c.flavor + scope:child = { + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = bow + value = 50 + } + random = { + chance = { + value = 10 + if = { + limit = { + has_trait = pensive + } + add = 10 + } + if = { + limit = { + OR = { + has_trait = patient + has_trait = calm + has_trait = temperate + has_trait = chaste + has_trait = paranoid + has_trait = content + } + } + add = 5 + } + } + add_trait = lifestyle_hunter + } + } + stress_impact = { + wrathful = miniscule_stress_impact_gain + impatient = miniscule_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_rationality = 0.5 + } + modifier = { + add = 75 + scope:child = { + OR = { + has_trait = patient + has_trait = calm + has_trait = temperate + has_trait = chaste + has_trait = paranoid + has_trait = content + has_trait = pensive + } + } + } + modifier = { + add = -100 + OR = { + has_trait = wrathful + has_trait = impatient + } + } + } + } + #Riding + option = { + name = mpo_nomad_events.1030.d + flavor = mpo_nomad_events.1030.d.flavor + scope:child = { + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = horse + value = 50 + } + random = { + chance = { + value = 10 + if = { + limit = { + has_trait = bossy + } + add = 10 + } + if = { + limit = { + OR = { + has_trait = compassionate + has_trait = trusting + has_trait = forgiving + has_trait = stubborn + has_trait = diligent + has_trait = generous + } + } + add = 5 + } + } + add_trait = lifestyle_traveler + } + } + stress_impact = { + sadistic = miniscule_stress_impact_gain + callous = miniscule_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = 0.5 + } + modifier = { + add = 75 + scope:child = { + OR = { + has_trait = bossy + has_trait = compassionate + has_trait = trusting + has_trait = forgiving + has_trait = stubborn + has_trait = diligent + has_trait = generous + } + } + } + modifier = { + add = -100 + OR = { + has_trait = sadistic + has_trait = callous + } + } + } + } + + after = { + remove_character_flag = need_military_outfit + } +} + +#You just won an overrunning invasion war +mpo_nomad_events.1040 = { + type = character_event + title = mpo_nomad_events.1040.t + desc = { + #Duchy overrunning wars need different desc + triggered_desc = { + trigger = { + exists = scope:duchy_war + } + desc = mpo_nomad_events.1040.desc_duchy + } + desc = mpo_nomad_events.1040.desc + #TRIGGERED DESC FOR GOVERNMENT TYPE GAINED + first_valid = { + triggered_desc = { + trigger = { + government_has_flag = government_is_tribal + } + desc = mpo_nomad_events.1040.desc_tribal + } + triggered_desc = { + trigger = { + government_has_flag = government_is_clan + } + desc = mpo_nomad_events.1040.desc_clan + } + desc = mpo_nomad_events.1040.desc_feudal + } + } + theme = war + override_background = { + reference = terrain_settlement + } + override_effect_2d = { + reference = legend_glow + } + left_portrait = { + character = root + animation = survey + } + right_portrait = { + character = scope:warrior + animation = horse_archer_idle + camera = camera_event_horse_right + } + lower_right_portrait = scope:defender + + immediate = { + save_scope_as = root_scope + add_character_flag = need_military_outfit + random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_soldier } + #Save a warrior character just to look cool + ordered_knight = { + order_by = prowess + limit = { + is_imprisoned = no + is_physically_able_adult = yes + culture = root.culture + } + save_scope_as = warrior + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + ordered_knight = { + order_by = prowess + limit = { + is_imprisoned = no + is_physically_able_adult = yes + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + ordered_courtier = { + order_by = prowess + limit = { + is_physically_able_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available = yes + culture = root.culture + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + ordered_courtier = { + order_by = prowess + limit = { + is_physically_able_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available = yes + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + ordered_pool_guest = { + order_by = prowess + limit = { + is_physically_able_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available = yes + culture = root.culture + } + save_scope_as = warrior + } + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_pool_guest = { + limit = { + is_physically_able_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + is_available = yes + } + save_scope_as = warrior + } + } + scope:warrior = { + add_character_flag = need_military_outfit + } + #Want to mention main vassals + ordered_vassal = { + order_by = highest_held_title_tier + limit = { + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + } + save_scope_as = vassal_1 + primary_title = { + save_scope_as = vassal_1_title + } + } + if = { + limit = { + exists = scope:vassal_1 + any_vassal = { + NOT = { + this = scope:vassal_1 + } + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + } + } + ordered_vassal = { + order_by = highest_held_title_tier + limit = { + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + NOT = { + this = scope:vassal_1 + } + } + save_scope_as = vassal_2 + primary_title = { + save_scope_as = vassal_2_title + } + } + } + if = { + limit = { + exists = scope:vassal_2 + any_vassal = { + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + } + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + } + } + ordered_vassal = { + order_by = highest_held_title_tier + limit = { + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + } + } + save_scope_as = vassal_3 + primary_title = { + save_scope_as = vassal_3_title + } + } + } + if = { + limit = { + exists = scope:vassal_3 + any_vassal = { + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + this = scope:vassal_3 + } + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + } + } + ordered_vassal = { + order_by = highest_held_title_tier + limit = { + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + this = scope:vassal_3 + } + } + save_scope_as = vassal_4 + primary_title = { + save_scope_as = vassal_4_title + } + } + } + if = { + limit = { + exists = scope:vassal_4 + any_vassal = { + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + this = scope:vassal_3 + this = scope:vassal_4 + } + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + } + } + ordered_vassal = { + order_by = highest_held_title_tier + limit = { + highest_held_title_tier >= tier_county + primary_title.kingdom = scope:target + NOR = { + this = scope:vassal_1 + this = scope:vassal_2 + this = scope:vassal_3 + this = scope:vassal_4 + } + } + save_scope_as = vassal_5 + primary_title = { + save_scope_as = vassal_5_title + } + } + } + capital_county = { + save_scope_as = capital_county + } + primary_title = { + save_scope_as = primary_title + } + custom_tooltip = overrunning_set_primary_title_tt + custom_tooltip = overrunning_set_capital_tt + if = { + limit = { + exists = scope:vassal_1 + } + custom_tooltip = overrunning_vassal_1_tt + } + if = { + limit = { + exists = scope:vassal_2 + } + custom_tooltip = overrunning_vassal_2_tt + } + if = { + limit = { + exists = scope:vassal_3 + } + custom_tooltip = overrunning_vassal_3_tt + } + if = { + limit = { + exists = scope:vassal_4 + } + custom_tooltip = overrunning_vassal_4_tt + } + + if = { + limit = { + exists = scope:vassal_5 + } + custom_tooltip = overrunning_vassal_5_tt + } + } + option = { + name = mpo_nomad_events.1040.a + } + after = { + remove_character_flag = need_military_outfit + scope:warrior = { + remove_character_flag = need_military_outfit + } + } +} + +scripted_trigger mpo_nomad_events_1050_herder_trigger = { + government_has_flag = government_is_herder + NOT = { is_tributary_of = root } + highest_held_title_tier = tier_county + capital_county = { + county_fertility >= minor_county_fertility_value + } + NOT = { + is_vassal_of = root + + } +} + +#Your herds are encroaching on grazing lands of neighboring herders +mpo_nomad_events.1050 = { + type = character_event + title = mpo_nomad_events.1050.t + desc = mpo_nomad_events.1050.desc + theme = nomads + override_background = { + reference = mpo_camp_steppe + } + left_portrait = { + character = root + animation = dismissal + } + right_portrait = { + character = scope:herder + triggered_animation = { + trigger = { + root = { + highest_held_title_tier >= tier_kingdom + } + } + animation = throne_room_bow_1 + } + triggered_animation = { + trigger = { + root = { + highest_held_title_tier < tier_kingdom + } + } + animation = shepherd_with_sheep + } + camera = camera_event_very_right + } + + trigger = { + age > 8 + is_available = yes + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + any_sub_realm_county = { + holder = root + county_fertility < 100 + is_landless_type_title = no + any_neighboring_county = { + holder = { + mpo_nomad_events_1050_herder_trigger = yes + } + } + } + } + + cooldown = { + years = 5 + } + + immediate = { + random_sub_realm_county = { + limit = { + holder = root + county_fertility < 100 + is_landless_type_title = no + any_neighboring_county = { + holder = { + mpo_nomad_events_1050_herder_trigger = yes + } + } + } + save_scope_as = domain_county + random_neighboring_county = { + limit = { + holder = { + mpo_nomad_events_1050_herder_trigger = yes + } + } + save_scope_as = herder_county + holder = { + save_scope_as = herder + } + } + } + every_sub_realm_county = { + limit = { + holder = root + county_fertility < 100 + is_landless_type_title = no + any_neighboring_county = { + holder = { + mpo_nomad_events_1050_herder_trigger = yes + } + } + } + every_neighboring_county = { + limit = { + holder = { + mpo_nomad_events_1050_herder_trigger = yes + } + } + holder = { + add_to_list = herder_list + } + } + } + } + #All my neighbors are weaker than me... I can do this wherever I want + option = { + trigger = { + any_in_list = { + list = herder_list + count >= 2 + } + OR = { + has_trait = conqueror + has_trait = greatest_of_khans + is_gurkhan = yes + } + } + name = mpo_nomad_events.1050.a + add_internal_flag = special + capital_county = { + change_county_fertility = herder_list_county_fertility_value + } + every_in_list = { + custom = custom.every_neighboring_herder + list = herder_list + custom_tooltip = capital_county_loses_fertility_tt + hidden_effect = { + capital_county = { + change_county_fertility = medium_county_fertility_loss + } + } + } + if = { + limit = { + any_in_list = { + list = herder_list + count >= 4 + } + } + if = { + limit = { + highest_held_title_tier >= tier_kingdom + } + add_tyranny = minor_tyranny_gain + } + else = { + add_piety = medium_piety_loss + } + } + else = { + add_piety = minor_piety_loss + } + stress_impact = { + greedy = miniscule_stress_impact_loss + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + just = medium_stress_impact_gain + } + ai_chance = { + base = 300 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + has_trait = just + } + } + } + } + #It showed courage to stand up for yourself. Become my honored vassal + option = { + trigger = { + highest_held_title_tier >= tier_duchy + domicile = { + herd > medium_herd_value + } + scope:herder = { + is_independent_ruler = yes + is_at_war = no + OR = { + AND = { + root = { + faith_dominant_gender_male_or_equal = yes + } + is_male = yes + } + AND = { + root = { + faith_dominant_gender_female_or_equal = yes + } + is_female = yes + } + } + NOR = { + has_trait = deceitful + has_trait = craven + } + } + OR = { + piety_level >= high_piety_level + has_trait = loyal + has_trait = just + has_trait = honest + has_trait = compassionate + has_trait = trusting + has_trait = forgiving + has_trait = generous + } + } + name = mpo_nomad_events.1050.b + flavor = mpo_nomad_events.1050.b.flavor + + scope:herder = { + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = no + } + change_liege = { + liege = root + change = scope:change + } + resolve_title_and_vassal_change = scope:change + add_prestige = medium_prestige_gain + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 80 + } + save_scope_as = holder + hidden_effect = { + every_held_title = { + limit = { + tier = tier_county + } + if = { + limit = { + title_province = { + has_holding_type = herder_holding + } + } + title_province = { + set_holding_type = nomad_holding + } + } + } + } + change_government = nomad_government + domicile = { + change_herd = medium_herd_gain + } + } + pay_herd = { + target = scope:herder + value = domicile.medium_herd_value + } + + stress_impact = { + generous = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + greedy = minor_stress_impact_gain + vengeful = medium_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + ai_energy = 0.5 + ai_compassion = 0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = arrogant + has_trait = paranoid + has_trait = vengeful + } + } + } + } + #I will not be respected if I do not respect the rights of others + option = { + name = mpo_nomad_events.1050.c + flavor = mpo_nomad_events.1050.c.flavor + add_piety = medium_piety_gain + add_prestige = minor_prestige_gain + domicile = { + change_herd = minor_herd_loss + } + stress_impact = { + greedy = minor_stress_impact_gain + arbitrary = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = arbitrary + } + } + } + } + #I am stronger. My animals go where they like + option = { + name = mpo_nomad_events.1050.d + scope:domain_county = { + change_county_fertility = medium_county_fertility_gain + } + custom_tooltip = herder_county_loses_fertility_tt + hidden_effect = { + scope:herder.capital_county = { + change_county_fertility = medium_county_fertility_loss + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + generous = medium_stress_impact_gain + just = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + has_trait = just + } + } + } + } +} + +#You can make money trading with neighboring non-nomads +mpo_nomad_events.1060 = { + type = character_event + title = mpo_nomad_events.1060.t + desc = mpo_nomad_events.1060.desc + theme = nomads + override_background = { + reference = market + } + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left_forward + } + right_portrait = { + character = scope:advisor + animation = betting + } + lower_right_portrait = scope:neighbor.top_liege + + trigger = { + age >= 12 + is_available = yes + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + any_sub_realm_county = { + holder = root + any_neighboring_county = { + any_county_province = { + OR = { + has_holding_type = castle_holding + has_holding_type = city_holding + } + } + holder = { + is_ai = yes + NOT = { + is_at_war_with = root + } + } + holder.liege ?= { + NOT = { + is_at_war_with = root + } + } + holder.top_liege = { + NOT = { + is_at_war_with = root + } + } + } + } + highest_held_title_tier < tier_kingdom + } + + cooldown = { + years = 10 + } + + immediate = { + random_sub_realm_county = { + limit = { + holder = root + any_neighboring_county = { + any_county_province = { + OR = { + has_holding_type = castle_holding + has_holding_type = city_holding + } + } + holder = { + is_ai = yes + NOT = { + is_at_war_with = root + } + } + holder.liege ?= { + NOT = { + is_at_war_with = root + } + } + holder.top_liege = { + NOT = { + is_at_war_with = root + } + } + } + } + random_neighboring_county = { + limit = { + any_county_province = { + OR = { + has_holding_type = castle_holding + has_holding_type = city_holding + } + } + holder.liege ?= { + NOT = { + is_at_war_with = root + } + } + holder = { + is_ai = yes + NOT = { + is_at_war_with = root + } + } + holder.top_liege = { + NOT = { + is_at_war_with = root + } + } + } + save_scope_as = neighbor_county + holder = { save_scope_as = neighbor } + culture = { + save_scope_as = county_culture + } + random_county_province = { + limit = { + OR = { + has_holding_type = castle_holding + has_holding_type = city_holding + } + } + save_scope_as = neighbor_province + } + + } + } + scope:neighbor = { + save_scope_as = bg_override_char + } + random_councillor = { + limit = { + is_landed = no + is_available_ai_adult = yes + NOT = { + has_council_position = councillor_court_chaplain + } + } + save_scope_as = advisor + } + if = { + limit = { + NOT = { + exists = scope:advisor + } + } + random_knight = { + limit = { + is_available_ai_adult = yes + is_landed = no + } + save_scope_as = advisor + } + } + if = { + limit = { + NOT = { + exists = scope:advisor + } + } + random_courtier = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = advisor + } + } + if = { + limit = { + NOT = { + exists = scope:advisor + } + } + random_pool_guest = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = advisor + } + } + } + #High stewardship option + option = { + trigger = { + stewardship >= very_high_skill_rating + } + name = mpo_nomad_events.1060.a + flavor = mpo_nomad_events.1060.a.flavor + add_character_modifier = { + modifier = nomad_trading_mastery_modifier + years = 10 + } + add_gold = medium_gold_value + domicile = { + change_herd = miniscule_herd_loss + } + stress_impact = { + greedy = miniscule_stress_impact_loss + diligent = minor_stress_impact_loss + ambitious = miniscule_stress_impact_loss + } + ai_chance = { + base = 400 + ai_value_modifier = { + ai_energy = -0.5 + ai_boldness = -0.5 + ai_rationality = 1 + } + } + } + #No trade, only raid! + option = { + name = mpo_nomad_events.1060.b + flavor = mpo_nomad_events.1060.b.flavor + duel = { + skill = prowess + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = mpo_nomad_events.1060.b.success + send_interface_toast = { + type = event_toast_effect_good + title = mpo_nomad_events.1060.b.success + left_icon = scope:neighbor + add_gold = major_gold_value + scope:neighbor_county = { + change_development_progress_with_overflow = medium_development_progress_loss + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = mpo_nomad_events.1060.b.failure + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_nomad_events.1060.b.failure + left_icon = scope:neighbor + increase_wounds_effect = { REASON = fight } + } + } + } + scope:neighbor.top_liege = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -30 + } + } + stress_impact = { + impatient = miniscule_stress_impact_loss + craven = medium_stress_impact_gain + calm = minor_stress_impact_gain + patient = minor_stress_impact_gain + content = miniscule_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_boldness = 1 + ai_rationality = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = calm + has_trait = patient + } + } + } + } + #We've got goods to sell + option = { + name = mpo_nomad_events.1060.c + flavor = mpo_nomad_events.1060.c.flavor + add_character_modifier = { + modifier = nomad_trading_partners_modifier + years = 10 + } + add_gold = medium_gold_value + domicile = { + change_herd = minor_herd_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -0.5 + ai_boldness = -0.5 + ai_rationality = 1 + } + } + } +} + +#You wake up with only your horse +mpo_nomad_events.1070 = { + type = character_event + title = mpo_nomad_events.1070.t + desc = { + desc = mpo_nomad_events.1070.desc_intro + first_valid = { + triggered_desc = { + trigger = { + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + desc = mpo_nomad_events.1070.desc_has_horse + } + desc = mpo_nomad_events.1070.desc_new_horse + } + desc = mpo_nomad_events.1070.desc + first_valid = { + triggered_desc = { + trigger = { + has_trait = lifestyle_mystic + } + desc = mpo_nomad_events.1070.desc_spiritual + } + triggered_desc = { + trigger = { + OR = { + has_trait = eccentric + has_trait = lunatic + has_trait = possessed + } + } + desc = mpo_nomad_events.1070.desc_mental_thing + } + desc = mpo_nomad_events.1070.desc_new_drunk + } + } + theme = nomads + override_background = { + reference = wilderness + } + left_portrait = { + character = root + animation = jockey_idle + camera = camera_event_horse_extreme_closeup_left + hide_info = yes + } + + trigger = { + age >= 12 + is_available = yes + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + highest_held_title_tier < tier_empire + OR = { + #Is young and foolish + age <= 25 + #Is a mess + has_trait = drunkard + has_trait = lifestyle_reveler + has_trait = hashishiyah + #Is a little mentally off + has_trait = eccentric + has_trait = lunatic + has_trait = possessed + has_trait = lifestyle_mystic + } + NOT = { + has_trait = temperate + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 3 + OR = { + has_trait = drunkard + has_trait = lifestyle_reveler + has_trait = hashishiyah + has_trait = lunatic + has_trait = possessed + } + } + modifier = { + add = 0.5 + OR = { + ai_energy >= medium_positive_ai_value + ai_rationality >= medium_positive_ai_value + ai_boldness >= medium_positive_ai_value + ai_sociability >= medium_positive_ai_value + } + } + modifier = { + add = -0.5 + OR = { + ai_energy <= medium_negative_ai_value + ai_rationality <= medium_negative_ai_value + ai_boldness <= medium_negative_ai_value + ai_sociability <= medium_negative_ai_value + } + } + #Syncretic nomads weren't strict about rules like those forbidding alcohol, but still should be accounted for + modifier = { + factor = -0.5 + faith_forbids_alcohol_trigger = no + } + } + + cooldown = { + years = 10 + } + + immediate = { + } + + #I love you, horse + #Starts horse story cycle? + option = { + name = mpo_nomad_events.1070.a + trigger = { + NOR = { + has_character_flag = had_warhorse_story + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + NOR = { + has_trait = sadistic + has_trait = arbitrary + has_trait = fickle + has_trait = callous + } + } + custom_tooltip = begin_warhorse_story_tt + start_warhorse_story_cycle_effect = yes + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + #I must cease this horrible immature behavior... + option = { + trigger = { + OR = { + has_trait = drunkard + has_trait = hashishiyah + } + } + name = mpo_nomad_events.1070.b + if = { + limit = { + has_trait = drunkard + } + random = { + chance = 70 + remove_trait = drunkard + } + } + else = { + random = { + chance = 70 + remove_trait = hashishiyah + } + } + stress_impact = { + base = minor_stress_impact_gain + temperate = minor_stress_impact_loss + content = medium_stress_impact_gain + gluttonous = minor_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_energy = 1 + ai_rationality = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = gluttonous + has_trait = fickle + AND = { + stress > 90 + stress < 100 + } + } + } + } + } + + #HighGod brought me here + option = { + trigger = { + OR = { + has_trait = zealous + has_trait = lifestyle_mystic + has_trait = devoted + } + } + name = mpo_nomad_events.1070.c + flavor = mpo_nomad_events.1070.c.flavor + if = { + limit = { + NOT = { + has_trait = lifestyle_mystic + } + } + add_trait = lifestyle_mystic + } + else = { + add_trait_xp = { + trait = lifestyle_mystic + value = small_lifestyle_random_xp_mid + } + } + add_piety = minor_piety_gain + stress_impact = { + base = minor_stress_impact_loss + zealous = minor_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_zeal = 2 + } + modifier = { + factor = 0 + has_trait = cynical + } + } + } + + #I can find my way home + option = { + name = mpo_nomad_events.1070.d + flavor = mpo_nomad_events.1070.d.flavor + duel = { + skills = { learning prowess } + value = medium_skill_rating + # You find your way back easily + 55 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + # Always give _some_ chance. + min = -49 + } + desc = mpo_nomad_events.1070.d.success + send_interface_toast = { + type = event_toast_effect_good + title = mpo_nomad_events.1070.d.success + left_icon = root + if = { + limit = { + NOT = { + has_trait = lifestyle_traveler + } + } + add_trait = lifestyle_traveler + } + else = { + add_trait_xp = { + trait = lifestyle_traveler + track = danger + value = 15 + } + } + } + } + # You get horribly lost over multiple days + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -49 + } + desc = mpo_nomad_events.1070.d.failure + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_nomad_events.1070.d.failure + left_icon = root + if = { + limit = { + NOT = { has_trait = ill } + } + show_as_tooltip = { add_trait = ill } + hidden_effect = { + contract_disease_effect = { + DISEASE = ill + TREATMENT_EVENT = no + } + } + } + else_if = { + limit = { + NOT = { has_trait = pneumonic } + } + random = { + chance = { + value = 40 + add = { + value = health + multiply = -1.5 + } + } + show_as_tooltip = { add_trait = pneumonic } + hidden_effect = { + contract_disease_effect = { + DISEASE = pneumonic + TREATMENT_EVENT = no + } + } + } + } + } + } + } + stress_impact = { + humble = minor_stress_impact_gain + lazy = minor_stress_impact_gain + trusting = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + ai_boldness = 1 + } + modifier = { + factor = 0.5 + OR = { + has_trait = humble + has_trait = lazy + has_trait = trusting + prowess < average_skill_rating + learning < average_skill_rating + AND = { + prowess <= decent_skill_rating + learning <= decent_skill_rating + } + } + } + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = lazy + has_trait = trusting + prowess < low_skill_rating + learning < low_skill_rating + AND = { + prowess < average_skill_rating + learning < average_skill_rating + } + } + } + } + } + + #Horse can always be relied on to get me home + option = { + name = mpo_nomad_events.1070.e + + add_character_modifier = { + modifier = nomad_alone_in_adversity_modifier + years = 5 + } + stress_impact = { + cynical = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + impatient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + ai_compassion = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = cynical + has_trait = arrogant + has_trait = paranoid + has_trait = impatient + } + } + } + } +} + +scripted_trigger mpo_nomad_events_1080_neighbor_trigger = { + age >= 12 + government_has_flag = government_is_nomadic + NOR = { + this = root + is_vassal_or_below_of = root + root = { + is_vassal_or_below_of = prev + } + } + is_available_ai_adult = yes + is_travelling = no + NOR = { + exists = involved_activity + is_at_war_with = root + AND = { + is_causing_raid_hostility_towards = root + has_raised_armies = yes + } + } + highest_held_title_tier <= tier_duchy + exists = capital_county + NOT = { + has_character_flag = had_mpo_nomad_events_1080 + } +} + +#You meet a neighbor's search party in your lands +mpo_nomad_events.1080 = { + type = character_event + title = mpo_nomad_events.1080.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + highest_held_title_tier > scope:neighbor_ruler.highest_held_title_tier + } + desc = mpo_nomad_events.1080.desc_high_intro + } + desc = mpo_nomad_events.1080.desc_low_intro + } + desc = mpo_nomad_events.1080.desc_1 + first_valid = { + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = murderer + } + } + desc = crime_murderer + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = witch + } + } + desc = crime_witch + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = cannibal + } + } + desc = crime_cannibal + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + OR = { + has_trait = deviant + has_trait = incestuous + } + } + } + desc = crime_deviant + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + OR = { + has_trait = kinslayer_1 + has_trait = kinslayer_2 + has_trait = kinslayer_3 + } + } + } + desc = crime_kinslayer + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = fornicator + } + } + desc = crime_fornicator + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = adulterer + } + } + desc = crime_adulterer + } + triggered_desc = { + trigger = { + scope:escaped_warrior = { + has_trait = sodomite + } + } + desc = crime_sodomite + } + desc = mpo_nomad_events.1080.criminal + } + desc = mpo_nomad_events.1080.desc_2 + } + theme = nomads + override_background = { + reference = mpo_steppe_evening + } + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left_forward + } + right_portrait = { + character = scope:neighbor_ruler + animation = horse_conversing_left + camera = camera_event_horse_right + } + lower_right_portrait = scope:escaped_warrior + + trigger = { + age >= 10 + is_available = yes + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_landed = yes + capital_county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + + any_neighboring_county = { + holder = { + mpo_nomad_events_1080_neighbor_trigger = yes + } + } + } + } + + cooldown = { + years = 10 + } + + immediate = { + add_character_flag = need_military_outfit + capital_county = { + random_neighboring_county = { + limit = { + holder = { + mpo_nomad_events_1080_neighbor_trigger = yes + } + } + save_scope_as = neighbor_county + holder = { + save_scope_as = neighbor_ruler + #For female chance scripted effect + save_scope_as = value_target + add_character_flag = need_military_outfit + add_character_flag = { + flag = had_mpo_nomad_events_1080 + years = 10 + } + + } + } + } + create_character = { + template = new_warrior_character + dynasty = none + location = root.location + culture = scope:neighbor_county.culture + faith = scope:neighbor_county.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = escaped_warrior + } + scope:escaped_warrior = { + random_list = { + 1 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:witch FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = witch + } + 1 = { + add_trait = cannibal + } + 1 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:incestuous FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = incestuous + } + 1 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:kinslayer_1 FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = kinslayer_1 + } + 1 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:kinslayer_2 FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = kinslayer_2 + } + 1 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:kinslayer_3 FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = kinslayer_3 + } + 3 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:deviant FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = deviant + } + 3 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:fornicator FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = fornicator + } + 3 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:adulterer FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = adulterer + } + 3 = { + trigger = { + trait_is_criminal_in_faith_trigger = { TRAIT = trait:sodomite FAITH = scope:neighbor_ruler.faith GENDER_CHARACTER = scope:escaped_warrior } + } + add_trait = sodomite + } + 3 = { + trigger = { + has_dlc_feature = landless_playable + } + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = bandit + value = { 10 50 } + } + } + 3 = { + trigger = { + has_dlc_feature = landless_playable + } + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = trickster + value = { 10 50 } + } + } + 3 = { + trigger = { + has_dlc_feature = landless_playable + } + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = thief + value = { 10 50 } + } + } + 3 = { + trigger = { + has_dlc_feature = landless_playable + } + add_trait = gallowsbait + add_trait_xp = { + trait = gallowsbait + track = marauder + value = { 10 50 } + } + } + 3 = { + add_trait = disloyal + } + 5 = { + add_trait = murderer + } + } + } + } + + #If he can elude you... sounds like a good man to have + option = { + name = mpo_nomad_events.1080.a + flavor = mpo_nomad_events.1080.a.flavor + trigger = { + OR = { + has_trait = ambitious + has_trait = arbitrary + has_trait = greedy + has_trait = fickle + has_trait = gallowsbait + has_trait = forgiving + has_trait = schemer + has_trait = callous + has_trait = sadistic + has_trait = deceitful + has_trait = compassionate + has_trait = generous + } + } + add_courtier = scope:escaped_warrior + scope:escaped_warrior = { + add_opinion = { + target = root + modifier = was_spared + opinion = 50 + } + } + if = { + limit = { + scope:escaped_warrior = { + NOT = { is_obedient_to = root } + } + } + scope:escaped_warrior = { + add_opinion = { + modifier = obedience_opinion + target = root + } + } + } + consume_all_criminal_reasons_effect = { + LIEGE = root + CRIMINAL = scope:escaped_warrior + } + scope:neighbor_ruler = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -20 + } + } + stress_impact = { + just = major_stress_impact_gain + zealous = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 0 + } + } + #Chase off these unwelcome guests in a hail of arrows + option = { + name = mpo_nomad_events.1080.b + flavor = mpo_nomad_events.1080.b.flavor + + #Your knights gain bow skill + if = { + limit = { + has_dlc_feature = tours_and_tournaments + } + if = { + limit = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = bow + value = tournament_hastiludes_xp_gain_medium_value + } + } + every_knight = { + custom = custom.every_knight + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + hidden_effect = { + add_trait = tourney_participant + } + } + add_trait_xp = { + trait = tourney_participant + track = bow + value = tournament_hastiludes_xp_gain_medium_value + } + } + } + else = { + add_martial_lifestyle_xp = minor_lifestyle_xp + add_dread = minor_dread_gain + } + scope:neighbor_ruler = { + progress_towards_rival_effect = { + REASON = rival_chased_off_with_arrows + CHARACTER = root + OPINION = -30 + } + } + random = { + chance = { + value = 50 + if = { + limit = { + martial >= medium_skill_rating + } + add = 5 + } + if = { + limit = { + prowess >= medium_skill_rating + } + add = 5 + } + if = { + limit = { + martial >= high_skill_rating + } + add = 5 + } + if = { + limit = { + prowess >= high_skill_rating + } + add = 5 + } + if = { + limit = { + martial > extremely_high_skill_rating + } + add = 5 + } + if = { + limit = { + prowess > extremely_high_skill_rating + } + add = 5 + } + if = { + limit = { + number_of_knights >= 10 + + } + add = 10 + } + if = { + limit = { + number_of_knights >= 14 + } + add = 10 + } + if = { + limit = { + scope:neighbor_ruler = { + martial >= medium_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + prowess >= medium_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + martial >= high_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + prowess >= high_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + martial > extremely_high_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + prowess > extremely_high_skill_rating + } + } + add = -5 + } + if = { + limit = { + scope:neighbor_ruler = { + number_of_knights >= 10 + } + + } + add = -10 + } + if = { + limit = { + scope:neighbor_ruler = { + number_of_knights >= 14 + } + } + add = -10 + } + } + scope:neighbor_ruler = { + increase_wounds_effect = { REASON = fight } + } + } + stress_impact = { + trusting = medium_stress_impact_gain + humble = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_sociability = -0.5 + ai_honor = 0.5 + ai_boldness = -0.5 + ai_compassion = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = trusting + has_trait = humble + has_trait = compassionate + } + } + } + } + #We will ride the fugitive down for you + option = { + name = mpo_nomad_events.1080.c + + #Your knights gain horse skill + if = { + limit = { + has_dlc_feature = tours_and_tournaments + } + if = { + limit = { + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = horse + value = tournament_hastiludes_xp_gain_medium_value + } + } + every_knight = { + custom = custom.every_knight + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + hidden_effect = { + add_trait = tourney_participant + } + } + add_trait_xp = { + trait = tourney_participant + track = horse + value = tournament_hastiludes_xp_gain_medium_value + } + } + } + else = { + capital_county = { + add_county_modifier = { + modifier = ranged_and_searched_modifier + years = 5 + } + } + } + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:neighbor_ruler + opinion = 20 + } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:escaped_warrior + IMPRISONER = scope:neighbor_ruler + } + stress_impact = { + forgiving = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_vengefulness = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = arbitrary + has_trait = forgiving + } + } + } + } + after = { + scope:escaped_warrior = { + silent_disappearance_ai_effect = yes + } + scope:neighbor_ruler = { + remove_character_flag = need_military_outfit + } + remove_character_flag = need_military_outfit + } +} +#Nomadic father/brother's wife marrying event +mpo_nomad_events.1090 = { + hidden = yes + trigger = { + has_mpo_dlc_trigger = yes + mpo_valid_dead_husband_trigger = yes + } + immediate = { + save_scope_as = dead_husband + primary_spouse = { + save_scope_as = widow + } + if = { + limit = { + primary_heir ?= { + OR = { + is_sibling_of = root + is_child_of = root + } + mpo_valid_widow_marrier_trigger = yes + } + } + primary_heir = { + trigger_event = { + id = mpo_nomad_events.1091 + days = 6 + } + } + } + else_if = { + limit = { + any_sibling = { + mpo_valid_widow_marrier_trigger = yes + } + } + ordered_sibling = { + order_by = age + limit = { + mpo_valid_widow_marrier_trigger = yes + } + trigger_event = { + id = mpo_nomad_events.1091 + days = 6 + } + } + } + else = { + ordered_child = { + order_by = age + limit = { + mpo_valid_widow_marrier_trigger = yes + } + trigger_event = { + id = mpo_nomad_events.1091 + days = 6 + } + } + } + } +} + +scripted_trigger mpo_nomad_events_widow_relative_trigger = { + is_ruler = yes + highest_held_title_tier >= tier_county + NOR = { + is_at_war_with = root + is_allied_to = root + AND = { + exists = liege + liege = { + is_vassal_of = root + } + } + } + is_ai = yes + NOT = { + this = root + } +} + +#You marry a family widow +mpo_nomad_events.1091 = { + type = character_event + title = mpo_nomad_events.1091.t + desc = { + desc = mpo_nomad_events.1091.desc + first_valid = { + triggered_desc = { + trigger = { + allowed_more_spouses = yes + } + desc = mpo_nomad_events.1091.desc.marry + } + desc = mpo_nomad_events.1091.desc.concubine + } + } + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:widow + animation = grief + } + lower_right_portrait = scope:dead_husband + lower_left_portrait = scope:widow_relative + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + scope:widow = { + is_married = no + is_betrothed = no + is_alive = yes + is_imprisoned = no + is_ai = yes + is_incapable = no + has_contagious_deadly_disease_trigger = no + NOR = { + has_trait = celibate + has_trait = devoted + } + } + #Is root a valid marrier still? + 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 } + } + is_imprisoned = no + } + + immediate = { + scope:widow = { + if = { + limit = { + OR = { + any_parent = { + mpo_nomad_events_widow_relative_trigger = yes + } + any_sibling = { + mpo_nomad_events_widow_relative_trigger = yes + } + any_child = { + mpo_nomad_events_widow_relative_trigger = yes + } + } + } + ordered_parent = { + order_by = max_military_strength + limit = { + mpo_nomad_events_widow_relative_trigger = yes + } + save_scope_as = widow_relative + } + if = { + limit = { + NOT = { + exists = scope:widow_relative + } + } + ordered_child = { + order_by = max_military_strength + limit = { + mpo_nomad_events_widow_relative_trigger = yes + } + save_scope_as = widow_relative + } + } + if = { + limit = { + NOT = { + exists = scope:widow_relative + } + } + ordered_sibling = { + order_by = max_military_strength + limit = { + mpo_nomad_events_widow_relative_trigger = yes + } + save_scope_as = widow_relative + } + } + } + } + } + + #OH BABY I'VE BEEN WAITING FOR THIS + option = { + trigger = { + is_attracted_to_gender_of = scope:widow + NOT = { + has_trait = celibate + } + scope:widow = { + is_attracted_to_gender_of = root + } + OR = { + has_trait = lustful + has_trait = seducer + is_deviant_trigger = yes + has_relation_lover = scope:widow + has_relation_soulmate = scope:widow + has_relation_crush = scope:widow + any_scheme = { + scheme_type = courting + scheme_target_character = scope:widow + } + any_scheme = { + scheme_type = seduce + scheme_target_character = scope:widow + } + AND = { + opinion = { + target = scope:widow + value >= 100 + } + reverse_opinion = { + target = scope:widow + value >= 100 + } + } + scope:widow = { + attraction > low_positive_attraction + } + } + } + name = mpo_nomad_events.1091.a + flavor = mpo_nomad_events.1091.a.flavor + add_internal_flag = special + if = { + limit = { + OR = { + has_relation_soulmate = scope:widow + has_relation_lover = scope:widow + has_relation_best_friend = scope:widow + } + } + add_stress = medium_stress_impact_loss + } + else_if = { + limit = { + has_relation_friend = scope:widow + } + add_stress = minor_stress_impact_loss + } + if = { + limit = { + allowed_more_spouses = yes + } + marry = scope:widow + custom_tooltip = family_widow_cant_divorce_tt + scope:widow = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 40 + } + } + scope:widow = { + add_character_modifier = { + modifier = inspired_in_wifely_duties_modifier + years = 20 + } + } + if = { + limit = { + exists = scope:widow_relative + } + scope:widow_relative = { + save_scope_as = recipient + } + custom_tooltip = negotiate_alliance_effect_tooltip + create_alliance = { + target = scope:widow_relative + allied_through_owner = root + allied_through_target = scope:widow + } + } + } + else = { + make_concubine = scope:widow + custom_tooltip = family_widow_cant_dismiss_tt + scope:widow = { + add_opinion = { + target = root + modifier = romance_opinion + opinion = 15 + } + } + scope:widow = { + add_character_modifier = { + modifier = concubine_lavished_attention_modifier + years = 10 + } + } + create_character_memory = { + type = took_kins_widow_concubine_memory + participants = { + dead_husband = scope:dead_husband + widow = scope:widow + } + } + scope:widow = { + create_character_memory = { + type = widow_taken_concubine_memory + participants = { + dead_husband = scope:dead_husband + new_husband = root + } + } + } + } + set_variable = { + name = family_widow_forbidden_divorce + value = scope:widow + years = 10 + } + custom_tooltip = family_widow_seduce_romance_bonus_tt + stress_impact = { + lustful = miniscule_stress_impact_loss + impatient = miniscule_stress_impact_loss + chaste = major_stress_impact_gain + calm = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 0.5 + ai_compassion = 0.5 + } + modifier = { + factor = 2 + OR = { + scope:widow = { + attraction >= medium_positive_attraction + } + AND = { + opinion = { + target = scope:widow + value >= 100 + } + reverse_opinion = { + target = scope:widow + value >= 100 + } + } + has_relation_soulmate = scope:widow + has_trait = lustful + } + } + modifier = { + factor = 0.5 + OR = { + #Widow is old, root isn't + AND = { + age < 40 + scope:widow = { + age >= 40 + } + } + AND = { + age < 50 + scope:widow = { + age >= 50 + } + } + AND = { + age < 25 + scope:widow = { + age >= 30 + } + } + } + NOT = { + is_deviant_trigger = yes + } + } + modifier = { + factor = 0 + OR = { + has_trait = chaste + has_trait = calm + } + } + } + } + + #A prestigious and powerful connection we must keep + option = { + trigger = { + exists = scope:widow_relative + allowed_more_spouses = yes + scope:widow_relative = { + is_vassal_of = root + } + } + name = mpo_nomad_events.1091.b + flavor = mpo_nomad_events.1091.b.flavor + + marry = scope:widow + custom_tooltip = family_widow_cant_divorce_tt + if = { + limit = { + scope:widow_relative.highest_held_title_tier <= tier_county + } + add_legitimacy = minor_legitimacy_gain + } + else = { + add_legitimacy = medium_legitimacy_gain + } + if = { + limit = { + exists = scope:widow_relative + } + scope:widow_relative = { + save_scope_as = recipient + } + custom_tooltip = negotiate_alliance_effect_tooltip + create_alliance = { + target = scope:widow_relative + allied_through_owner = root + allied_through_target = scope:widow + } + } + + reverse_add_opinion = { + modifier = loyalty_opinion + target = scope:widow_relative + opinion = 30 + } + + set_variable = { + name = family_widow_forbidden_divorce + value = scope:widow + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 0.5 + ai_greed = -0.5 + } + modifier = { + factor = 2 + legitimacy_level <= 1 + } + modifier = { + factor = 2 + legitimacy_level <= 0 + } + modifier = { + factor = 0.25 + scope:widow_relative = { + NOT = { is_powerful_vassal_of = root } + } + } + } + } + + #I guess I'll take his stuff... all his stuff + option = { + name = mpo_nomad_events.1091.c + + if = { + limit = { + allowed_more_concubines = yes + } + make_concubine = scope:widow + custom_tooltip = family_widow_cant_dismiss_tt + create_character_memory = { + type = took_kins_widow_concubine_memory + participants = { + dead_husband = scope:dead_husband + widow = scope:widow + } + } + scope:widow = { + create_character_memory = { + type = widow_taken_concubine_memory + participants = { + dead_husband = scope:dead_husband + new_husband = root + } + } + } + } + else = { + marry = scope:widow + custom_tooltip = family_widow_cant_divorce_tt + if = { + limit = { + exists = scope:widow_relative + } + scope:widow_relative = { + save_scope_as = recipient + } + custom_tooltip = negotiate_alliance_effect_tooltip + create_alliance = { + target = scope:widow_relative + allied_through_owner = root + allied_through_target = scope:widow + } + } + } + set_variable = { + name = family_widow_forbidden_divorce + value = scope:widow + years = 10 + } + if = { + limit = { + highest_held_title_tier > scope:dead_husband.highest_held_title_tier + } + add_gold = minor_gold_value + domicile = { + change_herd = minor_herd_gain + } + } + else_if = { + limit = { + highest_held_title_tier = scope:dead_husband.highest_held_title_tier + } + add_gold = minor_gold_value + domicile = { + change_herd = medium_herd_gain + } + } + else = { + add_gold = medium_gold_value + domicile = { + change_herd = medium_herd_gain + } + } + + + stress_impact = { + generous = medium_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + add = 50 + allowed_more_spouses = yes + } + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = humble + } + } + } + } + #Our family will always cherish its women + option = { + name = mpo_nomad_events.1091.d + if = { + limit = { + allowed_more_spouses = yes + } + marry = scope:widow + custom_tooltip = family_widow_cant_divorce_tt + if = { + limit = { + exists = scope:widow_relative + } + scope:widow_relative = { + save_scope_as = recipient + } + custom_tooltip = negotiate_alliance_effect_tooltip + create_alliance = { + target = scope:widow_relative + allied_through_owner = root + allied_through_target = scope:widow + } + } + } + else = { + make_concubine = scope:widow + custom_tooltip = family_widow_cant_dismiss_tt + create_character_memory = { + type = took_kins_widow_concubine_memory + participants = { + dead_husband = scope:dead_husband + widow = scope:widow + } + } + scope:widow = { + create_character_memory = { + type = widow_taken_concubine_memory + participants = { + dead_husband = scope:dead_husband + new_husband = root + } + } + } + } + set_variable = { + name = family_widow_forbidden_divorce + value = scope:widow + years = 10 + } + + if = { + limit = { + highest_held_title_tier > scope:dead_husband.highest_held_title_tier + } + if = { + limit = { + house ?= { + house_head = root + } + allowed_more_spouses = yes + } + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + add_prestige = minor_prestige_gain + } + else_if = { + limit = { + highest_held_title_tier = scope:dead_husband.highest_held_title_tier + } + if = { + limit = { + house ?= { + house_head = root + } + allowed_more_spouses = yes + } + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + } + add_prestige = medium_prestige_gain + } + else = { + if = { + limit = { + house ?= { + house_head = root + } + allowed_more_spouses = yes + } + dynasty = { + add_dynasty_prestige = miniscule_dynasty_prestige_gain + } + } + add_prestige = major_prestige_gain + } + every_close_or_extended_family_member = { + custom = custom.every_close_or_extended_family_member + limit = { + NOT = { + this = root + } + } + add_opinion = { + target = root + modifier = trust_opinion + opinion = 10 + } + } + + stress_impact = { + arbitrary = medium_stress_impact_gain + fickle = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = arbitrary + has_trait = fickle + } + } + } + } + #Nah, I'm good + option = { + name = mpo_nomad_events.1091.e + + if = { + limit = { + scope:dead_husband.highest_held_title_tier > root.highest_held_title_tier + } + add_legitimacy = minor_legitimacy_loss + } + else_if = { + limit = { + scope:dead_husband.highest_held_title_tier = root.highest_held_title_tier + } + add_legitimacy = miniscule_legitimacy_loss + } + + + if = { + limit = { + allowed_more_spouses = yes + exists = scope:widow_relative + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:widow_relative + opinion = -40 + } + scope:widow = { + add_opinion = { + modifier = disrespect_opinion + target = root + opinion = -40 + } + } + every_close_family_member = { + custom = custom.every_close_family_member + limit = { + NOR = { + this = root + this = scope:widow + this = scope:widow_relative + } + } + add_opinion = { + modifier = disrespect_opinion + target = root + opinion = -20 + } + } + } + else = { + if = { + limit = { + exists = scope:widow_relative + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:widow_relative + opinion = -20 + } + } + scope:widow = { + add_opinion = { + modifier = disrespect_opinion + target = root + opinion = -20 + } + } + every_close_family_member = { + custom = custom.every_close_family_member + limit = { + NOR = { + this = root + this = scope:widow + AND = { + exists = scope:widow_relative + this = scope:widow_relative + } + } + } + add_opinion = { + modifier = disrespect_opinion + target = root + opinion = -10 + } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + generous = minor_stress_impact_gain + just = minor_stress_impact_gain + } + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -1 + } + modifier = { + add = 50 + scope:widow = { + age >= 30 + } + } + modifier = { + add = 100 + scope:widow = { + age >= 40 + } + } + modifier = { + add = 100 + scope:widow = { + age >= 50 + } + } + modifier = { + add = -25 + scope:widow = { + age <= 25 + } + } + modifier = { + add = -50 + scope:widow = { + OR = { + has_trait = intellect_good_3 + has_trait = intellect_good_2 + has_trait = beauty_good_3 + has_trait = beauty_good_2 + has_trait = physique_good_3 + has_trait = physique_good_2 + } + } + } + modifier = { + add = 50 + scope:widow = { + OR = { + has_trait = intellect_bad_1 + has_trait = intellect_bad_2 + has_trait = intellect_bad_3 + has_trait = beauty_bad_1 + has_trait = beauty_bad_2 + has_trait = beauty_bad_3 + } + } + } + modifier = { + add = 50 + scope:widow = { + OR = { + has_trait = intellect_bad_3 + has_trait = beauty_bad_3 + } + } + } + + modifier = { + factor = 0 + OR = { + has_trait = compassionate + has_trait = generous + has_trait = just + } + } + } + } +} + +scripted_trigger mpo_nomad_events_1100_camel_terrain_trigger = { + root.capital_province = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } +} + +scripted_trigger mpo_nomad_events_1100_sheep_terrain_trigger = { + root.capital_province = { + OR = { + terrain = mountains + terrain = hills + terrain = drylands + } + } +} + +scripted_trigger mpo_nomad_events_1100_hunting_terrain_trigger = { + root.capital_province = { + OR = { + terrain = forest + terrain = taiga + terrain = wetlands + terrain = jungle + } + } +} + +scripted_trigger mpo_nomad_events_1100_horse_terrain_trigger = { + root.capital_province = { + OR = { + terrain = plains + terrain = steppe + terrain = floodplains + } + } +} + +scripted_trigger mpo_nomad_events_1100_laborer_trigger = { + is_available_ai_adult = yes + is_adult = yes + NOR = { + is_close_family_of = root + is_concubine_of = root + is_spouse_of = root + is_councillor_of = root + any_spouse = { + exists = root.house + house ?= root.house + } + } + is_knight = no + is_lowborn = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } +} + + +#Local terrain is good for certain type of animal +mpo_nomad_events.1100 = { + type = character_event + title = mpo_nomad_events.1100.t + desc = { + desc = mpo_nomad_events.1100.desc + first_valid = { + triggered_desc = { + trigger = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + desc = mpo_nomad_events.1100.desc.camel + } + triggered_desc = { + trigger = { + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + desc = mpo_nomad_events.1100.desc.sheep + } + triggered_desc = { + trigger = { + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + desc = mpo_nomad_events.1100.desc.hunting + } + desc = mpo_nomad_events.1100.desc.horses + } + } + theme = nomads + override_background = { + reference = wilderness + } + left_portrait = { + character = root + animation = standing_horse + camera = camera_event_standing_with_horse_left + } + right_portrait = { + character = scope:laborer + animation = survey_staff + camera = camera_event_right_forward + } + + trigger = { + age >= 4 + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_landed = yes + is_available = yes + capital_county = { + county_fertility >= 30 + county_fertility < 100 + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + } + OR = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + #Might feel weird if it's super snowy and wintery + OR = { + current_month < 11 + current_month > 2 + } + is_at_war = no + } + + cooldown = { + years = 10 + } + + immediate = { + capital_province = { + save_scope_as = capital_province + } + random_courtier = { + limit = { + mpo_nomad_events_1100_laborer_trigger = yes + } + save_scope_as = laborer + } + if = { + limit = { + NOT = { + exists = scope:laborer + } + } + random_pool_guest = { + limit = { + mpo_nomad_events_1100_laborer_trigger = yes + } + save_scope_as = laborer + } + } + if = { + limit = { + NOT = { + exists = scope:laborer + } + } + random_pool_character = { + province = root.capital_province + limit = { + mpo_nomad_events_1100_laborer_trigger = yes + } + save_scope_as = laborer + } + } + hidden_effect = { + if = { + limit = { + highest_held_title_tier >= tier_duchy + OR = { + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + has_trait = architect + has_trait = administrator + has_trait = avaricious + } + } + if = { + limit = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + every_sub_realm_county = { + limit = { + any_county_province = { + OR = { + terrain = desert + terrain = desert_mountains + terrain = oasis + } + } + } + add_to_list = realm_suitable_terrains + } + } + if = { + limit = { + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + every_sub_realm_county = { + limit = { + any_county_province = { + OR = { + terrain = mountains + terrain = hills + terrain = drylands + } + } + } + add_to_list = realm_suitable_terrains + } + } + if = { + limit = { + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + every_sub_realm_county = { + limit = { + any_county_province = { + OR = { + terrain = forest + terrain = taiga + terrain = wetlands + terrain = jungle + } + } + } + add_to_list = realm_suitable_terrains + } + } + else = { + every_sub_realm_county = { + limit = { + any_county_province = { + OR = { + terrain = steppe + terrain = plains + terrain = floodplains + } + } + } + add_to_list = realm_suitable_terrains + } + } + + } + } + } + + #Stewardship option + option = { + trigger = { + highest_held_title_tier >= tier_duchy + OR = { + has_trait = education_stewardship_3 + has_trait = education_stewardship_4 + has_trait = education_stewardship_5 + has_trait = architect + has_trait = administrator + has_trait = avaricious + } + } + name = mpo_nomad_events.1100.a + flavor = mpo_nomad_events.1100.a.flavor + if = { + limit = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + add_character_modifier = { + modifier = specialized_herds_modifier_camel + years = 10 + } + every_in_list = { + custom = custom.every_camel_terrain_county_tt + list = realm_suitable_terrains + custom_tooltip = major_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = major_county_fertility_gain + } + } + } + else_if = { + limit = { + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + add_character_modifier = { + modifier = specialized_herds_modifier_sheep + years = 10 + } + every_in_list = { + custom = custom.every_sheep_terrain_county_tt + list = realm_suitable_terrains + custom_tooltip = medium_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = medium_county_fertility_gain + } + } + } + else_if = { + limit = { + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + add_character_modifier = { + modifier = specialized_herds_modifier_hunting + years = 10 + } + every_in_list = { + custom = custom.every_hunting_terrain_county_tt + list = realm_suitable_terrains + custom_tooltip = medium_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = medium_county_fertility_gain + } + } + } + else = { + add_character_modifier = { + modifier = specialized_herds_modifier_horses + years = 10 + } + every_in_list = { + custom = custom.every_horse_terrain_county_tt + list = realm_suitable_terrains + custom_tooltip = medium_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = medium_county_fertility_gain + } + } + } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + + + domicile = { + change_herd = medium_herd_loss + } + stress_impact = { + impatient = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_rationality = 0.5 + ai_energy = 0.5 + } + modifier = { + factor = 0.5 + NOT = { + has_lifestyle = stewardship_lifestyle + } + } + #Culture matches terrain + modifier = { + factor = 2 + OR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + } + #Culture doesn't match terrain, but matches a different one + modifier = { + factor = 0.5 + NOR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + OR = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomads_camel_culture_trigger = yes + mpo_nomads_sheep_culture_trigger = yes + mpo_nomads_hunting_culture_trigger = yes + } + } + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = lazy + domicile = { + herd < massive_herd_value + } + } + } + } + } + + #Eh I don't like it here + option = { + name = mpo_nomad_events.1100.b + + add_character_modifier = { + modifier = mpo_restless_for_migration_modifier + years = 2 + } + capital_county = { + change_county_fertility = medium_county_fertility_loss + } + + stress_impact = { + content = medium_stress_impact_gain + calm = minor_stress_impact_gain + patient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 0.5 + ai_rationality = -0.5 + } + #Culture matches terrain + modifier = { + factor = 0.5 + OR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + } + #Culture doesn't match terrain, but matches a different one + modifier = { + factor = 2 + NOR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + OR = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomads_camel_culture_trigger = yes + mpo_nomads_sheep_culture_trigger = yes + mpo_nomads_hunting_culture_trigger = yes + } + } + modifier = { + factor = 0 + OR = { + has_trait = content + has_trait = calm + has_trait = patient + } + } + } + } + + #We shall exploit this land to the fullest! + option = { + name = { + trigger = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + text = mpo_nomad_events.1100.c.camel + } + name = { + trigger = { + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + text = mpo_nomad_events.1100.c.sheep + } + name = { + trigger = { + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + text = mpo_nomad_events.1100.c.hunting + } + name = { + trigger = { + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + text = mpo_nomad_events.1100.c.horse + } + + capital_county = { + change_county_fertility = medium_county_fertility_gain + } + #Camels flourishing + if = { + limit = { + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + add_character_modifier = { + modifier = mpo_bountiful_camels_modifier + years = 10 + } + } + #Sheep flourishing + else_if = { + limit = { + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + custom_tooltip = mpo_bountiful_sheep_cheaper_feasts_tt + add_character_modifier = { + modifier = mpo_bountiful_sheep_modifier + years = 10 + desc = mpo_bountiful_sheep_cheaper_feasts.desc + } + } + #Hunting is great + else_if = { + limit = { + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + custom_tooltip = mpo_bountiful_hunting_cheaper_hunts_tt + hidden_effect = { + add_character_modifier = { + modifier = mpo_bountiful_hunting_modifier + years = 10 + desc = mpo_bountiful_hunting_cheaper_hunts_desc + } + } + #Hunts are improved + if = { + limit = { + NOT = { + has_trait = lifestyle_hunter + } + } + random = { + chance = 60 + add_trait = lifestyle_hunter + } + } + else_if = { + limit = { + has_trait = lifestyle_hunter + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + add_trait_xp = { + trait = lifestyle_hunter + value = minor_trait_xp + track = falconer + } + add_trait_xp = { + trait = lifestyle_hunter + value = minor_trait_xp + track = hunter + } + } + else = { + add_trait_xp = { + trait = lifestyle_hunter + value = medium_trait_xp + track = falconer + } + } + } + #Horses flourishing + else = { + #Herd and cavalry modifier + add_character_modifier = { + modifier = mpo_bountiful_horses_modifier + years = 10 + } + } + stress_impact = { + stubborn = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + #Culture matches terrain + modifier = { + factor = 2 + OR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + } + #Culture doesn't match terrain, but matches a different one + modifier = { + factor = 0.5 + NOR = { + AND = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomad_events_1100_horse_terrain_trigger = yes + } + AND = { + mpo_nomads_hunting_culture_trigger = yes + mpo_nomad_events_1100_hunting_terrain_trigger = yes + } + AND = { + mpo_nomads_sheep_culture_trigger = yes + mpo_nomad_events_1100_sheep_terrain_trigger = yes + } + AND = { + mpo_nomads_camel_culture_trigger = yes + mpo_nomad_events_1100_camel_terrain_trigger = yes + } + } + OR = { + mpo_nomads_horse_culture_trigger = yes + mpo_nomads_camel_culture_trigger = yes + mpo_nomads_sheep_culture_trigger = yes + mpo_nomads_hunting_culture_trigger = yes + } + } + modifier = { + factor = 0 + has_trait = stubborn + } + } + } +} + +scripted_trigger mpo_nomad_events_1110_fishing_culture_trigger = { + culture = { + OR = { + has_cultural_tradition = tradition_fp1_coastal_warriors + has_cultural_tradition = tradition_maritime_mercantilism + has_cultural_tradition = tradition_polders + has_cultural_tradition = tradition_wetlanders + has_cultural_tradition = tradition_fishermen + has_cultural_tradition = tradition_seafaring + has_cultural_tradition = tradition_fp1_coastal_warriors + has_cultural_tradition = tradition_practiced_pirates + } + } +} + +scripted_trigger mpo_nomad_events_1110_char_trigger = { + is_available_ai_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } +} + +#Your capital is next to a lake where locals fish +mpo_nomad_events.1110 = { + type = character_event + title = mpo_nomad_events.1110.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + root.capital_county = { + is_riverside_county = yes + NOR = { + is_coastal_county = yes + is_lakeside_county = yes + } + } + } + desc = mpo_nomad_events.1110.desc_river + } + triggered_desc = { + trigger = { + root.capital_county = { + is_coastal_county = yes + } + } + desc = mpo_nomad_events.1110.desc_sea + } + desc = mpo_nomad_events.1110.desc_lake + } + desc = mpo_nomad_events.1110.desc + } + theme = nomads + override_background = { + trigger = { + root.capital_county = { + OR = { + is_coastal_county = yes + is_lakeside_county = yes + } + } + } + reference = bp3_coast + } + override_background = { + trigger = { + root.capital_county = { + is_riverside_county = yes + NOR = { + is_coastal_county = yes + is_lakeside_county = yes + } + } + } + reference = bp3_riverside + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + mpo_nomad_events_1110_fishing_culture_trigger = yes + } + animation = jockey_victory + } + triggered_animation = { + trigger = { + mpo_nomad_events_1110_fishing_culture_trigger = no + } + animation = horse_archer_idle + } + camera = camera_event_horse_left_forward + } + right_portrait = { + character = scope:laborer + animation = throne_room_cheer_2 + camera = camera_event_right_pointing_left + } + + trigger = { + age >= 10 + government_has_flag = government_is_nomadic + is_landed = yes + has_mpo_dlc_trigger = yes + is_available = yes + capital_county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + OR = { + is_coastal_county = yes + is_riverside_county = yes + is_lakeside_county = yes + } + } + #Might feel weird if it's super snowy and wintery + OR = { + current_month < 11 + current_month > 2 + } + is_at_war = no + } + + cooldown = { + years = 10 + } + + immediate = { + random_dummy_gender_soldier_effect = { SCOPE_NAME = dummy_gender } + capital_province = { + save_scope_as = capital_province + } + random_courtier = { + limit = { + mpo_nomad_events_1110_char_trigger = yes + } + save_scope_as = laborer + } + if = { + limit = { + NOT = { + exists = scope:laborer + } + } + random_pool_guest = { + limit = { + mpo_nomad_events_1110_char_trigger = yes + } + save_scope_as = laborer + } + } + if = { + limit = { + NOT = { + exists = scope:laborer + } + } + random_pool_character = { + province = root.capital_province + limit = { + mpo_nomad_events_1110_char_trigger = yes + } + save_scope_as = laborer + } + } + every_held_county = { + limit = { + is_landless_type_title = no + OR = { + is_coastal_county = yes + is_riverside_county = yes + is_lakeside_county = yes + } + } + add_to_list = fishing_counties + } + } + #Special unlock + option = { + trigger = { + mpo_nomad_events_1110_fishing_culture_trigger = yes + } + name = { + trigger = { + NOT = { + domicile = { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + } + text = mpo_nomad_events.1110.a + } + name = { + trigger = { + domicile = { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + text = mpo_nomad_events.1110.a_repeat + } + add_internal_flag = special + custom_tooltip = maritime_tradition_unlock_tt + + every_in_list = { + custom = custom.every_fishing_county_tt + list = fishing_counties + custom_tooltip = major_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = major_county_fertility_gain + } + } + if = { + limit = { + NOR = { + has_character_flag = nomad_unlocked_fishing_yurt_flag + domicile = { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + } + add_character_flag = nomad_unlocked_fishing_yurt_flag + custom_tooltip = nomad_unlocked_fishing_yurt_flag_tt + } + else_if = { + limit = { + domicile = { + has_domicile_building_or_higher = fishing_yurt_01 + } + } + add_gold = fishing_counties_gold_value + custom_tooltip = fishing_counties_gold_scaling + } + + stress_impact = { + } + ai_chance = { + base = 300 + ai_value_modifier = { + ai_energy = 0.5 + } + } + } + + #i'll drown the man who gets off his horse to fish + option = { + name = mpo_nomad_events.1110.b + + add_prestige = minor_prestige_gain + domicile = { + change_herd = minor_herd_gain + } + every_in_list = { + custom = custom.every_fishing_county_tt + list = fishing_counties + custom_tooltip = minor_county_fertility_loss_tt + hidden_effect = { + change_county_fertility = minor_county_fertility_loss + } + } + stress_impact = { + stubborn = miniscule_stress_impact_loss + calm = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.5 + ai_vengefulness = 0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = calm + has_trait = humble + } + } + } + } + #Cool, let's rake in the fish + option = { + name = mpo_nomad_events.1110.c + add_gold = fishing_counties_gold_value + custom_tooltip = fishing_counties_gold_scaling + every_in_list = { + custom = custom.every_fishing_county_tt + list = fishing_counties + custom_tooltip = minor_county_fertility_gain_tt + hidden_effect = { + change_county_fertility = minor_county_fertility_gain + } + } + stress_impact = { + stubborn = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_zeal = -0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = stubborn + has_trait = arrogant + } + } + } + } +} + +scripted_trigger mpo_nomad_events_1120_warrior_trigger = { + is_available_ai_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } +} + +#Wolves threaten the animals +mpo_nomad_events.1120 = { + type = character_event + title = mpo_nomad_events.1120.t + desc = mpo_nomad_events.1120.desc + theme = nomads + override_background = { + reference = mpo_steppe_evening + } + left_portrait = { + character = root + animation = horse_sword_shield + camera = camera_event_horse_very_left + } + right_portrait = { + character = scope:warrior + animation = jockey_gallop + camera = camera_event_horse_right_facing_left + } + + trigger = { + age >= 10 + government_has_flag = government_is_nomadic + is_landed = yes + has_mpo_dlc_trigger = yes + is_available = yes + capital_county = { + NOT = { + any_county_province = { + OR = { + is_raided = yes + is_occupied = yes + } + } + } + AND = { + exists = root.location.county + this = root.location.county + } + } + is_at_war = no + is_pregnant = no + NOT = { + has_trait = infirm + } + + OR = { + current_month >= 10 + current_month <= 3 + } + location_has_harsh_winter_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 3 + 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 + } + } + } + } + } + + cooldown = { + years = 10 + } + + immediate = { + capital_province = { + save_scope_as = capital_province + } + capital_county = { + save_scope_as = capital_county + } + random_knight = { + limit = { + mpo_nomad_events_1120_warrior_trigger = yes + } + save_scope_as = warrior + } + if = { + limit = { + NOT = { + exists = scope:warrior + } + } + random_courtier = { + limit = { + mpo_nomad_events_1120_warrior_trigger = yes + } + save_scope_as = warrior + } + } + } + #I have more than enough riders to deal with this... + option = { + name = mpo_nomad_events.1120.a + flavor = mpo_nomad_events.1120.a.flavor + trigger = { + OR = { + domicile = { + herd > monumental_herd_value_static + } + max_military_strength >= 4000 + } + } + add_internal_flag = special + + root.capital_county = { + change_county_fertility = minor_county_fertility_gain + } + + stress_impact = { + humble = miniscule_stress_impact_gain + } + ai_chance = { + base = 200 + ai_value_modifier = { + ai_energy = -0.5 + } + modifier = { + factor = 0 + has_trait = humble + } + } + } + + #Ride swiftly + option = { + name = mpo_nomad_events.1120.b + + duel = { + skill = prowess + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 10 + track = horse + } + } + modifier = { + add = 30 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 30 + track = horse + } + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 50 + track = horse + } + } + modifier = { + add = 30 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 65 + track = horse + } + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 85 + track = horse + } + } + modifier = { + add = 50 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 100 + track = horse + } + } + desc = mpo_nomad_events.1120.b.success + send_interface_toast = { + type = event_toast_effect_good + title = mpo_nomad_events.1120.b.success + left_icon = root + + if = { + limit = { + has_dlc_feature = tours_and_tournaments + } + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = horse + value = 10 + } + } + add_prestige = minor_prestige_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + desc = mpo_nomad_events.1120.b.failure + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_nomad_events.1120.b.failure + domicile = { + change_herd = minor_herd_loss + } + } + } + } + stress_impact = { + craven = minor_stress_impact_gain + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + ai_energy = 0.5 + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = lazy + } + } + } + } + #Arrows! Arrows! + option = { + name = mpo_nomad_events.1120.c + + duel = { + skill = martial + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + min = -49 + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 10 + track = bow + } + } + modifier = { + add = 30 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 30 + track = bow + } + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 50 + track = bow + } + } + modifier = { + add = 30 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 65 + track = bow + } + } + modifier = { + add = 15 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 85 + track = bow + } + } + modifier = { + add = 50 + has_trait = tourney_participant + has_trait_xp = { + trait = tourney_participant + value >= 100 + track = bow + } + } + desc = mpo_nomad_events.1120.c.success + send_interface_toast = { + type = event_toast_effect_good + title = mpo_nomad_events.1120.c.success + left_icon = root + + if = { + limit = { + has_dlc_feature = tours_and_tournaments + } + if = { + limit = { + NOT = { + has_trait = tourney_participant + } + } + add_trait = tourney_participant + } + add_trait_xp = { + trait = tourney_participant + track = bow + value = 10 + } + } + add_gold = minor_gold_value + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + min = -49 + } + desc = mpo_nomad_events.1120.c.failure + send_interface_toast = { + type = event_toast_effect_bad + title = mpo_nomad_events.1120.c.failure + left_icon = root + domicile = { + change_herd = minor_herd_loss + } + } + } + } + stress_impact = { + patient = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -0.5 + ai_energy = 0.5 + } + modifier = { + factor = 0 + has_trait = patient + } + } + } + + #So what? A few sick animals die. The wolves deserve this + option = { + name = mpo_nomad_events.1120.d + flavor = mpo_nomad_events.1120.d.flavor + + add_piety = medium_piety_gain + domicile = { + change_herd = minor_herd_loss + } + stress_impact = { + vengeful = medium_stress_impact_gain + wrathful = medium_stress_impact_gain + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_vengefulness = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = vengeful + has_trait = wrathful + } + } + } + } +} diff --git a/events/dlc/mpo/mpo_nomads_flavour_events.txt b/events/dlc/mpo/mpo_nomads_flavour_events.txt new file mode 100644 index 00000000..d453428a --- /dev/null +++ b/events/dlc/mpo/mpo_nomads_flavour_events.txt @@ -0,0 +1,5740 @@ +namespace = nomad_events + +## Veronica Pazos +## Ill-Advised event chain - nomad_events.0001-0099 +## Not My Flock - nomad_events.0100 +## Cornered - nomad_events.0110 +## Evening Ride - nomad_events.0120 +## A Good Deal - nomad_events.0130 +## Far From Home - nomad_events.0140 +## One More Drink - nomad_events.0150 +## A Nice Word - nomad_events.0160 +## Dreaded One - nomad_events.0170 +## The Weakest Link - nomad_events.0180 +## Back When - nomad_events.0190 +## In My Dreams - nomad_events.0200 +## Nothing but Roots - nomad_events.0210 +## Weak Is the Arm - nomad_events.0220 +## Homesick - nomad_events.0230 +## Unexpected Guests - nomad_events.0240 +## Man of God - nomad_events.0250 + +############################ +## Ill-Advised +## 0001-0099 +############################ + +# nomad_events.0001 - Your Councillor is too good at their job, someone is jealous +# nomad_events.0002 - Achmach comes back to you - why did you fire me? +# nomad_events.0003 - Second courtier complains about Achmach +# nomad_events.0004 - Letter event - Achmach thanks you for trusting/rehiring him +# nomad_events.0005 - Letter event - Someone warns you about a plot at court +# nomad_events.0006 - Interrogation event - Ask Achmach and the courtiers if they know something +# nomad_events.0007 - You see Achmach doing something sus at night +# nomad_events.0008 - You discover what he was doing -- He was trying to protect you! +# nomad_events.0009 - You discover what he was doing -- He was trying to murder you! +# nomad_events.0010 - You fail to discover what he was doing -- Someone tries to murder you! + +# Your Councillor is too good at their job, someone is jealous +scripted_trigger is_valid_nomad_events_0001_councillor = { + is_courtier_or_knight_of_root = yes #someone that is not just going to leave your camp + is_ruler = no #ditto + kurultai_is_skilled_trigger = { EMPLOYER = root } + NOR = { + is_spouse_of = root + is_child_of = root + } +} + +scripted_trigger is_valid_nomad_events_0001_courtier = { + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + NOR = { + has_trait = compassionate + has_trait = content + has_trait = humble + } +} + +scripted_effect fire_achmach_effect = { + fire_councillor = scope:achmach_scope + custom_tooltip = achmach_firing_tt + scope:achmach_scope = { + block_hiring_councillor_effect = { COURT_OWNER = root } + } + if = { + limit = { + has_relation_potential_lover = scope:achmach_scope + } + remove_relation_potential_lover = scope:achmach_scope + } + if = { + limit = { + has_relation_lover = scope:achmach_scope + } + remove_relation_lover = scope:achmach_scope + } + if = { + limit = { + has_relation_soulmate = scope:achmach_scope + } + remove_relation_soulmate = scope:achmach_scope + } + if = { + limit = { + has_relation_potential_friend = scope:achmach_scope + } + remove_relation_potential_friend = scope:achmach_scope + } + if = { + limit = { + has_relation_friend = scope:achmach_scope + } + remove_relation_friend = scope:achmach_scope + } + if = { + limit = { + has_relation_best_friend = scope:achmach_scope + } + remove_relation_best_friend = scope:achmach_scope + } +} + +nomad_events.0001 = { + type = character_event + title = nomad_events.0001.t + desc = nomad_events.0001.desc + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = forgiving + has_trait = arrogant + } + } + animation = dismissal + } + animation = worry + } + right_portrait = { + character = scope:jealous_courtier + animation = anger + } + lower_center_portrait = scope:achmach_scope + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + exists = situation:the_great_steppe + any_character_situation = { + this = situation:the_great_steppe + } + NOT = { has_variable = had_ill_advised_event_chain_var } + is_available_adult = yes + any_councillor = { + is_valid_nomad_events_0001_councillor = yes + save_temporary_scope_as = achmach_scope_temp + } + any_courtier = { + is_valid_nomad_events_0001_courtier = yes + NOT = { this = scope:achmach_scope_temp } + opinion = { + target = scope:achmach_scope_temp + value <= 50 + } + } + } + + immediate = { + set_variable = had_ill_advised_event_chain_var + random_councillor = { + limit = { + is_valid_nomad_events_0001_councillor = yes + } + weight = { + base = 1 + modifier = { + factor = 2 + intrigue >= high_skill_rating + } + modifier = { + add = 1 + OR = { + has_trait = deceitful + has_trait = disloyal + has_trait = ambitious + } + } + } + save_scope_as = achmach_scope + } + scope:achmach_scope = { + switch = { + trigger = has_council_position + councillor_spymaster = { + scope:achmach_scope = { + set_variable = { + name = council_position_var + value = flag:spymaster + } + } + } + councillor_kurultai_1 = { + scope:achmach_scope = { + set_variable = { + name = council_position_var + value = flag:kurultai_1 + } + } + } + councillor_kurultai_2 = { + scope:achmach_scope = { + set_variable = { + name = council_position_var + value = flag:kurultai_2 + } + } + } + councillor_kurultai_3 = { + scope:achmach_scope = { + set_variable = { + name = council_position_var + value = flag:kurultai_3 + } + } + } + councillor_kurultai_4 = { + scope:achmach_scope = { + set_variable = { + name = council_position_var + value = flag:kurultai_4 + } + } + } + } + } + random_courtier = { + limit = { + is_valid_nomad_events_0001_courtier = yes + NOT = { this = scope:achmach_scope } + opinion = { + target = scope:achmach_scope + value <= 50 + } + } + weight = { + base = 1 + modifier = { + factor = 2 + is_councillor_of = root + } + modifier = { + add = 5 + OR = { + has_trait = callous + has_trait = wrathful + has_trait = ambitious + } + } + } + save_scope_as = jealous_courtier + } + # Are they going to be guilty during this event chain? Randomize for replaybility + random_list = { + 60 = { + modifier = { + scope:achmach_scope = { + is_obedient_to = root + } + add = 15 + } + modifier = { + scope:achmach_scope = { + has_any_good_relationship_with_root_trigger = yes + } + add = 15 + } + modifier = { + scope:achmach_scope = { + OR = { + has_trait = honest + has_trait = loyal + has_trait = content + has_trait = humble + } + } + add = 10 + } + scope:achmach_scope = { + set_variable = { + name = achmach_loyalty + value = flag:yes + } + } + } + 40 = { + modifier = { + scope:achmach_scope = { + is_obedient_to = root + } + add = 15 + } + modifier = { + scope:achmach_scope = { + has_any_bad_relationship_with_root_trigger = yes + } + add = 15 + } + modifier = { + scope:achmach_scope = { + OR = { + has_trait = deceitful + has_trait = ambitious + has_trait = disloyal + } + } + add = 10 + } + scope:achmach_scope = { + set_variable = { + name = achmach_loyalty + value = flag:no + } + } + } + } + hidden_effect = { + scope:jealous_courtier = { + set_relation_grudge = { + target = scope:achmach_scope + reason = grudge_too_good + } + } + } + } + + option = { # You're right, I'm firing them + name = nomad_events.0001.a + fire_achmach_effect = yes + scope:jealous_courtier = { + if = { + limit = { is_councillor_of = root } + councillor_increase_relevant_skill_effect = yes + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0002 + days = { 25 30 } + } + } + stress_impact = { + paranoid = medium_stress_impact_loss + trusting = major_stress_impact_gain + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 2 + } + modifier = { + OR = { + has_trait = trusting + has_trait = gregarious + } + factor = 0 + } + } + } + + option = { # You're clearly just jealous + name = nomad_events.0001.b + scope:jealous_courtier = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -10 + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0003 + days = { 25 30 } + } + } + stress_impact = { + paranoid = medium_stress_impact_gain + trusting = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 0 + } + modifier = { + has_trait = trusting + factor = 2 + } + } + } +} + +# Achmach comes back to you - why did you fire me? +scripted_effect nomad_events_0002_rehire_achmach_effect = { + scope:achmach_scope = { + remove_variable ?= block_hire_councillor + switch = { + trigger = var:council_position_var + flag:spymaster = { + root = { + assign_councillor_type = { + type = councillor_spymaster + remove_existing_councillor = yes + target = scope:achmach_scope + } + } + } + flag:kurultai_1 = { + root = { + assign_councillor_type = { + type = councillor_kurultai_1 + remove_existing_councillor = yes + target = scope:achmach_scope + } + } + } + flag:kurultai_2 = { + root = { + assign_councillor_type = { + type = councillor_kurultai_2 + remove_existing_councillor = yes + target = scope:achmach_scope + } + } + } + flag:kurultai_3 = { + root = { + assign_councillor_type = { + type = councillor_kurultai_3 + remove_existing_councillor = yes + target = scope:achmach_scope + } + } + } + flag:kurultai_4 = { + root = { + assign_councillor_type = { + type = councillor_kurultai_4 + remove_existing_councillor = yes + target = scope:achmach_scope + } + } + } + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } +} + +nomad_events.0002 = { + type = character_event + title = nomad_events.0002.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:achmach_scope = { + OR = { + has_trait = humble + has_trait = calm + has_trait = content + has_trait = deceitful + has_trait = temperate + } + } + } + desc = nomad_events.0002.desc.calm + } + triggered_desc = { + trigger = { + scope:achmach_scope = { + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = callous + has_trait = vengeful + } + } + } + desc = nomad_events.0002.desc.angry + } + desc = nomad_events.0002.desc.fallback + } + desc = nomad_events.0002.desc.outro + } + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = forgiving + } + } + animation = stunned + } + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = callous + } + } + animation = dismissal + } + animation = worry + } + right_portrait = { + character = scope:achmach_scope + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = content + has_trait = deceitful + has_trait = temperate + } + } + animation = disappointed + } + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = callous + has_trait = vengeful + } + } + animation = anger + } + animation = disbelief + } + lower_center_portrait = { + trigger = { scope:jealous_courtier = { is_courtier_or_knight_of_root = yes } } + character = scope:jealous_courtier + } + + trigger = { + # Achmach is still around + scope:achmach_scope = { + is_courtier_or_knight_of_root = yes + } + NOT = { has_variable = had_nomad_events_0002_var } + } + + immediate = { + set_variable = had_nomad_events_0002_var + } + + option = { #Rehire him + name = nomad_events.0002.a + #Rehire them to the position they had earlier + nomad_events_0002_rehire_achmach_effect = yes + if = { + limit = { + scope:jealous_courtier = { is_courtier_or_knight_of_root = yes } + } + scope:jealous_courtier = { + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -10 + } + } + } + hidden_effect = { + random = { + chance = 50 + trigger_event = { + id = nomad_events.0003 + days = { 25 30 } + } + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0004 + days = { 12 15 } + } + } + set_variable = rehired_achmach_var + stress_impact = { + paranoid = medium_stress_impact_gain + trusting = medium_stress_impact_loss + forgiving = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 0 + } + modifier = { + OR = { + has_trait = trusting + has_trait = forgiving + } + factor = 2 + } + } + } + + option = { # Go away + name = nomad_events.0002.b + scope:achmach_scope = { + progress_towards_rival_effect = { + CHARACTER = root + OPINION = -30 + REASON = rival_fired_from_council + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0005 + days = { 25 30 } + } + } + stress_impact = { + forgiving = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = forgiving + factor = 0 + } + } + } +} + +# Another courtier accuses Achmach of the same +scripted_trigger is_valid_nomad_events_0003_courtier = { + is_available_ai_adult = yes + NOT = { + this = scope:achmach_scope + } + NOT = { has_any_good_relationship_with_character_trigger = { CHARACTER = scope:achmach_scope } } + trigger_if = { + limit = { + scope:jealous_courtier = { is_courtier_or_knight_of_root = yes } + } + NOT = { this = scope:jealous_courtier } + } +} + +nomad_events.0003 = { + type = character_event + title = nomad_events.0003.t + desc = { + desc = nomad_events.0003.desc.intro + first_valid = { + triggered_desc = { + trigger = { + has_variable = rehired_achmach_var + } + desc = nomad_events.0003.desc.rehired + } + desc = nomad_events.0003.desc.not_rehired + } + desc = nomad_events.0003.desc.outro + } + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = forgiving + has_trait = arrogant + has_trait = callous + has_trait = lustful + has_trait = rakish + } + } + animation = laugh + } + animation = stunned + } + right_portrait = { + character = scope:jealous_courtier_2 + animation = anger + } + lower_center_portrait = scope:achmach_scope + + trigger = { + # Achmach is still around + scope:achmach_scope = { + is_courtier_or_knight_of_root = yes + } + any_courtier_or_guest = { + is_valid_nomad_events_0003_courtier = yes + } + NOT = { has_variable = had_nomad_events_0003_var } + } + + immediate = { + set_variable = had_nomad_events_0003_var + random_courtier_or_guest = { + limit = { is_valid_nomad_events_0003_courtier = yes } + weight = { + base = 1 + modifier = { + factor = 2 + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:achmach_scope } + } + modifier = { + add = 5 + OR = { + has_trait = callous + has_trait = wrathful + has_trait = ambitious + } + } + } + save_scope_as = jealous_courtier_2 + } + dummy_attracted_gender_effect = { TARGET = scope:achmach_scope } + hidden_effect = { + if = { + limit = { + scope:jealous_courtier_2 = { + can_set_relation_grudge_trigger = { CHARACTER = scope:achmach_scope } + } + } + scope:jealous_courtier_2 = { + set_relation_grudge = { + target = scope:achmach_scope + reason = grudge_too_good + } + } + } + } + } + + option = { # I would also flee to their arms + name = nomad_events.0003.a + add_internal_flag = special + trigger = { + NOT = { has_relation_lover = scope:achmach_scope } + is_attracted_to_gender_of = scope:achmach_scope + scope:achmach_scope = { + is_attracted_to_gender_of = root + } + can_start_scheme = { + type = seduce + target_character = scope:achmach_scope + } + } + start_scheme = { + type = seduce + target_character = scope:achmach_scope + } + custom_tooltip = nomad_events_0003_a_tt + random_scheme = { + limit = { + scheme_type = seduce + scheme_target_character = scope:achmach_scope + } + add_scheme_progress = 5 + add_scheme_modifier = { + type = extra_success_chance_modifier + } + } + stress_impact = { + lustful = massive_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + might_cheat_on_every_partner_trigger = yes + has_lustful_adjacent_trait_trigger = yes + factor = 2 + } + } + } + + option = { # Ayo, this is getting out of hand + name = nomad_events.0003.b + custom_tooltip = nomad_events_0003_b_tt + add_dread = minor_dread_loss + add_character_modifier = { + modifier = mpo_assertion_modifier + years = 5 + } + fire_achmach_effect = yes + scope:jealous_courtier_2 = { + if = { + limit = { is_councillor_of = root } + councillor_increase_relevant_skill_effect = yes + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0002 + days = { 12 20 } + } + } + stress_impact = { + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = trusting + factor = 0 + } + } + } + + option = { # Nonsense, I trust this person + name = nomad_events.0003.c + add_legitimacy_effect = { LEGITIMACY = minor_legitimacy_loss } + scope:jealous_courtier_2 = { + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -15 + } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0004 + days = { 12 20 } + } + } + stress_impact = { + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 0 + } + } + } + + after = { + hidden_effect = { + trigger_event = { + id = nomad_events.0005 + days = { 25 30 } + } + } + } +} + +# Letter event - Achmach thanks you for trusting/rehiring him +nomad_events.0004 = { + type = letter_event + opening = { + desc = nomad_events.0004.opening + } + desc = nomad_events.0004.desc + sender = scope:achmach_scope + + trigger = { + # Achmach is still around + scope:achmach_scope = { + is_courtier_or_knight_of_root = yes + } + NOT = { + has_variable = had_nomad_events_0004_var + } + } + + immediate = { + set_variable = had_nomad_events_0004_var + } + + option = { # So nice of them + name = nomad_events.0004.a + add_gold = minor_gold_value + hidden_effect = { + trigger_event = { + id = nomad_events.0005 + days = { 25 30 } + } + } + } +} + +# Letter event - Someone warns you about a plot at court +nomad_events.0005 = { + type = character_event + window = anonymous_letter_event + title = debug.0002.t + desc = nomad_events.0005.desc + theme = intrigue + + trigger = { + # Achmach is still around + scope:achmach_scope = { + is_courtier_or_knight_of_root = yes + } + NOT = { has_variable = had_nomad_events_0005_var } + } + + immediate = { + set_variable = had_nomad_events_0005_var + scope:achmach_scope ?= { save_scope_as = achmach_scope } + scope:jealous_courtier ?= { save_scope_as = jealous_courtier } + scope:jealous_courtier_2 ?= { save_scope_as = jealous_courtier_2 } + } + + option = { # Damn, that's bad + name = nomad_events.0005.a + if = { + limit = { + exists = scope:jealous_courtier_2 + } + custom_tooltip = nomad_events_0005_tt + } + else = { + custom_tooltip = nomad_events_0005_tt_only_one + } + set_variable = can_interrogate_var + # This triggers a Current Situation advice, and the Interrogate Scheme + if = { + limit = { + scope:achmach_scope = { is_alive = yes } + } + scope:achmach_scope = { + add_to_variable_list = { + name = valid_to_interrogate_var + target = root + } + } + } + if = { + limit = { + scope:jealous_courtier = { is_alive = yes } + } + scope:jealous_courtier = { + set_variable = jealous_courtier_var + add_to_variable_list = { + name = valid_to_interrogate_var + target = root + } + } + } + if = { + limit = { + exists = scope:jealous_courtier_2 + scope:jealous_courtier_2 = { is_alive = yes } + } + scope:jealous_courtier_2 = { + add_to_variable_list = { + name = valid_to_interrogate_var + target = root + } + } + } + stress_impact = { + base = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } +} + +# Interrogation event - Ask Achmach and the courtiers if they know something +nomad_events.0006 = { + type = character_event + title = nomad_events.0006.t + desc = { + first_valid = { + triggered_desc = { + trigger = { # Are they the Achmach character? + scope:recipient = { has_variable = achmach_loyalty } + } + desc = nomad_events.0006.desc.achmach + } + triggered_desc = { + trigger = { + scope:recipient = { has_variable = jealous_courtier_var } + } + desc = nomad_events.0006.desc.courtier + } + desc = nomad_events.0006.desc.courtier_2 + } + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = forgiving + has_trait = calm + has_trait = craven + } + } + desc = nomad_events.0006.desc.calm + } + desc = nomad_events.0006.desc.fallback + } + first_valid = { + triggered_desc = { + trigger = { # Are they the Achmach character? + scope:recipient = { has_variable = achmach_loyalty } + } + desc = nomad_events.0006.desc.achmach_outro + } + triggered_desc = { + trigger = { + scope:recipient = { has_variable = jealous_courtier_var } + } + desc = nomad_events.0006.desc.courtier_outro + } + desc = nomad_events.0006.desc.courtier_outro_2 + } + } + theme = intrigue + override_background = { reference = mpo_tent_interior_mongol } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = trusting + has_trait = compassionate + has_trait = forgiving + } + } + animation = interested + } + animation = disapproval + } + right_portrait = { + character = scope:recipient + triggered_animation = { + trigger = { + scope:recipient = { has_variable = achmach_loyalty } + } + animation = schadenfreude + } + animation = shock + } + + immediate = { + scope:recipient = { + remove_list_variable = { + name = valid_to_interrogate_var + target = root + } + assign_quirk_effect = yes + } + if = { + limit = { + scope:recipient = { has_variable = achmach_loyalty } + } + scope:recipient = { save_scope_as = achmach_scope } + } + else = { + random_courtier_or_guest = { + limit = { has_variable = achmach_loyalty } + save_scope_as = achmach_scope + } + } + } + + option = { # If you are a torturer you can use that + name = nomad_events.0006.a + trigger = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + } + add_intrigue_lifestyle_xp = minor_lifestyle_xp + add_dread = major_dread_gain + set_nickname_effect = { NICKNAME = nick_the_flayer } + scope:recipient = { + progress_towards_rival_effect = { + CHARACTER = root + OPINION = -30 + REASON = rival_tortured_me + } + } + stress_impact = { + torturer = major_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = torturer + factor = 2 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { # If you are a witch/mystic you can identify this as black magic + name = nomad_events.0006.b + trigger = { + OR = { + has_trait = witch + has_trait = lifestyle_mystic + } + } + add_learning_lifestyle_xp = minor_lifestyle_xp + + stress_impact = { + witch = medium_stress_impact_loss + lifestyle_mystic = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = witch + has_trait = lifestyle_mystic + } + factor = 0 + } + } + } + + option = { # Find out if the courtier is nervous about something + name = nomad_events.0006.b + trigger = { + scope:recipient = { + NOT = { has_variable = achmach_loyalty } + } + } + duel = { + skills = { diplomacy intrigue } + target = scope:recipient + 50 = { # If you succeed you notice why they're nervous (they actually saw Achmach, or they are just jealous) + desc = nomad_events.0006.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:achmach_scope = { + switch = { + trigger = var:achmach_loyalty + flag:yes = { + custom_tooltip = nomad_events_0006_c_success_info + root = { + hidden_effect = { + send_interface_toast = { + title = nomad_events.0006.c.success + right_icon = scope:recipient + custom_tooltip = nomad_events_0006_c_success_loyal + } + } + } + } + flag:no = { + custom_tooltip = nomad_events_0006_c_success_info + root = { + hidden_effect = { + send_interface_toast = { + title = nomad_events.0006.c.success + right_icon = scope:recipient + custom_tooltip = nomad_events_0006_c_success_disloyal + } + } + } + } + } + } + } + 50 = { + desc = nomad_events.0006.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0006.c.failure + right_icon = scope:achmach_scope + add_stress = minor_stress_gain + } + } + } + stress_impact = { + paranoid = medium_stress_impact_loss + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 2 + } + modifier = { + has_trait = trusting + factor = 0 + } + } + } + + option = { # Achmach offers to kill your enemies + name = nomad_events.0006.d + trigger = { + scope:recipient = { has_variable = achmach_loyalty } + } + custom_tooltip = nomad_events_0006_d_tt + set_variable = achmach_murder_help_var + scope:achmach_scope = { + set_variable = achmach_murder_help_councillor_var + } + stress_impact = { + ambitious = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + compassionate = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = deceitful + } + factor = 2 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { # Imprison them + name = nomad_events.0006.e + add_dread = medium_dread_gain + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:recipient + IMPRISONER = root + } + if = { + limit = { + scope:recipient = { has_variable = achmach_loyalty } + } + scope:achmach_scope = { + set_variable = imprisoned_var + } + } + stress_impact = { + vengeful = medium_stress_impact_loss + compassionate = medium_stress_impact_gain + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = trusting + } + factor = 0 + } + modifier = { + has_trait = vengeful + factor = 2 + } + } + } + + option = { # Let them be + name = nomad_events.0006.f + add_dread = minor_dread_loss + add_piety = minor_piety_gain + scope:recipient = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + stress_impact = { + vengeful = medium_stress_impact_gain + trusting = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = trusting + factor = 2 + } + modifier = { + has_trait = vengeful + factor = 0 + } + } + } + + after = { + if = { # We send this after interrogating Achmach + limit = { + scope:recipient = { has_variable = achmach_loyalty } + } + hidden_effect = { + trigger_event = { + id = nomad_events.0007 + days = { 25 30 } + } + } + } + } +} + +# You see Achmach do something sus at night +scripted_effect achmach_discover_nature_ritual_effect = { + scope:achmach_scope = { + switch = { + trigger = var:achmach_loyalty + flag:yes = { + custom_tooltip = nomad_events_0007_b_success_info + root = { + trigger_event = nomad_events.0008 + } + } + flag:no = { + custom_tooltip = nomad_events_0007_b_success_info + root = { + trigger_event = nomad_events.0009 + } + } + } + } +} + +nomad_events.0007 = { + type = character_event + title = nomad_events.0007.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:achmach_scope = { + has_variable = imprisoned_var + } + } + desc = nomad_events.0007.desc.imprisoned + } + desc = nomad_events.0007.desc.fallback + } + desc = nomad_events.0007.desc.outro + } + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = brave + has_trait = vengeful + } + } + animation = anger + } + animation = shock + } + right_portrait = { + character = scope:achmach_scope + camera = camera_event_center + override_imprisonment_visuals = yes + animation = throne_room_kneel_1 + } + + trigger = { + # Achmach is still around + scope:achmach_scope = { + is_courtier_or_knight_of_root = yes + } + } + + immediate = { + play_music_cue = "mx_cue_murder" + } + + option = { # Everyone is scheming against me! + name = nomad_events.0007.aa + trigger = { + has_trait = paranoid + } + if = { + limit = { + NOT = { has_perk = prepared_for_anything_perk } + } + add_perk = prepared_for_anything_perk + } + else = { + add_intrigue_lifestyle_perk_points = 1 + } + hidden_effect = { + trigger_event = { + id = nomad_events.0010 + days = { 2 3 } + } + } + stress_impact = { + paranoid = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 2 + } + } + } + + option = { # Wait, I know what you're doing + name = nomad_events.0007.a + trigger = { + OR = { + has_trait = witch + has_trait = lifestyle_mystic + } + } + add_learning_lifestyle_xp = medium_lifestyle_xp + achmach_discover_nature_ritual_effect = yes + stress_impact = { + witch = medium_stress_impact_loss + lifestyle_mystic = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = witch + has_trait = lifestyle_mystic + } + factor = 2 + } + } + } + + option = { # What are you doing + name = nomad_events.0007.b + duel = { + skill = learning + target = scope:achmach_scope + 50 = { + desc = nomad_events.0007.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + achmach_discover_nature_ritual_effect = yes + } + 50 = { + desc = nomad_events.0007.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0007.b.failure + right_icon = scope:achmach_scope + add_stress = minor_stress_gain + } + hidden_effect = { + trigger_event = { + id = nomad_events.0010 + days = { 2 3 } + } + } + } + } + stress_impact = { + trusting = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = trusting + factor = 2 + } + } + } + + option = { # Intimidate them + name = nomad_events.0007.c + duel = { + skill = prowess + target = scope:achmach_scope + 50 = { + desc = nomad_events.0007.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + achmach_discover_nature_ritual_effect = yes + } + 50 = { + desc = nomad_events.0007.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0007.b.failure + right_icon = scope:achmach_scope + add_stress = minor_stress_gain + } + hidden_effect = { + trigger_event = { + id = nomad_events.0010 + days = { 2 3 } + } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_loss + vengeful = medium_stress_impact_loss + craven = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = vengeful + } + factor = 2 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } +} + +# Happy ending - Achmach was praying for your safety +scripted_effect nomad_events_magic_amulet_creation_effect = { + hidden_effect_new_object = { + create_artifact = { + name = magic_amulet + description = magic_amulet_desc + type = miscellaneous + visuals = antlers + modifier = artifact_stress_gain_7_modifier + modifier = artifact_magic_amulet_modifier + save_scope_as = newly_created_artifact + wealth = 70 + quality = 70 + max_durability = 100 + creator = scope:achmach_scope + } + } +} + +nomad_events.0008 = { + type = character_event + title = nomad_events.0008.t + desc = nomad_events.0008.desc + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:achmach_scope + animation = obsequious_bow + override_imprisonment_visuals = yes + } + artifact = { + target = scope:newly_created_artifact + position = lower_right_portrait + } + + immediate = { + scope:achmach_scope = { + assign_quirk_effect = yes + nomad_events_magic_amulet_creation_effect = yes + } + add_stress = medium_stress_loss # No one is trying to kill you + } + + option = { # If you don't have the same faith, switch + name = nomad_events.0008.a + trigger = { + NOT = { faith = scope:achmach_scope.faith } + } + set_character_faith_with_conversion = scope:achmach_scope.faith + if = { + limit = { + scope:achmach_scope.faith = { has_doctrine = doctrine_monotheist } + } + custom_description_no_bullet = { text = mandala_monotheist_warning_tt } + } + add_piety = medium_piety_gain + ai_chance = { + base = 0 #AI should never choose this + } + } + + option = { # Get the amulet + name = nomad_events.0008.b + custom_tooltip = nomad_events_0008_b_tt + scope:newly_created_artifact = { + set_owner = root + set_variable = magic_amulet_var + } + stress_impact = { + zealous = medium_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 2 + } + modifier = { + has_trait = cynical + factor = 0 + } + } + } + + option = { # Urge them to get even better + name = nomad_events.0008.c + scope:achmach_scope = { + if = { + limit = { is_councillor_of = root } + councillor_increase_relevant_skill_five_points_effect = yes + } + else = { + add_random_five_skill_points_effect = yes + } + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + } + add_prestige = medium_prestige_gain + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } +} + +# Bittersweet ending - You discover he was being disloyal +scripted_effect nomad_events_0009_imprison_effect = { + if = { #if they're not imprisoned yet, imprison them + limit = { + scope:achmach_scope = { is_imprisoned = no } + } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:achmach_scope + IMPRISONER = root + } + } +} + +nomad_events.0009 = { + type = character_event + title = nomad_events.0009.t + desc = nomad_events.0009.desc + theme = intrigue + override_background = { reference = mpo_campfire_steppe } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = brave + has_trait = vengeful + } + } + animation = rage + } + animation = anger + } + right_portrait = { + character = scope:achmach_scope + animation = shock + override_imprisonment_visuals = yes + } + artifact = { + target = scope:newly_created_artifact + position = lower_right_portrait + } + + immediate = { + scope:achmach_scope = { + assign_quirk_effect = yes + nomad_events_magic_amulet_creation_effect = yes + } + } + + option = { # Kill them on the spot + name = nomad_events.0009.a + add_dread = major_dread_gain + unknown_murder_effect = { + VICTIM = scope:achmach_scope + MURDERER = root + REASON = death_murder + } + stress_impact = { + wrathful = major_stress_impact_loss + sadistic = major_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = sadistic + } + factor = 2 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + } + } + + option = { # Steal their amulet + name = { + trigger = { + scope:achmach_scope = { + is_imprisoned = yes + } + } + text = nomad_events.0009.b_imprisoned + } + name = { + text = nomad_events.0009.b + } + custom_tooltip = nomad_events_0008_b_tt + scope:newly_created_artifact = { + set_owner = root + set_variable = magic_amulet_var + } + nomad_events_0009_imprison_effect = yes + stress_impact = { + zealous = medium_stress_impact_loss + cynical = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 2 + } + modifier = { + has_trait = cynical + factor = 0 + } + } + } + + option = { # You'll be prepared now + name = nomad_events.0009.c + add_character_modifier = mpo_eyes_everywhere_modifier # Permanent + stress_impact = { + paranoid = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 2 + } + } + } +} + +# Complicated feelings ending - Someone tries to murder you! +scripted_effect nomad_events_0010_imprison_effect = { + if = { #if they're not imprisoned yet, imprison them + limit = { + scope:dueling_enemy = { is_imprisoned = no } + } + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:dueling_enemy + IMPRISONER = root + } + } + add_dread = medium_dread_gain + add_character_modifier = { + modifier = mpo_imprisoned_assassin_modifier + years = 5 + } +} + +nomad_events.0010 = { + type = character_event + title = nomad_events.0010.t + desc = { + desc = nomad_events.0010.desc.intro + first_valid = { + triggered_desc = { + trigger = { # Someone else was trying to murder you + scope:achmach_scope.var:achmach_loyalty = flag:yes + } + desc = nomad_events.0010.desc.loyal + } + desc = nomad_events.0010.desc.disloyal # It's Acmach! + } + } + theme = intrigue + override_background = { reference = mpo_tent_interior_mongol } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + } + animation = rage + } + animation = shock + } + right_portrait = { + character = scope:achmach_scope + triggered_animation = { + trigger = { + scope:achmach_scope.var:achmach_loyalty = flag:yes + } + animation = aggressive_dagger + } + animation = assassin + override_imprisonment_visuals = yes + } + lower_center_portrait = { + trigger = { + exists = scope:assassin + } + character = scope:assassin + } + + immediate = { + play_music_cue = "mx_cue_murder" + if = { + limit = { + scope:achmach_scope.var:achmach_loyalty = flag:yes + } + create_character = { + template = mercenary + dynasty = none + location = root.capital_province + gender_female_chance = root_soldier_female_chance + faith = root.location.faith + culture = root.location.culture + save_scope_as = assassin + } + } + if = { + limit = { + exists = scope:assassin + } + scope:assassin = { save_scope_as = dueling_enemy } + } + else = { + scope:achmach_scope = { save_scope_as = dueling_enemy } + } + } + + option = { # If you are a torturer you're gonna have fun + name = nomad_events.0010.aaa + trigger = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + } + add_internal_flag = special + add_intrigue_lifestyle_xp = medium_lifestyle_xp + add_dread = major_dread_gain + unknown_murder_effect = { + VICTIM = scope:dueling_enemy + MURDERER = root + REASON = death_murder + } + stress_impact = { + torturer = massive_stress_impact_loss + wrathful = massive_stress_impact_loss + sadistic = major_stress_impact_loss + calm = major_stress_impact_gain + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = torturer + has_trait = wrathful + has_trait = sadistic + } + factor = 2 + } + modifier = { + OR = { + has_trait = calm + has_trait = compassionate + } + factor = 0 + } + } + } + + option = { # If you are craven you can run with all your might + name = nomad_events.0010.aa + trigger = { + has_trait = craven + } + custom_tooltip = nomad_events_0010_aa_tt + nomad_events_0010_imprison_effect = yes + } + + option = { # Encourage Achmach to take the hit for you + name = nomad_events.0010.a + trigger = { + scope:achmach_scope.var:achmach_loyalty = flag:yes + } + scope:achmach_scope = { + duel = { + skill = prowess + target = scope:assassin + 50 = { # They kill the assassin + desc = nomad_events.0010.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = nomad_events.0010.a.success + right_icon = scope:assassin + left_icon = scope:achmach_scope + unknown_murder_effect = { + VICTIM = scope:assassin + MURDERER = scope:achmach_scope + REASON = death_murder + } + } + } + 50 = { # The assassin wounds them + desc = nomad_events.0010.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0010.a.failure + right_icon = scope:achmach_scope + scope:achmach_scope = { + increase_wounds_effect = { REASON = attacked } + } + } + } + } + } + stress_impact = { + craven = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 2 + } + } + } + + option = { # You call for guards + name = nomad_events.0010.b + duel = { + skill = diplomacy + target = scope:dueling_enemy + 50 = { # You imprison the assassin + desc = nomad_events.0010.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = nomad_events.0010.b.success + left_icon = root + right_icon = scope:dueling_enemy + nomad_events_0010_imprison_effect = yes + } + } + 50 = { # The assassin wounds you + desc = nomad_events.0010.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0010.b.failure + left_icon = root + increase_wounds_effect = { REASON = attacked } + } + } + } + stress_impact = { + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = wrathful + factor = 2 + } + } + } + + option = { # Try to defend yourself + name = { + trigger = { + scope:dueling_enemy = { is_imprisoned = yes } + } + text = nomad_events.0010.c_imprisoned + } + name = { + text = nomad_events.0010.c + } + duel = { + skill = prowess + target = scope:dueling_enemy + 50 = { # You kill the assassin + desc = nomad_events.0010.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + send_interface_toast = { + title = nomad_events.0010.c.success + left_icon = root + right_icon = scope:dueling_enemy + unknown_murder_effect = { + VICTIM = scope:dueling_enemy + MURDERER = root + REASON = death_murder + } + } + } + 50 = { # The assassin wounds you + desc = nomad_events.0010.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + send_interface_toast = { + title = nomad_events.0010.c.failure + left_icon = root + increase_wounds_effect = { REASON = attacked } + nomad_events_0010_imprison_effect = yes + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } +} + +############################ +## Not My Flock +## 0100 +############################ + +scripted_trigger nomad_events_0100_valid_enemies = { + is_available_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + government_has_flag = government_is_nomadic + exists = domicile +} + +scripted_effect nomad_events_0100_dislike_effect = { + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = $VALUE$ + } +} + +scripted_effect nomad_events_0100_friend_effect = { + progress_towards_friend_effect = { + REASON = friend_supported_in_herd_dispute + CHARACTER = $CHARACTER$ + OPINION = default_friend_opinion + } +} + +nomad_events.0100 = { + type = character_event + title = nomad_events.0100.t + desc = nomad_events.0100.desc + theme = nomads + cooldown = { years = 5 } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = deceitful } + animation = schadenfreude + } + animation = worry + } + right_portrait = { + character = scope:vassal_1 + animation = anger + } + lower_center_portrait = { + character = scope:vassal_2 + } + + trigger = { + has_mpo_dlc_trigger = yes + is_available_adult = yes + any_vassal = { + nomad_events_0100_valid_enemies = yes + count >= 2 + } + } + + immediate = { + random_vassal = { + limit = { nomad_events_0100_valid_enemies = yes } + save_scope_as = vassal_1 + } + random_vassal = { + limit = { + nomad_events_0100_valid_enemies = yes + NOT = { this = scope:vassal_1 } + } + weight = { + base = 1 + modifier = { + add = 10 + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:vassal_1 } + } + modifier = { + add = 5 + number_of_opposing_personality_traits = { + target = scope:vassal_1 + value >= 1 + } + } + } + save_scope_as = vassal_2 + } + hidden_effect = { + scope:vassal_1.domicile ?= { + if = { + limit = { + herd <= root.domicile.minor_herd_gain + } + change_herd = root.domicile.minor_herd_gain + } + } + } + scope:vassal_1 = { + pay_herd = { + target = scope:vassal_2 + value = root.domicile.minor_herd_gain + } + } + } + + option = { # Don't you mean _my_ flock + name = nomad_events.0100.aa + trigger = { + has_trait = deceitful + } + scope:vassal_2 = { + pay_herd = { + target = scope:vassal_2 + value = root.domicile.minor_herd_gain + } + } + stress_impact = { + craven = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 2 + } + } + } + + option = { # Support vassal_1 + name = nomad_events.0100.a + nomad_events_0100_friend_effect = { CHARACTER = scope:vassal_1 } + scope:vassal_2 = { + nomad_events_0100_dislike_effect = { VALUE = -20 } + pay_herd = { + target = scope:vassal_2 + value = root.domicile.minor_herd_gain + } + } + ai_chance = { + base = 100 + modifier = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:vassal_1 } + factor = 2 + } + } + } + + option = { # Support vassal_2 + name = nomad_events.0100.b + nomad_events_0100_friend_effect = { CHARACTER = scope:vassal_2 } + scope:vassal_1 = { + nomad_events_0100_dislike_effect = { VALUE = -20 } + } + ai_chance = { + base = 100 + modifier = { + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:vassal_1 } + factor = 2 + } + } + } + + option = { # You are both wrong + name = nomad_events.0100.c + scope:vassal_1 = { + nomad_events_0100_dislike_effect = { VALUE = -10 } + } + scope:vassal_2 = { + nomad_events_0100_dislike_effect = { VALUE = -10 } + } + add_dread = minor_dread_gain + stress_impact = { + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + factor = 0 + } + } + } +} + +############################ +## Cornered +## 0110 +############################ + +nomad_events.0110 = { + type = character_event + title = nomad_events.0110.t + desc = nomad_events.0110.desc + theme = nomads + override_background = { reference = bp3_steppe_winter } + widget = { + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + cooldown = { years = 10 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = craven } + animation = shock + } + animation = anger + } + right_portrait = { + character = scope:victim + animation = sick # They are shivering + } + artifact = { + trigger = { + exists = scope:newly_created_artifact + } + position = lower_center_portrait + target = scope:newly_created_artifact + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + location = { + OR = { + has_winter_trigger = yes + geographical_region = ghw_region_siberia + } + } + any_courtier = { + is_available_ai = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + add = 3 + situation:the_great_steppe = { + 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 + } + } + } + } + } + + immediate = { + random_courtier = { + weight = { + base = 1 + modifier = { + is_child_of = root + is_adult = no + age >= 5 + add = 10 + } + modifier = { + is_adult = no + add = 5 + } + } + save_scope_as = victim + } + if = { + limit = { has_trait = craven } + hidden_effect_new_object = { + create_artifact_animal_hide_effect = { + OWNER = root + HUNTER = root + LEGENDARY = no + ANIMAL = flag:wolf + } + } + } + } + + option = { # Call your men + name = nomad_events.0110.a + trigger = { + has_trait = craven + } + scope:newly_created_artifact = { set_owner = root } + stress_impact = { + craven = medium_stress_impact_loss + brave = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 2 + } + modifier = { + has_trait = brave + factor = 0 + } + } + } + + option = { # Fight the beast + name = nomad_events.0110.b + duel = { + value = decent_skill_rating + skill = prowess + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1.5 + min = -49 + } + modifier = { + tier_difference = { target = root value >= 1 } + add = 10 + } + desc = nomad_events.0110.b.success + send_interface_toast = { + title = nomad_events.0110.b.success + left_icon = root + add_dread = medium_dread_gain + add_prowess_skill = 1 + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1.5 + min = -49 + } + modifier = { + tier_difference = { target = root value >= 1 } + add = 10 + } + desc = nomad_events.0110.b.failure + send_interface_toast = { + title = nomad_events.0110.b.failure + left_icon = root + increase_wounds_no_death_effect = { REASON = wild_animal } + } + } + } + stress_impact = { + craven = medium_stress_impact_gain + } + ai_chance = { + base = 100 + + } + } + + option = { # Tell them to run away + name = nomad_events.0110.c + scope:victim = { + increase_wounds_no_death_effect = { REASON = wild_animal } + random = { + chance = 10 + send_interface_toast = { + title = nomad_events.0110.c.success + left_icon = scope:victim + scope:victim = { add_trait = athletic } + } + } + } + stress_impact = { + brave = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = brave + factor = 0 + } + } + } +} + +############################ +## Evening Ride +## 0120 +############################ + +scripted_effect nomad_events_0120_improve_relationship_effect = { + switch = { + trigger = var:relationship + flag:child = { + scope:companion = { + add_prowess_skill = 1 + } + } + flag:spouse = { + if = { + limit = { can_set_relation_lover_trigger = { CHARACTER = scope:companion } } + set_relation_lover = { + target = scope:companion + reason = lover_evening_ride + } + } + else = { + scope:companion = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 25 + } + } + } + } + flag:friend = { + progress_towards_friend_effect = { + REASON = friend_evening_ride + CHARACTER = scope:companion + OPINION = default_friend_opinion + } + } + } +} + +nomad_events.0120 = { + type = character_event + title = nomad_events.0120.t + desc = nomad_events.0120.desc + theme = nomads + override_background = { reference = mpo_steppe_evening } + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = jockey_walk + camera = camera_event_horse_left + } + right_portrait = { + character = scope:companion + animation = horse_surveying + camera = camera_event_horse_left + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_courtier = { + is_available_ai = yes + age >= 13 + } + } + + immediate = { + random_courtier = { + weight = { + base = 1 + modifier = { + is_child_of = root + is_adult = no + add = 10 + } + modifier = { + is_spouse_of = root + add = 10 + } + } + save_scope_as = companion + } + if = { + limit = { + scope:companion = { + is_child_of = root + } + } + set_variable = { + name = relationship + value = flag:child + } + } + else_if = { + limit = { + scope:companion = { + is_spouse_of = root + } + } + set_variable = { + name = relationship + value = flag:spouse + } + } + else = { + set_variable = { + name = relationship + value = flag:friend + } + } + } + + option = { # If this is romantic you can smash + name = nomad_events.0120.a + trigger = { + var:relationship = flag:spouse + } + reason = spouse + had_sex_with_effect = { + CHARACTER = scope:companion + PREGNANCY_CHANCE = pregnancy_chance + } + stress_impact = { + base = medium_stress_impact_loss + chaste = major_stress_impact_gain + celibate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = lustful + factor = 2 + } + modifier = { + OR = { + has_trait = chaste + has_trait = celibate + } + factor = 0 + } + } + } + + option = { # Talk to them + name = nomad_events.0120.b + nomad_events_0120_improve_relationship_effect = yes + stress_impact = { + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 0 + } + } + } + + option = { # Focus on training + name = nomad_events.0120.c + add_martial_lifestyle_xp = medium_lifestyle_xp #Enough that you care even if you're not Martial + if = { + limit = { + var:relationship = flag:spouse + } + stress_impact = { + lustful = medium_stress_impact_gain + } + } + ai_chance = { + base = 100 + modifier = { + has_trait = lustful + var:relationship = flag:spouse + factor = 0 + } + } + } +} + +############################ +## A Good Deal +## 0130 +############################ + +scripted_trigger nomad_events_0130_valid_merchant = { + is_available_ai_adult = yes + stewardship >= decent_skill_rating +} + +nomad_events.0130 = { + type = character_event + title = nomad_events.0130.t + desc = nomad_events.0130.desc + theme = nomads + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left + } + right_portrait = { + character = scope:merchant + animation = shepherd_with_sheep + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + domicile = { herd < max_herd } # You are not at your Herd limit + } + + immediate = { + if = { + limit = { + any_pool_character = { + province = root.location + nomad_events_0130_valid_merchant = yes + } + } + random_pool_character = { + province = root.location + limit = { nomad_events_0130_valid_merchant = yes } + save_scope_as = merchant + } + } + else = { + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = location.faith + culture = location.culture + save_scope_as = merchant + } + } + } + + option = { # Intimidate them + name = nomad_events.0130.a + trigger = { + dread >= major_dread_value + } + domicile = { + change_herd = medium_herd_gain + } + stress_impact = { + wrathful = medium_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = wrathful + factor = 2 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + } + } + + option = { # Invite them to court + name = nomad_events.0130.b + pay_short_term_gold = { + target = scope:merchant + gold = minor_gold_value + } + add_courtier = scope:merchant + stress_impact = { + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + gold <= medium_gold_value + } + factor = 0 + } + } + } + + option = { # Buy herd + name = nomad_events.0130.c + pay_short_term_gold = { + target = scope:merchant + gold = minor_gold_value + } + domicile = { + change_herd = medium_herd_gain + } + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = greedy + gold <= medium_gold_value + } + factor = 0 + } + } + } + + option = { # I'm good + name = nomad_events.0130.d + ai_chance = { + base = 100 + } + } +} + +############################ +## Far From Home +## 0140 +############################ + +scripted_trigger nomad_events_0140_valid_merchant = { + is_available_ai_adult = yes + faith = { + NOR = { + this = root.faith + this = root.location.county.faith + } + } + NOT = { has_variable = had_nomad_events_0140_var } +} + +nomad_events.0140 = { + type = character_event + title = nomad_events.0140.t + desc = nomad_events.0140.desc + theme = nomads + override_background = { reference = mpo_campfire_steppe } + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left + } + right_portrait = { + character = scope:merchant + animation = shepherd_with_sheep + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + } + + weight_multiplier = { + base = 1 + modifier = { + any_pool_character = { + province = root.location + nomad_events_0140_valid_merchant = yes + } + factor = 2 + } + } + + immediate = { + if = { + limit = { + any_pool_character = { + province = root.location + nomad_events_0140_valid_merchant = yes + } + } + random_pool_character = { + province = root.location + limit = { nomad_events_0140_valid_merchant = yes } + save_scope_as = merchant + } + } + else = { + random_list = { + 10 = { + modifier = { + location = { geographical_region = world_steppe_west } + add = 25 + } + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:ashari + culture = culture:bolghar + save_scope_as = merchant + } + } + 10 = { + modifier = { + location = { geographical_region = world_steppe_east } + add = 25 + } + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:nestorian + culture = culture:kerait + save_scope_as = merchant + } + } + 10 = { + modifier = { + location = { geographical_region = world_steppe_east } + add = 25 + } + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:vajrayana + culture = culture:uyghur + save_scope_as = merchant + } + } + 10 = { + modifier = { + location = { geographical_region = world_steppe_central } + add = 25 + } + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:maturidi + culture = culture:turkish + save_scope_as = merchant + } + } + 1 = { # Fallback, rare + create_character = { + location = root.location + template = merchant_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:catholic + culture = culture:italian + save_scope_as = merchant + } + } + } + } + scope:merchant = { + set_variable = had_nomad_events_0140_var + faith = { save_scope_as = target_faith } + } + } + + option = { # Get Faith discount + name = nomad_events.0140.a + trigger = { + NOT = { faith = scope:merchant.faith } + } + custom_tooltip = nomad_events.0140.a.tt + set_variable = { + name = discounted_faith_to_convert_to_var + value = scope:target_faith + } + stress_impact = { + wrathful = medium_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { # AI should never pick this + base = 0 + modifier = { + has_trait = cynical + add = 50 + } + } + } + + option = { # Invite them to stay + name = nomad_events.0140.b + add_piety = minor_piety_gain + add_courtier = scope:merchant + stress_impact = { + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = wrathful + factor = 0 + } + } + } + + option = { # Tell them to go away + name = nomad_events.0140.c + add_dread = minor_dread_gain + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } +} + +############################ +## One More Drink +## 0150 +############################ + +scripted_trigger nomad_events_0150_valid_companion = { + is_available_ai_adult = yes + drinks_alcohol_trigger = yes + can_set_relation_friend_trigger = { CHARACTER = root } + age <= 50 +} + +nomad_events.0150 = { + type = character_event + title = nomad_events.0150.t + desc = nomad_events.0150.desc + theme = nomads + override_background = { reference = mpo_campfire_steppe } + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = drink + } + right_portrait = { + character = scope:companion + animation = toast + } + lower_center_portrait = { + trigger = { exists = scope:rival } + character = scope:rival + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + culture = { + OR = { + has_cultural_pillar = heritage_turkic + has_cultural_pillar = heritage_mongolic + } + } + drinks_alcohol_trigger = yes + any_courtier = { + nomad_events_0150_valid_companion = yes + } + } + + immediate = { + random_courtier = { + limit = { + nomad_events_0150_valid_companion = yes + } + weight = { # Someone you care about + base = 1 + modifier = { + has_court_position = court_astrologer_court_position + add = 5 + } + modifier = { + is_knight_of = root + add = 2 + } + } + save_scope_as = companion + } + if = { + limit = { + num_of_relation_rival >= 1 + NOT = { has_relation_rival = scope:companion } + } + random_relation = { + type = rival + save_scope_as = rival + } + } + } + + option = { # If you hate someone, shit talk them + name = nomad_events.0150.a + trigger = { + num_of_relation_rival >= 1 + NOT = { has_relation_rival = scope:companion } + } + add_internal_flag = special + custom_tooltip = nomad_events.0150.a.tt # Not using the reason because this is not because _they_ are your rival + scope:companion = { # They find this funny + add_opinion = { + target = root + modifier = amused_opinion + opinion = 10 + } + } + scope:rival = { + add_prestige = minor_prestige_loss + } + stress_impact = { + base = major_stress_impact_loss + } + ai_chance = { # AI should never pick this + base = 0 + } + } + + option = { # I love you, man + name = nomad_events.0150.b + set_relation_friend = { + target = scope:companion + reason = friend_drank_together + } + stress_impact = { + wrathful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = wrathful + factor = 0 + } + } + } + + option = { # I love drinkiiiiiiiiiiing + name = nomad_events.0150.c + add_prestige = minor_prestige_gain + stress_impact = { + base = medium_stress_impact_loss + drunkard = major_stress_impact_loss + temperate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = greedy + factor = 0 + } + } + } +} + +############################ +## A Nice Word +## 0160 +############################ + +scripted_trigger nomad_events_0160_valid_spouse = { + is_available_healthy_ai_adult = yes + NOR = { # To avoid narrative dissonance + has_variable = had_nomad_events_1070_var + has_variable = had_nomad_events_0220_var + } +} + +nomad_events.0160 = { + type = character_event + title = nomad_events.0160.t + desc = { + desc = nomad_events.0160.desc.intro + first_valid = { + triggered_desc = { + trigger = { var:admiration = flag:dread } + desc = nomad_events.0160.desc.dread + } + triggered_desc = { + trigger = { var:admiration = flag:prowess } + desc = nomad_events.0160.desc.prowess + } + triggered_desc = { + trigger = { var:admiration = flag:lover } + desc = nomad_events.0160.desc.lover + } + triggered_desc = { + trigger = { var:admiration = flag:brave } + desc = nomad_events.0160.desc.brave + } + triggered_desc = { + trigger = { var:admiration = flag:generic } + desc = nomad_events.0160.desc.generic + } + } + desc = nomad_events.0160.desc.outro + } + theme = nomads + override_background = { reference = mpo_tent_interior_mongol } + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = love + outfit_tags = { nightgown } + } + right_portrait = { + character = scope:spouse + animation = admiration + outfit_tags = { nightgown } + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_spouse = { + nomad_events_0160_valid_spouse = yes + save_temporary_scope_as = spouse_temp + } + # Have you done anything cool? + OR = { + dread >= major_dread_value + prowess >= high_skill_rating + has_relation_lover = scope:spouse_temp + has_trait = brave + AND = { # Or they just support you because they like you + has_any_good_relationship_with_character_trigger = { CHARACTER = scope:spouse_temp } + scope:spouse_temp = { + NOT = { has_trait = callous } + } + } + } + } + + immediate = { + random_spouse = { + limit = { + nomad_events_0160_valid_spouse = yes + } + weight = { + base = 1 + modifier = { + this = root.primary_spouse + add = 5 + } + } + set_variable = had_nomad_events_1060_var # Forever -- to avoid dissonance with the next event + save_scope_as = spouse + } + random_list = { + 5 = { + trigger = { + dread >= major_dread_value + } + set_variable = { + name = admiration + value = flag:dread + } + } + 5 = { + trigger = { + prowess >= high_skill_rating + } + set_variable = { + name = admiration + value = flag:prowess + } + } + 5 = { + trigger = { + has_relation_lover = scope:spouse + } + set_variable = { + name = admiration + value = flag:lover + } + } + 5 = { + trigger = { + has_trait = brave + } + set_variable = { + name = admiration + value = flag:brave + } + } + 1 = { + set_variable = { + name = admiration + value = flag:generic + } + } + } + } + + option = { # Let's leave the past behind + name = nomad_events.0160.a + reason = rival + trigger = { + has_relation_rival = scope:spouse + } + remove_relation_rival = scope:spouse + stress_impact = { + base = major_stress_impact_loss + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # I love you too + name = nomad_events.0160.b + trigger = { + NOT = { has_relation_rival = scope:spouse } + } + if = { + limit = { + can_set_relation_lover_trigger = { CHARACTER = scope:spouse } + } + set_relation_lover = { + target = scope:spouse + reason = lover_admirable_thing + } + } + else = { + scope:spouse = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 25 + } + } + } + stress_impact = { + base = minor_stress_impact_loss + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = wrathful + factor = 0 + } + } + } + + option = { # Thanks, bestie + name = nomad_events.0160.c + add_prestige = minor_prestige_gain + stress_impact = { + arrogant = major_stress_impact_loss + humble = major_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + factor = 2 + } + modifier = { + OR = { + has_trait = humble + has_trait = shy + } + factor = 0 + } + } + } + + after = { + remove_variable = admiration + } +} + +############################ +## Dreaded One +## 0170 +############################ + +scripted_trigger is_valid_nomad_events_0170_spouse = { + is_available_healthy_ai_adult = yes + NOR = { # To avoid narrative dissonance + has_variable = had_nomad_events_1060_var + has_variable = had_nomad_events_0220_var + } + NOR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + NOT = { dread >= minor_dread_value } # In case they are landed +} + +nomad_events.0170 = { + type = character_event + title = nomad_events.0170.t + desc = nomad_events.0170.desc + theme = nomads + override_background = { reference = mpo_tent_interior_mongol } + cooldown = { years = 10 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + } + animation = dismissal + } + animation = worry + outfit_tags = { nightgown } + } + right_portrait = { + character = scope:spouse + animation = fear + outfit_tags = { nightgown } + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + dread >= major_dread_value + any_spouse = { + is_valid_nomad_events_0170_spouse = yes + } + } + + immediate = { + random_spouse = { + limit = { + is_valid_nomad_events_0170_spouse = yes + } + weight = { + base = 1 + modifier = { + this = root.primary_spouse + add = 5 + } + } + set_variable = had_nomad_events_1070_var + save_scope_as = spouse + } + } + + option = { # Do you think me weak? + name = nomad_events.0170.a + trigger = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + } + if = { # If you are not max out we give you some dread + limit = { + NOT = { dread = 100 } + } + add_dread = major_dread_gain + } + give_nickname = nick_the_dreadful + add_character_modifier = { + modifier = dread_spouse_modifier + years = 10 + } + if = { + limit = { + scope:spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_very_bad_fertility = scope:spouse + } + else = { + scope:spouse = { + add_opinion = { + target = root + modifier = scared_opinion + opinion = -50 + } + } + } + stress_impact = { + base = major_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + factor = 2 + } + } + } + + option = { # You're right + name = nomad_events.0170.b + add_dread = massive_dread_loss + add_piety = minor_piety_gain + if = { + limit = { + scope:spouse = { has_any_fertility_relationship_with_root_trigger = no } + } + set_relation_wedding_good_fertility = scope:spouse + } + else = { + scope:spouse = { + add_opinion = { + target = root + modifier = love_opinion + opinion = 25 + } + } + } + stress_impact = { + compassionate = medium_stress_impact_loss + calm = medium_stress_impact_loss + wrathful = major_stress_impact_gain + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 2 + } + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + } + } + + option = { # Nonsense + name = nomad_events.0170.c + add_prestige = minor_prestige_gain + scope:spouse = { + add_opinion = { + target = root + modifier = scared_opinion + opinion = -25 + } + } + stress_impact = { + callous = medium_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + } + } +} + +############################ +## The Weakest Link +## 0180 +############################ + +scripted_trigger is_valid_nomad_events_0180_child = { + OR = { + AND = { + is_adult = yes + prowess <= mediocre_skill_rating + } + AND = { + is_adult = no + age >= 10 + prowess <= low_skill_rating + } + } +} + +scripted_trigger is_valid_nomad_events_0180_rival = { + is_available_healthy_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + NOT = { is_parent_of = $CHILD$ } # Let's double check this + NOT = { has_trait = compassionate } +} + +nomad_events.0180 = { + type = character_event + title = nomad_events.0180.t + desc = nomad_events.0180.desc + theme = nomads + override_background = { reference = mpo_campfire_steppe } + cooldown = { years = 10 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = vengeful + } + } + animation = anger + } + animation = stress + } + right_portrait = { + character = scope:rival + animation = laugh + camera = camera_event_left_away_3_4_far + } + lower_left_portrait = scope:child + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_child = { + is_valid_nomad_events_0180_child = yes + save_temporary_scope_as = child_temp + } + any_courtier = { + is_valid_nomad_events_0180_rival = { CHILD = scope:child_temp } + } + } + + immediate = { + random_child = { + limit = { + is_valid_nomad_events_0180_child = yes + } + weight = { + base = 1 + modifier = { + add = 5 + is_primary_heir_of = root + } + } + save_scope_as = child + } + random_courtier_or_guest = { + limit = { + is_valid_nomad_events_0180_rival = { CHILD = scope:child } + } + weight = { + base = 1 + modifier = { + add = 5 + has_any_bad_relationship_with_character_trigger = { CHARACTER = scope:child } + } + modifier = { + add = 3 + has_any_bad_relationship_with_root_trigger = yes + } + } + save_scope_as = rival + } + } + + option = { # What did you just say + name = nomad_events.0180.a + trigger = { + has_personality_malicious_trigger = yes + } + add_dread = medium_dread_gain + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:rival + IMPRISONER = root + } + stress_impact = { + arbitrary = medium_stress_impact_loss + callous = major_stress_impact_loss + sadistic = major_stress_impact_loss + vengeful = major_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + modifier = { + OR = { + has_trait = vengeful + has_trait = callous + has_trait = sadistic + has_trait = arbitrary + } + factor = 2 + } + } + } + + option = { # Checks out + name = nomad_events.0180.b + scope:child = { + add_stress = massive_stress_impact_gain + add_prowess_skill = 2 + } + + stress_impact = { + base = major_stress_impact_gain + } + ai_chance = { + base = 0 # AI shouldn't send themselves into a stress break + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = ambitious + } + NOT = { has_trait = compassionate } + add = 50 # Unless... + } + } + } + + option = { # Whatever + name = nomad_events.0180.c + add_prestige = minor_prestige_loss + scope:child = { + add_opinion = { + target = root + modifier = kindness_opinion + opinion = 10 + } + } + stress_impact = { + callous = medium_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + } + } +} + +############################ +## Back When +## 0190 +############################ + +scripted_trigger nomad_events_0190_valid_memory = { + has_memory_category = positive + NOT = { has_memory_category = private } + NOT = { has_memory_category = birth } + memory_age_years >= 5 # not something recent + any_memory_participant = { + is_physically_able_adult = yes + is_courtier_or_knight_of_root = yes + } +} + +scripted_effect nomad_events_0190_friendship_effect = { + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:friend } + } + set_relation_friend = { + reason = friend_cute_memory + target = scope:friend + } + } + else_if = { + limit = { + can_set_relation_best_friend_trigger = { CHARACTER = scope:friend } + } + set_relation_best_friend = { + reason = friend_cute_memory + target = scope:friend + } + } + else = { + progress_towards_friend_effect = { + REASON = friend_cute_memory + CHARACTER = scope:friend + OPINION = default_friend_opinion + } + } +} + +nomad_events.0190 = { + type = character_event + title = nomad_events.0190.t + desc = nomad_events.0190.desc + theme = nomads + override_background = { reference = mpo_steppe_evening } + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = horse_archer_idle + camera = camera_event_horse_left + } + right_portrait = { + character = scope:friend + animation = horse_conversing_left + camera = camera_event_horse_right + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_memory = { + nomad_events_0190_valid_memory = yes + } + } + + immediate = { + random_memory = { + limit = { + nomad_events_0190_valid_memory = yes + } + save_scope_as = memory + random_memory_participant = { + save_scope_as = friend + } + } + } + + option = { # I love you, bestie + name = nomad_events.0190.a + trigger = { + has_trait = gregarious + } + nomad_events_0190_friendship_effect = yes + stress_impact = { + base = major_stress_impact_loss + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + factor = 0 + } + modifier = { + OR = { + has_trait = gregarious + has_trait = compassionate + has_trait = loyal + } + factor = 2 + } + } + } + + option = { # This is a pivotal moment in my life + name = nomad_events.0190.b + trigger = { + has_trait = shy + } + nomad_events_0190_friendship_effect = yes + stress_impact = { + base = major_stress_impact_loss + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + factor = 0 + } + modifier = { + OR = { + has_trait = shy + has_trait = compassionate + has_trait = loyal + } + factor = 2 + } + } + } + + option = { # I feel happy + name = nomad_events.0190.c + add_character_modifier = { + modifier = mpo_good_memory_modifier + years = 5 + } + stress_impact = { + base = medium_stress_impact_loss + arrogant = medium_stress_impact_gain + callous = major_stress_impact_gain + ambitious = major_stress_impact_gain + disloyal = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = callous + has_trait = ambitious + has_trait = disloyal + has_trait = arrogant + } + factor = 0 + } + } + } + + option = { # Everyone should know how cool we are + name = nomad_events.0190.d + add_prestige = minor_prestige_gain + stress_impact = { + arrogant = medium_stress_impact_loss + ambitious = medium_stress_impact_loss + disloyal = medium_stress_impact_loss + callous = medium_stress_impact_loss + gregarious = major_stress_impact_gain + shy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = callous + has_trait = disloyal + } + factor = 2 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = gregarious + has_trait = shy + has_trait = loyal + } + factor = 0 + } + } + } +} + +############################ +## In My Dreams +## 0200 +############################ + +scripted_trigger nomad_events_0200_valid_courtier = { + is_available_healthy_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no +} + +scripted_effect nomad_events_0200_learning_effect = { + scope:courtier = { + add_learning_skill = 1 + } + add_learning_lifestyle_xp = medium_lifestyle_xp +} + +nomad_events.0200 = { + type = character_event + title = nomad_events.0200.t + desc = { + desc = nomad_events.0200.desc.intro + first_valid = { + triggered_desc = { + trigger = { var:dream = flag:good } + desc = nomad_events.0200.desc.good + } + desc = nomad_events.0200.desc.bad + } + desc = nomad_events.0200.desc.outro + } + theme = nomads + override_background = { reference = mpo_campfire_steppe } + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = drink + } + right_portrait = { + character = scope:courtier + animation = storyteller + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_courtier = { + nomad_events_0200_valid_courtier = yes + } + } + + immediate = { + ordered_courtier = { + limit = { nomad_events_0200_valid_courtier = yes } + order_by = { + value = learning + if = { + limit = { has_court_position = court_astrologer_court_position } + add = 5 + } + if = { + limit = { has_trait = lifestyle_mystic } + add = 2 + } + if = { + limit = { has_trait = lunatic } + add = 2 + } + } + save_scope_as = courtier + } + random_list = { + 1 = { + set_variable = { + name = dream + value = flag:good + } + } + 1 = { + set_variable = { + name = dream + value = flag:bad + } + } + } + } + + option = { # I don't believe in this stuff + name = nomad_events.0200.a + trigger = { + has_trait = cynical + } + add_character_modifier = { + modifier = mpo_no_omens_modifier + years = 10 + } + stress_impact = { + base = major_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + factor = 2 + } + } + } + + option = { # That's neat + name = nomad_events.0200.b + trigger = { + var:dream = flag:good + } + nomad_events_0200_learning_effect = yes + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = ambitious + } + factor = 2 + } + } + } + + option = { # We must endure + name = nomad_events.0200.c + trigger = { + var:dream = flag:bad + } + nomad_events_0200_learning_effect = yes + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = callous + has_trait = ambitious + } + factor = 2 + } + } + } + + option = { # Let's pray + name = nomad_events.0200.d + add_piety = minor_piety_gain + stress_impact = { + callous = medium_stress_impact_loss + compassionate = major_stress_impact_gain + calm = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + } + } + + after = { + remove_variable = dream + } +} + +############################ +## Nothing but Roots +## 0210 +############################ + +scripted_trigger nomad_events_0210_valid_child = { + age <= 15 + age >= 5 # So they can speak properly +} + +nomad_events.0210 = { + type = character_event + title = nomad_events.0210.t + desc = { + desc = nomad_events.0210.desc.intro + first_valid = { + triggered_desc = { + trigger = { var:family_var = flag:spouse } + desc = nomad_events.0210.desc.spouse + } + desc = nomad_events.0210.desc.child + } + } + theme = nomads + cooldown = { years = 10 } + override_effect_2d = { + reference = rain + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_trait = arrogant + } + animation = dismissal + } + animation = worry + } + right_portrait = { + character = scope:family + animation = sadness + } + lower_center_portrait = scope:courtier + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + OR = { + domicile ?= { + herd <= minor_herd_value + } + } + situation:the_great_steppe = { + NOR = { + 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_sky_blessing_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 + } + } + } + OR = { + any_spouse = { + is_available_healthy_ai_adult = yes + } + any_child = { + nomad_events_0210_valid_child = yes + } + } + } + + immediate = { + random_list = { + 1 = { + trigger = { + any_spouse = { is_available_healthy_ai_adult = yes } + } + random_spouse = { + limit = { is_available_healthy_ai_adult = yes } + weight = { + base = 1 + modifier = { + this = root.primary_spouse + add = 5 + } + } + save_scope_as = family + } + set_variable = { + name = family_var + value = flag:spouse + } + } + 2 = { # Sadder if it's your child + trigger = { + any_child = { nomad_events_0210_valid_child = yes } + } + random_child = { + limit = { nomad_events_0210_valid_child = yes } + save_scope_as = family + } + set_variable = { + name = family_var + value = flag:child + } + } + } + hidden_effect = { + scope:family = { + change_current_weight = -50 + } + } + if = { + limit = { + any_courtier_or_guest = { + is_available_healthy_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + } + } + ordered_courtier_or_guest = { + limit = { + is_available_healthy_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no + } + order_by = { + value = current_weight + if = { + limit = { has_trait = gluttonous } + add = 1 + } + if = { + limit = { has_trait = comfort_eater } + add = 1 + } + } + save_scope_as = courtier + } + } + } + + option = { # Eat a courtier + name = nomad_events.0210.aa + trigger = { + is_cannibal_trigger = yes + exists = scope:courtier + } + scope:courtier = { + death = { death_reason = death_mysterious } + } + change_current_weight = 25 + stress_impact = { + cannibal = massive_stress_impact_loss + } + ai_chance = { + base = 0 + modifier = { + has_trait = cannibal + add = 100 + } + } + } + + option = { # I can take care of this myself + name = nomad_events.0210.a + trigger = { + has_trait = arrogant + } + add_dread = medium_dread_gain + stress_impact = { + arrogant = medium_stress_impact_loss + calm = major_stress_impact_gain + compassionate = massive_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = calm + } + factor = 0 + } + modifier = { + has_trait = arrogant + factor = 2 + } + } + } + + option = { # I hate to see you like that + name = { + trigger = { + var:family_var = flag:child + } + text = nomad_events.0210.b.child + } + name = { + trigger = { + var:family_var = flag:spouse + } + text = nomad_events.0210.b.spouse + } + progress_towards_friend_effect = { + REASON = friend_offered_roots + CHARACTER = scope:family + OPINION = default_friend_opinion + } + stress_impact = { + compassionate = medium_stress_impact_loss + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + arrogant = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + has_trait = arrogant + } + add = -50 + } + } + } + + option = { # Thank you + name = nomad_events.0210.c + custom_tooltip = nomad_events_0210_c_tt + set_variable = { + name = nomad_events_0210_herd_var + years = 5 + } + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + after = { + remove_variable = family_var + } +} + +############################ +## Weak Is the Arm +## 0220 +############################ + +scripted_trigger nomad_events_0220_valid_spouse = { + is_available_healthy_ai_adult = yes + NOR = { + has_trait = compassionate + has_trait = patient + has_trait = content + has_trait = forgiving + } + NOR = { + has_variable = had_nomad_events_1060_var + has_variable = had_nomad_events_1070_var + } +} + +nomad_events.0220 = { + type = character_event + title = nomad_events.0220.t + desc = nomad_events.0220.desc + theme = nomads + override_background = { reference = mpo_tent_interior_mongol } + cooldown = { years = 10 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = craven + has_trait = compassionate + } + } + animation = sadness + } + triggered_animation = { + trigger = { + OR = { + has_trait = wrathful + has_trait = arrogant + has_trait = vengeful + has_trait = callous + } + } + animation = anger + } + animation = worry + } + right_portrait = { + character = scope:spouse + animation = dismissal + outfit_tags = { nightgown } + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + OR = { + prowess <= low_skill_rating + AND = { + dread <= 10 + prowess <= mediocre_skill_rating + } + } + any_spouse = { + nomad_events_0220_valid_spouse = yes + } + } + + immediate = { + random_spouse = { + limit = { nomad_events_0220_valid_spouse = yes } + weight = { + base = 1 + modifier = { + this = root.primary_spouse + add = 5 + } + } + set_variable = had_nomad_events_0220_var + save_scope_as = spouse + } + } + + option = { # You're right + name = nomad_events.0220.a + trigger = { + has_trait = craven + } + remove_trait = craven + random_list = { + 1 = { add_trait = fickle } + 1 = { add_trait = arbitrary } + } + scope:spouse = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + stress_impact = { + base = massive_stress_impact_gain + } + ai_chance = { + base = 0 # AI shouldn't give itself a stress break + modifier = { # Unless... (intentional that it requires two traits) + has_trait = ambitious + has_trait = arrogant + add = 100 + } + } + } + + option = { # I will train as hard as I can + name = nomad_events.0220.b + add_prowess_skill = 1 + scope:spouse = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + stress_impact = { + base = major_stress_impact_gain + arrogant = medium_stress_impact_loss + callous = medium_stress_impact_loss + ambitious = major_stress_impact_loss + } + ai_chance = { + base = 0 # Reduce AI sending itself on stress breaks + modifier = { + OR = { + has_trait = arrogant + has_trait = callous + has_trait = ambitious + } + add = 20 + } + } + } + + option = { # This is just who I am + name = nomad_events.0220.c + bp2_lifestyle_xp_gain_per_type_effect = { VALUE = medium } + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + } + } +} + +############################ +## Homesick +## 0230 +############################ + +scripted_trigger nomad_events_0230_valid_spouse = { + is_available_healthy_ai_adult = yes + NOT = { has_trait = callous } + NAND = { + culture = root.culture + culture = location.culture + } + NOT = { has_variable = had_nomad_events_0230_var } +} + +nomad_events.0230 = { + type = character_event + title = nomad_events.0230.t + desc = nomad_events.0230.desc + theme = nomads + override_background = { reference = mpo_tent_interior_mongol } + cooldown = { years = 25 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = callous + has_trait = sadistic + } + } + animation = dismissal + } + animation = worry + outfit_tags = { nightgown } + } + right_portrait = { + character = scope:spouse + animation = sadness + outfit_tags = { nightgown } + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_spouse = { + nomad_events_0230_valid_spouse = yes + } + } + + immediate = { + random_spouse = { + limit = { nomad_events_0230_valid_spouse = yes } + weight = { + base = 1 + # Someone that you can romance + modifier = { + NOT = { has_relation_lover = root } + can_set_relation_lover_trigger = { CHARACTER = root } + add = 5 + } + modifier = { + this = root.primary_spouse + add = 2 + } + } + set_variable = had_nomad_events_0230_var + save_scope_as = spouse + } + } + + option = { # I miss my culture too + name = nomad_events.0230.a + reason = culture + trigger = { + NOT = { culture = root.location.culture } + } + set_relation_lover = { + target = scope:spouse + reason = lover_homesick_comfort + } + had_sex_with_effect = { + CHARACTER = scope:spouse + PREGNANCY_CHANCE = pregnancy_chance + } + stress_impact = { + compassionate = major_stress_impact_loss + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + } + } + + option = { # Comfort them + name = nomad_events.0230.b + progress_towards_lover_effect = { + REASON = lover_homesick_comfort + CHARACTER = scope:spouse + OPINION = 25 + } + stress_impact = { + compassionate = medium_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + } + } + + option = { # Grow up + name = nomad_events.0230.c + scope:spouse = { + add_character_modifier = { + modifier = mpo_hardened_modifier # Forever + } + } + stress_impact = { + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 0 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 2 + } + } + } +} + +############################ +## Unexpected Guests +## 0240 +############################ + +scripted_trigger nomad_events_0240_valid_courtier = { + is_available_healthy_ai_adult = yes + is_close_family_or_spouse_of_root_trigger = no +} + +nomad_events.0240 = { + type = character_event + title = nomad_events.0240.t + desc = nomad_events.0240.desc + theme = nomads + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:courtier + animation = standing_horse + } + lower_center_portrait = scope:ruler + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + any_neighboring_top_liege_realm_owner = { + government_has_flag = government_is_nomadic + } + any_courtier_or_guest = { + nomad_events_0240_valid_courtier = yes + } + } + + immediate = { + random_neighboring_top_liege_realm_owner = { + limit = { government_has_flag = government_is_nomadic } + weight = { # Let's make it interesting + base = 1 + modifier = { + has_relation_rival = root + add = 5 + } + } + save_scope_as = ruler + } + random_courtier = { + limit = { nomad_events_0240_valid_courtier = yes } + save_scope_as = courtier + } + } + + option = { # Secret option if you are rivals + name = nomad_events.0240.a + reason = rival + trigger = { + has_relation_rival = scope:ruler + } + add_dread = medium_dread_gain + domicile = { + change_herd = { + value = medium_herd_gain + subtract = 1 # Funny + } + } + scope:ruler = { + house_feud_start_effect = { + # Feuding House Head + ACTOR = scope:ruler + # Target House Head + TARGET = root + # Feud Reason + REASON = stolen_herd + # House Member attacker if relevant + ATTACKER = root + # House Member victim if relevant + VICTIM = scope:ruler + } + } + stress_impact = { + compassionate = major_stress_impact_loss + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + } + } + + option = { # Return it + name = nomad_events.0240.b + if = { + limit = { + has_relation_rival = scope:ruler + } + remove_relation_rival = scope:ruler + } + add_character_modifier = { + modifier = mpo_honorable_ruler + years = 10 + } + progress_towards_friend_effect = { + REASON = friend_returned_herd + CHARACTER = scope:ruler + OPINION = default_friend_opinion + } + stress_impact = { + compassionate = medium_stress_impact_loss + callous = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + } + } + + option = { # Let's keep it + name = nomad_events.0240.c + domicile = { + change_herd = medium_herd_gain + } + stress_impact = { + callous = medium_stress_impact_loss + sadistic = medium_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 0 + } + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 2 + } + } + } +} + +############################ +## Man of God +## 0250 +############################ + +scripted_trigger nomad_events_0250_valid_priest = { + is_available_ai_adult = yes + faith = { + NOR = { + this = root.faith + this = root.location.county.faith + has_doctrine_parameter = unreformed + this = faith:rabbinism + } + } + trigger_if = { + limit = { + faith = { has_doctrine_parameter = clergy_must_be_male } + } + is_male = yes + } + trigger_else = { + is_male = no + } + NOT = { has_variable = had_nomad_events_0250_var } + NOT = { has_trait = cynical } + learning >= 8 +} + +nomad_events.0250 = { + type = character_event + title = nomad_events.0250.t + desc = nomad_events.0250.desc + theme = nomads + override_background = { reference = mpo_campfire_steppe } + cooldown = { years = 25 } + + left_portrait = { + character = root + animation = drink + } + right_portrait = { + character = scope:priest + animation = holding_staff + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + } + + weight_multiplier = { + base = 1 + modifier = { + any_pool_character = { + province = root.location + nomad_events_0250_valid_priest = yes + } + factor = 2 + } + modifier = { + faith = { has_doctrine_parameter = unreformed } + current_year > 1065 + factor = 2 + } + modifier = { + faith = { has_doctrine_parameter = unreformed } + current_year > 1150 + factor = 2 + } + } + + immediate = { + if = { + limit = { + any_pool_character = { + province = root.location + nomad_events_0250_valid_priest = yes + } + } + random_pool_character = { + province = root.location + limit = { + nomad_events_0250_valid_priest = yes + } + weight = { + base = 1 + modifier = { + has_trait = zealous + add = 5 + } + } + save_scope_as = priest + } + } + else_if = { + limit = { + any_neighboring_top_liege_realm_owner = { + NOR = { + faith = root.faith + faith = { has_doctrine_parameter = unreformed } + } + } + } + random_neighboring_top_liege_realm_owner = { + limit = { + NOR = { + faith = root.faith + faith = { has_doctrine_parameter = unreformed } + } + } + save_scope_as = neighboring_ruler + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = scope:neighboring_ruler.faith + culture = scope:neighboring_ruler.culture + save_scope_as = priest + } + scope:priest = { + save_scope_as = created_priest + } + } + else = { + random_list = { + 10 = { + trigger = { + NOT = { faith = faith:ashari } + NOT = { any_character_situation = { this = situation:game_rule_extra_nomads_sami } } + } + modifier = { + location = { geographical_region = world_steppe_west } + add = 25 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:ashari + culture = culture:bolghar + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:kabarism } + any_character_situation = { this = situation:the_great_steppe } + } + modifier = { + location = { geographical_region = world_steppe_west } + add = 5 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:kabarism + culture = culture:khazar + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:nestorian } + any_character_situation = { this = situation:the_great_steppe } + } + modifier = { + location = { geographical_region = world_steppe_east } + add = 25 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:nestorian + culture = culture:kerait + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:vajrayana } + any_character_situation = { this = situation:the_great_steppe } + } + modifier = { + location = { geographical_region = world_steppe_east } + add = 25 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:vajrayana + culture = culture:uyghur + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:manichean } + any_character_situation = { this = situation:the_great_steppe } + } + modifier = { + location = { geographical_region = world_steppe_east } + add = 25 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:manichean + culture = culture:uyghur + save_scope_as = priest + } + } + 10 = { + trigger = { + location = { geographical_region = world_steppe_east } + NOT = { faith = faith:zhengyi } + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:zhengyi + culture = culture:uyghur + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:maturidi } + NOT = { any_character_situation = { this = situation:game_rule_extra_nomads_sami } } + } + modifier = { + location = { geographical_region = world_steppe_central } + add = 25 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:maturidi + culture = culture:turkish + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:alevi } + any_character_situation = { this = situation:the_great_steppe } + } + modifier = { + location = { geographical_region = world_steppe_central } + add = 15 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:alevi + culture = culture:turkish + save_scope_as = priest + } + } + 10 = { + trigger = { + NOT = { faith = faith:ismaili } + NOT = { any_character_situation = { this = situation:game_rule_extra_nomads_sami } } + } + modifier = { + location = { geographical_region = world_steppe_central } + add = 5 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:ismaili + culture = culture:persian + save_scope_as = priest + } + } + 1 = { # Fallback, rare + trigger = { + NOT = { faith = faith:catholic } + } + modifier = { + any_character_situation = { this = situation:game_rule_extra_nomads_sami } + add = 5000 + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = faith:catholic + culture = culture:italian + save_scope_as = priest + } + } + } + scope:priest = { + save_scope_as = created_priest + } + } + scope:priest = { + set_variable = had_nomad_events_0250_var + } + } + + option = { # Convert + name = nomad_events.0250.a + set_character_faith = scope:priest.faith + domicile = { set_domicile_faith = scope:priest.faith } + add_character_modifier = chosen_by_the_heavens_modifier + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + } + set_county_faith = scope:priest.faith + } + add_piety_level = 1 + stress_impact = { + zealous = massive_stress_impact_gain + cynical = minor_stress_impact_loss + } + ai_chance = { + base = 20 + modifier = { + any_character_situation = { this = situation:the_great_steppe } + OR = { + scope:priest.faith = faith:orthodox + scope:priest.religion = religion:hinduism_religion + } + add = -30 + } + modifier = { + highest_held_title_tier >= tier_kingdom + faith = { + has_doctrine_parameter = unreformed + } + factor = 4 + } + modifier = { + current_year > 1065 + factor = 2 + } + modifier = { + current_year > 1150 + factor = 2 + } + modifier = { + scope:priest.faith = { has_doctrine_parameter = unreformed } + factor = 0 + } + modifier = { # Non-steppe regions are stickier and convert less freely + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + any_character_situation = { + OR = { + this = situation:game_rule_extra_nomads_arabs + this = situation:game_rule_extra_nomads_sahel + this = situation:game_rule_extra_nomads_horn + this = situation:game_rule_extra_nomads_sami + this = situation:game_rule_extra_nomads_tibet + } + } + factor = 0 + } + modifier = { + has_trait = zealous + factor = 0 + } + } + } + + option = { # Invite them to stay + name = nomad_events.0250.b + add_courtier = scope:priest + add_hook = { + type = obligation_hook + target = scope:priest + } + custom_tooltip = obligation_hook_tt + stress_impact = { + compassionate = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + shy = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = shy + has_trait = paranoid + has_trait = callous + } + factor = 0 + } + modifier = { + OR = { + has_trait = compassionate + has_trait = gregarious + } + factor = 2 + } + } + } + + option = { # Tell them to go away + name = nomad_events.0250.c + add_piety = minor_piety_gain + stress_impact = { + compassionate = medium_stress_impact_gain + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_loss + paranoid = medium_stress_impact_loss + callous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = gregarious + } + factor = 0 + } + modifier = { + OR = { + has_trait = shy + has_trait = callous + has_trait = paranoid + } + factor = 2 + } + } + } + + after = { + if = { + limit = { + scope:priest = { + NOT = { + is_courtier_of = root + } + } + } + hidden_effect = { + if = { + limit = { + is_ai = no + exists = scope:created_priest + } + scope:priest = { move_to_pool = yes } + } + else = { + scope:priest = { + death = { death_reason = death_mysterious } + } + } + } + } + } +} + +############################ +## Religious Matters +## 0260 +############################ + +scripted_trigger nomad_events_0260_ruler_trigger = { + is_ai = yes + is_ruler = yes + is_landed = yes + NOR = { + government_has_flag = government_is_nomadic + government_has_flag = government_is_herder + culture = root.culture + culture = root.capital_county.culture + faith = root.faith + faith = root.capital_county.faith + faith = { + has_doctrine_parameter = unreformed + } + } + highest_held_title_tier >= tier_kingdom + capital_province = { + squared_distance = { + target = root.capital_province + value <= squared_distance_massive + } + } +} + +nomad_events.0260 = { + type = character_event + title = nomad_events.0260.t + desc = nomad_events.0260.desc + theme = nomads + override_background = { reference = throne_room } + cooldown = { years = 25 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = zealous } + animation = anger + } + triggered_animation = { + trigger = { + OR = { + has_trait = sadistic + has_trait = torturer + has_trait = cynical + } + } + animation = dismissal + } + animation = interested + } + right_portrait = { + character = scope:priest + animation = obsequious_bow + } + + trigger = { + has_mpo_dlc_trigger = yes + government_has_flag = government_is_nomadic + is_available_adult = yes + is_landed = yes + any_ruler = { nomad_events_0260_ruler_trigger = yes } + } + + weight_multiplier = { + base = 1 + modifier = { # Tier instead of Dominance because people outside of the Steppe don't care for that + faith = { has_doctrine_parameter = unreformed } + highest_held_title_tier >= tier_kingdom + factor = 3 + } + modifier = { + faith = { has_doctrine_parameter = unreformed } + current_year > 1065 + factor = 2 + } + modifier = { + faith = { has_doctrine_parameter = unreformed } + current_year > 1150 + factor = 2 + } + modifier = { + is_ai = yes + NOT = { + faith = { + has_doctrine_parameter = unreformed + } + } + factor = 0.1 + } + } + + immediate = { + random_ruler = { + limit = { nomad_events_0260_ruler_trigger = yes } + weight = { + base = 1 + modifier = { # Catholics already end up in the Steppe + faith = faith:catholic + add = -250 + } + modifier = { # Hindus shouldn't end up in the Steppe + religion = religion:hinduism_religion + add = -100 + } + } + save_scope_as = other_ruler + primary_title = { save_scope_as = distant_realm } + } + create_character = { + location = root.location + template = priest_character_template + gender_female_chance = root_faith_clergy_gender_female_chance + faith = scope:other_ruler.faith + culture = scope:other_ruler.culture + save_scope_as = priest + } + hidden_effect = { + scope:other_ruler = { add_courtier = scope:priest } + } + } + + option = { # Imprison them + name = nomad_events.0260.a + trigger = { + OR = { + has_trait = sadistic + has_trait = callous + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + } + } + add_dread = medium_dread_gain + rightfully_imprison_character_less_verbose_effect = { + TARGET = scope:priest + IMPRISONER = root + } + stress_impact = { + sadistic = major_stress_impact_loss + callous = major_stress_impact_loss + torturer = major_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = compassionate + factor = 0 + } + modifier = { + OR = { + has_trait = sadistic + has_trait = callous + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_intimidation_focus } + } + factor = 2 + } + } + } + + option = { # Convert + name = nomad_events.0260.b + set_character_faith = scope:priest.faith + domicile = { set_domicile_faith = scope:priest.faith } + add_character_modifier = chosen_by_the_heavens_modifier + every_held_title = { + limit = { + tier = tier_county + is_landless_type_title = no + } + set_county_faith = scope:priest.faith + } + add_courtier = scope:priest + add_piety_level = 1 + stress_impact = { + zealous = massive_stress_impact_gain + cynical = minor_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + any_character_situation = { this = situation:the_great_steppe } + OR = { + scope:priest.faith = faith:orthodox + scope:priest.religion = religion:hinduism_religion + } + add = -30 + } + modifier = { + highest_held_title_tier >= tier_kingdom + faith = { + has_doctrine_parameter = unreformed + } + factor = 4 + } + modifier = { + current_year > 1065 + factor = 2 + } + modifier = { + current_year > 1150 + factor = 2 + } + modifier = { + has_trait = zealous + factor = 0 + } + modifier = { + scope:priest.faith = faith:catholic + any_character_situation = { + OR = { + this = situation:the_great_steppe + this = situation:game_rule_extra_nomads_sahel + this = situation:game_rule_extra_nomads_horn + this = situation:game_rule_extra_nomads_arabs + } + } + factor = 0 + } + modifier = { # Non-steppe regions are stickier and convert less freely + faith = { + NOT = { has_doctrine_parameter = unreformed } + } + any_character_situation = { + OR = { + this = situation:game_rule_extra_nomads_arabs + this = situation:game_rule_extra_nomads_sahel + this = situation:game_rule_extra_nomads_horn + this = situation:game_rule_extra_nomads_sami + this = situation:game_rule_extra_nomads_tibet + } + } + factor = 0 + } + } + } + + option = { # It's time to de-bate! + name = nomad_events.0260.c + duel = { + skill = learning + target = scope:priest + 10 = { # They are mega convinced + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = nomad_events.0260.c.tt.crit_success + send_interface_toast = { + title = nomad_events.0260.c.tt.crit_success + left_icon = scope:priest + add_learning_skill = 1 + add_learning_lifestyle_xp = major_lifestyle_xp + } + } + 40 = { # They are convinced + desc = nomad_events.0260.c.tt.success + send_interface_toast = { + title = nomad_events.0260.c.tt.success + left_icon = scope:priest + add_learning_lifestyle_xp = medium_lifestyle_xp + } + } + 40 = { # _You_ are convinced + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = nomad_events.0260.c.tt.failure + send_interface_toast = { + title = nomad_events.0260.c.tt.failure + left_icon = scope:priest + add_learning_lifestyle_xp = medium_lifestyle_xp + add_prestige = minor_piety_loss # Everyone saw you suck + } + } + } + stress_impact = { + cynical = medium_stress_impact_gain + stubborn = medium_stress_impact_loss + zealous = major_stress_impact_loss + theologian = major_stress_impact_loss + scholar = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = cynical + factor = 0 + } + modifier = { + OR = { + has_trait = stubborn + has_trait = zealous + has_trait = theologian + has_trait = scholar + } + factor = 2 + } + } + } + + option = { # Just go away + name = nomad_events.0260.d + add_dread = minor_dread_gain + stress_impact = { + compassionate = major_stress_impact_gain + gregarious = major_stress_impact_gain + shy = medium_stress_impact_loss + callous = medium_stress_impact_loss + paranoid = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = gregarious + } + factor = 0 + } + modifier = { + OR = { + has_trait = shy + has_trait = callous + has_trait = paranoid + } + factor = 2 + } + } + } + + after = { + hidden_effect = { + if = { + limit = { + is_ai = yes + NOT = { + scope:priest = { + is_courtier_of = root + } + } + } + scope:priest = { + death = { death_reason = death_mysterious } + } + } + } + } +} diff --git a/events/dlc/mpo/mpo_story_cycle_temujin_flavor_events.txt b/events/dlc/mpo/mpo_story_cycle_temujin_flavor_events.txt new file mode 100644 index 00000000..eecb3176 --- /dev/null +++ b/events/dlc/mpo/mpo_story_cycle_temujin_flavor_events.txt @@ -0,0 +1,835 @@ +namespace = mpo_temujin_flavor + +# mpo_temujin_flavor.0001 - Become Blood Brothers with Jamukha +# mpo_temujin_flavor.0010 - Jamukha stops being your vassal +# mpo_temujin_flavor.0020 - Jamukha becomes your rival +# mpo_temujin_flavor.0030 - Borte announces she's pregnant + +####################### +# Become Blood Brothers with Jamukha +####################### + +mpo_temujin_flavor.0001 = { + type = character_event + title = mpo_temujin_flavor.0001.t + desc = mpo_temujin_flavor.0001.desc + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = aggressive_dagger + } + right_portrait = { + character = scope:jamukha + animation = celebrate_dagger + } + + trigger = { + NOR = { + has_variable = had_mpo_temujin_flavor_0001 + has_variable = had_mpo_temujin_flavor_0010 + has_variable = had_mpo_temujin_flavor_0020 + } + is_physically_able = yes + character:mpo_mongol_1 = { + is_alive = yes + is_physically_able = yes + NOR = { + has_relation_blood_brother = root + has_relation_rival = root + } + } + } + + immediate = { + play_music_cue = "mx_cue_touching_moment" + set_variable = had_mpo_temujin_flavor_0001 + character:mpo_mongol_1 = { + save_scope_as = jamukha + save_scope_as = blood_bro + } + } + + option = { # Yay + name = mpo_temujin_flavor.0001.a + + if = { + limit = { + NOR = { + has_character_flag = had_warhorse_story + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + scope:jamukha = { + NOR = { + has_character_flag = had_warhorse_story + any_owned_story = { + story_type = story_cycle_martial_lifestyle_warhorse + exists = var:story_cycle_horse_name + } + } + } + } + custom_tooltip = temujin_warhorse_tt + custom_tooltip = jamukha_warhorse_tt + if = { + limit = { + scope:jamukha = { + is_ai = yes + } + } + hidden_effect = { + start_warhorse_story_cycle_effect = yes + } + } + if = { + limit = { + scope:jamukha = { + is_ai = yes + } + } + hidden_effect = { + scope:jamukha = { + start_warhorse_story_cycle_effect = yes + } + } + } + } + if = { + limit = { + scope:jamukha = { + is_ai = yes + } + } + set_relation_blood_brother = { + target = scope:jamukha + reason = blood_brother_temujin_jamukha + } + add_character_modifier = blood_brother_warrior_modifier + scope:jamukha = { + add_character_modifier = blood_brother_warrior_modifier + } + } + else = { + custom_tooltip = jamukha_choose_blood_brother_tt + save_scope_as = temujin + scope:jamukha = { + trigger_event = mpo_jamukha_flavor.0001 + } + show_as_tooltip = { + add_character_modifier = blood_brother_warrior_modifier + scope:jamukha = { + add_character_modifier = blood_brother_warrior_modifier + } + } + } + custom_tooltip = blood_brother_gains_hook_tt + custom_tooltip = blood_brother_gains_hook_other_tt + + stress_impact = { + gregarious = medium_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # Not a chance + name = mpo_temujin_flavor.0001.b + add_dread = minor_dread_gain + add_prestige = minor_prestige_gain + set_variable = rejected_jamukha_var + scope:jamukha = { + add_opinion = { + target = root + modifier = insult_opinion + opinion = -25 + } + } + stress_impact = { + base = minor_stress_impact_gain + callous = medium_stress_impact_loss + gregarious = medium_stress_impact_gain + } + + ai_chance = { + base = 0 + } + } + + after = { + hidden_effect = { + scope:jamukha = { + trigger_event = { + days = { 180 360 } + id = mpo_jamukha_flavor.0010 + } + } + + } + } +} + +####################### +# Jamukha stops being your vassal +####################### + +scripted_effect mpo_temujin_flavor_0010_jamukha_leaving_effect = { + if = { + limit = { scope:jamukha = { is_vassal_of = root } } + scope:jamukha = { + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + becomes_independent = { + change = scope:change + } + resolve_title_and_vassal_change = scope:change + } + } + else = { + scope:jamukha = { end_tributary = yes } + } + add_truce_both_ways = { + character = scope:jamukha + years = 5 + name = temujin_jamukha_truce + } + hidden_effect = { # This will put him closer to Temujin + scope:jamukha = { + if = { + limit = { + current_military_strength < scope:temujin.current_military_strength + } + domicile ?= { + change_herd = { + value = scope:temujin.domicile.herd + multiply = 0.5 + } + } + } + } + } + if = { + limit = { + exists = scope:togrul + } + scope:jamukha = { + custom_tooltip = negotiate_togrul_alliance_effect_tooltip + create_alliance = { + target = scope:togrul + allied_through_owner = scope:jamukha + allied_through_target = scope:togrul + } + hidden_effect = { + scope:togrul = { + add_opinion = { + target = scope:jamukha + modifier = event_negotiated_alliance_opinion + } + } + } + } + } +} + +mpo_temujin_flavor.0010 = { + type = character_event + title = mpo_temujin_flavor.0010.t + desc = { + desc = mpo_temujin_flavor.0010.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_variable = rejected_jamukha_var } + desc = mpo_temujin_flavor.0010.desc.rejected + } + triggered_desc = { + trigger = { has_relation_blood_brother = scope:jamukha } + desc = mpo_temujin_flavor.0010.desc.blood_brothers + } + desc = mpo_temujin_flavor.0010.desc.fallback + } + } + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = personality_vengeful + } + right_portrait = { + character = scope:jamukha + animation = schadenfreude + } + lower_right_portrait = scope:togrul + + trigger = { + has_variable = had_mpo_temujin_flavor_0001 + NOR = { + has_variable = had_mpo_temujin_flavor_0010 + has_variable = had_mpo_temujin_flavor_0020 + } + is_alive = yes + is_ruler = yes + character:mpo_mongol_1 = { + is_alive = yes + OR = { + is_vassal_of = root + is_tributary_of = root + } + } + } + + immediate = { + set_variable = { + name = had_mpo_temujin_flavor_0010 + value = character:mpo_mongol_1 + } + character:mpo_mongol_1 = { + save_scope_as = jamukha + } + mpo_temujin_flavor_0010_jamukha_leaving_effect = yes + } + + option = { # I will kill you + name = mpo_temujin_flavor.0010.aa + trigger = { dread >= 100 } + if = { + limit = { + has_relation_blood_brother = scope:jamukha + } + custom_tooltip = { + text = mpo_temujin_flavor.0010.aa_remove_blood_brother + remove_relation_blood_brother = scope:jamukha + } + } + scope:jamukha = { + add_dread = major_dread_loss + add_prestige = medium_prestige_loss + } + every_vassal = { + limit = { + has_vassal_stance = belligerent + is_obedient = no + } + custom = every_belligerent_vassal + add_opinion = { + modifier = obedience_opinion + target = root + } + } + every_courtier = { + limit = { + is_obedient = no + NOR = { + has_trait = brave + has_trait = compassionate + } + } + custom = every_non_brave_compassionate_courtier + add_opinion = { + modifier = obedience_opinion + target = root + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # Look at this clown + name = mpo_temujin_flavor.0010.a + duel = { + skill = diplomacy + target = scope:jamukha + 50 = { # Your people are impressed + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = mpo_temujin_flavor.0010.a.tt.success + send_interface_toast = { + title = mpo_temujin_flavor.0010.a.tt.success + left_icon = root + right_icon = scope:jamukha + add_prestige = medium_prestige_gain + scope:jamukha = { add_prestige = medium_prestige_loss } + } + } + 50 = { # No one is impressed + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = mpo_temujin_flavor.0010.a.tt.failure + send_interface_toast = { + title = mpo_temujin_flavor.0010.a.tt.failure + left_icon = root + add_prestige = minor_prestige_loss + } + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + callous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # Try to force him to stay + name = mpo_temujin_flavor.0010.b + add_dread = minor_dread_gain + scope:jamukha = { + add_opinion = { + target = root + modifier = hurt_opinion + opinion = -30 + } + } + stress_impact = { + callous = medium_stress_impact_loss + gregarious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Let him go + name = mpo_temujin_flavor.0010.c + scope:jamukha = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + stress_impact = { + generous = medium_stress_impact_loss + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + trigger_event = { + days = { 360 420 } + id = mpo_temujin_flavor.0020 + } + } + } +} + +####################### +# Jamukha becomes your rival -- now you must kill him +####################### + +mpo_temujin_flavor.0020 = { + type = character_event + title = mpo_temujin_flavor.0020.t + desc = { + desc = mpo_temujin_flavor.0020.desc.intro + first_valid = { + triggered_desc = { + trigger = { has_relation_blood_brother = scope:jamukha } + desc = mpo_temujin_flavor.0020.desc.blood_brothers + } + triggered_desc = { + trigger = { has_relation_friend = scope:jamukha } + desc = mpo_temujin_flavor.0020.desc.friend + } + triggered_desc = { + trigger = { has_relation_rival = scope:jamukha } + desc = mpo_temujin_flavor.0020.desc.rival + } + desc = mpo_temujin_flavor.0020.desc.fallback + } + desc = mpo_temujin_flavor.0020.desc.outro + } + theme = nomads + override_background = { + reference = mpo_campfire_steppe + } + left_portrait = { + character = root + animation = anger + outfit_tags = { nightgown } + camera = camera_event_very_left + } + right_portrait = { + character = scope:jamukha + animation = horse_conversing_left + camera = camera_event_horse_right + } + window = scheme_conclusion_event_no_header + + trigger = { + NOT = { has_variable = had_mpo_temujin_flavor_0020 } + OR = { + has_variable = had_mpo_temujin_flavor_0010 + AND = { + NOT = { has_variable = had_mpo_temujin_flavor_0010 } + character:mpo_mongol_1 = { + NOR = { + is_vassal_of = root + is_tributary = root + } + } + } + } + is_alive = yes + is_ruler = yes + character:mpo_mongol_1 = { + is_alive = yes + in_diplomatic_range = root + is_ruler = yes + } + } + + immediate = { + save_scope_as = temujin + play_music_cue = "mx_cue_murder" + set_variable = { + name = had_mpo_temujin_flavor_0020 + value = character:mpo_mongol_1 + } + character:mpo_mongol_1 = { + save_scope_as = jamukha + } + if = { + limit = { + current_military_strength < scope:jamukha.current_military_strength + } + domicile ?= { + change_herd = { + value = scope:jamukha.domicile.herd + multiply = 1.5 + } + } + add_prestige = major_prestige_gain # For MAA maintenance, mainly + custom_tooltip = temujin_gain_from_defectors_tt + } + if = { + limit = { + has_relation_blood_brother = scope:jamukha + } + scope:jamukha = { + add_character_flag = { + flag = was_temujins_bro + years = 30 + } + } + } + } + + option = { # You who I once called brother + name = mpo_temujin_flavor.0020.a + reason = blood_brother + add_internal_flag = special + trigger = { has_relation_blood_brother = scope:jamukha } + custom_tooltip = { + text = mpo_temujin_flavor.0020.a_war_win + set_variable = temujin_jamukha_war_var + } + add_character_modifier = { + modifier = temujin_jamukha_war_modifier + years = 5 + } + stress_impact = { + base = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Murderrrrrrr + name = mpo_temujin_flavor.0020.b + custom_tooltip = { + text = mpo_temujin_flavor.0020.b_murder + set_variable = { + name = temujin_jamukha_murder_var + value = scope:jamukha + } + } + stress_impact = { + deceitful = massive_stress_impact_loss + sadistic = massive_stress_impact_loss + } + ai_chance = { + base = 0 + } + } + + option = { # I'm going to crush your skull + name = mpo_temujin_flavor.0020.c + trigger = { + NOT = { has_relation_blood_brother = scope:jamukha } + } + add_character_modifier = { + modifier = temujin_jamukha_war_smaller_modifier + years = 5 + } + stress_impact = { + wrathful = massive_stress_impact_loss + vengeful = massive_stress_impact_loss + } + ai_chance = { + base = 100 + } + } + + after = { + if = { # Remove hooks + limit = { + scope:jamukha = { + has_hook = root + } + } + scope:jamukha = { remove_hook = { target = root } } + } + if = { + limit = { + has_hook = scope:jamukha + } + remove_hook = { target = scope:jamukha } + } + if = { # Remove Truce + limit = { + any_truce_target = { this = scope:jamukha } + } + cancel_truce_both_ways = scope:jamukha + } + custom_tooltip = mpo_temujin_flavor.0020.jamukha_gok_requirement + if = { + limit = { has_relation_blood_brother = scope:jamukha } + custom_tooltip = { + text = mpo_temujin_flavor.0010.aa_remove_blood_brother + remove_relation_blood_brother = scope:jamukha + } + } + else_if = { + limit = { has_relation_friend = scope:jamukha } + custom_tooltip = { + text = mpo_temujin_flavor.0020.remove_friend + remove_relation_friend = scope:jamukha + } + } + if = { + limit = { NOT = { has_relation_rival = scope:jamukha } } + set_relation_rival = { + target = scope:jamukha + reason = rival_temujin_jamukha + } + } + else_if = { + limit = { has_relation_rival = scope:jamukha } + set_relation_nemesis = { + target = scope:jamukha + reason = rival_temujin_jamukha + } + } + else = { + add_opinion = { + target = root + modifier = hate_opinion + opinion = -100 + } + } + custom_tooltip = { + text = mpo_temujin_flavor.0020.cb.tt + add_to_variable_list = { + name = retaliation_cb_var_list + target = scope:jamukha + } + scope:jamukha = { + add_to_variable_list = { + name = retaliation_cb_var_list + target = root + } + } + } + scope:jamukha = { + trigger_event = mpo_jamukha_flavor.0020 + } + } +} + +####################### +# Borte announces she's pregnant +####################### +mpo_temujin_flavor.0030 = { + type = character_event + title = mpo_temujin_flavor.0030.t + desc = mpo_temujin_flavor.0030.desc + theme = pregnancy + left_portrait = { + character = root + animation = anger + } + right_portrait = { + character = scope:borte + animation = worry + } + lower_right_portrait = scope:mergid + + trigger = { + NOT = { has_variable = had_mpo_temujin_flavor_0030 } # To make sure it triggers even if you migrate straight away and lose the event time window + character:172004 = { + is_alive = yes + is_spouse_of = root + is_pregnant = no + } + any_neighboring_top_liege_realm_owner = { + NOT = { has_relation_rival = root } + } + } + + immediate = { + play_music_cue = "mx_cue_personal_negative" + set_variable = had_mpo_temujin_flavor_0030 + character:172004 = { + save_scope_as = borte + } + if = { + limit = { + character:303116 = { + is_alive = yes + NOT = { has_relation_rival = root } + } + } + character:303116 = { + save_scope_as = mergid + } + } + else_if = { + limit = { + any_ruler = { + dynasty = dynasty:2001144 + NOT = { has_relation_rival = root } + } + } + random_ruler = { + limit = { + dynasty = dynasty:2001144 + NOT = { has_relation_rival = root } + } + save_scope_as = mergid + } + } + else = { + random_neighboring_top_liege_realm_owner = { + limit = { NOT = { has_relation_rival = root } } + save_scope_as = mergid + } + } + scope:borte = { + custom_tooltip = mpo_temujin_flavor.0030.pregnancy_tt + hidden_effect = { + make_pregnant = { + father = scope:mergid + } + } + set_variable = borte_first_child_var + } + } + + option = { # I hate those guys + name = mpo_temujin_flavor.0030.a + set_relation_rival = { + target = scope:mergid + reason = rival_temujin_mergid + } + custom_tooltip = { + text = mpo_temujin_flavor.0030.a.tt + add_to_variable_list = { + name = retaliation_cb_var_list + target = scope:mergid + } + } + add_dread = medium_dread_gain + stress_impact = { + vengeful = major_stress_impact_loss + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 0 # To prevent AI Temüjin from being murdered immediately + } + } + + option = { # Let's forget about that, you are more important + name = mpo_temujin_flavor.0030.b + if = { + limit = { + NOT = { has_relation_lover = scope:borte } + } + set_relation_lover = { + target = scope:borte + reason = lover_temujin_borte + } + } + else = { + scope:borte = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + } + set_relation_wedding_very_good_fertility = scope:borte + stress_impact = { + compassionate = major_stress_impact_loss + vengeful = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { # I could not care less + name = mpo_temujin_flavor.0030.c + scope:borte = { + add_opinion = { + target = root + modifier = upset_opinion + opinion = -25 + } + } + stress_impact = { + callous = major_stress_impact_loss + compassionate = major_stress_impact_gain + vengeful = major_stress_impact_gain + } + ai_chance = { + base = 0 + } + } +} + diff --git a/events/dlc/tgp/tgp_ceremonial_liege_events.txt b/events/dlc/tgp/tgp_ceremonial_liege_events.txt new file mode 100644 index 00000000..e57dbae5 --- /dev/null +++ b/events/dlc/tgp/tgp_ceremonial_liege_events.txt @@ -0,0 +1,1305 @@ +namespace = tgp_ceremonial_liege_events + +########################################################## +# Ceremonial Liege Events +# tgp_ceremonial_liege_events - 0001-0999 +# by Ariana Tranumn +########################################################## + +# A councillor sends out documents with both seals (Liege/Regent) +tgp_ceremonial_liege_events.0001 = { + type = character_event + title = tgp_ceremonial_liege_events.0001.t + desc = tgp_ceremonial_liege_events.0001.desc + + theme = court + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:councillor + animation = worry + } + + lower_center_portrait = scope:opposing_power + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + OR = { + tgp_is_ceremonial_regent_trigger = yes + tgp_is_ceremonial_liege_trigger = yes + } + has_councillor_for_skill = general + } + + immediate = { + tgp_save_opposing_power_effect = yes + random_councillor = { save_scope_as = councillor } + } + + # Have the documents recalled and revise + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { tgp_is_ceremonial_liege_trigger = yes } + desc = tgp_ceremonial_liege_events.0001.a_liege + } + desc = tgp_ceremonial_liege_events.0001.a_regent + } + } + } + + if = { + limit = { + has_legitimacy = yes + } + add_legitimacy = minor_legitimacy_gain + } + else = { + add_prestige = minor_prestige_gain + } + # If you are the liege, this should make the regent a bit upset, depending on their personality. + if = { + limit = { + tgp_is_ceremonial_liege_trigger = yes + } + remove_short_term_gold = medium_gold_value + if = { # They're not upset + limit = { + scope:opposing_power = { + OR = { + ai_vengefulness <= low_positive_ai_value + ai_honor >= medium_positive_ai_value + ai_diplomacy_stance = { + target = root + stance = friend + } + } + } + } + scope:opposing_power = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 15 + } + } + } + else_if = { # Slightly upset + limit = { + scope:opposing_power = { + OR = { + ai_vengefulness >= medium_positive_ai_value + ai_vengefulness <= low_positive_ai_value + ai_diplomacy_stance = { + target = root + stance = neutral + } + } + } + } + scope:opposing_power = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + } + else = { + scope:opposing_power = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -25 + } + } + } + } + # Otherwise, this should please the liege regardless + else = { + remove_short_term_gold = minor_gold_value + scope:opposing_power = { + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 15 + } + } + if = { + limit = { NOT = { has_trait = loyal } } + random = { + chance = 20 + add_trait = loyal + } + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + just = minor_stress_impact_loss + humble = minor_stress_impact_loss + content = minor_stress_impact_loss + honest = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_greed = -1 + } + modifier = { + add = 25 + + OR = { + has_trait = content + has_trait = honest + has_trait = humble + has_trait = just + } + } + modifier = { + add = -25 + + OR = { + has_trait = greedy + has_trait = arrogant + } + } + } + } + + # Ignore it, as if it never happened + option = { + name = tgp_ceremonial_liege_events.0001.b + + if = { # Regent might gain power for this at the cost of the opinion of the liege + limit = { + tgp_is_ceremonial_regent_trigger = yes + } + random_list = { + 50 = { + desc = tgp_ceremonial_liege_events.0001.b_a + show_chance = no + add_prestige = medium_prestige_gain + scope:opposing_power = { + add_opinion = { + target = root + modifier = angry_opinion + opinion = -30 + } + } + } + 50 = { + desc = tgp_ceremonial_liege_events.0001.b_b + show_chance = no + add_stress = minor_stress_impact_loss + } + } + } + else = { + random_list = { + 50 = { + desc = tgp_ceremonial_liege_events.0001.b_c + show_chance = no + add_prestige = minor_prestige_loss + scope:opposing_power = { + add_prestige = medium_prestige_gain + } + } + 50 = { + desc = tgp_ceremonial_liege_events.0001.b_b + show_chance = no + add_stress = minor_stress_impact_loss + } + } + } + + stress_impact = { + lazy = minor_stress_impact_loss + diligent = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_energy = -1 + } + modifier = { + add = 25 + has_trait = lazy + } + modifier = { + add = -25 + + OR = { + has_trait = diligent + has_trait = honest + } + } + } + } +} + +# You are extremely stressed, a spouse mentions giving power to the regent (Liege) +tgp_ceremonial_liege_events.0010 = { + type = character_event + title = tgp_ceremonial_liege_events.0010.t + desc = tgp_ceremonial_liege_events.0010.desc + + theme = court + cooldown = { years = 10 } + override_background = { + reference = bedchamber + } + + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:spouse + animation = stunned + } + + lower_center_portrait = scope:opposing_power + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + tgp_is_ceremonial_liege_trigger = yes + any_spouse = { is_available_adult = yes } + stress_level >= 1 + } + + immediate = { + tgp_save_opposing_power_effect = yes + ordered_spouse = { + limit = { is_available_adult = yes } + order_by = intrigue + save_scope_as = spouse + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 50 + stress_level >= 2 + } + modifier = { + add = 100 + stress_level >= 3 + } + } + + # Agree with your spouse, give them some power + option = { + name = tgp_ceremonial_liege_events.0010.a + trigger = { + NOT = { has_trait = paranoid } + } + show_as_unavailable = { always = yes } + + add_character_modifier = { + modifier = tgp_sharing_power_modifier + years = 5 + } + + progress_towards_friend_effect = { + CHARACTER = scope:spouse + OPINION = 25 + REASON = friend_took_lessons_to_heart + } + + stress_impact = { + humble = minor_stress_impact_loss + temperate = minor_stress_impact_loss + lazy = minor_stress_impact_loss + diligent = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + opinion_modifier = { + opinion_target = scope:opposing_power + multiplier = 2 + } + modifier = { + add = 25 + + OR = { + has_trait = temperate + has_trait = lazy + has_trait = humble + } + } + modifier = { + add = -25 + + OR = { + has_trait = diligent + has_trait = arrogant + } + } + } + } + + # Isolate yourself a bit to lose stress + option = { + name = tgp_ceremonial_liege_events.0010.b + + change_current_court_grandeur = minor_court_grandeur_loss + add_prestige = minor_prestige_loss + + random_list = { + 50 = { + show_chance = no + desc = tgp_ceremonial_liege_events.0010.b_a + send_interface_toast = { + type = event_toast_effect_good + title = tgp_ceremonial_liege_events.0010.b_a + left_icon = root + add_stress = massive_stress_loss + } + } + 100 = { + show_chance = no + desc = tgp_ceremonial_liege_events.0010.b_b + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_ceremonial_liege_events.0010.b_b + left_icon = root + add_stress = minor_stress_loss + } + } + } + + stress_impact = { + shy = minor_stress_impact_loss + gregarious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 0.5 + ai_sociability = -1 + } + opinion_modifier = { + opinion_target = scope:opposing_power + multiplier = -2 + } + modifier = { + add = 25 + has_trait = shy + } + modifier = { + add = -25 + has_trait = gregarious + } + } + } + + # Absolutely not! + option = { + name = tgp_ceremonial_liege_events.0010.c + + if = { + limit = { + government_has_flag = government_is_administrative + } + change_influence = medium_influence_gain + } + else = { + add_prestige = medium_prestige_gain + } + + stress_impact = { + base = major_stress_impact_gain + arrogant = minor_stress_impact_loss + humble = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 0.5 + } + opinion_modifier = { + opinion_target = scope:opposing_power + multiplier = -4 + } + modifier = { + add = 25 + has_trait = arrogant + } + modifier = { + add = -25 + has_trait = humble + } + } + } + + # You must be working with them... + option = { + name = tgp_ceremonial_liege_events.0010.d + trigger = { + OR = { + has_trait = paranoid + has_trait = lunatic + learning <= low_skill_rating + } + } + + duel = { + skill = intrigue + target = scope:spouse + desc = tgp_ceremonial_liege_events.0010.d_desc + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_ceremonial_liege_events.0010.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_ceremonial_liege_events.0010.tt.success + left_icon = root + right_icon = scope:spouse + stress_impact = { + base = major_stress_impact_loss + paranoid = minor_stress_impact_loss + } + add_hook = { + type = favor_hook + target = scope:opposing_power + } + progress_towards_rival_effect = { + REASON = rival_betrayed_friendship + CHARACTER = scope:spouse + OPINION = default_rival_opinion + } + } + } + 59 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_ceremonial_liege_events.0010.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_ceremonial_liege_events.0010.tt.failure + left_icon = root + right_icon = scope:spouse + add_prestige = miniscule_prestige_loss + scope:spouse = { + add_opinion = { + modifier = insulted_opinion + target = root + opinion = -15 + } + } + stress_impact = { + base = miniscule_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 150 + opinion_modifier = { + opinion_target = scope:opposing_power + multiplier = -2 + } + opinion_modifier = { + opinion_target = scope:spouse + multiplier = -2 + } + } + } +} + +scripted_trigger is_in_valid_activity_0020 = { + involved_activity ?= { + OR = { + has_activity_type = activity_feast + has_activity_type = activity_hunt + has_activity_type = activity_pilgrimage + has_activity_type = activity_festival + } + } + is_ai = yes +} + +# The liege/regent is in an activity which you were not invited to (Liege/Regent) +tgp_ceremonial_liege_events.0020 = { + type = character_event + title = tgp_ceremonial_liege_events.0020.t + desc = { + desc = tgp_ceremonial_liege_events.0020.desc + first_valid = { + triggered_desc = { + trigger = { + scope:opposing_power.involved_activity = { + has_activity_type = activity_feast + } + } + desc = tgp_ceremonial_liege_events.0020.desc_feast + } + triggered_desc = { + trigger = { + scope:opposing_power.involved_activity = { + has_activity_type = activity_hunt + } + } + desc = tgp_ceremonial_liege_events.0020.desc_hunt + } + triggered_desc = { + trigger = { + scope:opposing_power.involved_activity = { + has_activity_type = activity_pilgrimage + } + } + desc = tgp_ceremonial_liege_events.0020.desc_pilgrimage + } + triggered_desc = { + trigger = { + scope:opposing_power.involved_activity = { + has_activity_type = activity_festival + } + } + desc = tgp_ceremonial_liege_events.0020.desc_festival + } + } + desc = tgp_ceremonial_liege_events.0020.desc_end + } + + theme = realm + cooldown = { years = 20 } + + right_portrait = { + character = root + animation = thinking + } + + lower_center_portrait = scope:opposing_power + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + OR = { + AND = { + tgp_is_ceremonial_liege_trigger = yes + top_liege = { is_in_valid_activity_0020 = yes } + } + AND = { + tgp_is_ceremonial_regent_trigger = yes + primary_title.var:administrative_ui_special_title.holder = { is_in_valid_activity_0020 = yes } + } + } + } + + immediate = { + tgp_save_opposing_power_effect = yes + } + + # Be inspired to hold one of your own + option = { + name = tgp_ceremonial_liege_events.0020.a + custom_tooltip = tgp_ceremonial_liege_events.0020.a_desc + + if = { + limit = { scope:opposing_power.involved_activity = { has_activity_type = activity_feast } } + set_variable = { + name = tgp_ceremonial_liege_events_0020_discount + value = flag:feast + } + } + else_if = { + limit = { scope:opposing_power.involved_activity = { has_activity_type = activity_hunt } } + set_variable = { + name = tgp_ceremonial_liege_events_0020_discount + value = flag:hunt + } + } + else_if = { + limit = { scope:opposing_power.involved_activity = { has_activity_type = activity_pilgrimage } } + set_variable = { + name = tgp_ceremonial_liege_events_0020_discount + value = flag:pilgrimage + } + } + else_if = { + limit = { scope:opposing_power.involved_activity = { has_activity_type = activity_festival } } + set_variable = { + name = tgp_ceremonial_liege_events_0020_discount + value = flag:festival + } + } + + scope:opposing_power = { + add_opinion = { + modifier = annoyed_opinion + target = root + opinion = -15 + } + } + + stress_impact = { + base = minor_stress_impact_gain + ambitious = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + modifier = { + add = 25 + OR = { + has_trait = arrogant + has_trait = ambitious + has_trait = gregarious + } + } + modifier = { + add = -25 + has_trait = shy + } + } + } + + # Use the opportunity to shift power + option = { + name = tgp_ceremonial_liege_events.0020.b + + duel = { + skills = { diplomacy intrigue } + target = scope:opposing_power + desc = tgp_ceremonial_liege_events.0020.b.tt.desc + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_ceremonial_liege_events.0020.b.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_ceremonial_liege_events.0020.b.tt.success + left_icon = root + right_icon = scope:opposing_power + if = { + limit = { + has_legitimacy = yes + } + add_legitimacy = medium_legitimacy_gain + } + else = { + add_prestige = medium_prestige_gain + } + if = { + limit = { + government_has_flag = government_is_administrative + } + change_influence = minor_influence_gain + } + } + scope:opposing_power = { + add_character_modifier = { + modifier = tgp_power_undermined_modifier + years = 5 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_ceremonial_liege_events.0020.b.tt.failure + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_ceremonial_liege_events.0020.b.tt.failure + left_icon = root + right_icon = scope:opposing_power + progress_towards_rival_effect = { + REASON = rival_attempted_to_undermine + CHARACTER = scope:opposing_power + OPINION = -30 + } + add_prestige = minor_prestige_loss + add_stress = medium_stress_impact_gain + } + } + } + + stress_impact = { + ambitious = minor_stress_impact_loss + deceitful = minor_stress_impact_loss + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + loyal = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + modifier = { + add = 25 + OR = { + has_trait = deceitful + has_trait = ambitious + } + } + modifier = { + add = -25 + OR = { + has_trait = honest + has_trait = just + has_trait = loyal + } + } + } + } + + # Do nothing + option = { + name = tgp_ceremonial_liege_events.0020.c + + scope:opposing_power = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + + stress_impact = { + base = minor_stress_impact_loss + lazy = minor_stress_impact_loss + loyal = minor_stress_impact_loss + craven = minor_stress_impact_loss + arrogant = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + opinion_modifier = { + opinion_target = scope:opposing_power + multiplier = 2 + } + modifier = { + add = 25 + OR = { + has_trait = lazy + has_trait = loyal + has_trait = craven + } + } + modifier = { + add = -25 + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + } + } +} + +# A scholar writes down you and the liege is clearly favored (Liege/Regent) +tgp_ceremonial_liege_events.0030 = { + type = character_event + title = tgp_ceremonial_liege_events.0030.t + desc = { + desc = tgp_ceremonial_liege_events.0030.desc + first_valid = { + triggered_desc = { + trigger = { tgp_is_ceremonial_liege_trigger = yes } + desc = tgp_ceremonial_liege_events.0030.liege + } + triggered_desc = { + trigger = { tgp_is_ceremonial_regent_trigger = yes } + desc = tgp_ceremonial_liege_events.0030.regent + } + } + } + + theme = learning + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = reading + } + right_portrait = { + character = scope:scholar + animation = thinking + } + + lower_center_portrait = scope:opposing_power + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + OR = { + tgp_is_ceremonial_regent_trigger = yes + tgp_is_ceremonial_liege_trigger = yes + } + } + + immediate = { + tgp_save_opposing_power_effect = yes + ordered_courtier_or_guest = { + limit = { is_available_adult = yes } + order_by = learning + save_scope_as = scholar + } + } + + # Yeah go ahead and run it + option = { + name = tgp_ceremonial_liege_events.0030.a + + if = { + limit = { + tgp_is_ceremonial_liege_trigger = yes + } + scope:opposing_power = { + add_prestige = minor_prestige_loss + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -15 + } + } + } + else = { + add_prestige = minor_prestige_loss + add_character_modifier = { + modifier = tgp_spreading_scholarly_work_modifier + years = 5 + } + } + + ai_chance = { + base = 100 + modifier = { + tgp_is_ceremonial_liege_trigger = yes + factor = 2 + } + modifier = { + tgp_is_ceremonial_regent_trigger = yes + factor = 0.1 + } + } + } + + # That's not fair! + option = { + name = tgp_ceremonial_liege_events.0030.b + + duel = { + skill = learning + target = scope:scholar + desc = tgp_ceremonial_liege_events.0030.b_desc + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_ceremonial_liege_events.0030.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_ceremonial_liege_events.0030.tt.success + left_icon = root + right_icon = scope:scholar + scope:scholar = { + add_learning_skill = 1 + } + if = { + limit = { + tgp_is_ceremonial_liege_trigger = yes + } + scope:opposing_power = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + } + add_learning_lifestyle_xp = minor_lifestyle_xp + stress_impact = { + patient = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + calm = minor_stress_impact_loss + } + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_ceremonial_liege_events.0030.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_ceremonial_liege_events.0030.tt.failure + left_icon = root + right_icon = scope:scholar + stress_impact = { + base = minor_stress_impact_gain + wrathful = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + } + scope:scholar = { + add_stress = minor_stress_gain + add_opinion = { + modifier = annoyed_opinion + target = root + opinion = -15 + } + } + } + } + } + + + + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + OR = { + tgp_is_ceremonial_regent_trigger = yes + AND = { + tgp_is_ceremonial_liege_trigger = yes + ai_honor >= medium_positive_ai_value + } + } + factor = 2 + } + modifier = { + learning < scope:scholar.learning + factor = 0.25 + } + modifier = { + add = 25 + OR = { + has_trait = patient + has_trait = forgiving + has_trait = calm + } + } + modifier = { + add = -25 + OR = { + has_trait = vengeful + has_trait = wrathful + } + } + } + } + + # This is terrible + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { tgp_is_ceremonial_liege_trigger = yes } + desc = tgp_ceremonial_liege_events.0030.c_liege + } + desc = tgp_ceremonial_liege_events.0030.c_regent + } + } + } + custom_tooltip = tgp_ceremonial_liege_events.0030.c_tt + + scope:scholar = { + add_prestige = minor_prestige_loss + add_opinion = { + target = root + modifier = cruelty_opinion + opinion = -15 + } + } + + if = { + limit = { + tgp_is_ceremonial_liege_trigger = yes + } + scope:opposing_power = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + wrathful = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + forgiving = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + AND = { + tgp_is_ceremonial_liege_trigger = yes + ai_vengefulness >= medium_positive_ai_value + } + factor = 2 + } + modifier = { + add = 25 + OR = { + has_trait = arrogant + has_trait = paranoid + has_trait = wrathful + has_trait = vengeful + } + } + modifier = { + add = -25 + OR = { + has_trait = forgiving + has_trait = compassionate + has_trait = calm + } + } + } + } +} + +# People are questioning why you are even ruled over by your vassal at all (Regent) +tgp_ceremonial_liege_events.0040 = { + type = character_event + title = tgp_ceremonial_liege_events.0040.t + desc = tgp_ceremonial_liege_events.0040.desc + + theme = realm + cooldown = { years = 30 } + override_background = { reference = council_chamber } + + left_portrait = { + character = root + animation = interested_left + } + right_portrait = { + character = scope:inquirer + animation = storyteller + } + + lower_center_portrait = scope:opposing_power + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + tgp_is_ceremonial_regent_trigger = yes + any_courtier = { + is_available_adult = yes + opinion = { + target = root + value >= 15 + } + } + } + + immediate = { + tgp_save_opposing_power_effect = yes + ordered_courtier = { + limit = { + is_available_adult = yes + opinion = { + target = root + value >= 15 + } + } + order_by = diplomacy + save_scope_as = inquirer + } + } + + + # Convince them it's a facade + option = { + name = tgp_ceremonial_liege_events.0040.a + + duel = { + skill = diplomacy + target = scope:inquirer + desc = tgp_ceremonial_liege_events.0040.a_desc + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_ceremonial_liege_events.0040.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_ceremonial_liege_events.0040.tt.success + left_icon = root + right_icon = scope:inquirer + add_prestige = major_prestige_gain + scope:inquirer = { + add_opinion = { + modifier = respect_opinion + target = root + opinion = 15 + } + } + } + } + 59 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_ceremonial_liege_events.0040.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_ceremonial_liege_events.0040.tt.failure + left_icon = root + right_icon = scope:inquirer + scope:inquirer = { + add_opinion = { + modifier = suspicion_opinion + target = root + opinion = -15 + } + } + if = { + limit = { + faith = { trait_is_virtue = honest } + } + add_piety = minor_piety_loss + } + stress_impact = { + base = medium_stress_impact_gain + } + } + } + } + + stress_impact = { + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_rationality = -1 + } + modifier = { + add = 25 + OR = { + has_trait = deceitful + has_trait = arrogant + } + } + modifier = { + add = -25 + OR = { + has_trait = honest + has_trait = just + } + } + } + } + + # Give them a logical explanation + option = { + name = tgp_ceremonial_liege_events.0040.b + custom_tooltip = tgp_ceremonial_liege_events.0040.b_desc + + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + add_prestige = minor_prestige_gain + if = { + limit = { + faith = { trait_is_virtue = honest } + } + add_piety = minor_piety_gain + } + + stress_impact = { + just = minor_stress_impact_loss + humble = minor_stress_impact_loss + honest = minor_stress_impact_loss + deceitful = minor_stress_impact_gain + arrogant = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + add = 25 + OR = { + has_trait = humble + has_trait = honest + has_trait = just + } + } + modifier = { + add = -25 + has_trait = deceitful + } + modifier = { + add = 50 + has_trait = arrogant + } + } + } +} \ No newline at end of file diff --git a/events/dlc/tgp/tgp_child_personality_events.txt b/events/dlc/tgp/tgp_child_personality_events.txt new file mode 100644 index 00000000..d41717f7 --- /dev/null +++ b/events/dlc/tgp/tgp_child_personality_events.txt @@ -0,0 +1,8001 @@ +namespace = tgp_child_personality + +#arrogant, compassionate or callous +tgp_child_personality.0002 = { + type = character_event + title = tgp_child_personality.0002.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + exists = scope:guardian + } + desc = tgp_child_personality.0002.guardian + } + desc = tgp_child_personality.0002.no_guardian + } + } + theme = education + override_background = alley_day + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:poor_fellow + animation = beg + outfit_tags = { beggar_rags } + camera = camera_event_standing_with_horse_right + hide_info = yes + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = arrogant + has_trait = humble + } + OR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = arrogant + has_trait = compassionate + has_trait = callous + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = arrogant + has_trait = compassionate + has_trait = callous + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = compassionate_trait_more_common + } + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + + immediate = { + save_scope_as = child + if = { + limit = { + any_relation = { + type = guardian + is_available = yes + } + } + random_relation = { + type = guardian + save_scope_as = guardian + } + } + else = { + court_owner.court_position:court_tutor_court_position ?= { + save_scope_as = guardian + } + } + create_character = { + template = generic_peasant_character + gender_female_chance = 0 + location = root.location + save_scope_as = poor_fellow + } + } + + option = { + name = tgp_child_personality.0002.a + trigger = { + NOR = { + has_trait = arrogant + has_trait = humble + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = arrogant } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = humble } + } + } + add_trait = arrogant + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1021 } + } + } + + option = { + name = tgp_child_personality.0002.b + trigger = { + NOR = { + has_trait = callous + has_trait = compassionate + has_trait = sadistic + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = compassionate } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_2_trait = { + TRAIT = callous + TRAIT_2 = sadistic + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = compassionate_trait_more_common + } + } + } + add_trait = compassionate + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1022 } + } + } + + option = { + name = tgp_child_personality.0002.c + trigger = { + NOR = { + has_trait = callous + has_trait = compassionate + has_trait = sadistic + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_2_trait = { + TRAIT = callous + TRAIT_2 = sadistic + } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = compassionate } + } + } + add_trait = callous + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1023 } + } + } + after = { + scope:poor_fellow = { + silent_disappearance_effect = yes + } + } +} + +#deceitful, honest or humble +tgp_child_personality.0003 = { + type = character_event + title = tgp_child_personality.0003.t + desc = tgp_child_personality.0003.desc + theme = education + override_background = feast_event + left_portrait = { + character = root + animation = shame + } + right_portrait = { + character = scope:guardian + animation = storyteller + } + + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = deceitful + has_trait = honest + } + OR = { + has_trait = humble + has_trait = arrogant + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = deceitful + has_trait = honest + has_trait = humble + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = deceitful + has_trait = honest + has_trait = humble + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = humble_trait_more_common + } + NOR = { + has_trait = humble + has_trait = arrogant + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = honest_trait_more_common + } + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + } + + option = { + name = tgp_child_personality.0003.a + trigger = { + NOR = { + has_trait = deceitful + has_trait = honest + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = deceitful } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = honest } + } + } + add_trait = deceitful + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1031 } + } + } + + option = { + name = tgp_child_personality.0003.b + trigger = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = honest } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = deceitful } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = honest_trait_more_common + } + } + } + add_trait = honest + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1032 } + } + } + + option = { + name = tgp_child_personality.0003.c + trigger = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = humble } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = arrogant } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = humble_trait_more_common + } + } + } + add_trait = humble + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1033 } + } + } +} + +#generous, diligent or patient +tgp_child_personality.0004 = { + type = character_event + title = tgp_child_personality.0004.t + desc = tgp_child_personality.0004.desc + theme = education + + left_portrait = { + character = root + animation = boredom + } + + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = generous + has_trait = greedy + } + OR = { + has_trait = diligent + has_trait = lazy + } + OR = { + has_trait = patient + has_trait = impatient + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = generous + has_trait = diligent + has_trait = patient + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = generous + has_trait = diligent + has_trait = patient + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = diligent_trait_more_common + } + NOR = { + has_trait = diligent + has_trait = lazy + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = patient_trait_more_common + } + NOR = { + has_trait = patient + has_trait = impatient + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = generous_trait_more_common + } + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + } + + option = { + name = tgp_child_personality.0004.a + trigger = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = generous } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = greedy } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = generous_trait_more_common + } + } + } + add_trait = generous + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1041 } + } + } + + option = { + name = tgp_child_personality.0004.b + trigger = { + NOR = { + has_trait = diligent + has_trait = lazy + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = diligent } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = lazy } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = diligent_trait_more_common + } + } + } + add_trait = diligent + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1042 } + } + } + + option = { + name = tgp_child_personality.0004.c + trigger = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = patient } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = impatient } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = patient_trait_more_common + } + } + } + add_trait = patient + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1043 } + } + } +} + +#just, cynical or temperate +tgp_child_personality.0007 = { + type = character_event + title = tgp_child_personality.0007.t + desc = tgp_child_personality.0007.desc + theme = education + override_background = tgp_kitchen_asia + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:gluttonous_servant + animation = sick_stomach + camera = camera_event_scheme_vs_right_look_right + hide_info = yes + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = just + has_trait = arbitrary + } + OR = { + has_trait = cynical + has_trait = trusting + } + OR = { + has_trait = temperate + has_trait = gluttonous + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = just + has_trait = cynical + has_trait = temperate + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = just + has_trait = cynical + has_trait = temperate + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = just_trait_more_common + } + NOR = { + has_trait = just + has_trait = arbitrary + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = temperate_trait_more_common + } + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + location = root.location + save_scope_as = gluttonous_servant + trait = gluttonous + trait = drunkard + after_creation = { + change_current_weight = 150 + } + } + } + + option = { + name = tgp_child_personality.0007.a + trigger = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = just } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = arbitrary } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = just_trait_more_common + } + } + } + add_trait = just + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1071 } + } + } + + option = { + name = tgp_child_personality.0007.b + trigger = { + NOR = { + has_trait = cynical + has_trait = trusting + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = cynical } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = trusting } + } + } + add_trait = cynical + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1072 } + } + } + + option = { + name = tgp_child_personality.0007.c + trigger = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = temperate } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = gluttonous } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = temperate_trait_more_common + } + } + } + add_trait = temperate + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1073 } + } + } + after = { + scope:gluttonous_servant = { + silent_disappearance_effect = yes + } + } +} + +#brave, calm or zealous +tgp_child_personality.0009 = { + type = character_event + title = tgp_child_personality.0009.t + desc = tgp_child_personality.0009.desc + theme = education + override_background = bedchamber + left_portrait = { + character = root + animation = nervous + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = brave + has_trait = craven + } + OR = { + has_trait = calm + has_trait = wrathful + } + OR = { + has_trait = zealous + has_trait = cynical + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = brave + has_trait = calm + has_trait = zealous + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = brave + has_trait = calm + has_trait = zealous + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = zealous_trait_more_common + } + NOR = { + has_trait = zealous + has_trait = cynical + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = calm_trait_more_common + } + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + + immediate = { + save_scope_as = child + } + + option = { + name = tgp_child_personality.0009.a + trigger = { + NOR = { + has_trait = brave + has_trait = craven + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = brave } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = craven } + } + } + add_trait = brave + + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1091 } + } + } + + option = { + name = tgp_child_personality.0009.b + trigger = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = calm } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = wrathful } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = calm_trait_more_common + } + } + } + add_trait = calm + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1092 } + } + } + + option = { + name = tgp_child_personality.0009.c + trigger = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = zealous } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = cynical } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = zealous_trait_more_common + } + } + } + add_trait = zealous + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1093 } + } + } +} + +#ambitious, sadistic or paranoid +tgp_child_personality.0010 = { + type = character_event + title = tgp_child_personality.0010.t + desc = tgp_child_personality.0010.desc + theme = education + override_effect_2d = { reference = legend_glow } + + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:guardian + animation = war_over_win + camera = camera_event_scheme_far_right + } + + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = ambitious + has_trait = content + } + OR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + OR = { + has_trait = paranoid + has_trait = trusting + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = ambitious + has_trait = sadistic + has_trait = paranoid + } + } + } + modifier = { + add = 2 + NOT = { + any_relation = { + type = guardian + } + } + court_owner.court_position:court_tutor_court_position ?= { + OR = { + has_trait = ambitious + has_trait = sadistic + has_trait = paranoid + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = ambitious_trait_more_common + } + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + } + + option = { + name = tgp_child_personality.0010.a + trigger = { + NOR = { + has_trait = ambitious + has_trait = content + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = ambitious } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = content } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = ambitious_trait_more_common + } + } + } + add_trait = ambitious + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1101 } + } + } + + option = { + name = tgp_child_personality.0010.b + trigger = { + NOR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + } + ai_chance = { + base = 0.25 + modifier = { + add = 2 + guardian_or_court_tutor_trait = { TRAIT = sadistic } + } + modifier = { + add = 500 #To be sure this happens if they're marked for it + has_character_flag = marked_for_sadistic_in_yearly_4021 + } + } + add_trait = sadistic + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1102 } + } + } + + option = { + name = tgp_child_personality.0010.c + trigger = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + guardian_or_court_tutor_trait = { TRAIT = paranoid } + } + modifier = { + add = -0.5 + guardian_or_court_tutor_trait = { TRAIT = trusting } + } + } + add_trait = paranoid + if = { + limit = { + is_ai = yes + } + guardian_or_court_tutor_trigger_event = { EVENT = tgp_child_personality.1103 } + } + } +} + +#diligent, gregarious, temperate +tgp_child_personality.7000 = { + type = character_event + title = tgp_child_personality.7000.t + desc = tgp_child_personality.7000.desc + theme = education + override_background = corridor_day + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:guardian + animation = personality_cynical + } + + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = lazy + has_trait = diligent + } + OR = { + has_trait = shy + has_trait = gregarious + } + OR = { + has_trait = gluttonous + has_trait = temperate + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = diligent + has_trait = gregarious + has_trait = temperate + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = temperate_trait_more_common + } + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = diligent_trait_more_common + } + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + } + + option = { # diligent + name = tgp_child_personality.7000.a + trigger = { + NOR = { + has_trait = lazy + has_trait = diligent + } + } + add_trait = diligent + if = { + limit = { + is_ai = yes + } + add_character_flag = diligent + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7001 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = diligent + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = diligent_trait_more_common + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = lazy + } + } + } + } + + option = { # gregarious + name = tgp_child_personality.7000.b + trigger = { + NOR = { + has_trait = shy + has_trait = gregarious + } + } + add_trait = gregarious + if = { + limit = { + is_ai = yes + } + add_character_flag = gregarious + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7001 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = gregarious + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = shy + } + } + } + } + + option = { # temperate + name = tgp_child_personality.7000.c + trigger = { + NOR = { + has_trait = gluttonous + has_trait = temperate + } + } + add_trait = temperate + if = { + limit = { + is_ai = yes + } + add_character_flag = temperate + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7001 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = temperate + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = gluttonous + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = temperate_trait_more_common + } + } + } + } +} + +#eccentric, compassionate, callous +tgp_child_personality.7300 = { + type = character_event + title = tgp_child_personality.7300.t + desc = tgp_child_personality.7300.desc + theme = education + override_background = tgp_garden_asia + left_portrait = { + character = root + animation = interested + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = eccentric + has_trait = stubborn + has_trait = fickle + } + OR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = eccentric + has_trait = gregarious + has_trait = compassionate + } + } + } + } + + immediate = { + save_scope_as = child + } + + option = { # eccentric, I can talk to animals + name = tgp_child_personality.7300.a + trigger = { + NOR = { + has_trait = eccentric + has_trait = fickle + has_trait = stubborn + } + } + add_trait = eccentric + + if = { + limit = { + is_ai = yes + } + add_character_flag = eccentric + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7301 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = eccentric + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + OR = { + has_trait = fickle + has_trait = stubborn + } + } + } + } + } + + option = { # compassionate, I just love animals + name = tgp_child_personality.7300.b + trigger = { + NOR = { + has_trait = compassionate + has_trait = sadistic + has_trait = callous + } + } + add_trait = compassionate + + if = { + limit = { + is_ai = yes + } + add_character_flag = compassionate + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7301 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = compassionate + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + OR = { + has_trait = sadistic + has_trait = callous + } + } + } + } + } + + option = { # callous, they are boring and predictable, much like people + name = tgp_child_personality.7300.c + trigger = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + add_trait = callous + + if = { + limit = { + is_ai = yes + } + add_character_flag = callous + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7301 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = callous + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = compassionate + } + } + } + } +} + +#zealous, ambitious, sadistic +tgp_child_personality.7010 = { + type = character_event + title = tgp_child_personality.7010.t + desc = tgp_child_personality.7010.desc + theme = education + override_background = corridor_day + left_portrait = { + character = root + animation = shock + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = zealous + has_trait = cynical + } + OR = { + has_trait = ambitious + has_trait = content + } + OR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = zealous + has_trait = ambitious + has_trait = sadistic + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = zealous_trait_more_common + } + NOR = { + has_trait = zealous + has_trait = cynical + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = ambitious_trait_more_common + } + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + + immediate = { + save_scope_as = child + } + + option = { # zealous + name = tgp_child_personality.7010.a + trigger = { + NOR = { + has_trait = cynical + has_trait = zealous + } + } + add_trait = zealous + if = { + limit = { + is_ai = yes + } + add_character_flag = zealous + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7011 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = zealous + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = cynical + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = zealous_trait_more_common + } + } + } + } + + option = { # ambitious + name = tgp_child_personality.7010.b + trigger = { + NOR = { + has_trait = content + has_trait = ambitious + } + } + add_trait = ambitious + if = { + limit = { + is_ai = yes + } + add_character_flag = ambitious + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7011 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = ambitious + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = content + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = ambitious_trait_more_common + } + } + } + } + + option = { # sadistic + name = tgp_child_personality.7010.c + trigger = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + add_trait = sadistic + if = { + limit = { + is_ai = yes + } + add_character_flag = sadistic + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7011 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = sadistic + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = compassionate + } + } + } + } +} + +#shy, paranoid, craven +tgp_child_personality.7020 = { + type = character_event + title = tgp_child_personality.7020.t + desc = tgp_child_personality.7020.desc + theme = education + override_background = tgp_courtyard_asia + left_portrait = { + character = scope:eyes + animation = personality_zealous + camera = camera_event_right_massive_head + hide_info = yes + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = shy + has_trait = gregarious + } + OR = { + has_trait = paranoid + has_trait = trusting + } + OR = { + has_trait = craven + has_trait = brave + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = shy + has_trait = paranoid + has_trait = craven + } + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + location = root.location + save_scope_as = eyes + } + } + + option = { # shy + name = tgp_child_personality.7020.a + trigger = { + NOR = { + has_trait = shy + has_trait = gregarious + } + } + add_trait = shy + if = { + limit = { + is_ai = yes + } + add_character_flag = shy + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7021 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = shy + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = gregarious + } + } + } + } + + option = { # paranoid + name = tgp_child_personality.7020.b + trigger = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + add_trait = paranoid + if = { + limit = { + is_ai = yes + } + add_character_flag = paranoid + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7021 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = paranoid + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = trusting + } + } + } + } + + option = { # craven + name = tgp_child_personality.7020.c + trigger = { + NOR = { + has_trait = craven + has_trait = brave + } + } + add_trait = craven + if = { + limit = { + is_ai = yes + } + add_character_flag = craven + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7021 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = craven + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = brave + } + } + } + } + after = { + scope:eyes = { + silent_disappearance_effect = yes + } + } +} + +#just, greedy, callous +tgp_child_personality.7050 = { + type = character_event + title = tgp_child_personality.7050.t + desc = tgp_child_personality.7050.desc + theme = education + override_background = tgp_market_asia + left_portrait = { + character = root + animation = ecstasy + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = just + has_trait = arbitrary + } + OR = { + has_trait = greedy + has_trait = generous + } + OR = { + has_trait = callous + has_trait = compassionate + has_trait = sadistic + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = just + has_trait = greedy + has_trait = callous + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = just_trait_more_common + } + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + + immediate = { + save_scope_as = child + } + + option = { # just + name = tgp_child_personality.7050.a + trigger = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + add_trait = just + + if = { + limit = { + is_ai = yes + } + add_character_flag = just + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7051 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = just + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = arbitrary + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = just_trait_more_common + } + } + } + } + + option = { # greedy + name = tgp_child_personality.7050.b + trigger = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + add_trait = greedy + + if = { + limit = { + is_ai = yes + } + add_character_flag = greedy + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7051 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = greedy + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = generous + } + } + } + } + + option = { # callous + name = tgp_child_personality.7050.c + trigger = { + NOR = { + has_trait = callous + has_trait = compassionate + has_trait = sadistic + } + } + add_trait = callous + + if = { + limit = { + is_ai = yes + } + add_character_flag = callous + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7051 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = callous + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + } +} + +#brave, stubborn, wrathful +tgp_child_personality.7200 = { + type = character_event + title = tgp_child_personality.7200.t + desc = tgp_child_personality.7200.desc + theme = education + override_background = tgp_market_asia + left_portrait = { + character = root + animation = stunned + camera = camera_hud + } + right_portrait = { + character = scope:alarmed_servant + animation = fear + camera = camera_event_table_center_background + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = brave + has_trait = craven + } + OR = { + has_trait = stubborn + has_trait = fickle + } + OR = { + has_trait = wrathful + has_trait = calm + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = brave + has_trait = stubborn + has_trait = wrathful + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = stubborn_trait_more_common + } + NOR = { + has_trait = stubborn + has_trait = fickle + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + location = root.location + save_scope_as = alarmed_servant + } + } + + option = { # brave + name = tgp_child_personality.7200.a + trigger = { + NOR = { + has_trait = brave + has_trait = craven + } + } + add_trait = brave + + if = { + limit = { + is_ai = yes + } + add_character_flag = brave + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7201 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = brave + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = craven + } + } + } + } + + option = { # stubborn + name = tgp_child_personality.7200.b + trigger = { + NOR = { + has_trait = fickle + has_trait = stubborn + } + } + add_trait = stubborn + + if = { + limit = { + is_ai = yes + } + add_character_flag = stubborn + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7201 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = stubborn + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = fickle + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = stubborn_trait_more_common + } + } + } + } + + option = { # wrathful + name = tgp_child_personality.7200.c + trigger = { + NOR = { + has_trait = wrathful + has_trait = calm + } + } + add_trait = wrathful + + if = { + limit = { + is_ai = yes + } + add_character_flag = wrathful + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7201 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = wrathful + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = calm + } + } + } + } + after = { + scope:alarmed_servant = { + silent_disappearance_effect = yes + } + } +} + +#vengeful, deceitful, calm +tgp_child_personality.7070 = { + type = character_event + title = tgp_child_personality.7070.t + desc = tgp_child_personality.7070.desc + theme = education + override_background = tgp_feast_asia + left_portrait = { + character = scope:guardian + animation = rage + camera = camera_event_group_talking_left_left + } + right_portrait = { + character = scope:servant + animation = prostration + hide_info = yes + } + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = vengeful + has_trait = forgiving + } + OR = { + has_trait = deceitful + has_trait = honest + } + OR = { + has_trait = calm + has_trait = wrathful + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = vengeful + has_trait = deceitful + has_trait = calm + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = vengeful_trait_more_common + } + NOR = { + has_trait = vengeful + has_trait = forgiving + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = calm_trait_more_common + } + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + create_character = { + template = merchant_template + age = { 40 60 } + location = root.location + save_scope_as = servant + } + } + + option = { # vengeful + name = tgp_child_personality.7070.a + trigger = { + NOR = { + has_trait = vengeful + has_trait = forgiving + } + } + add_trait = vengeful + + if = { + limit = { + is_ai = yes + } + add_character_flag = vengeful + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7071 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = vengeful + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = forgiving + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = vengeful_trait_more_common + } + } + } + } + + option = { # deceitful + name = tgp_child_personality.7070.b + trigger = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + add_trait = deceitful + + if = { + limit = { + is_ai = yes + } + add_character_flag = deceitful + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7071 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = deceitful + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = honest + } + } + } + } + + option = { # calm + name = tgp_child_personality.7070.c + trigger = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + add_trait = calm + + if = { + limit = { + is_ai = yes + } + add_character_flag = calm + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7071 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = calm + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = wrathful + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = calm_trait_more_common + } + } + } + } + after = { + scope:servant = { + silent_disappearance_effect = yes + } + } +} + +#lustful, chaste +tgp_child_personality.7040 = { + type = character_event + title = tgp_child_personality.7040.t + desc = tgp_child_personality.7040.desc + theme = education + override_background = { reference = bedchamber } + left_portrait = { + character = root + animation = reading + } + + trigger = { + is_available_child_allow_travel = yes + age >= 13 #Because chaste/lustful are only given at age 13 + NOR = { + has_trait = chaste + has_trait = lustful + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = lustful + has_trait = chaste + } + } + } + modifier = { + factor = 0.5 + culture = { + has_cultural_parameter = lustful_trait_less_common + } + } + } + + immediate = { + save_scope_as = child + } + + option = { # lustful + name = tgp_child_personality.7040.a + trigger = { + OR = { + is_ai = no + NOT = { exists = scope:child_crush_target } + } + } + add_trait = lustful + if = { + limit = { + is_ai = yes + } + add_character_flag = lustful + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7041 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = lustful + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = chaste + } + } + } + } + + option = { # chaste + name = tgp_child_personality.7040.b + add_trait = chaste + if = { + limit = { + is_ai = yes + } + add_character_flag = chaste + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7041 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = chaste + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = lustful + } + } + } + } +} + +#generous, fickle, arrogant +tgp_child_personality.7080 = { + type = character_event + title = tgp_child_personality.7080.t + desc = tgp_child_personality.7080.desc + theme = education + override_background = tgp_kitchen_asia + + left_portrait = { + character = root + animation = happiness + } + right_portrait = { + character = scope:greedy_child + animation = interested + camera = camera_event_standing_with_horse_right + hide_info = yes + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = generous + has_trait = greedy + } + OR = { + has_trait = fickle + has_trait = stubborn + has_trait = eccentric + } + OR = { + has_trait = arrogant + has_trait = humble + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = generous + has_trait = fickle + has_trait = arrogant + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = generous_trait_more_common + } + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 8 12 } + location = root.location + save_scope_as = greedy_child + } + } + + option = { # generous + name = tgp_child_personality.7080.a + trigger = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + add_trait = generous + + if = { + limit = { + is_ai = yes + } + add_character_flag = generous + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7081 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = generous + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = greedy + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = generous_trait_more_common + } + } + } + } + + option = { # fickle + name = tgp_child_personality.7080.b + trigger = { + NOR = { + has_trait = stubborn + has_trait = fickle + } + } + add_trait = fickle + + if = { + limit = { + is_ai = yes + } + add_character_flag = fickle + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7081 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = fickle + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = stubborn + } + } + } + } + + option = { # arrogant + name = tgp_child_personality.7080.c + trigger = { + NOR = { + has_trait = arrogant + has_trait = humble + } + } + add_trait = arrogant + + if = { + limit = { + is_ai = yes + } + add_character_flag = arrogant + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7081 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = arrogant + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = humble + } + } + } + } + after = { + scope:greedy_child = { + silent_disappearance_effect = yes + } + } +} + +#lazy, gluttonous, compassionate +tgp_child_personality.7030 = { + type = character_event + title = tgp_child_personality.7030.t + desc = tgp_child_personality.7030.desc + theme = education + override_background = corridor_day + left_portrait = { + character = root + animation = pondering + } + right_portrait = { + character = scope:clumsy_servant + animation = nervous + camera = camera_event_right_pointing_left_away + hide_info = yes + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = lazy + has_trait = diligent + } + OR = { + has_trait = gluttonous + has_trait = temperate + } + OR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = lazy + has_trait = gluttonous + has_trait = compassionate + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = compassionate_trait_more_common + } + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + gender_female_chance = { + if = { + limit = { + root = { + is_female = yes + } + } + add = 100 + } + else = { + add = 0 + } + } + location = root.location + save_scope_as = clumsy_servant + } + } + + option = { # lazy + name = tgp_child_personality.7030.a + trigger = { + NOR = { + has_trait = lazy + has_trait = diligent + } + } + add_trait = lazy + + if = { + limit = { + is_ai = yes + } + add_character_flag = lazy + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7031 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = lazy + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = diligent + } + } + } + } + + option = { # gluttonous + name = tgp_child_personality.7030.b + trigger = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + + add_trait = gluttonous + + if = { + limit = { + is_ai = yes + } + add_character_flag = gluttonous + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7031 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = gluttonous + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = temperate + } + } + } + } + + option = { # compassionate + name = tgp_child_personality.7030.c + trigger = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + add_trait = compassionate + + if = { + limit = { + is_ai = yes + } + add_character_flag = compassionate + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7031 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = compassionate + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = compassionate_trait_more_common + } + } + } + } + after = { + scope:clumsy_servant = { + silent_disappearance_effect = yes + } + } +} + +#forgiving, trusting, patient +tgp_child_personality.7090 = { + type = character_event + title = tgp_child_personality.7090.t + desc = tgp_child_personality.7090.desc + theme = education + left_portrait = { + character = root + animation = disappointed + } + right_portrait = { + character = scope:sorry_servant + animation = prostration + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = forgiving + has_trait = vengeful + } + OR = { + has_trait = trusting + has_trait = paranoid + } + OR = { + has_trait = patient + has_trait = impatient + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = forgiving + has_trait = trusting + has_trait = patient + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = patient_trait_more_common + } + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + gender_female_chance = { + if = { + limit = { + root = { + is_female = yes + } + } + add = 100 + } + else = { + add = 0 + } + } + location = root.location + save_scope_as = sorry_servant + } + } + + option = { # forgiving + name = tgp_child_personality.7090.a + trigger = { + NOR = { + has_trait = forgiving + has_trait = vengeful + } + } + add_trait = forgiving + + if = { + limit = { + is_ai = yes + } + add_character_flag = forgiving + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7091 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = forgiving + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = vengeful + } + } + } + } + + option = { # trusting + name = tgp_child_personality.7090.b + trigger = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + add_trait = trusting + + if = { + limit = { + is_ai = yes + } + add_character_flag = trusting + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7091 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = trusting + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = paranoid + } + } + } + } + + option = { # patient + name = tgp_child_personality.7090.c + trigger = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + add_trait = patient + + if = { + limit = { + is_ai = yes + } + add_character_flag = patient + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7091 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = patient + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = impatient + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = patient_trait_more_common + } + } + } + } + after = { + scope:sorry_servant = { + silent_disappearance_effect = yes + } + } +} + +#humble, cynical, content +tgp_child_personality.7060 = { + type = character_event + title = tgp_child_personality.7060.t + desc = tgp_child_personality.7060.desc + theme = education + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = disbelief + } + right_portrait = { + character = scope:sycophantic_servant + animation = admiration + } + + trigger = { + is_available_child_allow_travel = yes + NAND = { + OR = { + has_trait = humble + has_trait = arrogant + } + OR = { + has_trait = cynical + has_trait = zealous + } + OR = { + has_trait = content + has_trait = ambitious + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = humble + has_trait = cynical + has_trait = content + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = humble_trait_more_common + } + NOR = { + has_trait = humble + has_trait = arrogant + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = content_trait_more_common + } + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + + immediate = { + save_scope_as = child + create_character = { + template = merchant_template + age = { 40 60 } + location = root.location + save_scope_as = sycophantic_servant + } + } + + option = { # humble + name = tgp_child_personality.7060.a + trigger = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + add_trait = humble + + if = { + limit = { + is_ai = yes + } + add_character_flag = humble + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7061 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = humble + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = arrogant + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = humble_trait_more_common + } + } + } + } + + option = { # cynical + name = tgp_child_personality.7060.b + trigger = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + add_trait = cynical + + if = { + limit = { + is_ai = yes + } + add_character_flag = cynical + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7061 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = cynical + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = zealous + } + } + } + } + + option = { # content + name = tgp_child_personality.7060.c + trigger = { + NOR = { + has_trait = content + has_trait = ambitious + } + } + add_trait = content + + if = { + limit = { + is_ai = yes + } + add_character_flag = content + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7061 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = content + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = ambitious + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = content_trait_more_common + } + } + } + } + after = { + scope:sycophantic_servant = { + silent_disappearance_effect = yes + } + } +} + +#honest, arbitrary, impatient +tgp_child_personality.7100 = { + type = character_event + title = tgp_child_personality.7100.t + desc = tgp_child_personality.7100.desc + theme = education + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:guardian + animation = stressed_teacher + } + + trigger = { + is_available_child_allow_travel = yes + OR = { + any_relation = { + type = guardian + is_available = yes + } + exists = court_owner.court_position:court_tutor_court_position + exists = court_owner.court_position:court_guru_court_position + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + AND = { + host ?= { + any_courtier_or_guest = { + is_adult = yes + is_available = yes + } + } + } + } + NAND = { + OR = { + has_trait = honest + has_trait = deceitful + } + OR = { + has_trait = arbitrary + has_trait = just + } + OR = { + has_trait = impatient + has_trait = patient + } + } + is_valid_for_east_asian_events_trigger = yes + } + + weight_multiplier = { + base = 1 + modifier = { + add = 2 + any_relation = { + type = guardian + OR = { + has_trait = honest + has_trait = arbitrary + has_trait = impatient + } + } + } + modifier = { + add = 5 + culture = { + has_cultural_parameter = honest_trait_more_common + } + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + + immediate = { + save_scope_as = child + get_guardian_scope_effect = yes + } + + option = { # honest + name = tgp_child_personality.7100.a + trigger = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + add_trait = honest + + if = { + limit = { + is_ai = yes + } + add_character_flag = honest + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7101 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = honest + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = deceitful + } + } + modifier = { + add = 100 + culture = { + has_cultural_parameter = honest_trait_more_common + } + } + } + } + + option = { # arbitrary + name = tgp_child_personality.7100.b + trigger = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + add_trait = arbitrary + + if = { + limit = { + is_ai = yes + } + add_character_flag = arbitrary + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7101 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = arbitrary + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = just + } + } + } + } + + option = { # impatient + name = tgp_child_personality.7100.c + trigger = { + NOR = { + has_trait = impatient + has_trait = patient + } + } + add_trait = impatient + + if = { + limit = { + is_ai = yes + } + add_character_flag = impatient + random_relation = { + type = guardian + trigger_event = tgp_child_personality.7101 + } + } + ai_chance = { + base = 1 + modifier = { + add = 4 + any_relation = { + type = guardian + has_trait = impatient + } + } + modifier = { + add = -0.5 + any_relation = { + type = guardian + has_trait = patient + } + } + } + } +} + +#### +# GUARDIAN EVENTS +#### + +#Child has become arrogant +tgp_child_personality.1021 = { + type = character_event + title = tgp_child_personality.1021.t + desc = { + desc = tgp_child_personality.102.desc + desc = tgp_child_personality.102.arrogant + } + theme = education + left_portrait = { + character = scope:child + animation = dismissal + } + right_portrait = { + character = root + animation = worry + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + OR = { + has_trait = callous + has_trait = compassionate + } + } + } + } + + immediate = { + if = { + limit = { + court_owner ?= { + exists = capital_province + } + } + court_owner = { + capital_province = { + barony = { save_scope_as = court_location } + } + } + } + } + + option = { + name = tgp_child_personality.102.confirm_arrogant + custom_tooltip = child_personality.keeps_arrogant_tt + } + + option = { + name = tgp_child_personality.102.compassionate_change + trigger = { + scope:child = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = arrogant + add_trait_force_tooltip = compassionate + } + } + + option = { + name = tgp_child_personality.102.callous_change + trigger = { + scope:child = { + NOR = { + has_trait = callous + has_trait = compassionate + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = arrogant + add_trait_force_tooltip = callous + } + } +} + +#Child has become compassionate +tgp_child_personality.1022 = { + type = character_event + title = tgp_child_personality.1021.t + desc = { + desc = tgp_child_personality.102.desc + desc = tgp_child_personality.102.compassionate + } + theme = education + left_portrait = { + character = scope:child + animation = personality_compassionate + } + right_portrait = { + character = root + animation = personality_rational + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = arrogant + has_trait = humble + } + OR = { + has_trait = callous + has_trait = sadistic + } + } + } + } + + option = { + name = tgp_child_personality.102.confirm_compassionate + custom_tooltip = child_personality.keeps_compassionate_tt + } + + option = { + name = tgp_child_personality.102.arrogant_change + trigger = { + scope:child = { + NOR = { + has_trait = arrogant + has_trait = humble + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = compassionate + add_trait_force_tooltip = arrogant + } + } + + option = { + name = tgp_child_personality.102.callous_change + trigger = { + scope:child = { + NOR = { + has_trait = callous + has_trait = sadistic + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = compassionate + add_trait_force_tooltip = callous + } + } +} + +#Child has become callous +tgp_child_personality.1023 = { + type = character_event + title = tgp_child_personality.1021.t + desc = { + desc = tgp_child_personality.102.desc + desc = tgp_child_personality.102.callous + } + theme = education + override_background = { + reference = gallows + } + left_portrait = { + character = scope:child + animation = personality_callous + } + right_portrait = { + character = root + animation = worry + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = arrogant + has_trait = humble + } + OR = { + has_trait = sadistic + has_trait = compassionate + } + } + } + } + + option = { + name = tgp_child_personality.102.confirm_callous + custom_tooltip = child_personality.keeps_callous_tt + } + option = { + name = tgp_child_personality.102.arrogant_change + trigger = { + scope:child = { + NOR = { + has_trait = arrogant + has_trait = humble + } + } + } + scope:child = { + if = { + limit = { + NOT = { has_trait = arrogant } + } + add_trait = arrogant + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = callous + } + } + option = { + name = tgp_child_personality.102.compassionate_change + trigger = { + scope:child = { + NOR = { + has_trait = compassionate + has_trait = sadistic + } + } + } + scope:child = { + if = { + limit = { + NOT = { has_trait = compassionate } + } + add_trait = compassionate + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = callous + add_trait_force_tooltip = compassionate + } + } +} + +#Child has become deceitful +tgp_child_personality.1031 = { + type = character_event + title = tgp_child_personality.1031.t + desc = { + desc = tgp_child_personality.103.desc + desc = tgp_child_personality.103.deceitful + } + theme = education + left_portrait = { + character = scope:child + animation = personality_dishonorable + } + right_portrait = { + character = root + animation = worry + } + + trigger = { + scope:child = { + NAND = { + has_trait = honest + OR = { + has_trait = humble + has_trait = arrogant + } + } + } + } + + option = { + name = tgp_child_personality.103.confirm_deceitful + custom_tooltip = child_personality.keeps_deceitful_tt + } + + option = { + name = tgp_child_personality.103.honest_change + trigger = { + scope:child = { + NOT = { has_trait = honest } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = deceitful + add_trait_force_tooltip = honest + } + } + + option = { + name = tgp_child_personality.103.humble_change + trigger = { + scope:child = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = deceitful + add_trait_force_tooltip = humble + } + } +} + +#Child has become honest +tgp_child_personality.1032 = { + type = character_event + title = tgp_child_personality.1031.t + desc = { + desc = tgp_child_personality.103.desc + desc = tgp_child_personality.103.honest + } + theme = education + left_portrait = { + character = scope:child + animation = personality_honorable + } + right_portrait = { + character = root + animation = happiness + } + + trigger = { + scope:child = { + NAND = { + has_trait = deceitful + OR = { + has_trait = humble + has_trait = arrogant + } + } + } + } + + option = { + name = tgp_child_personality.103.confirm_honest + custom_tooltip = child_personality.keeps_honest_tt + } + + option = { + name = tgp_child_personality.103.deceitful_change + trigger = { + NOT = { + scope:child = { has_trait = deceitful } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = honest + add_trait_force_tooltip = deceitful + } + } + + option = { + name = tgp_child_personality.103.humble_change + trigger = { + scope:child = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = honest + add_trait_force_tooltip = humble + } + } +} + +#Child has become humble +tgp_child_personality.1033 = { + type = character_event + title = tgp_child_personality.1031.t + desc = { + desc = tgp_child_personality.103.desc + desc = tgp_child_personality.103.humble + } + theme = education + left_portrait = { + character = scope:child + animation = personality_forgiving + } + right_portrait = { + character = root + animation = happiness + } + + trigger = { + scope:child = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + + option = { + name = tgp_child_personality.103.confirm_humble + custom_tooltip = child_personality.keeps_humble_tt + } + + option = { + name = tgp_child_personality.103.deceitful_change + trigger = { + scope:child = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = humble + add_trait_force_tooltip = deceitful + } + } + + option = { + name = tgp_child_personality.103.honest_change + trigger = { + scope:child = { + NOR = { + has_trait = deceitful + has_trait = honest + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = humble + add_trait_force_tooltip = honest + } + } +} + +#Child has become generous +tgp_child_personality.1041 = { + type = character_event + title = tgp_child_personality.1041.t + desc = { + desc = tgp_child_personality.104.desc + desc = tgp_child_personality.104.generous + } + theme = education + + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:child + animation = personality_honorable + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = diligent + has_trait = lazy + } + OR = { + has_trait = patient + has_trait = impatient + } + } + } + } + + immediate = { + random_knight = { # Just for flavor + limit = { + is_available_ai_adult = yes + is_courtier = yes + } + save_scope_as = knight + } + } + + option = { + name = tgp_child_personality.104.confirm_generous + custom_tooltip = child_personality.keeps_generous_tt + } + + option = { + name = tgp_child_personality.104.diligent_change + trigger = { + scope:child = { + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = generous + add_trait_force_tooltip = diligent + } + } + + option = { + name = tgp_child_personality.104.patient_change + trigger = { + scope:child = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = generous + add_trait_force_tooltip = patient + } + } +} + +#Child has become diligent +tgp_child_personality.1042 = { + type = character_event + title = tgp_child_personality.1041.t + desc = { + desc = tgp_child_personality.104.desc + desc = tgp_child_personality.104.diligent + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_honorable + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = generous + has_trait = greedy + } + OR = { + has_trait = patient + has_trait = impatient + } + } + } + } + + immediate = { + random_courtier = { + limit = { + is_physically_able = yes + is_knight = yes + } + save_scope_as = knight + } + } + + option = { + name = tgp_child_personality.104.confirm_diligent + custom_tooltip = child_personality.keeps_diligent_tt + } + + option = { + name = tgp_child_personality.104.generous_change + trigger = { + scope:child = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = diligent + add_trait_force_tooltip = generous + } + } + + option = { + name = tgp_child_personality.104.patient_change + trigger = { + scope:child = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = diligent + add_trait_force_tooltip = patient + } + } +} + +#Child has become patient +tgp_child_personality.1043 = { + type = character_event + title = tgp_child_personality.1041.t + desc = { + desc = tgp_child_personality.104.desc + desc = tgp_child_personality.104.patient + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_honorable + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = generous + has_trait = greedy + } + OR = { + has_trait = diligent + has_trait = lazy + } + } + } + } + + option = { + name = tgp_child_personality.104.confirm_patient + custom_tooltip = child_personality.keeps_patient_tt + } + + option = { + name = tgp_child_personality.104.generous_change + trigger = { + scope:child = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = patient + add_trait_force_tooltip = generous + } + } + + option = { + name = tgp_child_personality.104.diligent_change + trigger = { + scope:child = { + NOR = { + has_trait = diligent + has_trait = lazy + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = patient + add_trait_force_tooltip = diligent + } + } +} + +#Child has become just +tgp_child_personality.1071 = { + type = character_event + title = tgp_child_personality.1071.t + desc = { + desc = tgp_child_personality.107.desc + desc = tgp_child_personality.107.just + } + theme = education + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = disapproval + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = cynical + has_trait = trusting + } + OR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + } + + option = { + name = tgp_child_personality.107.confirm_just + custom_tooltip = child_personality.keeps_just_tt + } + + option = { + name = tgp_child_personality.107.cynical_change + trigger = { + scope:child = { + NOR = { + has_trait = cynical + has_trait = trusting + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = just + add_trait_force_tooltip = cynical + } + } + + option = { + name = tgp_child_personality.107.temperate_change + trigger = { + scope:child = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = just + add_trait_force_tooltip = temperate + } + } +} + +#Child has become cynical +tgp_child_personality.1072 = { + type = character_event + title = tgp_child_personality.1071.t + desc = { + desc = tgp_child_personality.107.desc + desc = tgp_child_personality.107.cynical + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_cynical + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = just + has_trait = arbitrary + } + OR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + } + + option = { + name = tgp_child_personality.107.confirm_cynical + custom_tooltip = child_personality.keeps_cynical_tt + } + + option = { + name = tgp_child_personality.107.just_change + trigger = { + scope:child = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = cynical + add_trait_force_tooltip = just + } + } + + option = { + name = tgp_child_personality.107.temperate_change + trigger = { + scope:child = { + NOR = { + has_trait = temperate + has_trait = gluttonous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = cynical + add_trait_force_tooltip = temperate + } + } +} + +#Child has become temperate +tgp_child_personality.1073 = { + type = character_event + title = tgp_child_personality.1071.t + desc = { + desc = tgp_child_personality.107.desc + desc = tgp_child_personality.107.temperate + } + theme = education + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_compassionate + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = just + has_trait = arbitrary + } + OR = { + has_trait = cynical + has_trait = trusting + } + } + } + } + + option = { + name = tgp_child_personality.107.confirm_temperate + custom_tooltip = child_personality.keeps_temperate_tt + } + + option = { + name = tgp_child_personality.107.just_change + trigger = { + scope:child = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = temperate + add_trait_force_tooltip = just + } + } + + option = { + name = tgp_child_personality.107.cynical_change + trigger = { + scope:child = { + NOR = { + has_trait = cynical + has_trait = trusting + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = temperate + add_trait_force_tooltip = cynical + } + } +} + +#Child has become brave +tgp_child_personality.1091 = { + type = character_event + title = tgp_child_personality.1091.t + desc = { + desc = tgp_child_personality.109.desc + desc = tgp_child_personality.109.brave + } + theme = education + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_bold + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = calm + has_trait = wrathful + } + OR = { + has_trait = zealous + has_trait = cynical + } + } + } + } + + option = { + name = tgp_child_personality.109.confirm_brave + custom_tooltip = child_personality.keeps_brave_tt + } + + option = { + name = tgp_child_personality.109.calm_change + trigger = { + scope:child = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = brave + add_trait_force_tooltip = calm + } + } + + option = { + name = tgp_child_personality.109.zealous_change + trigger = { + scope:child = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = brave + add_trait_force_tooltip = zealous + } + } +} + +#Child has become calm +tgp_child_personality.1092 = { + type = character_event + title = tgp_child_personality.1091.t + desc = { + desc = tgp_child_personality.109.desc + desc = tgp_child_personality.109.calm + } + theme = education + left_portrait = { + character = root + animation = personality_compassionate + } + right_portrait = { + character = scope:child + animation = personality_compassionate + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = brave + has_trait = craven + } + OR = { + has_trait = zealous + has_trait = cynical + } + } + } + } + + option = { + name = tgp_child_personality.109.confirm_calm + custom_tooltip = child_personality.keeps_calm_tt + } + + option = { + name = tgp_child_personality.109.brave_change + trigger = { + scope:child = { + NOR = { + has_trait = brave + has_trait = craven + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = calm + add_trait_force_tooltip = brave + } + } + + option = { + name = tgp_child_personality.109.zealous_change + trigger = { + scope:child = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = calm + add_trait_force_tooltip = zealous + } + } +} + +#Child has become zealous +tgp_child_personality.1093 = { + type = character_event + title = tgp_child_personality.1091.t + desc = { + desc = tgp_child_personality.109.desc + desc = tgp_child_personality.109.zealous + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_zealous + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = brave + has_trait = craven + } + OR = { + has_trait = calm + has_trait = wrathful + } + } + } + } + + option = { + name = tgp_child_personality.109.confirm_zealous + custom_tooltip = child_personality.keeps_zealous_tt + } + + option = { + name = tgp_child_personality.109.brave_change + trigger = { + scope:child = { + NOR = { + has_trait = brave + has_trait = craven + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = zealous + add_trait_force_tooltip = brave + } + } + + option = { + name = tgp_child_personality.109.calm_change + trigger = { + scope:child = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = zealous + add_trait_force_tooltip = calm + } + } +} + +#Responses to Ambitious, Sadistic or Paranoid +#0010 + +#Child has become ambitious +tgp_child_personality.1101 = { + type = character_event + title = tgp_child_personality.1101.t + desc = { + desc = tgp_child_personality.110.desc + desc = tgp_child_personality.110.ambitious + } + theme = education + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + animation = personality_bold + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + OR = { + has_trait = paranoid + has_trait = trusting + } + } + } + } + + option = { + name = tgp_child_personality.110.confirm_ambitious + custom_tooltip = child_personality.keeps_ambitious_tt + } + + option = { + name = tgp_child_personality.110.sadistic_change + trigger = { + scope:child = { + NOR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = ambitious + add_trait_force_tooltip = sadistic + } + } + + option = { + name = tgp_child_personality.110.paranoid_change + trigger = { + scope:child = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = ambitious + add_trait_force_tooltip = paranoid + } + } +} + +#Child has become sadistic +tgp_child_personality.1102 = { + type = character_event + title = tgp_child_personality.1101.t + desc = { + desc = tgp_child_personality.110.desc + desc = tgp_child_personality.110.sadistic + } + theme = education + override_background = { + reference = terrain + } + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:child + animation = happiness + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = ambitious + has_trait = content + } + OR = { + has_trait = paranoid + has_trait = trusting + } + } + } + } + + option = { + name = tgp_child_personality.110.confirm_sadistic + custom_tooltip = child_personality.keeps_sadistic_tt + } + + option = { + name = tgp_child_personality.110.ambitious_change + trigger = { + scope:child = { + NOR = { + has_trait = ambitious + has_trait = content + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = sadistic + add_trait_force_tooltip = ambitious + } + } + + option = { + name = tgp_child_personality.110.paranoid_change + trigger = { + scope:child = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = sadistic + add_trait_force_tooltip = paranoid + } + } +} + +#Child has become paranoid +tgp_child_personality.1103 = { + type = character_event + title = tgp_child_personality.1101.t + desc = { + desc = tgp_child_personality.110.desc + desc = tgp_child_personality.110.paranoid + } + theme = education + + left_portrait = { + character = root + animation = worry + } + right_portrait = { + character = scope:child + animation = paranoia + } + + trigger = { + scope:child = { + NAND = { + OR = { + has_trait = ambitious + has_trait = content + } + OR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + } + } + } + + option = { + name = tgp_child_personality.110.confirm_paranoid + custom_tooltip = child_personality.keeps_paranoid_tt + } + + option = { + name = tgp_child_personality.110.ambitious_change + trigger = { + scope:child = { + NOR = { + has_trait = ambitious + has_trait = content + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = paranoid + add_trait_force_tooltip = ambitious + } + } + + option = { + name = tgp_child_personality.110.sadistic_change + trigger = { + scope:child = { + NOR = { + has_trait = sadistic + has_trait = compassionate + has_trait = callous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + remove_trait = paranoid + add_trait_force_tooltip = sadistic + } + } +} + +#Guardian response to diligent, gregarious, temperate +tgp_child_personality.7001 = { + type = character_event + title = tgp_child_personality.7001.t + desc = { + desc = tgp_child_personality.7001.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = diligent + } + } + desc = { + desc = tgp_child_personality.diligent.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = gregarious + } + } + desc = { + desc = tgp_child_personality.gregarious.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = temperate + } + } + desc = { + desc = tgp_child_personality.temperate.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = diligent + } + } + animation = personality_honorable + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = gregarious + } + } + animation = personality_irrational + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = temperate + } + } + animation = personality_content + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = diligent + } + } + name = tgp_child_personality.7001.diligent + custom_tooltip = child_personality.keeps_diligent_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = gregarious + } + } + name = tgp_child_personality.7001.gregarious + custom_tooltip = child_personality.keeps_gregarious_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = temperate + } + } + name = tgp_child_personality.7001.temperate + custom_tooltip = child_personality.keeps_temperate_tt + } + + option = { + name = tgp_child_personality.7001.change.diligent + trigger = { + scope:child = { + NOR = { + has_trait = lazy + has_trait = diligent + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = gregarious + } + remove_trait = gregarious + } + if = { + limit = { + has_character_flag = temperate + } + remove_trait = temperate + } + add_trait_force_tooltip = diligent + } + } + + option = { + name = tgp_child_personality.7001.change.gregarious + trigger = { + scope:child = { + NOR = { + has_trait = shy + has_trait = gregarious + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = diligent + } + remove_trait = diligent + } + if = { + limit = { + has_character_flag = temperate + } + remove_trait = temperate + } + add_trait_force_tooltip = gregarious + } + } + + option = { + name = tgp_child_personality.7001.change.temperate + trigger = { + scope:child = { + NOR = { + has_trait = gluttonous + has_trait = temperate + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = gregarious + } + remove_trait = gregarious + } + if = { + limit = { + has_character_flag = diligent + } + remove_trait = diligent + } + add_trait_force_tooltip = temperate + } + } + + after = { + scope:child = { + remove_character_flag = diligent + remove_character_flag = gregarious + remove_character_flag = temperate + } + } +} + +#Guardian response to zealous, ambitious, sadistic +tgp_child_personality.7011 = { + type = character_event + title = tgp_child_personality.7011.t + desc = { + desc = tgp_child_personality.7011.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = zealous + } + } + desc = { + desc = tgp_child_personality.zealous.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = ambitious + } + } + desc = { + desc = tgp_child_personality.ambitious.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = sadistic + } + } + desc = { + desc = tgp_child_personality.sadistic.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_zealous + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = zealous + } + } + animation = personality_zealous + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = ambitious + } + } + animation = personality_greedy + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = sadistic + } + } + animation = schadenfreude + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = zealous + } + } + name = tgp_child_personality.7011.zealous + custom_tooltip = child_personality.keeps_zealous_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = ambitious + } + } + name = tgp_child_personality.7011.ambitious + custom_tooltip = child_personality.keeps_ambitious_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = sadistic + } + } + name = tgp_child_personality.7011.sadistic + custom_tooltip = child_personality.keeps_sadistic_tt + } + + option = { + name = tgp_child_personality.7011.change.zealous + trigger = { + scope:child = { + NOR = { + has_trait = zealous + has_trait = cynical + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = ambitious + } + remove_trait = ambitious + } + if = { + limit = { + has_character_flag = sadistic + } + remove_trait = sadistic + } + add_trait_force_tooltip = zealous + } + } + + option = { + name = tgp_child_personality.7011.change.ambitious + trigger = { + scope:child = { + NOR = { + has_trait = ambitious + has_trait = content + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = zealous + } + remove_trait = zealous + } + if = { + limit = { + has_character_flag = sadistic + } + remove_trait = sadistic + } + add_trait_force_tooltip = ambitious + } + } + + option = { + name = tgp_child_personality.7011.change.sadistic + trigger = { + scope:child = { + NOR = { + has_trait = sadistic + has_trait = callous + has_trait = compassionate + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = zealous + } + remove_trait = zealous + } + if = { + limit = { + has_character_flag = ambitious + } + remove_trait = ambitious + } + add_trait_force_tooltip = sadistic + } + } + + after = { + scope:child = { + remove_character_flag = zealous + remove_character_flag = ambitious + remove_character_flag = sadistic + } + } +} + +#Guardian response to shy, paranoid, craven +tgp_child_personality.7021 = { + type = character_event + title = tgp_child_personality.7021.t + desc = { + desc = tgp_child_personality.7021.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = shy + } + } + desc = { + desc = tgp_child_personality.shy.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = paranoid + } + } + desc = { + desc = tgp_child_personality.paranoid.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = craven + } + } + desc = { + desc = tgp_child_personality.craven.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = shy + } + } + animation = worry + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = paranoid + } + } + animation = paranoia + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = craven + } + } + animation = personality_coward + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = shy + } + } + name = tgp_child_personality.7021.shy + custom_tooltip = child_personality.keeps_shy_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = paranoid + } + } + name = tgp_child_personality.7021.paranoid + custom_tooltip = child_personality.keeps_paranoid_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = craven + } + } + name = tgp_child_personality.7021.craven + custom_tooltip = child_personality.keeps_craven_tt + } + + option = { + name = tgp_child_personality.7021.change.shy + trigger = { + scope:child = { + NOR = { + has_trait = shy + has_trait = gregarious + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = paranoid + } + remove_trait = paranoid + } + if = { + limit = { + has_character_flag = craven + } + remove_trait = craven + } + add_trait_force_tooltip = shy + } + } + + option = { + name = tgp_child_personality.7021.change.paranoid + trigger = { + scope:child = { + NOR = { + has_trait = paranoid + has_trait = trusting + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = shy + } + remove_trait = shy + } + if = { + limit = { + has_character_flag = craven + } + remove_trait = craven + } + add_trait_force_tooltip = paranoid + } + } + + option = { + name = tgp_child_personality.7021.change.craven + trigger = { + scope:child = { + NOR = { + has_trait = craven + has_trait = brave + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = shy + } + remove_trait = shy + } + if = { + limit = { + has_character_flag = paranoid + } + remove_trait = paranoid + } + add_trait_force_tooltip = craven + } + } + + after = { + scope:child = { + remove_character_flag = shy + remove_character_flag = paranoid + remove_character_flag = craven + } + } +} + +#Guardian response to lazy, gluttonous, compassionate +tgp_child_personality.7031 = { + type = character_event + title = tgp_child_personality.7031.t + desc = { + desc = tgp_child_personality.7031.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = lazy + } + } + desc = { + desc = tgp_child_personality.lazy.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = gluttonous + } + } + desc = { + desc = tgp_child_personality.gluttonous.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + desc = { + desc = tgp_child_personality.compassionate.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = lazy + } + } + animation = shame + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = gluttonous + } + } + animation = beg + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + animation = personality_compassionate + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = lazy + } + } + name = tgp_child_personality.7031.lazy + custom_tooltip = child_personality.keeps_lazy_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = gluttonous + } + } + name = tgp_child_personality.7031.gluttonous + custom_tooltip = child_personality.keeps_gluttonous_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + name = tgp_child_personality.7031.compassionate + custom_tooltip = child_personality.keeps_compassionate_tt + } + + option = { + name = tgp_child_personality.7031.change.lazy + trigger = { + scope:child = { + NOR = { + has_trait = lazy + has_trait = diligent + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = gluttonous + } + remove_trait = gluttonous + } + if = { + limit = { + has_character_flag = compassionate + } + remove_trait = compassionate + } + add_trait_force_tooltip = lazy + } + } + + option = { + name = tgp_child_personality.7031.change.gluttonous + trigger = { + scope:child = { + NOR = { + has_trait = gluttonous + has_trait = temperate + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = lazy + } + remove_trait = lazy + } + if = { + limit = { + has_character_flag = compassionate + } + remove_trait = compassionate + } + add_trait_force_tooltip = gluttonous + } + } + + option = { + name = tgp_child_personality.7031.change.compassionate + trigger = { + scope:child = { + NOR = { + has_trait = compassionate + has_trait = callous + has_trait = sadistic + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = gluttonous + } + remove_trait = gluttonous + } + if = { + limit = { + has_character_flag = lazy + } + remove_trait = lazy + } + add_trait_force_tooltip = compassionate + } + } + + after = { + scope:child = { + remove_character_flag = lazy + remove_character_flag = gluttonous + remove_character_flag = compassionate + } + } +} + +#Guardian response to lustful, chaste +tgp_child_personality.7041 = { + type = character_event + title = tgp_child_personality.7041.t + desc = { + desc = tgp_child_personality.7041.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = lustful + } + } + desc = { + desc = tgp_child_personality.lustful.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = chaste + } + } + desc = { + desc = tgp_child_personality.chaste.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = lustful + } + } + animation = personality_irrational + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = chaste + } + } + animation = worry + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = lustful + } + } + name = tgp_child_personality.7041.lustful + custom_tooltip = child_personality.keeps_lustful_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = chaste + } + } + name = tgp_child_personality.7041.chaste + custom_tooltip = child_personality.keeps_chaste_tt + } + + option = { + name = tgp_child_personality.7041.change.lustful + trigger = { + scope:child = { + NOT = { + has_trait = lustful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = chaste + } + remove_trait = chaste + } + add_trait_force_tooltip = lustful + } + } + + option = { + name = tgp_child_personality.7041.change.chaste + trigger = { + scope:child = { + NOT = { + has_trait = chaste + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = lustful + } + remove_trait = lustful + } + add_trait_force_tooltip = chaste + } + } + + after = { + scope:child = { + remove_character_flag = lustful + remove_character_flag = chaste + } + } +} + +#Guardian response to just, greedy, callous +tgp_child_personality.7051 = { + type = character_event + title = tgp_child_personality.7051.t + desc = { + desc = tgp_child_personality.7051.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = just + } + } + desc = { + desc = tgp_child_personality.just.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = greedy + } + } + desc = { + desc = tgp_child_personality.greedy.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + desc = { + desc = tgp_child_personality.callous.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = just + } + } + animation = personality_honorable + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = greedy + } + } + animation = steward + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + animation = personality_callous + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = just + } + } + name = tgp_child_personality.7051.just + custom_tooltip = child_personality.keeps_just_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = greedy + } + } + name = tgp_child_personality.7051.greedy + custom_tooltip = child_personality.keeps_greedy_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + name = tgp_child_personality.7051.callous + custom_tooltip = child_personality.keeps_callous_tt + } + + option = { + name = tgp_child_personality.7051.change.just + trigger = { + scope:child = { + NOR = { + has_trait = just + has_trait = arbitrary + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = greedy + } + remove_trait = greedy + } + if = { + limit = { + has_character_flag = callous + } + remove_trait = callous + } + add_trait_force_tooltip = just + } + } + + option = { + name = tgp_child_personality.7051.change.greedy + trigger = { + scope:child = { + NOR = { + has_trait = greedy + has_trait = generous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = just + } + remove_trait = just + } + if = { + limit = { + has_character_flag = callous + } + remove_trait = callous + } + add_trait_force_tooltip = greedy + } + } + + option = { + name = tgp_child_personality.7051.change.callous + trigger = { + scope:child = { + NOR = { + has_trait = callous + has_trait = compassionate + has_trait = sadistic + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = greedy + } + remove_trait = greedy + } + if = { + limit = { + has_character_flag = just + } + remove_trait = just + } + add_trait_force_tooltip = callous + } + } + + after = { + scope:child = { + remove_character_flag = just + remove_character_flag = greedy + remove_character_flag = callous + } + } +} + +#Guardian response to humble, cynical, content +tgp_child_personality.7061 = { + type = character_event + title = tgp_child_personality.7061.t + desc = { + desc = tgp_child_personality.7061.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = humble + } + } + desc = { + desc = tgp_child_personality.humble.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = cynical + } + } + desc = { + desc = tgp_child_personality.cynical.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = content + } + } + desc = { + desc = tgp_child_personality.content.desc + } + } + } + } + theme = education + override_background = { reference = relaxing_room } + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = humble + } + } + animation = admiration + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = cynical + } + } + animation = shame + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = content + } + } + animation = happiness + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = humble + } + } + name = tgp_child_personality.7061.humble + custom_tooltip = child_personality.keeps_humble_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = cynical + } + } + name = tgp_child_personality.7061.cynical + custom_tooltip = child_personality.keeps_cynical_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = content + } + } + name = tgp_child_personality.7061.content + custom_tooltip = child_personality.keeps_content_tt + } + + option = { + name = tgp_child_personality.7061.change.humble + trigger = { + scope:child = { + NOR = { + has_trait = humble + has_trait = arrogant + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = cynical + } + remove_trait = cynical + } + if = { + limit = { + has_character_flag = content + } + remove_trait = content + } + add_trait_force_tooltip = humble + } + } + + option = { + name = tgp_child_personality.7061.change.cynical + trigger = { + scope:child = { + NOR = { + has_trait = cynical + has_trait = zealous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = humble + } + remove_trait = humble + } + if = { + limit = { + has_character_flag = content + } + remove_trait = content + } + add_trait_force_tooltip = cynical + } + } + + option = { + name = tgp_child_personality.7061.change.content + trigger = { + scope:child = { + NOR = { + has_trait = content + has_trait = ambitious + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = cynical + } + remove_trait = cynical + } + if = { + limit = { + has_character_flag = humble + } + remove_trait = humble + } + add_trait_force_tooltip = content + } + } + + after = { + scope:child = { + remove_character_flag = humble + remove_character_flag = cynical + remove_character_flag = content + } + } +} + +#Guardian response to vengeful, deceitful, calm +tgp_child_personality.7071 = { + type = character_event + title = tgp_child_personality.7071.t + desc = { + desc = tgp_child_personality.7071.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = vengeful + } + } + desc = { + desc = tgp_child_personality.vengeful.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = deceitful + } + } + desc = { + desc = tgp_child_personality.deceitful.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = calm + } + } + desc = { + desc = tgp_child_personality.calm.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = vengeful + } + } + animation = rage + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = deceitful + } + } + animation = scheme + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = calm + } + } + animation = dismissal + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = vengeful + } + } + name = tgp_child_personality.7071.vengeful + custom_tooltip = child_personality.keeps_vengeful_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = deceitful + } + } + name = tgp_child_personality.7071.deceitful + custom_tooltip = child_personality.keeps_deceitful_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = calm + } + } + name = tgp_child_personality.7071.calm + custom_tooltip = child_personality.keeps_calm_tt + } + + option = { + name = tgp_child_personality.7071.change.vengeful + trigger = { + scope:child = { + NOR = { + has_trait = vengeful + has_trait = forgiving + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = deceitful + } + remove_trait = deceitful + } + if = { + limit = { + has_character_flag = calm + } + remove_trait = calm + } + add_trait_force_tooltip = vengeful + } + } + + option = { + name = tgp_child_personality.7071.change.deceitful + trigger = { + scope:child = { + NOR = { + has_trait = deceitful + has_trait = honest + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = vengeful + } + remove_trait = vengeful + } + if = { + limit = { + has_character_flag = calm + } + remove_trait = calm + } + add_trait_force_tooltip = deceitful + } + } + + option = { + name = tgp_child_personality.7071.change.calm + trigger = { + scope:child = { + NOR = { + has_trait = calm + has_trait = wrathful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = deceitful + } + remove_trait = deceitful + } + if = { + limit = { + has_character_flag = vengeful + } + remove_trait = vengeful + } + add_trait_force_tooltip = calm + } + } + + after = { + scope:child = { + remove_character_flag = vengeful + remove_character_flag = deceitful + remove_character_flag = calm + } + } +} + +#Guardian response to generous, fickle, arrogant +tgp_child_personality.7081 = { + type = character_event + title = tgp_child_personality.7081.t + desc = { + desc = tgp_child_personality.7081.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = generous + } + } + desc = { + desc = tgp_child_personality.generous.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = fickle + } + } + desc = { + desc = tgp_child_personality.fickle.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = arrogant + } + } + desc = { + desc = tgp_child_personality.arrogant.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = generous + } + } + animation = personality_forgiving + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = fickle + } + } + animation = personality_irrational + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = arrogant + } + } + animation = dismissal + } + } + option = { + trigger = { + scope:child = { + has_character_flag = generous + } + } + name = tgp_child_personality.7081.generous + custom_tooltip = child_personality.keeps_generous_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = fickle + } + } + name = tgp_child_personality.7081.fickle + custom_tooltip = child_personality.keeps_fickle_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = arrogant + } + } + name = tgp_child_personality.7081.arrogant + custom_tooltip = child_personality.keeps_arrogant_tt + } + + option = { + name = tgp_child_personality.7081.change.generous + trigger = { + scope:child = { + NOR = { + has_trait = generous + has_trait = greedy + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = fickle + } + remove_trait = fickle + } + if = { + limit = { + has_character_flag = arrogant + } + remove_trait = arrogant + } + add_trait_force_tooltip = generous + } + } + + option = { + name = tgp_child_personality.7081.change.fickle + trigger = { + scope:child = { + NOR = { + has_trait = fickle + has_trait = stubborn + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = generous + } + remove_trait = generous + } + if = { + limit = { + has_character_flag = arrogant + } + remove_trait = arrogant + } + add_trait_force_tooltip = fickle + } + } + + option = { + name = tgp_child_personality.7081.change.arrogant + trigger = { + scope:child = { + NOR = { + has_trait = arrogant + has_trait = humble + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = fickle + } + remove_trait = fickle + } + if = { + limit = { + has_character_flag = generous + } + remove_trait = generous + } + add_trait_force_tooltip = arrogant + } + } + + after = { + scope:child = { + remove_character_flag = generous + remove_character_flag = fickle + remove_character_flag = arrogant + } + } +} + +#Guardian response to forgiving, trusting, patient +tgp_child_personality.7091 = { + type = character_event + title = tgp_child_personality.7091.t + desc = { + desc = tgp_child_personality.7091.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = forgiving + } + } + desc = { + desc = tgp_child_personality.forgiving.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = trusting + } + } + desc = { + desc = tgp_child_personality.trusting.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = patient + } + } + desc = { + desc = tgp_child_personality.patient.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = forgiving + } + } + animation = personality_forgiving + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = trusting + } + } + animation = personality_compassionate + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = patient + } + } + animation = personality_rational + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = forgiving + } + } + name = tgp_child_personality.7091.forgiving + custom_tooltip = child_personality.keeps_forgiving_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = trusting + } + } + name = tgp_child_personality.7091.trusting + custom_tooltip = child_personality.keeps_trusting_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = patient + } + } + name = tgp_child_personality.7091.patient + custom_tooltip = child_personality.keeps_patient_tt + } + + option = { + name = tgp_child_personality.7091.change.forgiving + trigger = { + scope:child = { + NOR = { + has_trait = forgiving + has_trait = vengeful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = trusting + } + remove_trait = trusting + } + if = { + limit = { + has_character_flag = patient + } + remove_trait = patient + } + add_trait_force_tooltip = forgiving + } + } + + option = { + name = tgp_child_personality.7091.change.trusting + trigger = { + scope:child = { + NOR = { + has_trait = trusting + has_trait = paranoid + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = forgiving + } + remove_trait = forgiving + } + if = { + limit = { + has_character_flag = patient + } + remove_trait = patient + } + add_trait_force_tooltip = trusting + } + } + + option = { + name = tgp_child_personality.7091.change.patient + trigger = { + scope:child = { + NOR = { + has_trait = patient + has_trait = impatient + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = trusting + } + remove_trait = trusting + } + if = { + limit = { + has_character_flag = forgiving + } + remove_trait = forgiving + } + add_trait_force_tooltip = patient + } + } + + after = { + scope:child = { + remove_character_flag = forgiving + remove_character_flag = trusting + remove_character_flag = patient + } + } +} + +#Guardian response to honest, arbitrary, impatient +tgp_child_personality.7101 = { + type = character_event + title = tgp_child_personality.7101.t + desc = { + desc = tgp_child_personality.7101.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = honest + } + } + desc = { + desc = tgp_child_personality.honest.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = arbitrary + } + } + desc = { + desc = tgp_child_personality.arbitrary.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = impatient + } + } + desc = { + desc = tgp_child_personality.impatient.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = honest + } + } + animation = worry + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = arbitrary + } + } + animation = disapproval + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = impatient + } + } + animation = paranoia + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = honest + } + } + name = tgp_child_personality.7101.honest + custom_tooltip = child_personality.keeps_honest_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = arbitrary + } + } + name = tgp_child_personality.7101.arbitrary + custom_tooltip = child_personality.keeps_arbitrary_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = impatient + } + } + name = tgp_child_personality.7101.impatient + custom_tooltip = child_personality.keeps_impatient_tt + } + + option = { + name = tgp_child_personality.7101.change.honest + trigger = { + scope:child = { + NOR = { + has_trait = honest + has_trait = deceitful + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = arbitrary + } + remove_trait = arbitrary + } + if = { + limit = { + has_character_flag = impatient + } + remove_trait = impatient + } + add_trait_force_tooltip = honest + } + } + + option = { + name = tgp_child_personality.7101.change.arbitrary + trigger = { + scope:child = { + NOR = { + has_trait = arbitrary + has_trait = just + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = honest + } + remove_trait = honest + } + if = { + limit = { + has_character_flag = impatient + } + remove_trait = impatient + } + add_trait_force_tooltip = arbitrary + } + } + + option = { + name = tgp_child_personality.7101.change.impatient + trigger = { + scope:child = { + NOR = { + has_trait = impatient + has_trait = patient + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = arbitrary + } + remove_trait = arbitrary + } + if = { + limit = { + has_character_flag = honest + } + remove_trait = honest + } + add_trait_force_tooltip = impatient + } + } + + after = { + scope:child = { + remove_character_flag = honest + remove_character_flag = arbitrary + remove_character_flag = impatient + } + } +} + +#Guardian response to brave, stubborn, wrathful +tgp_child_personality.7201 = { + type = character_event + title = tgp_child_personality.7201.t + desc = { + desc = tgp_child_personality.7201.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = brave + } + } + desc = { + desc = tgp_child_personality.brave.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = stubborn + } + } + desc = { + desc = tgp_child_personality.stubborn.desc + } + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = wrathful + } + } + desc = { + desc = tgp_child_personality.wrathful.desc + } + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = brave + } + } + animation = personality_bold + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = stubborn + } + } + animation = disapproval + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = wrathful + } + } + animation = rage + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = brave + } + } + name = tgp_child_personality.7201.brave + custom_tooltip = child_personality.keeps_brave_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = stubborn + } + } + name = tgp_child_personality.7201.stubborn + custom_tooltip = child_personality.keeps_stubborn_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = wrathful + } + } + name = tgp_child_personality.7201.wrathful + custom_tooltip = child_personality.keeps_wrathful_tt + } + + option = { + name = tgp_child_personality.7201.change.brave + trigger = { + scope:child = { + NOR = { + has_trait = brave + has_trait = craven + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = stubborn + } + remove_trait = stubborn + } + if = { + limit = { + has_character_flag = wrathful + } + remove_trait = wrathful + } + add_trait_force_tooltip = brave + } + } + + option = { + name = tgp_child_personality.7201.change.stubborn + trigger = { + scope:child = { + NOR = { + has_trait = stubborn + has_trait = fickle + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = brave + } + remove_trait = brave + } + if = { + limit = { + has_character_flag = wrathful + } + remove_trait = wrathful + } + add_trait_force_tooltip = stubborn + } + } + + option = { + name = tgp_child_personality.7201.change.wrathful + trigger = { + scope:child = { + NOR = { + has_trait = wrathful + has_trait = calm + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = stubborn + } + remove_trait = stubborn + } + if = { + limit = { + has_character_flag = brave + } + remove_trait = brave + } + add_trait_force_tooltip = wrathful + } + } + + after = { + scope:child = { + remove_character_flag = brave + remove_character_flag = stubborn + remove_character_flag = wrathful + } + } +} + +#Guardian response to eccentric, compassionate, callous +tgp_child_personality.7301 = { + type = character_event + title = tgp_child_personality.7301.t + desc = { + desc = tgp_child_personality.7301.desc + first_valid = { + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = eccentric + } + } + desc = tgp_child_personality.7301.eccentric.desc + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + desc = tgp_child_personality.7301.compassionate.desc + } + triggered_desc = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + desc = tgp_child_personality.7301.callous.desc + } + } + } + theme = education + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:child + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = eccentric + } + } + animation = manic + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + animation = personality_compassionate + } + triggered_animation = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + animation = personality_dishonorable + } + } + + option = { + trigger = { + scope:child = { + has_character_flag = eccentric + } + } + name = tgp_child_personality.7301.eccentric + custom_tooltip = child_personality.keeps_eccentric_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = compassionate + } + } + name = tgp_child_personality.7301.compassionate + custom_tooltip = child_personality.keeps_compassionate_tt + } + + option = { + trigger = { + scope:child = { + has_character_flag = callous + } + } + name = tgp_child_personality.7301.callous + custom_tooltip = child_personality.keeps_callous_tt + } + + option = { + name = tgp_child_personality.7301.change.eccentric + trigger = { + scope:child = { + NOR = { + has_trait = eccentric + has_trait = fickle + has_trait = stubborn + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = compassionate + } + remove_trait = compassionate + } + if = { + limit = { + has_character_flag = callous + } + remove_trait = callous + } + add_trait_force_tooltip = eccentric + } + } + + option = { + name = tgp_child_personality.7301.change.compassionate + trigger = { + scope:child = { + NOT = { + has_trait = compassionate + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = eccentric + } + remove_trait = eccentric + } + if = { + limit = { + has_character_flag = callous + } + remove_trait = callous + } + add_trait_force_tooltip = compassionate + } + } + + option = { + name = tgp_child_personality.7301.change.callous + trigger = { + scope:child = { + NOT = { + has_trait = callous + } + } + } + ai_chance = { + base = 0 + } + stress_impact = { + base = child_trait_change_stress_penalty + } + scope:child = { + if = { + limit = { + has_character_flag = compassionate + } + remove_trait = compassionate + } + if = { + limit = { + has_character_flag = eccentric + } + remove_trait = eccentric + } + add_trait_force_tooltip = callous + } + } + + after = { + scope:child = { + remove_character_flag = eccentric + remove_character_flag = compassionate + remove_character_flag = callous + } + } +} diff --git a/events/dlc/tgp/tgp_china_career_events.txt b/events/dlc/tgp/tgp_china_career_events.txt new file mode 100644 index 00000000..bd501d59 --- /dev/null +++ b/events/dlc/tgp/tgp_china_career_events.txt @@ -0,0 +1,495 @@ +################################### +# CHINA CAREER EVENTS +################################### +namespace = tgp_china_career + +### EVENT LIST #################################################################### +## 0001 - Celestial Intro Event +## 0010 - A Meritorious Path +## 0020 - Hidden event for merit gain on succession +################################################################################### + +# Intro Event - Who are you playing as and what is your situation +# Also acts as an introduction if you become a noble family in China +tgp_china_career.0001 = { + type = character_event + title = tgp_china_career.0001.t + desc = { + desc = tgp_china_career.0001.desc + first_valid = { + triggered_desc = { + trigger = { tgp_is_any_minister = yes } + desc = tgp_china_career.0001.minister_desc + } + triggered_desc = { + trigger = { is_landed = yes } + desc = tgp_china_career.0001.landed_desc + } + desc = tgp_china_career.0001.unlanded_desc + } + } + theme = merit + override_background = { + trigger = { + OR = { + vassal_contract_has_flag = celestial_province_military + vassal_contract_has_flag = celestial_province_protectorate + } + } + reference = courtyard + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + vassal_contract_has_flag = celestial_province_military + vassal_contract_has_flag = celestial_province_protectorate + } + } + animation = relaxed_spear + } + animation = reading + } + + cooldown = { days = 1 } + + trigger = { + exists = top_liege + this != top_liege + top_liege = { + government_has_flag = government_is_celestial + } + } + + immediate = { + # Scopes + save_scope_as = new_ruler + house ?= { save_scope_as = ruler_family } + top_liege = { save_scope_as = emperor } + if = { + limit = { tgp_is_any_minister = yes } + primary_title = { save_scope_as = minister_title } + } + } + + option = { + name = tgp_china_career.0001.a + add_character_modifier = { + modifier = tgp_merit_boost_modifier + } + } + + option = { + name = tgp_china_career.0001.b + add_character_modifier = { + modifier = tgp_influence_boost_modifier + } + } +} + +# A Meritorious Path - You advanced/gained a merit rank +tgp_china_career.0010 = { + type = character_event + title = tgp_china_career.0010.t + desc = { + # Intro + first_valid = { + triggered_desc = { + trigger = { merit_level = 1 } + desc = tgp_china_career.0010.first_rank_desc + } + desc = tgp_china_career.0010.higher_rank_desc + } + # Additional descs for ranks granting access to new tiers + first_valid = { + triggered_desc = { + trigger = { merit_level = 2 } + desc = tgp_china_career.0010.duchy_desc + } + triggered_desc = { + trigger = { + merit_level = 5 # This is the highest rank for Meritocratic + government_has_flag = government_is_celestial + } + desc = tgp_china_career.0010.kingdom_desc + } + triggered_desc = { + trigger = { merit_level = 7 } + desc = tgp_china_career.0010.empire_desc + } + triggered_desc = { + trigger = { has_highest_merit_rank = yes } + desc = tgp_china_career.0010.highest_rank + } + triggered_desc = { + trigger = { + OR = { + merit_level = 3 + merit_level = 4 + merit_level = 6 + merit_level = 8 + } + } + desc = tgp_china_career.0010.higher_rank_unspecific + } + } + } + theme = merit + left_portrait = { + character = root + animation = reading + } + + # To prevent you from getting multiple events in case you gain several ranks + cooldown = { days = 30 } + + trigger = { + } + + immediate = { + # Scopes + save_scope_as = merit_char + } + + option = { + trigger = { NOT = { merit_level = 1 } } + name = tgp_china_career.0010.aa + add_character_modifier = { + modifier = tgp_higher_ambitions_modifier + years = 10 + } + } + + option = { + trigger = { NOT = { merit_level = 1 } } + name = tgp_china_career.0010.a + add_stress = miniscule_stress_loss + if = { + limit = { + has_character_modifier = tgp_higher_ambitions_modifier + } + remove_character_modifier = tgp_higher_ambitions_modifier + } + } + + option = { # Option for a civil career if you reach your first Merit Rank + trigger = { merit_level = 1 } + name = { + trigger = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override != trait:education_stewardship_1 + } + trigger_else = { + NOT = { has_trait_with_flag = civilian_province } + } + } + text = tgp_china_career.0010.b1 + } + name = { + trigger = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override = trait:education_stewardship_1 + } + trigger_else = { + has_trait_with_flag = civilian_province + } + } + text = tgp_china_career.0010.b2 + } + + if = { + limit = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override != trait:education_stewardship_1 + } + trigger_else = { + NOT = { has_trait_with_flag = civilian_province } + } + } + custom_tooltip = { + text = change_to_civilian_career_desc + set_variable = { + name = appointment_trait_override + value = trait:education_stewardship_1 + } + } + } + else = { + custom_tooltip = keep_civilian_career_desc + } + add_stress = miniscule_stress_loss + } + + option = { # Option for a military career if you reach your first Merit Rank + trigger = { merit_level = 1 } + name = { + trigger = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override != trait:education_martial_1 + } + trigger_else = { + NOT = { has_trait_with_flag = military_province } + } + } + text = tgp_china_career.0010.c1 + } + name = { + trigger = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override = trait:education_martial_1 + } + trigger_else = { + has_trait_with_flag = military_province + } + } + text = tgp_china_career.0010.c2 + } + + if = { + limit = { + trigger_if = { + limit = { + has_variable = appointment_trait_override + } + var:appointment_trait_override != trait:education_martial_1 + } + trigger_else = { + NOT = { has_trait_with_flag = military_province } + } + } + custom_tooltip = { + text = change_to_military_career_desc + set_variable = { + name = appointment_trait_override + value = trait:education_martial_1 + } + } + } + else = { + custom_tooltip = keep_military_career_desc + } + add_stress = miniscule_stress_loss + } +} + +# Hidden event for merit gain on succession +tgp_china_career.0020 = { + hidden = yes + + immediate = { + send_interface_toast = { + type = event_toast_effect_good + title = merit_gained_on_succession + left_icon = scope:meritorious_parent + + change_merit = { + value = scope:meritorious_parent_merit + multiply = { + value = 0 + house ?= { + if = { + limit = { has_house_aspiration_parameter = inherit_merit_bonus_4 } + add = merit_gain_on_succession_4_value + } + else_if = { + limit = { has_house_aspiration_parameter = inherit_merit_bonus_3 } + add = merit_gain_on_succession_3_value + } + else_if = { + limit = { has_house_aspiration_parameter = inherit_merit_bonus_2 } + add = merit_gain_on_succession_2_value + } + else_if = { + limit = { has_house_aspiration_parameter = inherit_merit_bonus_1 } + add = merit_gain_on_succession_1_value + } + } + } + } + } + } +} + +# Your Elder has died +tgp_china_career.0030 = { + type = character_event + title = tgp_china_career.0030.t + desc = tgp_china_career.0030.desc + + theme = death + + left_portrait = { + character = root + animation = grief + } + + right_portrait = { + character = scope:deceased_elder + animation = dead + } + + lower_left_portrait = { + character = scope:superior_fellow_disciple + animation = map_disbelief + } + + lower_right_portrait = { + character = scope:benchmark_new_disciple + animation = disappointed + } + + immediate = { + if = { + limit = { + num_of_relation_disciple < disciples_limit_value + any_in_list = { + list = potential_new_disciples + count >= 1 + } + } + while = { + limit = { + num_of_relation_disciple < disciples_limit_value + any_in_list = { + list = potential_new_disciples + count >= 1 + NOT = { + is_in_list = new_disciples + } + } + } + random_in_list = { + list = potential_new_disciples + limit = { + NOT = { + has_relation_elder = root + } + } + add_to_list = new_disciples # for the tooltip + } + } + random_in_list = { + list = potential_new_disciples + save_scope_as = benchmark_new_disciple + } + } + } + + option = { + name = tgp_china_career.0030.a + + custom_tooltip = { + text = tgp_china_career.0030.a.tt + open_interaction_window = { + interaction = find_elder_interaction + actor = root + recipient = top_liege + } + } + } + option = { + name = tgp_china_career.0030.b + + trigger = { + exists = scope:deceased_elder.house.house_head + this != scope:deceased_elder.house.house_head + } + + pay_short_term_gold = { + target = scope:deceased_elder.house.house_head + gold = medium_gold_value + } + + scope:deceased_elder.house = { + change_house_relation_effect = { + HOUSE = root.house + VALUE = house_relation_improve_minor_value + REASON = disciple_sent_condolences + CHAR = root + TARGET_CHAR = scope:deceased_elder + TITLE = scope:dummy_gender + } + } + + change_merit = minor_merit_gain + + add_piety = minor_piety_gain + + ai_chance = { + base = 0 # player only + } + } + option = { + name = tgp_china_career.0030.c + + trigger = { + exists = scope:superior_fellow_disciple + scope:superior_fellow_disciple = { + opinion = { + target = root + value >= -10 + } + } + } + + set_elder_relation_effect = { + ELDER = scope:superior_fellow_disciple + DISCIPLE = root + MERIT = medium_merit_gain + } + + ai_chance = { + base = 0 # player only + } + } + + option = { + name = tgp_china_career.0030.d + + trigger = { + any_in_list = { + list = new_disciples + count >= 1 + } + } + + every_in_list = { + list = new_disciples + set_elder_relation_effect = { + ELDER = root + DISCIPLE = this + MERIT = 0 + } + } + + change_merit = { + value = 0 + add = { + value = medium_merit_gain + multiply = list_size:new_disciples + } + } + + add_prestige = minor_prestige_value + + ai_chance = { + base = 0 # player only + } + } +} diff --git a/events/dlc/tgp/tgp_china_decision_events.txt b/events/dlc/tgp/tgp_china_decision_events.txt new file mode 100644 index 00000000..6a07ba0c --- /dev/null +++ b/events/dlc/tgp/tgp_china_decision_events.txt @@ -0,0 +1,698 @@ +namespace = tgp_china_decision + +scripted_effect set_up_local_examiner_effect = { + top_liege = { save_scope_as = hegemon } + scope:hegemon = { + if = { + limit = { + any_vassal_or_below = { + NOT = { this = root } + has_trait = governor + is_available = yes + capital_county = root.domicile.domicile_location.county + } + } + random_vassal_or_below = { + limit = { + NOT = { this = root } + has_trait = governor + is_available = yes + capital_county = root.domicile.domicile_location.county + } + save_scope_as = examiner + } + } + else = { + create_character = { + template = tgp_learning_exam_entrant_template + age = { 33 79 } + location = root.location + faith = scope:hegemon.faith + culture = scope:hegemon.culture + gender_female_chance = { + if = { + limit = { scope:hegemon.faith = { has_doctrine = doctrine_gender_male_dominated } } + add = 0 + } + else_if = { + limit = { scope:hegemon.faith = { has_doctrine = doctrine_gender_female_dominated } } + add = 100 + } + else = { + add = 50 + } + } + save_scope_as = examiner + } + } + } + scope:examiner = { + hidden_effect = { + add_trait = governor + change_merit = massive_merit_value + } + } +} + +tgp_china_decision.1000 = { + type = character_event + title = tgp_china_decision.1000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = failed_child_exam } + desc = tgp_china_decision.1000.desc_returning + } + desc = tgp_china_decision.1000.desc_new + } + desc = tgp_china_decision.1000.desc_outro + } + + theme = imperial_examination + override_background = { reference = study } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:examiner + animation = happy_teacher + } + + immediate = { + set_variable = { + name = child_examination_success_chance + value = child_examination_success_chance_value + } + set_up_local_examiner_effect = yes + } + + widget = { gui = "child_examination_success_chance" container = "custom_widgets_container" } + + option = { # Recite classics + name = tgp_china_decision.1000.a + duel = { + skill = learning + value = 1 + 50 = { # You succeed + desc = provincial_exam_success + compare_modifier = { + value = scope:duel_value + multiplier = 3 + } + add_character_modifier = { + modifier = tgp_local_exam_initial_success + years = 12 + } + custom_tooltip = examination_success_increase_medium_tt + } + 50 = { # You fail + desc = provincial_exam_duel_fail + compare_modifier = { + value = scope:duel_value + multiplier = -3 + } + stress_impact = { base = medium_stress_impact_gain } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + add = 20 + learning > medium_skill_rating + } + modifier = { + add = 40 + has_trait = ambitious + } + modifier = { + add = -40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + } + } + + option = { # Play it safe + name = tgp_china_decision.1000.b + custom_tooltip = examination_success_increase_miniscule_tt + # Use this var to track score + change_variable = { + name = safe_bets + add = 1 + } + add_character_flag = safe_start + add_prestige = miniscule_prestige_loss + ai_chance = { + base = 100 + modifier = { + add = 40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + modifier = { + add = 40 + stress_level < 0 + } + } + } + + after = { + trigger_event = tgp_china_decision.1001 + } +} + +tgp_china_decision.1001 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_character_modifier = tgp_local_exam_initial_success + has_character_flag = safe_start + } + } + desc = tgp_china_decision.1001.t_success + } + desc = tgp_china_decision.1001.t_fail + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_character_modifier = tgp_local_exam_initial_success + } + desc = tgp_china_decision.1001.desc_success + } + triggered_desc = { + trigger = { + var:safe_bets = 1 + } + desc = tgp_china_decision.1001.desc_safe + } + desc = tgp_china_decision.1001.desc_fail + } + desc = tgp_china_decision.1001.desc_outro + } + + theme = imperial_examination + override_background = { reference = study } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_modifier = tgp_local_exam_initial_success + } + animation = personality_bold + } + triggered_animation = { + trigger = { + var:safe_bets = 1 + } + animation = shame + } + animation = disappointed + } + + right_portrait = { + character = scope:examiner + animation = happy_teacher + } + + immediate = { + set_variable = { + name = child_examination_success_chance + value = child_examination_success_chance_value + } + } + + widget = { gui = "child_examination_success_chance" container = "custom_widgets_container" } + + option = { # Recite classics + name = tgp_china_decision.1001.a + duel = { + skill = learning + value = 1 + 40 = { # You succeed + desc = provincial_exam_success + compare_modifier = { + value = scope:duel_value + multiplier = 3 + } + add_character_modifier = { + modifier = tgp_local_exam_impressed_examiner + years = 12 + } + custom_tooltip = examination_success_increase_major_tt + } + 60 = { # You fail + desc = provincial_exam_duel_fail + compare_modifier = { + value = scope:duel_value + multiplier = -3 + } + stress_impact = { base = medium_stress_impact_gain } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + add = 20 + learning > medium_skill_rating + } + modifier = { + add = 40 + has_trait = ambitious + } + modifier = { + add = -40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + } + } + + option = { # Play it safe + name = tgp_china_decision.1001.b + custom_tooltip = examination_success_increase_miniscule_tt + # Use this var to track score + change_variable = { + name = safe_bets + add = 1 + } + # Use this flag for loc only + add_character_flag = safe_midpoint + add_prestige = miniscule_prestige_loss + ai_chance = { + base = 100 + modifier = { + add = 40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + modifier = { + add = 40 + stress_level < 0 + } + } + } + + after = { + trigger_event = tgp_china_decision.1002 + } +} + +tgp_china_decision.1002 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_character_modifier = tgp_local_exam_impressed_examiner + has_character_flag = safe_midpoint + } + } + desc = tgp_china_decision.1002.t_success + } + desc = tgp_china_decision.1002.t_fail + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + has_character_modifier = tgp_local_exam_impressed_examiner + } + desc = tgp_china_decision.1002.desc_success + } + triggered_desc = { + trigger = { + has_character_flag = safe_midpoint + } + desc = tgp_china_decision.1002.desc_safe + } + desc = tgp_china_decision.1002.desc_fail + } + desc = tgp_china_decision.1002.desc_outro + } + + theme = imperial_examination + override_background = { reference = study } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_character_modifier = tgp_local_exam_impressed_examiner + } + animation = happiness + } + triggered_animation = { + trigger = { + has_character_flag = safe_midpoint + } + animation = shame + } + animation = stress + } + + right_portrait = { + character = scope:examiner + animation = happy_teacher + } + + immediate = { + set_variable = { + name = child_examination_success_chance + value = child_examination_success_chance_value + } + } + + widget = { gui = "child_examination_success_chance" container = "custom_widgets_container" } + + option = { # Recite classics + name = tgp_china_decision.1002.a + duel = { + skill = learning + value = 1 + 30 = { # You succeed + desc = provincial_exam_success + compare_modifier = { + value = scope:duel_value + multiplier = 3 + } + add_character_modifier = { + modifier = tgp_local_exam_strong_finish + years = 12 + } + custom_tooltip = examination_success_increase_massive_tt + } + 70 = { # You fail + desc = provincial_exam_duel_fail + compare_modifier = { + value = scope:duel_value + multiplier = -3 + } + stress_impact = { base = medium_stress_impact_gain } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + add = 20 + learning > medium_skill_rating + } + modifier = { + add = 40 + has_trait = ambitious + } + modifier = { + add = -40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + } + } + + option = { # Play it safe + name = tgp_china_decision.1002.b + custom_tooltip = examination_success_increase_miniscule_tt + # Use this var to track score + change_variable = { + name = safe_bets + add = 1 + } + # Use this flag for loc only + add_character_flag = safe_end + add_prestige = miniscule_prestige_loss + ai_chance = { + base = 100 + modifier = { + add = 40 + OR = { + has_trait = content + has_trait = lazy + has_trait = craven + } + } + modifier = { + add = 40 + stress_level < 0 + } + } + } + + after = { + set_variable = { + name = child_examination_success_chance + value = child_examination_success_chance_value + } + trigger_event = tgp_china_decision.1005 + } +} + +# Releasing the Roll (Results) +tgp_china_decision.1005 = { + type = character_event + title = tgp_china_decision.1005.t + desc = { + # Opening + desc = tgp_china_decision.1005.desc + # Did you get a strong finish, play it safe, or fail? + first_valid = { + triggered_desc = { + trigger = { + has_character_modifier = tgp_local_exam_strong_finish + } + desc = tgp_china_decision.1005.desc.success + } + triggered_desc = { + trigger = { + has_character_flag = safe_end + } + desc = tgp_china_decision.1005.desc.safe + } + # If none of the above, you failed. + desc = tgp_china_decision.1005.desc.failure + } + # And now, for the score + desc = tgp_china_decision.1005.desc.segway + first_valid = { + triggered_desc = { + trigger = { + var:child_examination_success_chance >= 90 + } + desc = tgp_china_decision.1005.desc.high_score + } + triggered_desc = { + trigger = { + var:child_examination_success_chance >= 60 + } + desc = tgp_china_decision.1005.desc.good_score + } + triggered_desc = { + trigger = { + var:child_examination_success_chance >= 40 + } + desc = tgp_china_decision.1005.desc.passing_score + } + desc = tgp_china_decision.1005.desc.failing + } + } + + theme = imperial_examination + override_background = { reference = study } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + AND = { + var:child_examination_success_chance >= 40 + var:child_examination_success_chance < 90 + } + } + animation = war_over_win + } + triggered_animation = { + trigger = { + var:child_examination_success_chance < 40 + } + animation = disappointed + } + animation = happiness + } + + immediate = { + if = { + limit = { + var:child_examination_success_chance >= 40 + } + change_merit = { + value = { + add = minor_merit_value + add = var:child_examination_success_chance + } + } + dynasty = { + add_dynasty_prestige = 10 + } + # For all characters who pass the exam, we give a flag to check their overall progress at the Imperial Examinations. + add_character_flag = passed_child_exam + remove_character_flag ?= failed_child_exam + } + else = { + add_character_flag = failed_child_exam + add_character_modifier = { + modifier = tgp_child_exam_cooldown_modifier + years = 3 + } + } + } + + widget = { gui = "child_examination_success_chance" container = "custom_widgets_container" } + + # If you had a critical success, you do not get the option to dedicate yourself to studying. + option = { # I have my family to thank for my success. + name = tgp_china_decision.1005.a + trigger = { var:child_examination_success_chance >= 90 } + change_merit = medium_merit_value + ai_chance = { + base = 100 + modifier = { + add = 40 + has_trait = loyal + } + modifier = { + add = 50 + is_adult = no + } + } + } + + option = { # My teachers deserve all the credit. + name = tgp_china_decision.1005.b + trigger = { var:child_examination_success_chance >= 90 } + change_influence = medium_influence_gain + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + + option = { # I need to push myself harder next time! + name = { + text = tgp_china_decision.1005.a_success + trigger = { + var:child_examination_success_chance >= 40 + } + } + name = { + text = tgp_china_decision.1005.a_failure + trigger = { + var:child_examination_success_chance < 40 + } + } + trigger = { var:child_examination_success_chance < 90 } + add_character_modifier = { + modifier = tgp_child_focused_studies_modifier + years = 5 + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_energy = 1 + } + modifier = { + add = 40 + OR = { + has_trait = ambitious + has_trait = diligent + } + } + modifier = { + add = -100 + stress_level < 0 + } + } + } + + option = { # I am pleased with this result. + name = { + text = tgp_china_decision.1005.b_passing + trigger = { + var:child_examination_success_chance >= 40 + } + } + name = { + text = tgp_china_decision.1005.b_failed + trigger = { + var:child_examination_success_chance < 40 + } + } + trigger = { var:child_examination_success_chance < 90 } + + ai_chance = { + base = 100 + modifier = { + add = 40 + OR = { + has_trait = content + has_trait = lazy + } + } + } + } + + after = { + # Time to clean up some variables + remove_character_flag ?= safe_end + remove_variable ?= safe_bets + # And possibly the examiner + scope:examiner = { + if = { + limit = { + NOT = { is_vassal_or_below_of = scope:hegemon } + } + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/tgp/tgp_china_ministry_events.txt b/events/dlc/tgp/tgp_china_ministry_events.txt new file mode 100644 index 00000000..f26e24a0 --- /dev/null +++ b/events/dlc/tgp/tgp_china_ministry_events.txt @@ -0,0 +1,1346 @@ +namespace = tgp_china_ministry + +### EVENT LIST #################################################################### +## 0001 - 0020 Minister of Defense - Grand Campaign GP +## XXXX - XXXX Event Name Here by Author Name Here +################################################################################### + +################################### +# Minister of Defense - Grand Campaign GP +# 0001 - War starts - Minister notification and script logic to start the war +# 0002 - War won +# 0003 - War lost or white peaced +# 0004 - War joins +# 0005 - Great Project ends - timer or all wars were won/lost +# 0006 - Great Project canceled +# 0007 - War starts - Others notification +# By Arkadiusz Majewski +################################### + +# War starts - Minister notification and script logic to start the war +tgp_china_ministry.0001 = { + type = character_event + title = tgp_china_ministry.0001.t + desc = tgp_china_ministry.0001.desc + theme = martial + left_portrait = { + character = root + animation = war_attacker + } + right_portrait = { + trigger = { + scope:contributor != root + } + character = scope:contributor + animation = random_weapon_aggressive + } + lower_right_portrait = { + trigger = { + scope:war_leader != root + } + character = scope:war_leader + } + lower_center_portrait = scope:defender + lower_left_portrait = scope:owner + + immediate = { + start_war = { + cb = grand_campaign_kingdom_invasion_cb + target = scope:defender + target_title = scope:great_project.var:grand_campaign_target_kingdom + } + scope:war_leader = { + random_character_war = { + limit = { + using_cb = grand_campaign_kingdom_invasion_cb + } + save_scope_as = grand_campaign_war + set_variable = { + name = grand_campaign_project + value = scope:great_project + } + } + } + scope:great_project = { + set_variable = { + name = grand_campaign_war + value = scope:grand_campaign_war + } + } + } + + option = { + name = tgp_china_ministry.0001.a + add_character_modifier = { + modifier = tgp_joined_grand_campaign_modifier + } + } + after = { + grand_campaign_update_war_participants_effect = yes + scope:owner = { + if = { + limit = { this != root } + trigger_event = tgp_china_ministry.0007 + } + } + } +} +# War won +tgp_china_ministry.0002 = { + type = character_event + title = tgp_china_ministry.0002.t + desc = tgp_china_ministry.0002.desc + theme = martial + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + character = scope:attacker + animation = random_weapon_celebrate + } + lower_center_portrait = scope:defender + + immediate = { + save_scope_as = owner + custom_tooltip = grand_campaign_kingdom_invasion_cb_victory_desc_attacker + } + + option = { + name = tgp_china_ministry.0002.a + if = { + limit = { + scope:great_project = { + any_in_list = { + variable = grand_campaign_targets + count = all + any_in_de_jure_hierarchy = { + count = all + filter = { + tier = tier_county + } + holder.top_overlord = scope:owner + } + } + } + } + scope:great_project = { + complete_great_project = scope:great_project + } + } + + add_legitimacy = miniscule_legitimacy_gain + custom_tooltip = grand_campaign_won_tt + custom_tooltip = grand_campaign_lost_tt + } +} +# War lost or white peaced +tgp_china_ministry.0003 = { + type = character_event + title = tgp_china_ministry.0003.t + desc = tgp_china_ministry.0003.desc + theme = martial + left_portrait = { + character = root + animation = disappointed + } + right_portrait = { + character = scope:attacker + animation = nervous + } + lower_center_portrait = scope:defender + + immediate = { + save_scope_as = owner + } + + option = { + name = tgp_china_ministry.0003.a + scope:attacker = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = root + CATALYST = catalyst_hegemon_lost_war + } + } + add_legitimacy = miniscule_legitimacy_loss + } +} +# War joins +tgp_china_ministry.0004 = { + type = character_event + title = tgp_china_ministry.0004.t + desc = tgp_china_ministry.0004.desc + theme = martial + left_portrait = { + character = root + animation = war_attacker + } + right_portrait = { + character = scope:war_leader + animation = random_weapon_aggressive + trigger = { + scope:war_leader != root + } + } + lower_right_portrait = scope:owner + lower_center_portrait = scope:target_title.holder + + immediate = { + scope:great_project.var:grand_campaign_war = { + save_scope_as = grand_campaign_war + if = { + limit = { + scope:contributor = { + NOT = { + any_character_war = { this = prev } + } + } + } + add_attacker = scope:contributor + } + } + add_character_modifier = { + modifier = tgp_joined_grand_campaign_modifier + } + custom_tooltip = grand_campaign_added_war_target_tt + } + + option = { + name = tgp_china_ministry.0004.a + } +} +# Great Project ends - timer or all wars were won +tgp_china_ministry.0005 = { + type = character_event + title = tgp_china_ministry.0005.t + desc = { + first_valid = { + triggered_desc = { + trigger = { list_size:titles_won >= list_size:titles_lost } + desc = tgp_china_ministry.0005.desc_won + } + desc = tgp_china_ministry.0005.desc_lost + } + } + theme = martial + left_portrait = { + character = root + triggered_animation = { + trigger = { list_size:titles_won >= list_size:titles_lost } + animation = admiration + } + animation = dismissal + } + right_portrait = { + character = scope:war_leader + triggered_animation = { + trigger = { list_size:titles_won >= list_size:titles_lost } + animation = random_weapon_celebrate + } + animation = shame + } + + immediate = { + scope:great_project.var:grand_campaign_target_kingdom = { + save_scope_as = target_kingdom + } + every_in_list = { + list = all_contributors + if = { + limit = { + list_size:titles_won >= list_size:titles_lost + } + custom_tooltip = grand_campaign_movement_power_gain_tt + if = { + limit = { + exists = var:grand_campaign_won + } + change_variable = { + name = grand_campaign_won + add = 100 + } + } + else = { + set_variable = { + name = grand_campaign_won + value = 100 + } + } + add_merit_if_relevant_effect = { + MERIT = monumental_merit_value + } + } + else = { + custom_tooltip = grand_campaign_movement_power_loss_tt + if = { + limit = { + exists = var:grand_campaign_lost + } + change_variable = { + name = grand_campaign_lost + add = -100 + } + } + else = { + set_variable = { + name = grand_campaign_lost + value = -100 + } + } + } + } + } + + option = { + name = { + trigger = { list_size:titles_won >= list_size:titles_lost } + text = tgp_china_ministry.0005.a_win + } + name = tgp_china_ministry.0005.a_lost + if = { + limit = { + list_size:titles_won >= list_size:titles_lost + } + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + scope:war_leader = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:owner + CATALYST = catalyst_grand_campaign + } + add_merit_if_relevant_effect = { + MERIT = 1000 + } + } + } + else = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_loss } + scope:war_leader = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:owner + CATALYST = catalyst_grand_campaign_lost + } + change_influence = major_influence_loss + } + } + } +} +# Great Project canceled +tgp_china_ministry.0006 = { + type = letter_event + opening = tgp_china_ministry.0006.opening + desc = tgp_china_ministry.0006.desc + sender = scope:founder + + immediate = { + if = { + limit = { + this != scope:owner + this != scope:founder + } + add_opinion = { + modifier = wasted_our_efforts + target = scope:owner + opinion = -30 + } + } + } + + option = { + name = tgp_china_ministry.0006.a + } +} +# War starts - Others notification +tgp_china_ministry.0007 = { + type = character_event + title = tgp_china_ministry.0007.t + desc = tgp_china_ministry.0007.desc + theme = martial + left_portrait = { + character = root + animation = war_attacker + } + right_portrait = { + character = scope:war_leader + animation = random_weapon_aggressive + } + lower_center_portrait = scope:defender + + immediate = { + show_as_tooltip = { + scope:war_leader = { + start_war = { + cb = grand_campaign_kingdom_invasion_cb + target = scope:defender + target_title = scope:great_project.var:grand_campaign_target_kingdom + } + } + } + } + + option = { + name = tgp_china_ministry.0001.a + } +} + +# Great Project ends - Others notification +tgp_china_ministry.0008 = { + type = character_event + title = tgp_china_ministry.0005.t + desc = { + first_valid = { + triggered_desc = { + trigger = { list_size:titles_won >= list_size:titles_lost } + desc = tgp_china_ministry.0005.desc_won + } + desc = tgp_china_ministry.0005.desc_lost + } + } + theme = martial + left_portrait = { + character = root + triggered_animation = { + trigger = { list_size:titles_won >= list_size:titles_lost } + animation = random_weapon_celebrate + } + animation = shame + } + right_portrait = { + character = scope:owner + triggered_animation = { + trigger = { list_size:titles_won >= list_size:titles_lost } + animation = admiration + } + animation = dismissal + } + cooldown = { days = 1 } + + immediate = { + scope:great_project.var:grand_campaign_target_kingdom = { + save_scope_as = target_kingdom + } + show_as_tooltip = { + every_in_list = { + list = all_contributors + if = { + limit = { + list_size:titles_won >= list_size:titles_lost + } + custom_tooltip = grand_campaign_movement_power_gain_tt + if = { + limit = { + exists = var:grand_campaign_won + } + change_variable = { + name = grand_campaign_won + add = 100 + } + } + else = { + set_variable = { + name = grand_campaign_won + value = 100 + } + } + add_merit_if_relevant_effect = { + MERIT = monumental_merit_value + } + } + else = { + custom_tooltip = grand_campaign_movement_power_loss_tt + if = { + limit = { + exists = var:grand_campaign_lost + } + change_variable = { + name = grand_campaign_lost + add = -100 + } + } + else = { + set_variable = { + name = grand_campaign_lost + value = -100 + } + } + } + } + } + } + + option = { + name = { + trigger = { list_size:titles_won >= list_size:titles_lost } + text = tgp_china_ministry.0005.a_win + } + name = tgp_china_ministry.0005.a_lost + show_as_tooltip = { + scope:owner = { + if = { + limit = { + list_size:titles_won >= list_size:titles_lost + } + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + scope:war_leader = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:owner + CATALYST = catalyst_grand_campaign + } + add_merit_if_relevant_effect = { + MERIT = 1000 + } + } + } + else = { + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_loss } + scope:war_leader = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = scope:owner + CATALYST = catalyst_grand_campaign_lost + } + change_influence = major_influence_loss + } + } + } + } + } +} +# Minister of Revenue - Budget events +# Top liege is enforced to enact a new budget +tgp_china_ministry.0100 = { + type = character_event + title = tgp_china_ministry.0100.t + desc = { + desc = tgp_china_ministry.0100.intro + desc = newline.desc + # Desc depending on if you have someone to tell you about the budget or not + first_valid = { + triggered_desc = { + trigger = { + exists = scope:steward + } + desc = tgp_china_ministry.0100.steward_desc + } + desc = tgp_china_ministry.0100.solo_desc + } + # Reason for needing a new budget + first_valid = { + triggered_desc = { + trigger = { + monthly_character_treasury_balance < -50 + } + desc = tgp_china_ministry.0100.deficit_desc + } + triggered_desc = { + trigger = { + character_treasury_new_budget_capacity >= { value = character_treasury_budget_capacity multiply = 1.3 } + } + desc = tgp_china_ministry.0100.income_desc + } + desc = tgp_china_ministry.0100.fallback_desc + } + triggered_desc = { + trigger = { + exists = scope:steward + } + desc = single_quotation_desc + } + } + theme = stewardship + left_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_celestial + } + animation = emperor + } + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_administrative + } + animation = acknowledging + } + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_japan_administrative + } + animation = fanning + } + animation = steward + } + right_portrait = { + character = scope:steward + animation = stressed_teacher + } + + trigger = { + this = top_liege + has_treasury = yes + OR = { # You are not travelling, but we don't mind if AI is + is_ai = yes + is_travelling = no + } + # You should enact a new budget if you fulfill ANY of these reasons + OR = { + # The AI hasn't set a new budget recently + AND = { + is_ai = yes + treasury_months_since_budget_enact_date >= 60 + } + # The player hasn't set a new budget recently (time is more generous than for the AI) + treasury_months_since_budget_enact_date >= 96 + # Left over treasury is more than 30% larger than the last budget + character_treasury_new_budget_capacity >= { value = character_treasury_budget_capacity multiply = 1.3 } + # You are running too big a deficit + monthly_character_treasury_balance < -50 + } + } + + immediate = { + save_scope_as = treasury_ruler + # Find and save a suitable character who wants to update the budget + if = { + limit = { exists = cp:councillor_steward } + cp:councillor_steward = { + save_scope_as = steward + } + } + else_if = { + limit = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { + save_scope_as = steward + } + } + else_if = { + limit = { exists = cp:minister_personnel } + cp:minister_personnel = { + save_scope_as = steward + } + } + else_if = { + limit = { any_vassal = { count > 0 } } + random_vassal = { + weight = { + base = 1 + modifier = { + has_same_government = liege + add = 5 + } + modifier = { + vassal_contract_has_flag = celestial_civil_appointment + add = 20 + } + } + + save_scope_as = steward + } + } + + # If we have a character, let's find their preferred budget + if = { + limit = { + exists = scope:steward + government_has_flag = government_is_celestial + } + random_list = { + 10 = { + trigger = { + prefers_salary_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = salary_budget + } + 10 = { + trigger = { + prefers_ministry_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = ministry_budget + } + 10 = { + trigger = { + prefers_military_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = military_budget + } + 10 = { + trigger = { + prefers_hegemon_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = hegemon_budget + } + } + } + else_if = { + limit = { exists = scope:steward } + random_list = { + 10 = { + trigger = { + prefers_salary_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = meritocratic_salary_budget + } + 10 = { + trigger = { + prefers_military_favored_budget_trigger = { CHARACTER = scope:steward } + } + save_scope_as = meritocratic_military_budget + } + } + } + } + + option = { # Set a budget + name = tgp_china_ministry.0100.a + + # You get to pick a specific budget suggestion + if = { + limit = { is_ai = no } + custom_tooltip = tgp_china_ministry.0100.a_tooltip + trigger_event = tgp_china_ministry.0101 + } + else = { + if = { # Salary favored budget + limit = { + government_has_flag = government_is_celestial + prefers_salary_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_salary_budget_effect = yes + } + else_if = { # Ministry favored budget + limit = { + government_has_flag = government_is_celestial + prefers_ministry_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_ministry_budget_effect = yes + } + else_if = { # Military favored budget + limit = { + government_has_flag = government_is_celestial + prefers_military_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_military_budget_effect = yes + } + else_if = { # Hegemon favored budget + limit = { + government_has_flag = government_is_celestial + prefers_hegemon_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_hegemon_budget_effect = yes + } + else_if = { # If no preference exists, pick a balanced budget + limit = { + government_has_flag = government_is_celestial + } + tgp_treasury_enact_balanced_budget_effect = yes + } + # Non-Celestial + else_if = { # Salary favored budget + limit = { + prefers_salary_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_meritocratic_salary_budget_effect = yes + } + else_if = { # Military favored budget + limit = { + prefers_military_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + tgp_treasury_enact_meritocratic_military_budget_effect = yes + } + else = { # If no preference exists, pick a balanced budget + tgp_treasury_enact_meritocratic_balanced_budget_effect = yes + } + } + + ai_chance = { + base = 0 + } + } + + option = { # Keep the existing budget + name = tgp_china_ministry.0100.b + + enact_treasury_budgets_no_costs = yes + + ai_chance = { + base = 0 + } + } + + option = { # Let the minister handle the budget for you + trigger = { + exists = scope:steward + } + name = tgp_china_ministry.0100.c + + # The minister will pick a suitable budget + # Celestial + if = { # Salary favored budget + limit = { + exists = scope:salary_budget + } + tgp_treasury_enact_salary_budget_effect = yes + } + else_if = { # Ministry favored budget + limit = { + exists = scope:ministry_budget + } + tgp_treasury_enact_ministry_budget_effect = yes + } + else_if = { # Military favored budget + limit = { + exists = scope:military_budget + } + tgp_treasury_enact_military_budget_effect = yes + } + else_if = { # Hegemon favored budget + limit = { + exists = scope:hegemon_budget + } + tgp_treasury_enact_hegemon_budget_effect = yes + } + else_if = { # If no preference exists, pick a balanced budget + limit = { + government_has_flag = government_is_celestial + } + tgp_treasury_enact_balanced_budget_effect = yes + } + # Non-Celestial + else_if = { # Salary favored budget + limit = { + exists = scope:meritocratic_salary_budget + } + tgp_treasury_enact_meritocratic_salary_budget_effect = yes + } + else_if = { # Military favored budget + limit = { + exists = scope:meritocratic_military_budget + } + tgp_treasury_enact_meritocratic_military_budget_effect = yes + } + else = { # If no preference exists, pick a balanced budget + tgp_treasury_enact_meritocratic_balanced_budget_effect = yes + } + + ai_chance = { + base = 100 + } + } +} + +# Pick which budget to enact +tgp_china_ministry.0101 = { + type = character_event + title = tgp_china_ministry.0100.t + desc = tgp_china_ministry.0101.desc + theme = stewardship + left_portrait = { + character = root + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_celestial + } + animation = emperor + } + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_administrative + } + animation = acknowledging + } + triggered_animation = { + trigger = { + exists = scope:steward + government_has_flag = government_is_japan_administrative + } + animation = fanning + } + animation = steward + } + right_portrait = { + character = scope:steward + animation = stressed_teacher + } + + option = { # Salary budget + trigger = { + government_has_flag = government_is_celestial + } + name = tgp_china_ministry.0101.a + + flavor = tgp_treasury_enact_salary_budget_info_desc + tgp_treasury_enact_salary_budget_effect = yes + } + + option = { # Ministry budget + trigger = { + government_has_flag = government_is_celestial + } + name = tgp_china_ministry.0101.b + + flavor = tgp_treasury_enact_ministry_budget_info_desc + tgp_treasury_enact_ministry_budget_effect = yes + } + + option = { # Military budget + trigger = { + government_has_flag = government_is_celestial + } + name = tgp_china_ministry.0101.c + + flavor = tgp_treasury_enact_military_budget_info_desc + tgp_treasury_enact_military_budget_effect = yes + } + + option = { # Hegemon budget + trigger = { + government_has_flag = government_is_celestial + } + name = tgp_china_ministry.0101.d + + flavor = tgp_treasury_enact_hegemon_budget_info_desc + tgp_treasury_enact_hegemon_budget_effect = yes + } + + option = { # Balanced budget + trigger = { + government_has_flag = government_is_celestial + } + name = tgp_china_ministry.0101.e + + flavor = tgp_treasury_enact_balanced_budget_info_desc + tgp_treasury_enact_balanced_budget_effect = yes + } + + option = { # Meritocratic - Salary budget + trigger = { + NOT = { government_has_flag = government_is_celestial } + } + name = tgp_china_ministry.0101.a + + flavor = tgp_treasury_enact_salary_budget_info_desc + tgp_treasury_enact_meritocratic_salary_budget_effect = yes + } + + option = { # Meritocratic - Military budget + trigger = { + NOT = { government_has_flag = government_is_celestial } + } + name = tgp_china_ministry.0101.c + + flavor = tgp_treasury_enact_military_budget_info_desc + tgp_treasury_enact_meritocratic_military_budget_effect = yes + } + + option = { # Meritocratic - Balanced budget + trigger = { + NOT = { government_has_flag = government_is_celestial } + } + name = tgp_china_ministry.0101.e + + flavor = tgp_treasury_enact_balanced_budget_info_desc + tgp_treasury_enact_meritocratic_balanced_budget_effect = yes + } +} + +# The minister of revenue brings a budget suggestion +tgp_china_ministry.0200 = { + type = character_event + title = tgp_china_ministry.0200.t + desc = { + desc = tgp_china_ministry.0200.desc + } + + theme = stewardship + + left_portrait = { + character = root + triggered_animation = { + trigger = { + stewardship >= 10 + } + animation = chancellor + } + animation = boredom + } + right_portrait = { + character = scope:minister_of_revenue + animation = holding_scrolls + } + + immediate = { + # If we want to increase a single budget category, let's pick something to lower + if = { + limit = { exists = scope:budget_suggestion_salary_increase } + if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_military_law } + } + save_scope_as = budget_increase_salary_decrease_military + } + else_if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_ministry_law } + } + save_scope_as = budget_increase_salary_decrease_ministry + } + else = { + save_scope_as = budget_increase_salary_no_decrease + } + } + if = { + limit = { exists = scope:budget_suggestion_ministry_increase } + if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_military_law } + } + save_scope_as = budget_increase_ministry_decrease_military + } + else_if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_salary_law } + } + save_scope_as = budget_increase_ministry_decrease_salary + } + else = { + save_scope_as = budget_increase_ministry_no_decrease + } + } + if = { + limit = { exists = scope:budget_suggestion_military_increase } + if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_ministry_law } + } + save_scope_as = budget_increase_military_decrease_ministry + } + else_if = { + limit = { + NOT = { realm_law_group_at_minimum_level = budget_allocation_salary_law } + } + save_scope_as = budget_increase_military_decrease_salary + } + else = { + save_scope_as = budget_increase_military_no_decrease + } + } + } + + option = { # Excellent. Let's put this budget into effect immediately. + name = tgp_china_ministry.0200.a + + switch = { + trigger = exists + # Suggested budget templates + scope:budget_suggestion_salary_template = { + tgp_treasury_enact_salary_budget_effect = yes + } + scope:budget_suggestion_ministry_template = { + tgp_treasury_enact_ministry_budget_effect = yes + } + scope:budget_suggestion_military_template = { + tgp_treasury_enact_military_budget_effect = yes + } + scope:budget_suggestion_hegemon_template = { + tgp_treasury_enact_hegemon_budget_effect = yes + } + scope:budget_suggestion_balanced_template = { + tgp_treasury_enact_balanced_budget_effect = yes + } + # Suggested minor edits + # Salary + scope:budget_increase_salary_decrease_military = { + change_realm_law_level = { law_group = budget_allocation_salary_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_military_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_salary_decrease_ministry = { + change_realm_law_level = { law_group = budget_allocation_salary_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_ministry_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_salary_no_decrease = { + change_realm_law_level = { law_group = budget_allocation_salary_law change = 1 } + enact_treasury_budgets_no_costs = yes + } + # Ministry + scope:budget_increase_ministry_decrease_military = { + change_realm_law_level = { law_group = budget_allocation_ministry_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_military_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_ministry_decrease_salary = { + change_realm_law_level = { law_group = budget_allocation_ministry_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_salary_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_ministry_no_decrease = { + change_realm_law_level = { law_group = budget_allocation_ministry_law change = 1 } + enact_treasury_budgets_no_costs = yes + } + # Military + scope:budget_increase_military_decrease_ministry = { + change_realm_law_level = { law_group = budget_allocation_military_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_ministry_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_military_decrease_salary = { + change_realm_law_level = { law_group = budget_allocation_military_law change = 1 } + change_realm_law_level = { law_group = budget_allocation_salary_law change = -1 } + enact_treasury_budgets_no_costs = yes + } + scope:budget_increase_military_no_decrease = { + change_realm_law_level = { law_group = budget_allocation_military_law change = 1 } + enact_treasury_budgets_no_costs = yes + } + } + + # Notify the minister + scope:minister_of_revenue = { + send_interface_toast = { + type = event_toast_text_and_effect_good + title = tgp_china_ministry.0200.toast_t_success + desc = tgp_china_ministry.0200.toast_desc_success + left_icon = root + + change_merit = major_merit_gain + add_prestige = major_prestige_gain + } + } + + ai_chance = { + base = 75 + + # General modifiers + opinion_modifier = { + opinion_target = scope:minister_of_revenue + multiplier = 0.5 + } + modifier = { + add = 100 + has_trait = lazy + } + modifier = { + add = 50 + has_trait = content + } + modifier = { + add = 50 + has_trait = fickle + } + modifier = { + add = 25 + has_trait = humble + } + modifier = { + add = 50 + stress_level > 0 + } + + # Does the AI like the specific suggestion? + modifier = { + add = 50 + OR = { + exists = scope:budget_suggestion_salary_template + exists = scope:budget_increase_salary_decrease_military + exists = scope:budget_increase_salary_decrease_ministry + exists = scope:budget_increase_salary_no_decrease + } + prefers_salary_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + modifier = { + add = 50 + exists = scope:budget_suggestion_ministry_template + OR = { + exists = scope:budget_suggestion_ministry_template + exists = scope:budget_increase_ministry_decrease_military + exists = scope:budget_increase_ministry_decrease_salary + exists = scope:budget_increase_ministry_no_decrease + } + prefers_ministry_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + modifier = { + add = 50 + exists = scope:budget_suggestion_military_template + OR = { + exists = scope:budget_suggestion_military_template + exists = scope:budget_increase_military_decrease_ministry + exists = scope:budget_increase_military_decrease_salary + exists = scope:budget_increase_military_no_decrease + } + prefers_military_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + modifier = { + add = 50 + exists = scope:budget_suggestion_hegemon_template + prefers_hegemon_favored_budget_trigger = { CHARACTER = scope:treasury_ruler } + } + } + } + + option = { # I'm afraid I have other plans for the treasury. + name = tgp_china_ministry.0200.b + + scope:minister_of_revenue = { + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -20 + } + + # Notify the minister + send_interface_toast = { + type = event_toast_text_bad + title = tgp_china_ministry.0200.toast_t_failure + desc = tgp_china_ministry.0200.toast_desc_failure + left_icon = root + } + } + + ai_chance = { + base = 50 + + opinion_modifier = { + opinion_target = scope:minister_of_revenue + multiplier = -0.5 + } + modifier = { + add = 50 + has_trait = paranoid + } + modifier = { + add = 50 + has_trait = ambitious + } + modifier = { + add = 25 + has_trait = eccentric + } + modifier = { + add = 20 + has_trait = diligent + } + modifier = { + factor = 0 + stewardship < 5 + } + modifier = { + factor = 0 + has_trait = trusting + } + } + } +} + +# Honors Bestowed +tgp_china_ministry.1000 = { + type = character_event + title = tgp_china_ministry.1000.t + desc = tgp_china_ministry.1000.desc + window = big_event_window + override_background = { reference = tgp_asia_throne_room } + theme = merit + left_portrait = { + character = root + animation = prostration + camera = shop_camera_baby_angle_90 + } + right_portrait = { + character = scope:huangdi + animation = emperor + camera = shop_camera_baby_angle_300 + } + widget = { gui = event_window_widget_vfx_godray container = foreground_shader_vfx_container } + + immediate = { + top_liege = { + save_scope_as = huangdi + } + } + + option = { + name = tgp_china_ministry.1000.a + reverse_add_opinion = { + target = root.top_liege + modifier = honorable_opinion + opinion = 50 + } + add_character_modifier = tgp_personal_honors_modifier + if = { + limit = { + has_title = title:e_minister_chancellor + } + house = { + add_house_modifier = tgp_e_minister_chancellor_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_censor + } + house = { + add_house_modifier = tgp_e_minister_censor_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_grand_marshal + } + house = { + add_house_modifier = tgp_e_minister_grand_marshal_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_personnel + } + house = { + add_house_modifier = tgp_e_minister_of_personnel_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_revenue + } + house = { + add_house_modifier = tgp_e_minister_of_revenue_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_rites + } + house = { + add_house_modifier = tgp_e_minister_of_rites_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_war + } + house = { + add_house_modifier = tgp_e_minister_of_war_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_justice + } + house = { + add_house_modifier = tgp_e_minister_of_justice_modifier + } + } + else_if = { + limit = { + has_title = title:e_minister_of_works + } + house = { + add_house_modifier = tgp_e_minister_of_works_modifier + } + } + dynasty = { add_dynasty_prestige = 2000 } + } +} diff --git a/events/dlc/tgp/tgp_china_yearly_events.txt b/events/dlc/tgp/tgp_china_yearly_events.txt new file mode 100644 index 00000000..12cf1e99 --- /dev/null +++ b/events/dlc/tgp/tgp_china_yearly_events.txt @@ -0,0 +1,1162 @@ +#China Yearly Events + +namespace = tgp_china_yearly + +# tgp_china_yearly.0001 - Charitable Acts +# tgp_china_yearly.0005 - Child mourns the loss of a father +# tgp_china_yearly.0010 - Hack poet peddles supposedly lucky poems +# tgp_china_yearly.0015 - Settle a dispute between a merchant and a peasant +# tgp_china_yearly.0020 - County has unpaid back-taxes + +########################################### +# Charitable Acts +# 0001 - 0004 +########################################### + +tgp_china_yearly.0001 = { + type = character_event + title = tgp_china_yearly.0001.t + desc = tgp_china_yearly.0001.desc + + theme = merit + override_background = { reference = tgp_holysite_asia } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:begging_peasant + animation = beg + outfit_tags = { beggar_rags } + hide_info = yes + } + + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + highest_held_title_tier <= tier_kingdom + is_independent_ruler = no + short_term_gold >= medium_gold_value + any_held_county = { + county_control <= 60 + root.location.county = this + } + } + + immediate = { + random_held_county = { + limit = { + county_control <= 60 + root.location.county = this + } + save_scope_as = poor_county + } + create_character = { + template = generic_peasant_character + location = root.location + save_scope_as = begging_peasant + } + } + + option = { #Donate money to the poor. + name = tgp_china_yearly.0001.a + flavor = tgp_china_yearly.0001.a.flavor + remove_short_term_gold = medium_gold_value + scope:poor_county = { + change_county_control = 10 + } + change_merit = minor_merit_gain + + stress_impact = { + greedy = medium_stress_impact_gain + generous = medium_stress_impact_loss + compassionate = medium_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = medium_chance_impact_positive_ai_value + } + modifier = { + OR = { + has_trait = greedy + } + factor = 0 + } + modifier = { + short_term_gold <= medium_gold_value + factor = 0 + } + } + } + + option = { #Beat them back to work! + name = tgp_china_yearly.0001.b + + scope:poor_county = { + add_county_modifier = { + modifier = tgp_forced_labor_modifier + years = 5 + } + } + + random_list = { + 80 = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_china_yearly.0001.b.success + add_character_modifier = { + modifier = tgp_lowborn_chastiser_modifier + years = 5 + } + } + } + 20 = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_china_yearly.0001.b.critical + add_character_modifier = { + modifier = tgp_lowborn_tenderizer_modifier + years = 5 + } + } + } + } + + stress_impact = { + greedy = medium_stress_impact_loss + generous = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = medium_chance_impact_positive_ai_value + ai_zeal = tiny_chance_impact_positive_ai_value + } + modifier = { + OR = { + has_trait = generous + has_trait = compassionate + } + factor = 0 + } + } + } + + option = { #I'm not learned enough to settle this. + name = tgp_china_yearly.0001.c + flavor = tgp_china_yearly.0001.c.flavor + + trigger = { + OR = { + has_trait_xp = { + trait = confucian_education + value < 100 + } + NOT = { has_trait = confucian_education } + } + } + + #Add small amount of Confucian Education trait. If root does not have the trait, add stress. + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_minor_value + } + } + else = { + stress_impact = { + base = miniscule_stress_impact_gain + lazy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + } + custom_description_no_bullet = { text = tgp_china_yearly_no_education } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = tiny_chance_impact_positive_ai_value + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + option = { #These worldly matters are beneath me. + name = tgp_china_yearly.0001.d + + trigger = { + has_trait_xp = { + trait = confucian_education + value = 100 + } + } + add_stress = medium_stress_impact_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = tiny_chance_impact_positive_ai_value + } + } + } +} + +########################################### +# Child mourns the loss of a parent +# 0005 - 0009 +########################################### + +tgp_china_yearly.0005 = { + type = character_event + title = tgp_china_yearly.0005.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:messenger = { is_knight = yes } + } + desc = tgp_china_yearly.0005.knight + } + desc = tgp_china_yearly.0005.eunuch + } + desc = tgp_china_yearly.0005.outro + } + + theme = merit + + override_background = { reference = courtyard } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:grieving_child + animation = beg + } + + lower_right_portrait = scope:messenger + lower_center_portrait = scope:guardian + + cooldown = { years = 5 } + + trigger = { + is_ai = no + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + highest_held_title_tier <= tier_kingdom + is_independent_ruler = no + any_held_county = { development_level <= terrible_development_level } + OR = { + any_courtier_or_guest = { + is_available_ai_adult = yes + } + number_of_knights > 0 + } + } + + immediate = { + every_pool_character = { + province = root.location + limit = { + age = { 6 12 } + num_of_good_genetic_traits >= 1 + num_of_bad_genetic_traits >= 1 + any_parent = { + count = all + is_alive = no + } + } + save_scope_as = grieving_child + } + if = { + limit = { + NOT = { exists = scope:grieving_child } + } + hidden_effect = { + #Create orphan. + create_character = { + template = tgp_orphan_character + location = root.location + save_scope_as = grieving_child + } + #Orphan needs dead parents (sorry). + create_character = { + template = generic_peasant_character + location = root.location + gender = female + age = { 25 27 } + save_scope_as = orphan_mother + } + create_character = { + template = generic_peasant_character + location = root.location + gender = male + age = { 29 33 } + save_scope_as = orphan_father + } + scope:grieving_child = { + set_mother = scope:orphan_mother + set_father = scope:orphan_father + } + scope:orphan_mother ?= { + silent_disappearance_effect = yes + } + scope:orphan_father ?= { + silent_disappearance_effect = yes + } + } + } + else = { + scope:grieving_child.mother ?= { + save_scope_as = orphan_mother + } + scope:grieving_child.father ?= { + save_scope_as = orphan_father + } + } + #Is mentioned parent woman or man? + if = { + limit = { + faith = { has_doctrine = doctrine_gender_equal } + } + random_list = { + 50 = { + scope:orphan_mother ?= { save_scope_as = parent } + } + 50 = { + scope:orphan_father ?= { save_scope_as = parent } + } + } + } + else_if = { + limit = { + faith = { has_doctrine = doctrine_gender_female_dominated } + } + scope:orphan_mother ?= { save_scope_as = parent } + } + else_if = { + limit = { + faith = { has_doctrine = doctrine_gender_male_dominated } + } + scope:orphan_father ?= { save_scope_as = parent } + } + #Find suitable guardian. + random_courtier = { + limit = { + is_available_ai_adult = yes + num_of_relation_ward < 2 + save_temporary_scope_as = compare_character + scope:grieving_child = { has_ward_guardian_education_match_compare_character_trigger = yes } #Get same education + } + alternative_limit = { + is_available_ai_adult = yes + num_of_relation_ward < 2 + } #Get backup + save_scope_as = guardian + } + #Find eunuch to bring you the child. + random_courtier = { + limit = { + has_court_position = chief_eunuch_court_position + is_available_ai_adult = yes + } + save_scope_as = messenger + } + #if no eunuch, find knight + if = { + limit = { + NOT = { exists = scope:messenger } + } + random_knight = { + limit = { has_trait = compassionate } + save_scope_as = messenger + } + } + #if no knight, find anyone + if = { + limit = { + NOT = { exists = scope:messenger } + } + random_courtier_or_guest = { + limit = { + is_available_ai_adult = yes + } + save_scope_as = messenger + } + } + } + + option = { #I will find a suitable custodian. + name = tgp_china_yearly.0005.a + + trigger = { exists = scope:guardian } + + scope:grieving_child = { + set_relation_guardian = scope:guardian + } + add_prestige = medium_prestige_gain + change_influence = major_influence_loss + add_courtier = scope:grieving_child + + stress_impact = { + compassionate = medium_stress_impact_loss + callous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = tiny_chance_impact_positive_ai_value + ai_greed = tiny_chance_impact_negative_ai_value + } + modifier = { + has_trait = callous + factor = 0 + } + } + } + + option = { #The child cannot honor their father if we take them in. + name = tgp_china_yearly.0005.b + + change_merit = minor_merit_gain + + stress_impact = { + compassionate = medium_stress_impact_gain + callous = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = tiny_chance_impact_negative_ai_value + ai_energy = tiny_chance_impact_positive_ai_value + } + modifier = { + add = 15 + has_trait = callous + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { #I am not ready to decide on this. + name = tgp_china_yearly.0005.c + flavor = tgp_china_yearly.0005.c.flavor + + trigger = { + OR = { + has_trait_xp = { + trait = confucian_education + value < 100 + } + NOT = { has_trait = confucian_education } + } + } + + #Add small amount of Confucian Education trait. If root does not have the trait, add stress. + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_minor_value + } + } + else = { + stress_impact = { + base = miniscule_stress_impact_gain + lazy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + } + custom_description_no_bullet = { text = tgp_china_yearly_no_education } + } + + scope:grieving_child = { + silent_disappearance_effect = yes + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = tiny_chance_impact_positive_ai_value + } + modifier = { + has_trait = compassionate + has_trait = diligent + factor = 0 + } + modifier = { + add = 10 + has_trait = callous + } + } + } + + option = { #We cannot lord over life and death. + name = tgp_china_yearly.0005.d + + trigger = { + has_trait_xp = { + trait = confucian_education + value = 100 + } + } + + add_stress = medium_stress_impact_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = tiny_chance_impact_positive_ai_value + } + } + } +} + +########################################### +# Hack poet peddles supposedly lucky poems +# 0010 - 0014 +########################################### + +tgp_china_yearly.0010 = { + type = character_event + title = tgp_china_yearly.0010.t + desc = tgp_china_yearly.0010.desc + + theme = merit + + override_background = { reference = market } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:starving_lowborn + animation = obsequious_bow + } + + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + highest_held_title_tier <= tier_kingdom + is_independent_ruler = no + is_ai = no + } + + immediate = { + create_character = { + template = generic_peasant_character + location = root.location + trait = deceitful + trait = fickle + trait = eccentric + age = { 21 35 } + save_scope_as = starving_lowborn + } + hidden_effect = { + scope:starving_lowborn ?= { + change_current_weight = -75 + } + scope:starving_lowborn ?= { + random_list = { + 30 = { + add_trait = physique_good_1 + } + 30 = { + add_trait = beauty_good_1 + } + 30 = { + add_trait = intellect_good_1 + } + 10 = { + add_trait = shrewd + } + } + } + } + } + + option = { #Banish him. + name = tgp_china_yearly.0010.a + custom_tooltip = tgp_china_yearly.0010.a.tt + add_dread = minor_dread_gain + change_merit = minor_merit_gain + + scope:starving_lowborn = { + silent_disappearance_effect = yes + } + + stress_impact = { + zealous = medium_stress_impact_loss + callous = minor_stress_impact_loss + } + } + + option = { #Hire him. He could prove useful. + name = tgp_china_yearly.0010.b + add_courtier = scope:starving_lowborn + add_character_modifier = { + modifier = tgp_recruited_charlatan_modifier + years = 5 + } + + stress_impact = { ambitious = medium_stress_impact_loss } + } + + option = { #I wonder what the books say about this. + name = tgp_china_yearly.0010.c + + trigger = { + OR = { + has_trait_xp = { + trait = confucian_education + value < 100 + } + NOT = { has_trait = confucian_education } + } + } + + #Add small amount of Confucian Education trait. If root does not have the trait, add stress. + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_minor_value + } + } + else = { + stress_impact = { + base = miniscule_stress_impact_gain + lazy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + } + custom_description_no_bullet = { text = tgp_china_yearly_no_education } + } + + scope:starving_lowborn = { + silent_disappearance_effect = yes + } + } + + option = { #I have more important matters to attend. + name = tgp_china_yearly.0010.d + + trigger = { + has_trait_xp = { + trait = confucian_education + value = 100 + } + } + add_stress = medium_stress_impact_loss + } +} + +########################################### +# Settle a dispute between a merchant and a peasant +# 0015 - 0019 +########################################### + +tgp_china_yearly.0015 = { + type = character_event + title = tgp_china_yearly.0015.t + desc = tgp_china_yearly.0015.desc + + theme = merit + + override_background = { reference = market } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:market_vendor + animation = disapproval + } + + lower_right_portrait = { character = scope:traveling_merchant } + + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + highest_held_title_tier <= tier_kingdom + is_independent_ruler = no + } + + immediate = { + create_character = { + template = merchant_template + location = root.location + culture = root.culture + faith = root.faith + trait = honest + trait = diligent + trait = honest + save_scope_as = market_vendor + } + create_character = { + template = merchant_template + location = root.location + culture = root.culture + faith = root.faith + trait = gluttonous + trait = greedy + trait = gregarious + save_scope_as = traveling_merchant + } + } + + option = { #Drive the merchant out. + name = tgp_china_yearly.0015.a + change_merit = minor_merit_gain + + hidden_effect = { + scope:market_vendor = { silent_disappearance_effect = yes } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + } + } + } + + option = { #Allow the merchant to stay, at a cost. + name = tgp_china_yearly.0015.b + add_treasury_or_gold = medium_treasury_or_gold_value + change_merit = minor_merit_loss + stress_impact = { + greedy = medium_stress_loss + diligent = medium_stress_gain + } + hidden_effect = { + if = { + limit = { is_ai = yes } + scope:traveling_merchant = { silent_disappearance_effect = yes } + } + else = { + scope:traveling_merchant = { move_to_pool = yes } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = medium_chance_impact_positive_ai_value + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { #I sush them so I can meditate on my studies. + name = tgp_china_yearly.0015.c + + trigger = { + OR = { + has_trait_xp = { + trait = confucian_education + value < 100 + } + NOT = { has_trait = confucian_education } + } + } + + #Add small amount of Confucian Education trait. If root does not have the trait, lose stress. + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_minor_value + } + } + else = { + stress_impact = { + base = miniscule_stress_impact_gain + lazy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + } + custom_description_no_bullet = { text = tgp_china_yearly_no_education } + } + + hidden_effect = { + scope:traveling_merchant = { silent_disappearance_effect = yes } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = tiny_chance_impact_positive_ai_value + } + modifier = { + has_trait = impatient + has_trait = diligent + factor = 0 + } + } + } + + option = { #Such a petty squabble. + name = tgp_china_yearly.0015.d + + trigger = { + has_trait_xp = { + trait = confucian_education + value = 100 + } + } + add_stress = medium_stress_impact_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = tiny_chance_impact_positive_ai_value + } + } + } + + after = { + scope:market_vendor = { silent_disappearance_effect = yes } + } +} + +########################################### +# County has unpaid back-taxes +# 0020 - 0024 +########################################### + +tgp_china_yearly.0020 = { + type = character_event + title = tgp_china_yearly.0020.t + desc = tgp_china_yearly.0020.desc + + theme = merit + + override_background = { reference = tgp_garden_asia } + + left_portrait = { + character = root + animation = thinking + } + + right_portrait = { + character = scope:tax_official + animation = personality_dishonorable + } + + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + highest_held_title_tier <= tier_kingdom + is_independent_ruler = no + any_held_county = { + is_landless_type_title = no + } + } + + immediate = { + random_held_county = { + limit = { + is_landless_type_title = no + } + save_scope_as = taxless_county + } + root.liege = { + random_councillor = { + limit = { + has_council_position = councillor_steward + NOT = { this = root } + } + alternative_limit = { + NOT = { this = root } + } + save_scope_as = tax_official + } + save_scope_as = tax_liege + } + } + + option = { #Send out the tax collectors. + name = tgp_china_yearly.0020.a + scope:taxless_county = { + change_county_control = medium_county_control_loss + } + scope:tax_liege = { + add_treasury = 50 + add_opinion = { + target = root + modifier = pleased_opinion + opinion = 25 + } + } + + stress_impact = { + ambitious = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + + option = { #Refuse. + name = tgp_china_yearly.0020.b + + change_influence = major_influence_loss + scope:taxless_county = { + add_county_modifier = { + modifier = tgp_unpressed_taxes_modifier + years = 5 + } + } + change_merit = minor_merit_gain + stress_impact = { + compassionate = medium_stress_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } +} + +########################################### +# Governor Appointment Available +# 0030 - 0035 +########################################### + +#tgp_china_yearly.0030 = { +# type = letter_event +# opening = tgp_china_yearly.0030.t +# desc = { +# first_valid = { +# triggered_desc = { +# trigger = { +# scope:title_offerer = { +# has_council_position = minister_personnel +# } +# } +# desc = tgp_china_yearly.0030.desc_minister_of_personel +# } +# triggered_desc = { +# trigger = { +# scope:title_offerer = { +# has_relation_disciple = root +# } +# } +# desc = tgp_china_yearly.0030.desc_elder +# } +# desc = tgp_china_yearly.0030.desc_fellow_confucian +# } +# desc = tgp_china_yearly.0030.desc_intro_outro +# } +# +# sender = scope:title_offerer +# +# cooldown = { years = 10 } +# +# trigger = { +# is_ai = no +# is_landed = no # gentlefolk only +# # You have enough merit to become duke tier, but not enough to become king tier +# merit_level >= merit_level_expected_duchy_value +# merit_level < merit_level_expected_kingdom_value +# liege = { is_available_ai_adult = yes } +# is_available_healthy_adult = yes +# top_liege = { +# any_vassal = { +# government_has_flag = government_is_celestial +# is_governor = yes +# primary_title = { +# tier = tier_duchy +# current_heir != root +# } +# is_ai = yes +# } +# } +# dynasty != top_liege.dynasty +# } +# +# immediate = { +# top_liege = { +# random_vassal = { +# limit = { +# government_has_flag = government_is_celestial +# is_governor = yes +# primary_title = { +# tier = tier_duchy +# current_heir != root +# } +# is_ai = yes +# } +# save_scope_as = title_holder +# primary_title = { save_scope_as = free_title } +# } +# } +# liege = { +# if = { +# limit = { +# this = title:h_china.holder +# } +# if = { +# limit = { +# any_councillor = { +# is_available_ai_adult = yes +# NOT = { +# any_learning_councillor = { exists = this } +# } +# } +# } +# random_councillor = { +# limit = { +# is_available_ai_adult = yes +# NOT = { +# any_learning_councillor = { exists = this } +# } +# } +# weight = { +# base = 1 +# modifier = { +# has_council_position = minister_personnel +# add = 100 +# } +# } +# save_scope_as = title_offerer +# } +# } +# else_if = { +# limit = { +# any_relation = { +# type = elder +# is_available = yes +# } +# } +# random_relation = { +# type = elder +# limit = { +# is_available = yes +# } +# save_scope_as = title_offerer +# } +# } +# else = { +# ordered_vassal_or_below = { +# limit = { +# is_available_ai_adult = yes +# has_trait = governor +# NOT = { this = root } +# } +# order_by = { +# value = 0 +# if = { +# limit = { has_trait_xp = { trait = confucian_education value >= 50 } } +# add = 5 +# } +# if = { +# limit = { has_trait_xp = { trait = confucian_education value >= 75 } } +# add = 25 +# } +# if = { +# limit = { has_trait_xp = { trait = confucian_education value >= 100 } } +# add = 100 +# } +# } +# save_scope_as = title_offerer +# } +# } +# } +# else = { save_scope_as = title_offerer } +# } +# scope:title_offerer = { +# change_influence = medium_influence_loss +# } +# } +# +# option = { # I graciously accept! +# name = tgp_china_yearly.0030.a +# scope:free_title = { +# change_appointment_investment = { +# target = root +# value = root.automated_nomination_merit_investment_value +# } +# } +# reverse_add_opinion = { +# modifier = pleased_opinion +# target = scope:title_offerer +# opinion = 30 +# } +# } +# +# option = { # My education is not yet complete. +# name = tgp_china_yearly.0030.b +# if = { +# limit = { +# NOT = { +# has_trait_xp = { +# trait = confucian_education +# value >= 100 +# } +# } +# } +# if = { +# limit = { +# NOT = { has_trait = confucian_education } +# } +# add_trait = confucian_education +# } +# add_trait_xp = { +# trait = confucian_education +# value = lifestyle_confucian_education_xp_gain_medium_value +# } +# } +# else = { +# add_learning_lifestyle_xp = minor_lifestyle_xp +# } +# reverse_add_opinion = { +# modifier = insulted_opinion +# target = scope:title_offerer +# opinion = -20 +# } +# } +#} diff --git a/events/dlc/tgp/tgp_commission_book.txt b/events/dlc/tgp/tgp_commission_book.txt new file mode 100644 index 00000000..aa558b41 --- /dev/null +++ b/events/dlc/tgp/tgp_commission_book.txt @@ -0,0 +1,1824 @@ +namespace = author_book + +### Author Book - Poetry +author_book.0001 = { + type = character_event + title = author_book.0001.t + desc = author_book.0001.desc + theme = realm + override_background = { reference = study } + + left_portrait = { + character = root + animation = writing + } + + immediate = { + generate_ci_poem_title_effect = yes + if = { + limit = { + num_of_relation_elder > 0 + } + random_relation = { + type = elder + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + num_of_relation_disciple > 0 + } + random_relation = { + type = disciple + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + exists = primary_spouse + } + primary_spouse = { + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_close_family_member = { + count > 0 + is_physically_able_adult = yes + } + } + random_close_family_member = { + limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_courtier = { + is_physically_able_adult = yes + } + } + random_courtier = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else = { #We only get here if there are no physically able adults in your own court. + top_liege = { + random_vassal = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + } + } + + option = { + name = author_book.0001.a #I will choose this tune! + add_prestige = minor_prestige_gain + custom_tooltip = author_book.0001.a.tt + save_scope_value_as = { + name = topic + value = flag:poem_own + } + } + option = { + name = author_book.0001.b #I will let my elder/spouse/other select one + custom_tooltip = author_book.0001.b.tt + scope:trusted_influencer = { + add_opinion = { + opinion = 30 + modifier = paid_me_respect + target = root + } + } + save_scope_value_as = { + name = topic + value = flag:poem_friend + } + } + after = { + trigger_event = { + id = author_book.1000 + days = 5 + } + stress_impact = { + base = minor_stress_impact_gain + lazy = minor_stress_impact_gain + lifestyle_poet = minor_stress_impact_loss #offsets penalty a bit + } + } +} + +#Author Book Prose +author_book.0004 = { + type = character_event + title = author_book.0004.t + desc = author_book.0004.desc + theme = realm + + override_background = { + + reference = study + } + + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + if = { + limit = { + num_of_relation_elder > 0 + } + random_relation = { + type = elder + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + num_of_relation_disciple > 0 + } + random_relation = { + type = disciple + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + exists = primary_spouse + } + primary_spouse = { + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_close_family_member = { + count > 0 + is_physically_able_adult = yes + } + } + random_close_family_member = { + limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_courtier = { + is_physically_able_adult = yes + } + } + random_courtier = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else = { #We only get here if there are no physically able adults in your own court. + top_liege = { + random_vassal = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + } + } + + option = { + name = author_book.0004.a #A Work of History + custom_tooltip = author_book.0004.a.tt + save_scope_value_as = { + name = topic + value = flag:prose_history + } + } + option = { + name = author_book.0004.b #A Philosophical Essay + custom_tooltip = author_book.0004.b.tt + + save_scope_value_as = { + name = topic + value = flag:prose_philosophy + } + } + after = { + add_character_modifier = { + modifier = writing_prose + months = 6 + } + trigger_event = { + id = author_book.1000 + months = 6 + } + stress_impact = { + base = medium_stress_impact_gain + lazy = minor_stress_impact_gain + journaller = minor_stress_impact_loss #offsets penalty a bit + confucian_education = minor_stress_impact_loss #offsets penalty a bit + } + } +} + +#Author Book Scholarship +author_book.0005 = { + type = character_event + title = author_book.0005.t + desc = author_book.0005.desc + theme = realm + + override_background = { + + reference = study + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + + + immediate = { + if = { + limit = { + num_of_relation_elder > 0 + } + random_relation = { + type = elder + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + num_of_relation_disciple > 0 + } + random_relation = { + type = disciple + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + exists = primary_spouse + } + primary_spouse = { + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_close_family_member = { + count > 0 + is_physically_able_adult = yes + } + } + random_close_family_member = { + limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else_if = { + limit = { + any_courtier = { + is_physically_able_adult = yes + } + } + random_courtier = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + else = { #We only get here if there are no physically able adults in your own court. + top_liege = { + random_vassal = { + limit = { + has_any_mild_good_relationship_with_character_trigger = { + CHARACTER = ROOT + } + } + alternative_limit = { + is_physically_able_adult = yes + } + save_scope_as = trusted_influencer + } + } + } + } + + option = { + name = author_book.0005.a #Geography + custom_tooltip = author_book.0005.a.tt + save_scope_value_as = { + name = topic + value = flag:monograph_geography + } + } + option = { + name = author_book.0005.b #Mathematics + custom_tooltip = author_book.0005.b.tt + save_scope_value_as = { + name = topic + value = flag:monograph_mathematics + } + } + after = { + add_character_modifier = { + modifier = writing_monograph + years = 1 + } + trigger_event = { + id = author_book.1000 + years = 1 + } + stress_impact = { + base = major_stress_impact_gain + lazy = minor_stress_impact_gain + journaller = minor_stress_impact_loss #offsets penalty a bit + confucian_education = minor_stress_impact_loss #offsets penalty a bit + } + } +} + + + +# Finish Event +author_book.1000 = { + type = character_event + title = author_book.1000.t + desc = { + #Poems + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + desc = author_book.1000.poem_intro.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + scope:quality_of_artifact = flag:weak + } + desc = author_book.1000.poem_weak.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + scope:quality_of_artifact = flag:mid + } + desc = author_book.1000.poem_mid.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + scope:quality_of_artifact = flag:great + } + desc = author_book.1000.poem_great.desc + } + #Prose + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + } + desc = author_book.1000.prose_intro.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + scope:quality_of_artifact = flag:weak + } + desc = author_book.1000.prose_weak.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + scope:quality_of_artifact = flag:mid + } + desc = author_book.1000.prose_mid.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + scope:quality_of_artifact = flag:great + } + desc = author_book.1000.prose_great.desc + } + #Scholarship + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:monograph_geography + scope:topic = flag:monograph_mathematics + } + } + desc = author_book.1000.scholarship_intro.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:monograph_geography + scope:topic = flag:monograph_mathematics + } + scope:quality_of_artifact = flag:weak + } + desc = author_book.1000.scholarship_weak.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:monograph_geography + scope:topic = flag:monograph_mathematics + } + scope:quality_of_artifact = flag:mid + } + desc = author_book.1000.scholarship_mid.desc + } + triggered_desc = { + trigger = { + OR = { + scope:topic = flag:monograph_geography + scope:topic = flag:monograph_mathematics + } + scope:quality_of_artifact = flag:great + } + desc = author_book.1000.scholarship_great.desc + } + } + + theme = realm + + override_background = { #Poetry + trigger = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + reference = relaxing_room + } + override_background = { #Prose + trigger = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + } + reference = garden + } + override_background = { #Scholarship + trigger = { + OR = { + scope:topic = flag:monograph_geography + scope:topic = flag:monograph_mathematics + } + } + reference = courtyard + } + + left_portrait = { + character = root + animation = writing #We change the background in each event but not the animation, the background is what root is writing about + } + right_portrait = { # An elder, or other influencer + character = scope:trusted_influencer + animation = admiration + } + artifact = { # To display the artifact in the event-window + trigger = { exists = scope:newly_created_artifact } + target = scope:newly_created_artifact + position = lower_right_portrait + } + + immediate = { + save_scope_as = author + #First we make the artifact, then we assign effects and descriptions. + hidden_effect = { + if = { #Are we writing a poem? + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + if = { + limit = { + scope:topic = flag:poem_friend + } + generate_ci_poem_title_effect = yes #We need a title + } + create_artifact = { + name = ci_poem_name + type = miscellaneous + creator = root + description = TODO #This is replaced below + visuals = scroll + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = 50 + quality = 50 + } + } + else = { #For Prose and Scholarship we generate a book artifact + if = { + limit = { + artifacts_use_indian_books_trigger = yes + } + create_artifact = { + name = TODO #This is replaced below + type = journal + creator = root + description = TODO #This is replaced below + visuals = indian_book + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = 50 + quality = 50 + } + } + else = { + create_artifact = { + name = TODO #This is replaced below + type = journal + creator = root + description = TODO #This is replaced below + visuals = book + modifier = artifact_placeholder_modifier + save_scope_as = newly_created_artifact + wealth = 50 + quality = 50 + } + } + } + } + + #Common effect for adding modifiers! + hidden_effect_new_object = { + if = { #Poems + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + #First we randomize the theme: + random_list = { + 1 = { + save_scope_value_as = { + name = poetry_theme + value = flag:love + } + save_scope_value_as = { + name = poetry_theme + value = flag:nature + } + save_scope_value_as = { + name = poetry_theme + value = flag:longing + } + save_scope_value_as = { + name = poetry_theme + value = flag:separation + } + save_scope_value_as = { + name = poetry_theme + value = flag:sadness_and_pain + } + save_scope_value_as = { + name = poetry_theme + value = flag:philosophy + } + save_scope_value_as = { + name = poetry_theme + value = flag:mythological_events + } + save_scope_value_as = { + name = poetry_theme + value = flag:daily_chores + } + save_scope_value_as = { + name = poetry_theme + value = flag:daily_chores + } + save_scope_value_as = { + name = poetry_theme + value = flag:historical_events + } + } + } + #Then we decide the skill level: + random_list = { + 33 = { + trigger = { + OR = { + NOT = { has_trait = lifestyle_poet } + AND = { + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value < 60 + } + } + } + } + modifier = { + trigger = { + has_trait = lifestyle_poet + } + add = -10 + } + modifier = { + trigger = { + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value > 20 + } + } + add = -10 + } + modifier = { + trigger = { + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value > 40 + } + } + add = -10 + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:weak + } + } + 33 = { + save_scope_value_as = { + name = quality_of_artifact + value = flag:mid + } + + } + 33 = { + trigger = { + has_trait = lifestyle_poet + } + modifier = { + trigger = { + has_trait_xp = { + trait = lifestyle_poet + value > 40 + } + } + add = 10 + } + modifier = { + trigger = { + has_trait_xp = { + trait = lifestyle_poet + value > 60 + } + } + add = 17 + } + modifier = { + trigger = { + has_trait_xp = { + trait = lifestyle_poet + value > 80 + } + } + add = 20 + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:great + } + } + } + #Now we set the description: + scope:newly_created_artifact = { + set_artifact_description = ci_poem_description_full + #And now we give modifiers: + switch = { + trigger = scope:quality_of_artifact + flag:weak = { + #Piety + set_artifact_rarity_common = yes + random_list = { + 60 = { + add_artifact_modifier = artifact_monthly_piety_2_modifier + } + 30 = { + add_artifact_modifier = artifact_monthly_piety_3_modifier + } + 10 = { + add_artifact_modifier = artifact_monthly_piety_4_modifier + } + } + random_list = { + 80 = { } + 10 = { add_artifact_modifier = artifact_stress_gain_1_modifier } + } + } + flag:mid = { + #Piety + set_artifact_rarity_masterwork = yes + random_list = { + 25 = { + add_artifact_modifier = artifact_monthly_piety_2_modifier + } + 50 = { + add_artifact_modifier = artifact_monthly_piety_3_modifier + } + 25 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_piety_4_modifier + } + } + #Lifestyle XP + random_list = { + 80 = { + add_artifact_modifier = artifact_poetry_1_modifier + } + 20 = { + modifier = { + add = root.diplomacy + } + add_artifact_modifier = artifact_poetry_2_modifier + } + } + #Stress + random_list = { + 70 = { } + 30 = { add_artifact_modifier = artifact_stress_gain_1_modifier } + } + } + flag:great = { + #Piety + set_artifact_rarity_famed = yes + random_list = { + 60 = { + add_artifact_modifier = artifact_monthly_piety_3_modifier + } + 40 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_piety_4_modifier + } + } + #Lifestyle XP + random_list = { + 30 = { + add_artifact_modifier = artifact_poetry_1_modifier + } + 50 = { + add_artifact_modifier = artifact_poetry_2_modifier + } + 20 = { + modifier = { + add = root.diplomacy + } + add_artifact_modifier = artifact_poetry_3_modifier + } + } + + #Stress + add_artifact_modifier = artifact_stress_gain_1_modifier + } + } + } + } + else_if = { #Books + limit = { + OR = { + scope:topic = flag:prose_philosophy + scope:topic = flag:prose_history + } + } + #First we randomize the theme: + + random_list = { + 1 = { + trigger = { scope:topic = flag:prose_philosophy } + save_scope_value_as = { + name = prose_theme + value = flag:commentary_on_the_four_books + } + } + 1 = { + trigger = { scope:topic = flag:prose_philosophy } + save_scope_value_as = { + name = prose_theme + value = flag:logic + } + } + 1 = { + trigger = { scope:topic = flag:prose_philosophy } + save_scope_value_as = { + name = prose_theme + value = flag:critiquing_opponents + } + } + 1 = { + trigger = { scope:topic = flag:prose_philosophy } + save_scope_value_as = { + name = prose_theme + value = flag:sentiments + } + } + 1 = { + trigger = { scope:topic = flag:prose_philosophy } + save_scope_value_as = { + name = prose_theme + value = flag:betterment + } + } + 1 = { #Either + save_scope_value_as = { + name = prose_theme + value = flag:human_existance + } + } + 1 = { #Either + save_scope_value_as = { + name = prose_theme + value = flag:prose_theme_lands_ideals + } + } + 1 = { + trigger = { scope:topic = flag:prose_history } + save_scope_value_as = { + name = prose_theme + value = flag:rewriting_history + } + } + 1 = { + trigger = { scope:topic = flag:prose_history } + save_scope_value_as = { + name = prose_theme + value = flag:bio + } + } + 1 = { + trigger = { scope:topic = flag:prose_history } + save_scope_value_as = { + name = prose_theme + value = flag:emperor + } + } + } + + #Then we decide the skill level: + random_list = { + 33 = { + trigger = { + OR = { + NOT = { has_trait = confucian_education } + AND = { + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value < 60 + } + } + } + } + modifier = { + trigger = { + has_trait = confucian_education + } + add = -10 + } + modifier = { + trigger = { + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value > 20 + } + } + add = -10 + } + modifier = { + trigger = { + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value > 40 + } + } + add = -10 + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:weak + } + } + 33 = { + save_scope_value_as = { + name = quality_of_artifact + value = flag:mid + } + + } + 33 = { + trigger = { + has_trait = confucian_education + } + modifier = { + trigger = { + has_trait_xp = { + trait = confucian_education + value > 40 + } + } + add = 10 + } + modifier = { + trigger = { + has_trait_xp = { + trait = confucian_education + value > 60 + } + } + add = 17 + } + modifier = { + trigger = { + has_trait_xp = { + trait = confucian_education + value > 80 + } + } + add = 20 + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:great + } + } + } + #Now we set the description: + scope:newly_created_artifact = { + #And now we give modifiers: + switch = { + trigger = scope:quality_of_artifact + flag:weak = { + #Influence & Confucian Education Gain + set_artifact_rarity_common = yes + switch = { + trigger = scope:topic + flag:prose_philosophy = { + add_artifact_modifier = artifact_monthly_confucian_education_xp_1_modifier + } + flag:prose_history = { + random_list = { + 70 = { + add_artifact_modifier = artifact_monthly_influence_mult_1_modifier + } + 30 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_influence_mult_2_modifier + } + } + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_1_modifier + + random_list = { + 80 = { } + 10 = { add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_1_modifier } + } + } + flag:mid = { + #Influence & Confucian Education Gain + set_artifact_rarity_masterwork = yes + switch = { + trigger = scope:topic + flag:prose_philosophy = { + add_artifact_modifier = artifact_monthly_confucian_education_xp_2_modifier + } + flag:prose_history = { + random_list = { + 70 = { + add_artifact_modifier = artifact_monthly_influence_mult_2_modifier + } + 30 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_influence_mult_3_modifier + } + } + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_2_modifier + + random_list = { + 40 = { add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_1_modifier } + 60 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_2_modifier + } + } + } + flag:great = { + #Influence & Confucian Education Gain + set_artifact_rarity_famed = yes + switch = { + trigger = scope:topic + flag:prose_philosophy = { + add_artifact_modifier = artifact_monthly_confucian_education_xp_3_modifier + } + flag:prose_history = { + random_list = { + 70 = { + add_artifact_modifier = artifact_monthly_influence_mult_3_modifier + } + 30 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_influence_mult_4_modifier + } + } + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_2_modifier + + add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_2_modifier + } + } + set_artifact_description = prose_book_description + set_artifact_name = prose_name_hashcollision + } + } + else = { #Science! + + #First we randomize the theme: + if = { + limit = { + scope:topic = flag:monograph_geography + } + random_list = { + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:home_duchy + } + } + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:home_kingdom + } + } + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:home_empire + } + } + 1 = { + trigger = { + top_liege.highest_held_title_tier = tier_hegemony + } + save_scope_value_as = { + name = monograph_theme + value = flag:home_hegemony + } + } + 1 = { + trigger = { #A point of interest that is not your own capital + has_variable_list = visited_poi + any_in_list = { + variable = visited_poi + this = county.holder.capital_province + county.holder != root + } + } + random_in_list = { + variable = visited_poi + limit = { + this = county.holder.capital_province + county.holder != root + } + save_scope_as = poi_topic + } + save_scope_value_as = { + name = monograph_theme + value = flag:point_of_interest + } + } + } + } + else = { #Mathematics + #This is set after we determine skill, so this is a fallback flag that will be overriden + save_scope_value_as = { + name = monograph_theme + value = flag:commentary_on_earlier_works + } + } + + + #Then we decide the skill level: + #Skills for high quality dependent on type of book chosen + #Then we decide the skill level: + + #Geography + if = { + limit = { + scope:topic = flag:monograph_geography + } + random_list = { + 30 = { + trigger = { + travel_lifestyle_track_less_trigger = { + TRACK = travel + LESS_THAN = 50 + } + } + modifier = { + add = { + value = learning + multiply = -1 + } + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:weak + } + } + 55 = { + save_scope_value_as = { + name = quality_of_artifact + value = flag:mid + } + } + 15 = { + trigger = { + travel_lifestyle_track_greater_equal_trigger = { + TRACK = travel + GREATER_EQUAL = 50 + } + } + modifier = { + add = learning + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:great + } + } + } + } + + #Mathematics + if = { + limit = { + scope:topic = flag:monograph_mathematics + } + random_list = { + 40 = { + trigger = { + learning < high_skill_rating + } + modifier = { + add = { + value = learning + multiply = -1 + } + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:weak + } + } + 45 = { + save_scope_value_as = { + name = quality_of_artifact + value = flag:mid + } + } + 15 = { + trigger = { + learning > high_skill_rating + } + modifier = { + add = learning + } + save_scope_value_as = { + name = quality_of_artifact + value = flag:great + } + } + } + + #For mathematics this is also were we determine the theme - since it relates to the skill - overrides what was set in theme before + random_list = { + 1 = { + modifier = { + trigger = { + scope:quality_of_artifact = flag:weak + } + add = 3 + } + save_scope_value_as = { + name = monograph_theme + value = flag:algebraic_geometry + } + } + 1 = { + modifier = { + trigger = { + scope:quality_of_artifact = flag:weak + } + add = 5 + } + save_scope_value_as = { + name = monograph_theme + value = flag:linear_algebra + } + } + 1 = { #Chance of keeping the fallback modifier + modifier = { + trigger = { + scope:quality_of_artifact = flag:weak + } + add = 5 + } + #save_scope_value_as = { + # name = monograph_theme + # value = flag:commentary_on_earlier_works + #} + } + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:spherical_trigonometry + } + } + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:computational_studies + } + } + 1 = { + save_scope_value_as = { + name = monograph_theme + value = flag:method_of_solving_simultaneous_congruences + } + } + 1 = { + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 5 + } + save_scope_value_as = { + name = monograph_theme + value = flag:method_of_solving_simultaneous_congruences + } + } + 1 = { + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 5 + } + save_scope_value_as = { + name = monograph_theme + value = flag:magic_squares_magic_circles + } + } + 1 = { + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 5 + } + save_scope_value_as = { + name = monograph_theme + value = flag:teaching_overview_of_all_mathematical_methods + } + } + } + } + + + + scope:newly_created_artifact = { + + + #And now we give modifiers: + switch = { + trigger = scope:quality_of_artifact + flag:weak = { + #Merit & Prestige Gain + set_artifact_rarity_masterwork = yes + random_list = { #Merit + 60 = { + add_artifact_modifier = artifact_monthly_merit_mult_1_modifier + } + 20 = { + add_artifact_modifier = artifact_monthly_merit_mult_2_modifier + } + 10 = { + add_artifact_modifier = artifact_monthly_merit_mult_3_modifier + } + } + + random_list = { #Prestige + 60 = { + add_artifact_modifier = artifact_monthly_minor_prestige_2_modifier + } + 20 = { + add_artifact_modifier = artifact_monthly_minor_prestige_4_modifier + } + 10 = { + add_artifact_modifier = artifact_monthly_minor_prestige_6_modifier + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_1_modifier + + random_list = { + 80 = { } + 10 = { + add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_1_modifier + } + } + } + flag:mid = { + #Influence & Confucian Education Gain + set_artifact_rarity_famed = yes + random_list = { #Merit + 30 = { + add_artifact_modifier = artifact_monthly_merit_mult_2_modifier + } + 50 = { + add_artifact_modifier = artifact_monthly_merit_mult_3_modifier + } + 20 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_merit_mult_4_modifier + } + } + random_list = { #Prestige + 30 = { + add_artifact_modifier = artifact_monthly_merit_mult_4_modifier + } + 50 = { + add_artifact_modifier = artifact_monthly_minor_prestige_6_modifier + } + 20 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_minor_prestige_8_modifier + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_2_modifier + + random_list = { + 40 = { add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_1_modifier } + 60 = { add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_2_modifier } + } + } + flag:great = { + #Influence & Confucian Education Gain + set_artifact_rarity_illustrious = yes + random_list = { #Merit + 65 = { + add_artifact_modifier = artifact_monthly_merit_mult_3_modifier + } + 30 = { + add_artifact_modifier = artifact_monthly_merit_mult_4_modifier + } + 5 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_merit_mult_5_modifier + } + } + + random_list = { #Prestige + 65 = { + add_artifact_modifier = artifact_monthly_prestige_2_modifier + } + 30 = { + add_artifact_modifier = artifact_monthly_prestige_3_modifier + } + 5 = { + modifier = { + add = root.learning + } + add_artifact_modifier = artifact_monthly_prestige_4_modifier + } + } + + add_artifact_modifier = artifact_learning_lifestyle_xp_2_modifier + + add_artifact_modifier = artifact_study_confucian_classics_scheme_phase_duration_add_2_modifier + } + } + + switch = { + trigger = scope:topic + flag:monograph_geography = { + random_list = { + 2 = { add_artifact_modifier = artifact_travel_safety_1 } + 2 = { add_artifact_modifier = character_travel_speed_1 } + 1 = { + add_artifact_modifier = artifact_travel_safety_2 + modifier = { + trigger = { + scope:quality_of_artifact = flag:mid + } + add = 1 + } + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 3 + } + } + 1 = { + add_artifact_modifier = character_travel_speed_2 + modifier = { + trigger = { + scope:quality_of_artifact = flag:mid + } + add = 1 + } + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 3 + } + } + } + } + flag:monograph_mathematics = { + random_list = { + 2 = { add_artifact_modifier = artifact_stewardship_lifestyle_xp_1_modifier } + 2 = { add_artifact_modifier = artifact_learning_lifestyle_xp_1_modifier } + 1 = { + add_artifact_modifier = artifact_learning_lifestyle_xp_2_modifier + modifier = { + trigger = { + scope:quality_of_artifact = flag:mid + } + add = 1 + } + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 3 + } + } + 1 = { + add_artifact_modifier = artifact_stewardship_lifestyle_xp_2_modifier + modifier = { + trigger = { + scope:quality_of_artifact = flag:mid + } + add = 1 + } + modifier = { + trigger = { + scope:quality_of_artifact = flag:great + } + add = 3 + } + } + } + } + } + + set_artifact_name = monograph_name_hashcollision + set_artifact_description = monograph_description_full + } + scope:newly_created_artifact = { + flag_as_trash_artifact = yes + remove_artifact_modifier = artifact_placeholder_modifier + } + } + } + } + + option = { + name = author_book.1000.a + trigger = { + scope:quality_of_artifact = flag:weak + } + + add_merit_if_relevant_effect = { + MERIT = miniscule_merit_value + } + if = { + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = { 1 3 } + } + } + + #XP Gain for Confucian Education or Poet + if = { + limit = { + NOR = { #I wrote a book + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + if = { + limit = { + NOT = { + has_trait = confucian_education + } + } + add_trait = confucian_education + } + else_if = { + limit = { + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value < 100 + } + } + add_trait_xp = { + trait = confucian_education + value = { 1 3 } + } + } + } + } + + option = { + name = author_book.1000.b + trigger = { + scope:quality_of_artifact = flag:mid + } + + add_merit_if_relevant_effect = { + MERIT = miniscule_merit_value + } + + if = { + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = { 1 3 } + } + } + + #XP Gain for Confucian Education or Poet + if = { + limit = { + NOR = { #I wrote a book + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + } + if = { + limit = { + NOT = { + has_trait = confucian_education + } + } + add_trait = confucian_education + } + else_if = { + limit = { + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value < 100 + } + } + add_trait_xp = { + trait = confucian_education + value = { 1 3 } + } + } + } + + } + + option = { + name = author_book.1000.c + trigger = { + scope:quality_of_artifact = flag:great + } + + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + + if = { + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = { 3 5 } + } + } + + #XP Gain for Confucian Education + if = { + limit = { + NOR = { #I wrote a book + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value < 100 + } + } + add_trait_xp = { + trait = confucian_education + value = { 3 5 } + } + } + } + + option = { + name = author_book.1000.d + trigger = { + scope:quality_of_artifact = flag:great + } + add_merit_if_relevant_effect = { + MERIT = minor_merit_value + } + + if = { + limit = { + OR = { + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = lifestyle_poet + has_trait_xp = { + trait = lifestyle_poet + value < 100 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = { 3 5 } + } + } + + #XP Gain for Confucian Education + if = { + limit = { + NOR = { #I wrote a book + scope:topic = flag:poem_friend + scope:topic = flag:poem_own + } + has_trait = confucian_education + has_trait_xp = { + trait = confucian_education + value < 100 + } + } + add_trait_xp = { + trait = confucian_education + value = { 3 5 } + } + } + + improve_relationship_effect = { + TARGET = scope:trusted_influencer + REASON = gifted_poem + } + scope:newly_created_artifact = { + set_owner = scope:trusted_influencer + } + } +} + + diff --git a/events/dlc/tgp/tgp_dynastic_cycle_decision_events.txt b/events/dlc/tgp/tgp_dynastic_cycle_decision_events.txt new file mode 100644 index 00000000..e95de8ef --- /dev/null +++ b/events/dlc/tgp/tgp_dynastic_cycle_decision_events.txt @@ -0,0 +1,121 @@ +################################### +# DYNASTIC CYCLE DECISION EVENTS +################################### + +namespace = tgp_dynastic_cycle_decision_event + +# Retire from all Titles +tgp_dynastic_cycle_decision_event.0101 = { + type = character_event + title = tgp_dynastic_cycle_decision_event.0101.t + desc = tgp_dynastic_cycle_decision_event.0101.desc + theme = dynasty + left_portrait = { + character = root + animation = happy_teacher + } + right_portrait = { + character = scope:new_player + animation = personality_bold + } + option = { + name = tgp_dynastic_cycle_decision_event.0101.a + tgp_renounce_estate_effect = yes + } + after = { + hidden_effect = { + if = { + limit = { + employer != scope:new_player + } + set_employer = scope:new_player + } + } + } +} + +# Inform Movements of a new Favored Movement - from decision +tgp_dynastic_cycle_decision_event.0111 = { + type = letter_event + opening = tgp_dynastic_cycle_decision_event.0111.opening + desc = { + desc = tgp_dynastic_cycle_decision_event.0111.desc_intro + first_valid = { + triggered_desc = { + trigger = { + exists = scope:former_favored_movement + } + desc = tgp_dynastic_cycle_decision_event.0111.desc_former + } + desc = tgp_dynastic_cycle_decision_event.0111.desc + } + desc = tgp_dynastic_cycle_decision_event.0111.desc_outro + } + sender = scope:hegemon + + immediate = { + show_as_tooltip = { + scope:new_favored_movement = { + make_movement_favored_effect = yes + switch = { + trigger = participant_group_type + pro_hegemon_movement = { + if = { + limit = { + situation:dynastic_cycle = { + situation_top_has_catalyst = catalyst_movement_gained_power_pro_hegemon + } + } + trigger_situation_catalyst = catalyst_movement_gained_power_pro_hegemon + } + } + advancement_movement = { + if = { + limit = { + situation:dynastic_cycle = { + situation_top_has_catalyst = catalyst_movement_gained_power_advancement + } + } + trigger_situation_catalyst = catalyst_movement_gained_power_advancement + } + } + expansion_movement = { + if = { + limit = { + situation:dynastic_cycle = { + situation_top_has_catalyst = catalyst_movement_gained_power_expansion + } + } + trigger_situation_catalyst = catalyst_movement_gained_power_expansion + } + } + conservative_movement = { + if = { + limit = { + situation:dynastic_cycle = { + situation_top_has_catalyst = catalyst_movement_gained_power_conservative + } + } + trigger_situation_catalyst = catalyst_movement_gained_power_conservative + } + } + } + } + } + } + option = { + name = { + trigger = { + scope:new_favored_movement ?= top_participant_group:dynastic_cycle + } + text = tgp_dynastic_cycle_decision_event.0111.a_new + } + name = { + trigger = { + scope:former_favored_movement ?= top_participant_group:dynastic_cycle + } + text = tgp_dynastic_cycle_decision_event.0111.a_former + } + name = tgp_dynastic_cycle_decision_event.0111.a_other + } +} diff --git a/events/dlc/tgp/tgp_dynastic_cycle_events.txt b/events/dlc/tgp/tgp_dynastic_cycle_events.txt new file mode 100644 index 00000000..560f3cc1 --- /dev/null +++ b/events/dlc/tgp/tgp_dynastic_cycle_events.txt @@ -0,0 +1,2471 @@ +namespace = tgp_dynastic_cycle + +### EVENT LIST #################################################################### +## 0001 - 0020 Internal Management Events +## 0021 - 0030 Invalidation Events +## 0051 - 0060 TGP situation Intro Events +## 0061 - 0070 Realm Shattering Events +## 0071 - 0300 situation Endings +## XXXX - XXXX Event Name Here by Author Name Here +## 9980 - 9999 Integrity Validation Tools +################################################################################### + +################################### +# TGP Maintenance Events +# By Joe Parkin +################################### + +scripted_trigger tgp_dynastic_cycle_0001_valid_ai_situation_char_trigger = { + # Basic checks. + is_ai = yes +} + +tgp_dynastic_cycle.0001 = { + hidden = yes + scope = situation + + # If the situation ends, break the loop. + trigger = { exists = situation:dynastic_cycle } + + immediate = { + # Cue this event up again for the next time around. + trigger_event = { + id = tgp_dynastic_cycle.0001 + years = { 3 5 } + } + } +} + +################################### +# TGP Intro Events +# By Joe Parkin +################################### + +tgp_dynastic_cycle.0051 = { # BOOKMARK EVENT + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0051.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0051.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0051.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0051.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0051.desc.corruption + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_chaos + } + } + desc = tgp_dynastic_cycle.0051.desc.consolidation + } + } + first_valid = { + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = hegemon_ruler } + } + desc = tgp_dynastic_cycle.0051.desc.emperor + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = advancement_movement } + } + desc = tgp_dynastic_cycle.0051.desc.advancement_movement + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = expansion_movement } + } + desc = tgp_dynastic_cycle.0051.desc.expansion_movement + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = pro_hegemon_movement } + } + desc = tgp_dynastic_cycle.0051.desc.pro_hegemon_movement + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = conservative_movement } + } + desc = tgp_dynastic_cycle.0051.desc.conservative_movement + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { participant_group_type = undecided_movement } + } + desc = tgp_dynastic_cycle.0051.desc.unaligned_movement + } + desc = tgp_dynastic_cycle.0051.desc.interloper + } + } + theme = dynastic_cycle + trigger = { # we need to prevent this from firing for all players when a new player joins in MP + is_ai = no + is_player_tutorial_character = no + NOT = { has_character_flag = tgp_dynastic_cycle_intro_event_flag } + tgp_is_hegemon_or_below_in_dynastic_cycle_trigger = yes + } + #chaos + override_background = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_chaos + } + } + reference = tgp_fullscreen_dynastic_cycle_chaos + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + cooldown = { years = 100 } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + play_music_cue = mx_cue_tgp_dynastic_cycle_start + add_character_flag = tgp_dynastic_cycle_intro_event_flag + save_scope_value_as = { + name = start + value = yes + } + } + option = { + name = { + text = tgp_dynastic_cycle.0051.a.emperor + trigger = { title:h_china.holder ?= root } + } + name = { + text = tgp_dynastic_cycle.0051.a.involved + trigger = { + top_participant_group:dynastic_cycle ?= { + NOR = { + participant_group_type = hegemon_ruler + participant_group_type = other_rulers + } + } + } + } + name = { + text = tgp_dynastic_cycle.0051.a.interloper + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + } + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +tgp_dynastic_cycle.0052 = { # JOINED MOVEMENT - Unaligned + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0052.t + desc = { + desc = tgp_dynastic_cycle.0052.desc.intro + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0052.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0052.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0052.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0052.desc.instability + } + } + } + theme = dynastic_cycle + trigger = { + is_ai = no + current_date_is_start_date_trigger = no + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + top_participant_group:dynastic_cycle = { save_scope_as = my_movement } + custom_tooltip = intro_event_joined_movement + } + option = { + name = tgp_dynastic_cycle.0052.a + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +tgp_dynastic_cycle.0053 = { # JOINED MOVEMENT - Expansion + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0053.t + desc = { + desc = tgp_dynastic_cycle.0053.desc.intro + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0053.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0053.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0053.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0053.desc.instability + } + } + } + theme = dynastic_cycle + trigger = { + is_ai = no + current_date_is_start_date_trigger = no + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + top_participant_group:dynastic_cycle = { save_scope_as = my_movement } + custom_tooltip = intro_event_joined_movement + } + option = { + name = tgp_dynastic_cycle.0053.a + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +tgp_dynastic_cycle.0054 = { # JOINED MOVEMENT - Advancement + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0054.t + desc = { + desc = tgp_dynastic_cycle.0054.desc.intro + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0054.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0054.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0054.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0054.desc.instability + } + } + } + theme = dynastic_cycle + trigger = { + is_ai = no + current_date_is_start_date_trigger = no + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + top_participant_group:dynastic_cycle = { save_scope_as = my_movement } + custom_tooltip = intro_event_joined_movement + } + option = { + name = tgp_dynastic_cycle.0054.a + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +tgp_dynastic_cycle.0055 = { # JOINED MOVEMENT - Pro-Hegemon + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0055.t + desc = { + desc = tgp_dynastic_cycle.0055.desc.intro + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0055.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0055.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0055.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0055.desc.instability + } + } + } + theme = dynastic_cycle + trigger = { + is_ai = no + current_date_is_start_date_trigger = no + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + top_participant_group:dynastic_cycle = { save_scope_as = my_movement } + custom_tooltip = intro_event_joined_movement + } + option = { + name = tgp_dynastic_cycle.0055.a + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +tgp_dynastic_cycle.0056 = { # JOINED MOVEMENT - Conservative + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0056.t + desc = { + desc = tgp_dynastic_cycle.0056.desc.intro + first_valid = { + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0056.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0056.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0056.desc.conquest + } + triggered_desc = { + trigger = { + situation:dynastic_cycle = { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + desc = tgp_dynastic_cycle.0056.desc.instability + } + } + } + theme = dynastic_cycle + trigger = { + is_ai = no + current_date_is_start_date_trigger = no + } + #conquest & instability + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + situation_current_phase = situation_dynastic_cycle_phase_instability + } + } + } + reference = tgp_fullscreen_dynastic_cycle_instability + } + #expansion & advancement + override_background = { + trigger = { + situation:dynastic_cycle = { + OR = { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + reference = tgp_fullscreen_dynastic_cycle_stability + } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + immediate = { + top_participant_group:dynastic_cycle = { save_scope_as = my_movement } + custom_tooltip = intro_event_joined_movement + } + option = { + name = tgp_dynastic_cycle.0056.a + clicksound = "event:/DLC/FP2/SFX/UI/fp2_struggle_start_select" + } +} +### ENTER CONQUEST - NEW DYNASTY ### 0061 - 0070 ### + +tgp_dynastic_cycle.0061 = { + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0061.t + desc = tgp_dynastic_cycle.0061.desc + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_instability } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + current_date_is_start_date_trigger = no + situation:dynastic_cycle = { situation_current_phase = situation_dynastic_cycle_phase_instability_conquest } + } + + immediate = { + add_character_flag = tgp_dynastic_cycle_intro_event_flag + play_music_cue = mx_cue_tgp_dynastic_cycle_end + save_scope_as = mandate_claimant + show_as_tooltip = { + tgp_claim_mandate_of_heaven_effect = yes + } + custom_tooltip = dynastic_cycle_entered_conquest_tt + } + + option = { + name = tgp_dynastic_cycle.0061.c + show_as_tooltip = { + situation:dynastic_cycle = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability_conquest } + } + } + } + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_end" + } + + after = { + every_player = { + limit = { tgp_does_this_player_care_about_the_dynastic_cycle = yes } # Needs to be checked before the situation ends due to race condition issues + add_to_list = player_to_notify # Making a list so stuff is tiggered after the situation ends, to make extra sure I don't break anything. + } + every_in_list = { # Then we *actually* notify players, making sure the situation has already ended + list = player_to_notify + limit = { + NOT = { this = root } + } + trigger_event = tgp_dynastic_cycle.0062 + } + } +} + +tgp_dynastic_cycle.0062 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0061.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + tgp_is_hegemon_or_below_in_dynastic_cycle_trigger = yes + } + desc = tgp_dynastic_cycle.0062.desc.involved + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + desc = tgp_dynastic_cycle.0062.desc.interloper + } + desc = tgp_dynastic_cycle.0062.desc.uninvolved + } + } + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_instability } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + is_ai = no + NOT = { has_character_flag = situation_phase_notification } + } + + immediate = { + add_character_flag = situation_phase_notification + show_as_tooltip = { + scope:mandate_claimant = { + tgp_claim_mandate_of_heaven_effect = yes + } + situation:dynastic_cycle = { + switch = { + trigger = situation_current_phase + situation_dynastic_cycle_phase_stability_expansion = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_expansion } + } + } + situation_dynastic_cycle_phase_stability_advancement = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + situation_dynastic_cycle_phase_stability_advancement = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability_conquest } + } + } + } + } + } + play_music_cue = mx_cue_tgp_dynastic_cycle_end + } + + option = { + name = tgp_dynastic_cycle.0062.a + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_end" + custom_tooltip = tgp_china_consolidation.remain_independent + } + + option = { + name = tgp_dynastic_cycle.0062.b + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_end" + save_scope_as = actor + title:h_china.holder = { + save_scope_as = recipient + } + offer_fealty_interaction_effect = yes + } + + after = { + remove_character_flag = situation_phase_notification + } +} + +### ENTER STABILITY - EXISTING DYNASTY ### 0071 - 0080 ### + +tgp_dynastic_cycle.0071 = { + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0071.t + desc = tgp_dynastic_cycle.0071.desc + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_stability } + + cooldown = { days = 1 } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + current_date_is_start_date_trigger = no + } + + immediate = { + if = { + limit = { + has_variable = new_son_of_heaven + } + save_scope_as = new_son_of_heaven + show_as_tooltip = { + tgp_claim_mandate_of_heaven_effect = yes + } + } + play_music_cue = mx_cue_tgp_dynastic_cycle_end + } + + option = { + name = tgp_dynastic_cycle.0071.a + if = { + limit = { + OR = { + has_variable = new_son_of_heaven + situation:dynastic_cycle = { + NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + } + custom_tooltip = dynastic_cycle_entered_stability_advancement_tt + situation:dynastic_cycle = { + # Prevent dup entry in history. + if = { + limit = { NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_advancement } } + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + } + if = { + limit = { + trigger_if = { + limit = { + has_variable = new_son_of_heaven + } + has_variable = favor_era + var:favor_era != flag:advancement + } + trigger_else = { + situation:dynastic_cycle = { + NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + } + # Lose legitimacy, but only if it's not getting you into Chaos + if = { + limit = { + legitimacy_level > 2 + } + add_legitimacy = monumental_legitimacy_loss + } + situation:dynastic_cycle = { + situation_participant_group:expansion_movement = { + every_situation_group_participant = { + custom = tgp_hegemon_picked_different_era_opinion_advancement_tt + add_opinion = { + modifier = tgp_hegemon_picked_different_era_opinion + target = root + } + } + } + hidden_effect = { + situation_participant_group:conservative_movement = { + every_situation_group_participant = { + add_opinion = { + modifier = tgp_hegemon_picked_different_era_opinion + target = root + } + } + } + } + } + } + } + else = { + custom_tooltip = dynastic_cycle_entered_stability_advancement_past_tt + } + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_start" + ai_chance = { + base = 0 + # no need to add any other modifiers here + # if you want more add them to hegemon_favored_stability_phase_value instead + modifier = { + hegemon_favored_stability_phase_value >= 0 + add = 1 + } + #in case the catalysts pushed to expansion, pick advancement only if you really wanted it + modifier = { + hegemon_favored_stability_phase_value >= 199 + situation:dynastic_cycle = { situation_current_phase = situation_dynastic_cycle_phase_stability_expansion } + add = 1 + } + } + } + + option = { + name = tgp_dynastic_cycle.0071.b + if = { + limit = { + OR = { + has_variable = new_son_of_heaven + situation:dynastic_cycle = { + NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_expansion } + } + } + } + custom_tooltip = dynastic_cycle_entered_stability_expansion_tt + situation:dynastic_cycle = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_expansion } + } + } + if = { + limit = { + trigger_if = { + limit = { + has_variable = new_son_of_heaven + } + # You didn't do as what you promised before + has_variable = favor_era + var:favor_era != flag:expansion + } + # or you want change current phase + trigger_else = { + situation:dynastic_cycle = { + NOT = { situation_current_phase = situation_dynastic_cycle_phase_stability_expansion } + } + } + } + # Lose legitimacy, but only if it's not getting you into Chaos + if = { + limit = { + legitimacy_level > 2 + } + add_legitimacy = monumental_legitimacy_loss + } + situation:dynastic_cycle = { + situation_participant_group:advancement_movement = { + every_situation_group_participant = { + custom = tgp_hegemon_picked_different_era_opinion_expansion_tt + add_opinion = { + modifier = tgp_hegemon_picked_different_era_opinion + target = root + } + } + } + hidden_effect = { + situation_participant_group:conservative_movement = { + every_situation_group_participant = { + add_opinion = { + modifier = tgp_hegemon_picked_different_era_opinion + target = root + } + } + } + } + } + } + } + else = { + custom_tooltip = dynastic_cycle_entered_stability_expansion_past_tt + } + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_start" + ai_chance = { + base = 0 + # no need to add any other modifiers here + # if you want more add them to hegemon_favored_stability_phase_value instead + modifier = { + hegemon_favored_stability_phase_value < 0 + add = 1 + } + #in case the catalysts pushed to advancement, pick expansion only if you really wanted it + modifier = { + hegemon_favored_stability_phase_value < -199 + situation:dynastic_cycle = { situation_current_phase = situation_dynastic_cycle_phase_stability_advancement } + add = 1 + } + } + } + + after = { + every_player = { + limit = { tgp_does_this_player_care_about_the_dynastic_cycle = yes } # Needs to be checked before the situation ends due to race condition issues + add_to_list = player_to_notify # Making a list so stuff is tiggered after the situation ends, to make extra sure I don't break anything. + } + every_in_list = { # Then we *actually* notify players, making sure the situation has already ended + list = player_to_notify + limit = { + NOT = { this = root } + } + trigger_event = tgp_dynastic_cycle.0072 + } + } +} + +tgp_dynastic_cycle.0072 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0071.t + desc = { + triggered_desc = { + trigger = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + desc = tgp_dynastic_cycle.0072.desc.advancement + } + triggered_desc = { + trigger = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + desc = tgp_dynastic_cycle.0072.desc.expansion + } + triggered_desc = { + trigger = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + desc = tgp_dynastic_cycle.0072.desc.conquest + } + desc = double_line_break + first_valid = { + triggered_desc = { + trigger = { + tgp_is_hegemon_or_below_in_dynastic_cycle_trigger = yes + } + desc = tgp_dynastic_cycle.0072.desc.involved + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + desc = tgp_dynastic_cycle.0072.desc.interloper + } + desc = tgp_dynastic_cycle.0072.desc.uninvolved + } + } + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_stability } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + is_ai = no + NOT = { has_character_flag = situation_phase_notification } + } + + immediate = { + add_character_flag = situation_phase_notification + show_as_tooltip = { + if = { + limit = { + exists = scope:new_son_of_heaven + } + scope:new_son_of_heaven = { + tgp_claim_mandate_of_heaven_effect = yes + } + } + situation:dynastic_cycle = { + switch = { + trigger = situation_current_phase + situation_dynastic_cycle_phase_stability_expansion = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_expansion } + } + } + situation_dynastic_cycle_phase_stability_advancement = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability_advancement } + } + } + } + } + } + play_music_cue = mx_cue_tgp_dynastic_cycle_end + } + + option = { + name = tgp_dynastic_cycle.0072.a + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_start" + custom_tooltip = tgp_china_consolidation.remain_independent + } + + option = { + name = tgp_dynastic_cycle.0072.b + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_start" + save_scope_as = actor + title:h_china.holder = { + save_scope_as = recipient + } + offer_fealty_interaction_effect = yes + } + + after = { + remove_character_flag = situation_phase_notification + } +} + +### ENTER CHAOS + +tgp_dynastic_cycle.0081 = { + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0081.t + desc = tgp_dynastic_cycle.0081.desc + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_chaos } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + current_date_is_start_date_trigger = no + } + + immediate = { + play_music_cue = mx_cue_tgp_dynastic_cycle_end + custom_tooltip = dynastic_cycle_entered_chaos_tt + every_player = { + limit = { tgp_does_this_player_care_about_the_dynastic_cycle = yes } # Needs to be checked before the tgp_chaos_shattering_effect in case they get booted out of the Cycle from it + add_to_list = player_to_notify + # save variables to display correct desc in the follow up event + if = { + limit = { + tgp_is_hegemon_or_below_in_dynastic_cycle_trigger = yes + } + set_variable = { + name = involvement_in_cycle + value = flag:involved + days = 1 + } + } + else_if = { + limit = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + set_variable = { + name = involvement_in_cycle + value = flag:interloper + days = 1 + } + } + else = { + # don't need to save anything, there is a fallback desc for it + } + } + tgp_chaos_shattering_effect = yes + every_in_list = { # Then we *actually* notify players, making sure the Division already started + list = player_to_notify + limit = { + NOT = { this = root } + } + trigger_event = tgp_dynastic_cycle.0082 + } + } + + option = { + name = tgp_dynastic_cycle.0081.a + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_end" + } +} + +tgp_dynastic_cycle.0082 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0081.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + var:involvement_in_cycle ?= flag:involved + } + desc = tgp_dynastic_cycle.0082.desc.involved + } + triggered_desc = { + trigger = { + var:involvement_in_cycle ?= flag:interloper + } + desc = tgp_dynastic_cycle.0082.desc.interloper + } + desc = tgp_dynastic_cycle.0082.desc.uninvolved + } + } + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_chaos } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + is_ai = no + NOT = { has_character_flag = situation_phase_notification } + } + + immediate = { + add_character_flag = situation_phase_notification + save_scope_as = relevant_character + custom_tooltip = dynastic_cycle_entered_chaos_tt + custom_tooltip = dynastic_cycle_entered_chaos_hunagdi_tt + show_as_tooltip = { + switch = { + trigger = root + title:e_minister_chancellor.previous_holder = { + destroy_title = title:e_minister_chancellor + } + title:e_minister_censor.previous_holder = { + destroy_title = title:e_minister_censor + } + title:e_minister_grand_marshal.previous_holder = { + destroy_title = title:e_minister_grand_marshal + } + title:e_minister_of_personnel.previous_holder = { + destroy_title = title:e_minister_of_personnel + } + title:e_minister_of_revenue.previous_holder = { + destroy_title = title:e_minister_of_revenue + } + title:e_minister_of_rites.previous_holder = { + destroy_title = title:e_minister_of_rites + } + title:e_minister_of_war.previous_holder = { + destroy_title = title:e_minister_of_war + } + title:e_minister_of_justice.previous_holder = { + destroy_title = title:e_minister_of_justice + } + title:e_minister_of_works.previous_holder = { + destroy_title = title:e_minister_of_works + } + } + } + save_scope_value_as = { + name = chaos_new_vassals_count + value = { + every_in_list = { + variable = chaos_new_vassals + add = 1 + } + } + } + save_scope_value_as = { + name = chaos_new_tributaries_count + value = { + every_in_list = { + variable = chaos_new_tributaries + add = 1 + } + } + } + if = { + limit = { + scope:chaos_new_vassals_count > 0 + } + if = { + limit = { + has_variable = former_movement_leader + } + every_in_list = { + variable = chaos_new_vassals + custom = custom.chaos_new_vassals + custom_tooltip = chaos_new_vassals_tt + } + } + else = { + every_in_list = { + variable = chaos_new_vassals + custom = custom.chaos_new_vassals_disciples + custom_tooltip = chaos_new_vassals_tt + } + } + } + if = { + limit = { + scope:chaos_new_tributaries_count > 0 + } + if = { + limit = { + has_variable = former_movement_leader + } + every_in_list = { + variable = chaos_new_tributaries + custom = custom.chaos_new_tributaries + custom_tooltip = chaos_new_tributaries_tt + } + } + else = { + every_in_list = { + variable = chaos_new_tributaries + custom = custom.chaos_new_tributaries_disciples + custom_tooltip = chaos_new_tributaries_tt + } + } + } + } + + option = { + name = tgp_dynastic_cycle.0082.a + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_positive" + if = { + limit = { + top_liege = scope:relevant_character + } + custom_tooltip = dynastic_cycle_entered_chaos_became_independent_tt + } + else = { + top_liege = { + save_scope_as = new_top_liege + } + custom_tooltip = dynastic_cycle_entered_chaos_changed_top_liege_tt + } + } + + after = { + remove_character_flag = situation_phase_notification + clear_variable_list = chaos_new_vassals + clear_variable_list = chaos_new_tributaries + } +} + +### ENTER INSTABILITY + +tgp_dynastic_cycle.0091 = { + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0091.t + desc = tgp_dynastic_cycle.0091.desc + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_instability } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + trigger = { + current_date_is_start_date_trigger = no + } + + immediate = { + play_music_cue = mx_cue_tgp_dynastic_cycle_end + custom_tooltip = dynastic_cycle_entered_instability_tt + every_player = { + limit = { tgp_does_this_player_care_about_the_dynastic_cycle = yes } # Needs to be checked before the situation ends due to race condition issues + add_to_list = player_to_notify # Making a list so stuff is tiggered after the situation ends, to make extra sure I don't break anything. + } + every_in_list = { # Then we *actually* notify players, making sure the situation has already ended + list = player_to_notify + limit = { + NOT = { this = root } + } + trigger_event = tgp_dynastic_cycle.0092 + } + } + + option = { + name = tgp_dynastic_cycle.0091.a + clicksound = "event:/DLC/EP4/MX/CueTracks/mx_mtgp_dynastic_cycle_end" + } +} + +tgp_dynastic_cycle.0092 = { # Notification for relevant people + type = character_event + window = fullscreen_event + title = tgp_dynastic_cycle.0091.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + tgp_is_hegemon_or_below_in_dynastic_cycle_trigger = yes + } + desc = tgp_dynastic_cycle.0092.desc.involved + } + triggered_desc = { + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = other_rulers + } + } + desc = tgp_dynastic_cycle.0092.desc.interloper + } + desc = tgp_dynastic_cycle.0092.desc.uninvolved + } + } + theme = dynastic_cycle + override_background = { reference = tgp_fullscreen_dynastic_cycle_instability } + + widgets = { + widget = { + gui = "event_window_widget_situation_info_dynastic_cycle" + container = "dynamic_content_widget" + controller = situation_info + setup_scope = { situation:dynastic_cycle = { save_scope_as = situation } } + } + } + + trigger = { + is_ai = no + NOT = { has_character_flag = situation_phase_notification } + } + + immediate = { + add_character_flag = situation_phase_notification + show_as_tooltip = { + situation:dynastic_cycle = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + } + play_music_cue = mx_cue_tgp_dynastic_cycle_end + } + + option = { + name = tgp_dynastic_cycle.0092.a + + clicksound = "event:/DLC/FP3/SFX/UI/Notifications/Toasts/struggle_end_negative" + } + + after = { + remove_character_flag = situation_phase_notification + } +} + +################################### +# Integrity Validation Events +# By Joe Parkin +################################### + +tgp_dynastic_cycle.9982 = { # Nav event, to make QA's life easier and avoid unecessary crashes + type = character_event + title = MENU + desc = MENU + + orphan = yes + theme = mental_break + + option = { # Dynamically start a situation + trigger = { NOT = { exists = situation:dynastic_cycle } } + name = FRONTEND_MP_GAME_SETUP_HOST_NEW_GAME + + random_ruler = { + limit = { + this = top_liege + exists = location # TIL, we are somehow generating *a lot* of top lieges without a location set + location = { geographical_region = world_asia_north_east } + } + primary_title = { save_scope_as = debug_emperor } + } + start_situation = { + type = dynastic_cycle + start_phase = situation_dynastic_cycle_phase_stability_advancement + } + + send_interface_message = { # Informs you of who the "debug caliph" is + type = event_martial_bad + title = trait_beauty_bad_1_desc + left_icon = scope:debug_emperor + right_icon = scope:debug_emperor.holder + } + } + option = { # Go forward in the situation flow + name = dynn_Daflos_motto + trigger = { exists = situation:dynastic_cycle } + situation:dynastic_cycle = { + switch = { + trigger = situation_current_phase + situation_dynastic_cycle_phase_stability_expansion = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + situation_dynastic_cycle_phase_stability_advancement = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + situation_dynastic_cycle_phase_instability_conquest = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + situation_dynastic_cycle_phase_instability = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_chaos } + } + } + situation_dynastic_cycle_phase_chaos = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability } + } + } + } + } + } + option = { # Go backwards in the situation flow + name = default_retreat + trigger = { exists = situation:dynastic_cycle } + show_as_unavailable = { always = yes } + situation:dynastic_cycle = { + switch = { + trigger = situation_current_phase + situation_dynastic_cycle_phase_stability_expansion = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_chaos } + } + } + situation_dynastic_cycle_phase_stability_advancement = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_chaos } + } + } + situation_dynastic_cycle_phase_instability_conquest = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_chaos } + } + } + situation_dynastic_cycle_phase_instability = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_stability } + } + } + situation_dynastic_cycle_phase_chaos = { + situation_top_sub_region = { + change_phase = { phase = situation_dynastic_cycle_phase_instability } + } + } + } + } + } + option = { name = EXIT_TO_DESKTOP } # Exit event without doing anything +} + +tgp_dynastic_cycle.9999 = { + hidden = yes + scope = character + orphan = yes + + immediate = { + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + random_player = { save_scope_as = player } + title:h_china = { + every_in_de_jure_hierarchy = { + limit = { + exists = holder + holder = { is_ai = yes } + NOT = { holder.top_liege = scope:player } + } + holder = { + if = { + limit = { highest_held_title_tier = scope:player.highest_held_title_tier } + every_held_title = { + limit = { tier = scope:player.highest_held_title_tier } + change_title_holder_include_vassals = { + holder = scope:player + change = scope:change + } + } + } + change_liege = { + liege = scope:player + change = scope:change + } + } + } + } + resolve_title_and_vassal_change = scope:change + } +} + +# This is a centralized middleman event to pass the actual renaming event through, because we run the original checks from on_actions, but when China shatters the gamestate can and does change between the on_action and the actual event running +tgp_dynastic_cycle.9000 = { + hidden = yes + + trigger = { + liege = root + is_landed = yes + tgp_chinese_naming_tier_trigger = yes + NOT = { has_character_flag = received_chinese_hegemonic_ascension_event } + } + + immediate = { + if = { + limit = { + OR = { + primary_title = { + has_custom_title_name = no + } + dynasty != primary_title.previous_holder.dynasty + } + } + add_character_flag = received_chinese_hegemonic_ascension_event + trigger_event = { + id = tgp_dynastic_cycle.9001 + } + } + else = { + save_scope_as = already_has_custom_title_name + if = { + limit = { + highest_held_title_tier = tier_hegemony + } + add_character_flag = received_chinese_hegemonic_ascension_event + trigger_event = { + id = tgp_dynastic_cycle.9002 + } + } + if = { + limit = { + is_ai = no + has_title = title:h_china + } + add_achievement_global_variable_effect = { + VARIABLE = finished_ep4_06_mandate_of_heaven_achievement_trigger + VALUE = yes + } + } + if = { + limit = { + has_title = title:h_china + current_date >= 960.1.1 + } + set_global_variable = { + name = chinese_fashion_change + value = 1 + } + } + remove_character_flag = received_chinese_hegemonic_ascension_event + } + } +} + +scripted_effect tgp_ascension_rewards_effect = { + if = { + limit = { + highest_held_title_tier = tier_hegemony + } + add_prestige = monumental_prestige_gain + change_influence = massive_influence_gain + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + if = { + limit = { + highest_held_title_tier = tier_empire + } + add_prestige = massive_prestige_gain + change_influence = massive_influence_gain + add_legitimacy_effect = { LEGITIMACY = massive_legitimacy_gain } + } + if = { + limit = { + highest_held_title_tier = tier_kingdom + } + add_prestige = major_prestige_gain + change_influence = major_influence_gain + add_legitimacy_effect = { LEGITIMACY = major_legitimacy_gain } + } + dynasty = { + if = { + limit = { + root.highest_held_title_tier = tier_hegemony + } + add_dynasty_prestige = monumental_dynasty_prestige_gain + } + if = { + limit = { + root.highest_held_title_tier = tier_empire + } + add_dynasty_prestige = massive_dynasty_prestige_gain + } + if = { + limit = { + root.highest_held_title_tier = tier_kingdom + } + add_dynasty_prestige = major_dynasty_prestige_gain + } + } +} + +tgp_dynastic_cycle.9001 = { + type = character_event + title = tgp_dynastic_cycle.9001.t + desc = tgp_dynastic_cycle.9001.desc + theme = dynastic_cycle + + left_portrait = { + character = root + animation = emperor + } + # tier check done in tgp_dynastic_cycle.9000 + #NAMING WIDGET + widget = { + gui = "event_window_widget_enter_text" + container = "dynamic_birth_name" + controller = { + type = text + data = { + key = new_realm_title_name + # Cultural + default = { + localization_key = dynn_title_nan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_nan } } + } + default = { + localization_key = dynn_title_he + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_he } } + } + default = { + localization_key = dynn_title_zhuang_li + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zhuang_li } } + } + default = { + localization_key = dynn_title_bo + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_bo } } + } + default = { + localization_key = dynn_title_zhen + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zhen } } + } + default = { + localization_key = dynn_title_rui + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_rui } } + } + default = { + localization_key = dynn_title_li + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_li } } + } + default = { + localization_key = dynn_title_fu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_fu } } + } + default = { + localization_key = dynn_title_yuan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yuan } } + } + default = { + localization_key = dynn_title_jurchen_jin + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_jurchen_jin } } + } + default = { + localization_key = dynn_title_han_korea + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_han_korea } } + } + default = { + localization_key = dynn_title_miao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_miao } } + } + default = { + localization_key = dynn_title_luo + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_luo } } + } + default = { + localization_key = dynn_title_le + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_le } } + } + default = { + localization_key = dynn_title_zhan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zhan } } + } + # Regional + default = { + localization_key = dynn_title_ba + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ba } } + } + default = { + localization_key = dynn_title_bao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_bao } } + } + default = { + localization_key = dynn_title_bi + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_bi } } + } + default = { + localization_key = dynn_title_cai + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_cai } } + } + default = { + localization_key = dynn_title_cao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_cao } } + } + default = { + localization_key = dynn_title_chen + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_chen } } + } + default = { + localization_key = dynn_title_cheng + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_cheng } } + } + default = { + localization_key = dynn_title_chu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_chu } } + } + default = { + localization_key = dynn_title_dai + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_dai } } + } + default = { + localization_key = dynn_title_dao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_dao } } + } + default = { + localization_key = dynn_title_deng + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_deng } } + } + default = { + localization_key = dynn_title_di + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_di } } + } + default = { + localization_key = dynn_title_dian + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_dian } } + } + default = { + localization_key = dynn_title_e + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_e } } + } + default = { + localization_key = dynn_title_gan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_gan } } + } + default = { + localization_key = dynn_title_gui + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_gui } } + } + default = { + localization_key = dynn_title_guo + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_guo } } + } + default = { + localization_key = dynn_title_han + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_han } } + } + default = { + localization_key = dynn_title_han_henan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_han_henan } } + } + default = { + localization_key = dynn_title_hua + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_hua } } + } + default = { + localization_key = dynn_title_huai + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_huai } } + } + default = { + localization_key = dynn_title_huang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_huang } } + } + default = { + localization_key = dynn_title_huo + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_huo } } + } + default = { + localization_key = dynn_title_ji + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ji } } + } + default = { + localization_key = dynn_title_ji_hebei + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ji_hebei } } + } + default = { + localization_key = dynn_title_jiao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_jiao } } + } + default = { + localization_key = dynn_title_jin + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_jin } } + } + default = { + localization_key = dynn_title_jing + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_jing } } + } + default = { + localization_key = dynn_title_ju + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ju } } + } + default = { + localization_key = dynn_title_kang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_kang } } + } + default = { + localization_key = dynn_title_lai + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_lai } } + } + default = { + localization_key = dynn_title_liang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_liang } } + } + default = { + localization_key = dynn_title_liang_west + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_liang_west } } + } + default = { + localization_key = dynn_title_liao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_liao } } + } + default = { + localization_key = dynn_title_lu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_lu } } + } + default = { + localization_key = dynn_title_min + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_min } } + } + default = { + localization_key = dynn_title_ou + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ou } } + } + default = { + localization_key = dynn_title_peng + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_peng } } + } + default = { + localization_key = dynn_title_qi + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_qi } } + } + default = { + localization_key = dynn_title_qi_guannei + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_qi_guannei } } + } + default = { + localization_key = dynn_title_qian + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_qian } } + } + default = { + localization_key = dynn_title_qin + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_qin } } + } + default = { + localization_key = dynn_title_qiong + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_qiong } } + } + default = { + localization_key = dynn_title_shang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_shang } } + } + default = { + localization_key = dynn_title_shen + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_shen } } + } + default = { + localization_key = dynn_title_shu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_shu } } + } + default = { + localization_key = dynn_title_song + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_song } } + } + default = { + localization_key = dynn_title_sui + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_sui } } + } + default = { + localization_key = dynn_title_tan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_tan } } + } + default = { + localization_key = dynn_title_tang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_tang } } + } + default = { + localization_key = dynn_title_teng + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_teng } } + } + default = { + localization_key = dynn_title_wei + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_wei } } + } + default = { + localization_key = dynn_title_wey + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_wey } } + } + default = { + localization_key = dynn_title_wu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_wu } } + } + default = { + localization_key = dynn_title_xi + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xi } } + } + default = { + localization_key = dynn_title_xia + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xia } } + } + default = { + localization_key = dynn_title_xiang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xiang } } + } + default = { + localization_key = dynn_title_xing + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xing } } + } + default = { + localization_key = dynn_title_xu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xu } } + } + default = { + localization_key = dynn_title_xu_shandong + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_xu_shandong } } + } + default = { + localization_key = dynn_title_yan + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yan } } + } + default = { + localization_key = dynn_title_yang + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yang } } + } + default = { + localization_key = dynn_title_yin + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yin } } + } + default = { + localization_key = dynn_title_ying + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_ying } } + } + default = { + localization_key = dynn_title_yong + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yong } } + } + default = { + localization_key = dynn_title_you + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_you } } + } + default = { + localization_key = dynn_title_yu + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yu } } + } + default = { + localization_key = dynn_title_yuan_ferghana + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yuan_ferghana } } + } + default = { + localization_key = dynn_title_yue + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yue } } + } + default = { + localization_key = dynn_title_yue_2 + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_yue_2 } } + } + default = { + localization_key = dynn_title_zhao + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zhao } } + } + default = { + localization_key = dynn_title_zheng + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zheng } } + } + default = { + localization_key = dynn_title_zhou + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zhou } } + } + default = { + localization_key = dynn_title_zou + trigger = { is_target_in_variable_list = { name = realm_title_names target = flag:dynn_title_zou } } + } + ### OTHER + default = { + localization_key = capital_duchy_name + trigger = { exists = scope:duchy_name } + } + default = { + localization_key = capital_kingdom_name + trigger = { exists = scope:kingdom_name } + } + } + } + setup_scope = { + root = { save_scope_as = text_target } + } + } + + immediate = { + hidden_effect = { + clear_variable_list = realm_title_names + tgp_assign_china_realm_name_options_effect = yes + if = { + limit = { + OR = { + NOT = { has_variable_list = realm_title_names } + variable_list_size = { + name = realm_title_names + value <= 1 + } + } + } + capital_county ?= { + duchy = { + save_scope_as = duchy_name + } + if = { + limit = { + root.highest_held_title_tier >= tier_kingdom + } + kingdom = { + save_scope_as = kingdom_name + } + } + } + } + } + if = { + limit = { is_ai = yes } + random_in_list = { + variable = realm_title_names + save_scope_as = new_realm_title_name + root = { + set_variable = { + name = new_realm_title_name + value = scope:new_realm_title_name + } + } + } + if = { + limit = { + NOT = { exists = root.var:new_realm_title_name } + } + root = { + set_variable = { + name = new_realm_title_name + value = flag:capital_duchy_name + } + } + } + } + play_music_cue = mx_cue_tgp_dynastic_cycle_end + } + + option = { + name = tgp_dynastic_cycle.9001.a + + tgp_ascension_rewards_effect = yes + } + + after = { + clear_variable_list = realm_title_names + + if = { + limit = { + is_ai = yes + NOT = { is_title_localization_key_used = dynn_title_yuan } + highest_held_title_tier >= tier_empire + culture = { + has_cultural_pillar = heritage_mongolic + } + } + primary_title = { + set_title_name_dynamic = dynn_title_yuan + } + } + else_if = { + limit = { + var:new_realm_title_name ?= flag:capital_duchy_name + } + primary_title = { + set_title_name_dynamic = capital_duchy_name + } + } + else_if = { + limit = { + var:new_realm_title_name ?= flag:capital_kingdom_name + } + primary_title = { + set_title_name_dynamic = capital_kingdom_name + } + } + else_if = { + limit = { + has_variable = new_realm_title_name + } + primary_title = { + set_title_name_dynamic = new_realm_title_name_from_var + } + } + else = { + # We entered custom text into the pop up + primary_title = { + set_title_name_dynamic = new_realm_title_name_entered_text + } + } + if = { + limit = { + highest_held_title_tier = tier_hegemony + } + trigger_event = { + id = tgp_dynastic_cycle.9002 + } + } + if = { + limit = { + is_ai = no + has_title = title:h_china + } + add_achievement_global_variable_effect = { + VARIABLE = finished_ep4_06_mandate_of_heaven_achievement_trigger + VALUE = yes + } + } + if = { + limit = { + has_title = title:h_china + current_date >= 960.1.1 + } + set_global_variable = { + name = chinese_fashion_change + value = 1 + } + } + remove_character_flag = received_chinese_hegemonic_ascension_event + create_artifact_dynastic_imperial_seal_effect = { + OWNER = root + SMITH = root + } + } +} + +# "peace" changes +scripted_trigger china_transfered_peacefully_trigger= { + title:h_china = { + OR = { + recent_history = { type = inheritance days = 7 } + recent_history = { type = abdication days = 7 } + recent_history = { type = granted days = 7 } + recent_history = { type = usurped days = 7 } + recent_history = { type = election days = 7 } + recent_history = { type = faction_demand days = 7 } + recent_history = { type = stepped_down days = 7 } + recent_history = { type = appointment days = 7 } + recent_history = { type = appointment_succession days = 7 } + } + } +} + +tgp_dynastic_cycle.9002 = { + type = character_event + title = tgp_dynastic_cycle.9002.t + desc = tgp_dynastic_cycle.9002.desc + theme = dynastic_cycle + left_portrait = { + character = root + animation = emperor + } + + immediate = { + if = { + limit = { + exists = scope:already_has_custom_title_name + } + tgp_ascension_rewards_effect = yes + } + } + + option = { + name = tgp_dynastic_cycle.9002.green + title:h_china = { + set_title_color = { 0 60 60 } + } + + tgp_set_wuking_element_effect = { ELEMENT = wood } + + ai_chance = { + base = 0 + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= yes + situation:dynastic_cycle.var:wuking_element ?= flag:earth + } + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= no + situation:dynastic_cycle.var:wuking_element ?= flag:water + } + modifier = { + add = 100 + dynasty.var:wuking_element ?= flag:wood + } + } + } + option = { + name = tgp_dynastic_cycle.9002.red + title:h_china = { + set_title_color = { 125 0 0 } + } + + tgp_set_wuking_element_effect = { ELEMENT = fire } + + ai_chance = { + base = 0 + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= yes + situation:dynastic_cycle.var:wuking_element ?= flag:wood + } + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= no + situation:dynastic_cycle.var:wuking_element ?= flag:metal + } + modifier = { + add = 100 + dynasty.var:wuking_element ?= flag:fire + } + } + } + option = { + name = tgp_dynastic_cycle.9002.yellow + title:h_china = { + set_title_color = { 250 180 0 } + } + + tgp_set_wuking_element_effect = { ELEMENT = earth } + + ai_chance = { + base = 0 + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= yes + situation:dynastic_cycle.var:wuking_element ?= flag:fire + } + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= no + situation:dynastic_cycle.var:wuking_element ?= flag:water + } + modifier = { + add = 100 + dynasty.var:wuking_element ?= flag:earth + } + } + } + option = { + name = tgp_dynastic_cycle.9002.white + title:h_china = { + set_title_color = { 180 200 200 } + } + + tgp_set_wuking_element_effect = { ELEMENT = metal } + + ai_chance = { + base = 0 + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= yes + situation:dynastic_cycle.var:wuking_element ?= flag:earth + } + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= no + situation:dynastic_cycle.var:wuking_element ?= flag:wood + } + modifier = { + add = 100 + dynasty.var:wuking_element ?= flag:metal + } + } + } + option = { + name = tgp_dynastic_cycle.9002.black + title:h_china = { + set_title_color = { 15 15 15 } + } + + tgp_set_wuking_element_effect = { ELEMENT = water } + + ai_chance = { + base = 0 + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= yes + situation:dynastic_cycle.var:wuking_element ?= flag:metal + } + modifier = { + add = 100 + NOT = { exists = dynasty.var:wuking_element } + china_transfered_peacefully_trigger= no + situation:dynastic_cycle.var:wuking_element ?= flag:fire + } + modifier = { + add = 100 + dynasty.var:wuking_element ?= flag:water + } + } + } +} diff --git a/events/dlc/tgp/tgp_dynastic_cycle_flavor_events.txt b/events/dlc/tgp/tgp_dynastic_cycle_flavor_events.txt new file mode 100644 index 00000000..f4415077 --- /dev/null +++ b/events/dlc/tgp/tgp_dynastic_cycle_flavor_events.txt @@ -0,0 +1,953 @@ +namespace = tgp_dynastic_cycle_events + +################################################################################### +## By Veronica Pazos +## tgp_dynastic_cycle_events.0001 - Tilt the scales towards Advancement +## tgp_dynastic_cycle_events.0010 - Disciple has a mental breakdown in Instability +## tgp_dynastic_cycle_events.0020 - Rowdy peasants steal food during Instability +## tgp_dynastic_cycle_events.0030 - In this time of Expansion you should become a Military Governor +## tgp_dynastic_cycle_events.0040 - Steward is interested in the Silk Road +## tgp_dynastic_cycle_events.0050 - Debate the Favoured Movement and get ahead of them +################################################################################### + +# Tilt the scales towards Advancement +scripted_trigger tgp_dynastic_cycle_events_0001_valid_servant = { + is_available_ai_adult = yes + is_lowborn = yes + has_any_court_position = no + is_councillor = no +} + +tgp_dynastic_cycle_events.0001 = { + type = character_event + title = tgp_dynastic_cycle_events.0001.t + desc = tgp_dynastic_cycle_events.0001.desc + left_portrait = { + character = root + animation = thinking + camera = camera_event_right_fully_away + } + right_portrait = { + character = scope:servant + animation = serving_tray + camera = camera_event_right_to_the_right + } + theme = dynastic_cycle + override_background = { reference = garden } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + NOT = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + } + + immediate = { + situation:dynastic_cycle = { save_scope_as = my_situation } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + random_courtier = { + limit = { tgp_dynastic_cycle_events_0001_valid_servant = yes } + save_scope_as = servant + } + if = { + limit = { NOT = { exists = scope:servant } } + hidden_effect_new_object = { + create_character = { + template = servant_character + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = 50 + save_scope_as = servant + } + add_courtier = scope:servant + scope:servant = { assign_quirk_effect = yes } + } + } + if = { + limit = { + any_relation = { + type = potential_friend + is_available_ai_adult = yes + count >= 1 + } + } + random_relation = { + type = potential_friend + limit = { is_available_ai_adult = yes } + save_scope_as = potential_friend + } + } + else_if = { + limit = { + any_relation = { + type = friend + is_available_ai_adult = yes + count >= 1 + } + } + random_relation = { + type = friend + limit = { is_available_ai_adult = yes } + save_scope_as = friend + } + } + } + + option = { # + name = tgp_dynastic_cycle_events.0001.aa + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + } + add_internal_flag = special + reason = movement + custom_tooltip = event_increase_movement_power_minor_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_minor_value + } + } + situation:dynastic_cycle ?= { + if = { + limit = { + situation_top_has_catalyst = catalyst_event_advancement_medium_progress + } + trigger_situation_catalyst = { + catalyst = catalyst_event_advancement_medium_progress + character = root + } + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + content = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + modifier = { + has_trait = content + factor = 0 + } + } + } + + option = { # Focus on friendos + name = tgp_dynastic_cycle_events.0001.a + if = { + limit = { + exists = scope:potential_friend + } + custom_tooltip = tgp_dynastic_cycle_events.0001.a.potential_friend + set_relation_friend = { + target = scope:potential_friend + reason = friend_together_in_preparation + } + } + else_if = { + limit = { + exists = scope:friend + } + custom_tooltip = tgp_dynastic_cycle_events.0001.a.potential_friend + change_influence = major_influence_gain + scope:friend = { change_influence = major_influence_gain } + } + else = { change_influence = medium_influence_gain } + stress_impact = { + gregarious = medium_stress_impact_loss + callous = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + factor = 2 + } + modifier = { + has_trait = callous + factor = 0 + } + } + } + + option = { # Why wait? + name = tgp_dynastic_cycle_events.0001.b + add_character_modifier = { + modifier = tgp_advancement_focus_modifier + years = 20 + } + stress_impact = { + impatient = medium_stress_impact_loss + patient = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 2 + } + modifier = { + has_trait = honest + factor = 0 + } + } + } + + option = { # We must focus on NOW + name = tgp_dynastic_cycle_events.0001.c + stress_impact = { + base = medium_stress_impact_loss + } + ai_chance = { + base = 100 + } + } +} + +# Disciple has a mental breakdown in Instability +scripted_trigger tgp_dynastic_cycle_events_0010_valid_disciple = { + is_available_ai_adult = yes + has_personality_dominant_trigger = no + has_a_stress_coping_trait_trigger = no +} + +tgp_dynastic_cycle_events.0010 = { + type = character_event + title = tgp_dynastic_cycle_events.0010.t + desc = tgp_dynastic_cycle_events.0010.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_personality_malicious_trigger = yes + } + animation = dismissal + } + animation = worry + } + right_portrait = { + character = scope:disciple + animation = stress + } + theme = dynastic_cycle + override_background = { reference = relaxing_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + any_relation = { + type = disciple + tgp_dynastic_cycle_events_0010_valid_disciple = yes + } + } + + immediate = { + situation:dynastic_cycle = { save_scope_as = my_situation } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + random_relation = { + type = disciple + limit = { tgp_dynastic_cycle_events_0010_valid_disciple = yes } + weight = { + base = 1 + modifier = { + has_personality_emotional_trigger = yes + add = 10 + } + modifier = { + age <= 35 + add = 5 + } + } + save_scope_as = disciple + } + random_list = { + 1 = { + set_variable = { + name = stress_trait + value = flag:drunkard + } + } + 1 = { + set_variable = { + name = stress_trait + value = flag:flagellant + } + } + 1 = { + set_variable = { + name = stress_trait + value = flag:contrite + } + } + 1 = { + set_variable = { + name = stress_trait + value = flag:irritable + } + } + 1 = { + set_variable = { + name = stress_trait + value = flag:rakish + } + } + 1 = { + set_variable = { + name = stress_trait + value = flag:hashishiyah + } + } + } + } + + option = { # You gotta straighten up + name = tgp_dynastic_cycle_events.0010.a + switch = { + trigger = var:stress_trait + flag:drunkard = { + scope:disciple = { add_trait = drunkard } + } + flag:flagellant = { + scope:disciple = { add_trait = flagellant } + } + flag:contrite = { + scope:disciple = { add_trait = contrite } + } + flag:rakish = { + scope:disciple = { add_trait = rakish } + } + flag:hashishiyah = { + scope:disciple = { add_trait = hashishiyah } + } + } + scope:disciple = { add_stress = major_stress_impact_gain } + change_influence = medium_influence_gain + stress_impact = { + callous = medium_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + factor = 2 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { # Comfort them + name = tgp_dynastic_cycle_events.0010.b + if = { + limit = { + can_add_hook = { + type = favor_hook + target = scope:disciple + } + } + add_hook = { + type = favor_hook + target = scope:disciple + } + } + scope:disciple = { add_stress = medium_stress_impact_loss } + stress_impact = { + compassionate = major_stress_impact_loss + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = callous + has_trait = sadistic + } + factor = 0 + } + modifier = { + has_trait = compassionate + factor = 2 + } + } + } + + option = { # Instability is actually good + name = tgp_dynastic_cycle_events.0010.c + gain_appropriate_lifestyle_medium_xp_effect = yes + scope:disciple = { + gain_appropriate_lifestyle_medium_xp_effect = yes + add_stress = medium_stress_impact_gain + } + stress_impact = { + content = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = content + factor = 2 + } + } + } +} + +# Rowdy peasants steal food during instability +tgp_dynastic_cycle_events.0020 = { + type = character_event + title = tgp_dynastic_cycle_events.0020.t + desc = tgp_dynastic_cycle_events.0020.desc + left_portrait = { + character = root + animation = japanese_war_fan + camera = camera_event_very_left + } + right_portrait = { + character = scope:marshal + animation = relaxed_spear + } + theme = dynastic_cycle + override_background = { reference = throne_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_instability + } + any_held_county = { + county_control >= low_county_control + } + } + + immediate = { + situation:dynastic_cycle = { save_scope_as = my_situation } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + if = { + limit = { + exists = cp:councillor_marshal + cp:councillor_marshal = { is_available_healthy_ai_adult = yes } + } + cp:councillor_marshal = { save_scope_as = marshal } + } + else_if = { + limit = { + any_knight = { is_available_healthy_ai_adult = yes } + } + ordered_knight = { + limit = { is_available_healthy_ai_adult = yes } + order_by = martial + save_scope_as = marshal + } + } + else = { + hidden_effect_new_object = { + create_character = { + template = knight + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = marshal + } + } + } + scope:marshal = { + assign_quirk_effect = yes + add_character_flag = need_military_outfit + hidden_effect = { + if = { + limit = { + NOR = { + is_courtier_of = root + is_vassal_of = root + } + + } + root = { add_courtier = prev } + } + } + } + random_held_county = { + limit = { county_control >= low_county_control } + change_county_control = major_county_control_loss + save_scope_as = peasant_county + } + } + + option = { # Execute them + name = tgp_dynastic_cycle_events.0020.a + trigger = { + has_focus = intrigue_intimidation_focus + } + reason = lifestyle_focus + add_internal_flag = special + add_dread = major_dread_gain + scope:peasant_county = { + add_county_modifier = { + modifier = tgp_executed_peasants_county_modifier + years = 10 + } + change_county_control = medium_county_control_gain + } + stress_impact = { + callous = medium_stress_impact_loss + compassionate = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = callous + factor = 2 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + option = { # Pay money to make Increase County Control better + name = tgp_dynastic_cycle_events.0020.b + pay_treasury_or_gold = { + target = scope:marshal + value = major_treasury_or_gold_value + } + scope:peasant_county = { change_county_control = medium_county_control_gain } + stress_impact = { + greedy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = greedy + treasury_or_gold <= massive_treasury_or_gold_value + } + factor = 0 + } + } + } + + option = { # What can you do + name = tgp_dynastic_cycle_events.0020.c + stress_impact = { + lazy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } +} + +# In this time of Expansion you should become a Military Governor +tgp_dynastic_cycle_events.0030 = { + type = character_event + title = tgp_dynastic_cycle_events.0030.t + desc = tgp_dynastic_cycle_events.0030.desc + left_portrait = { + character = root + animation = frontend_center_idle + camera = camera_event_very_left + } + right_portrait = { + character = scope:marshal + animation = celebrate_spear + } + theme = dynastic_cycle + override_background = { reference = courtyard } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + NOT = { has_trait_with_flag = military_province } # You are not a Military Governor + } + + immediate = { + situation:dynastic_cycle = { save_scope_as = my_situation } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + assign_quirk_effect = yes + if = { + limit = { + exists = cp:councillor_marshal + cp:councillor_marshal = { is_available_healthy_ai_adult = yes } + } + cp:councillor_marshal = { save_scope_as = marshal } + } + else_if = { + limit = { + any_knight = { is_available_healthy_ai_adult = yes } + } + ordered_knight = { + limit = { is_available_healthy_ai_adult = yes } + order_by = martial + save_scope_as = marshal + } + } + else = { + hidden_effect_new_object = { + create_character = { + template = knight + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = marshal + } + } + } + scope:marshal = { + assign_quirk_effect = yes + add_character_flag = need_military_outfit + hidden_effect = { + if = { + limit = { NOT = { is_courtier_of = root } } + root = { add_courtier = prev } + } + } + } + } + + option = { # Let's do it!!! + name = tgp_dynastic_cycle_events.0030.a + custom_tooltip = { + text = change_to_military_career_desc + set_variable = { + name = appointment_trait_override + value = trait:education_martial_1 + } + } + add_martial_lifestyle_perk_points = 1 + add_martial_lifestyle_xp = massive_lifestyle_xp + stress_impact = { + base = major_stress_impact_gain + fickle = major_stress_impact_loss + arbitrary = major_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = fickle + has_trait = arbitrary + } + factor = 2 + } + } + } + + option = { # Thank you but no + name = tgp_dynastic_cycle_events.0030.b + custom_tooltip = { + text = tgp_movement_events.0001.c.tt + give_random_commander_trait_effect = yes + } + stress_impact = { + diligent = major_stress_impact_loss + lazy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = lazy + factor = 0 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { # I am good thanks + name = tgp_dynastic_cycle_events.0030.c + change_merit = medium_merit_gain + stress_impact = { + content = medium_stress_impact_loss + lazy = medium_stress_impact_loss + fickle = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = content + has_trait = lazy + } + factor = 2 + } + modifier = { + has_trait = fickle + factor = 0 + } + } + } +} + +# Steward is interested in the Silk Road +tgp_dynastic_cycle_events.0040 = { + type = character_event + title = tgp_dynastic_cycle_events.0040.t + desc = tgp_dynastic_cycle_events.0040.desc + left_portrait = { + character = root + animation = interested + } + right_portrait = { + character = scope:steward + animation = steward + } + theme = dynastic_cycle + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = cp:councillor_steward + exists = situation:dynastic_cycle + exists = situation:silk_road_situation + culture = { culture_has_any_fascination = yes } + } + + weight_multiplier = { + base = 0.5 + modifier = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + add = 1.5 + } + modifier = { + is_ai = yes + factor = 0.2 + } + } + + immediate = { + situation:dynastic_cycle = { save_scope_as = my_situation } + situation:silk_road_situation = { save_scope_as = silk_road_situation } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + assign_quirk_effect = yes + cp:councillor_steward = { + assign_quirk_effect = yes + save_scope_as = steward + } + } + + option = { # Special option if it's Advancement phase + name = tgp_dynastic_cycle_events.0040.a + trigger = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_advancement + } + } + add_internal_flag = special + reason = advancement_phase + pay_treasury_or_gold = { + target = scope:steward + value = medium_treasury_or_gold_value + } + add_stewardship_lifestyle_xp = minor_lifestyle_xp + add_character_modifier = { + modifier = tgp_silk_road_advancement_modifier + years = 15 + } + stress_impact = { + greedy = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + OR = { + has_trait = greedy + has_lifestyle = stewardship_lifestyle + } + factor = 2 + } + } + } + + option = { # Invest! + name = tgp_dynastic_cycle_events.0040.b + pay_treasury_or_gold = { + target = scope:steward + value = medium_treasury_or_gold_value + } + culture = { add_fascination_progress = 2.5 } + stress_impact = { + avaricious = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + has_trait = greedy + treasury_or_gold <= major_treasury_or_gold_value + factor = 0 + } + } + } + + option = { # I am good thanks + name = tgp_dynastic_cycle_events.0040.c + + stress_impact = { + avaricious = medium_stress_impact_gain + } + ai_chance = { + base = 200 + modifier = { + has_trait = greedy + factor = 2 + } + modifier = { + has_trait = avaricious + factor = 0.5 + } + } + } +} + +# Debate the Favoured Movement and get ahead of them +tgp_dynastic_cycle_events.0050 = { + type = character_event + title = tgp_dynastic_cycle_events.0050.t + desc = tgp_dynastic_cycle_events.0050.desc + left_portrait = { + character = root + animation = disapproval + } + theme = dynastic_cycle + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + is_any_movement_member_not_undecided = yes # You are part of a Movement + situation:dynastic_cycle ?= { # You are not the Favoured Movement + any_participant_group = { + exists = var:movement_favored + NOT = { participant_group_has_character = root } + } + } + NOT = { has_variable = tgp_debate_discount_var } + } + + weight_multiplier = { + base = 1 + modifier = { + is_any_movement_leader = yes + add = 1 + } + } + + immediate = { + situation:dynastic_cycle = { + save_scope_as = my_situation + random_participant_group = { + limit = { + has_variable = movement_favored + } + save_scope_as = favored_movement + } + } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + top_liege = { save_scope_as = top_liege } + } + + option = { # Get discount to Debate + name = tgp_dynastic_cycle_events.0050.a + custom_tooltip = { + text = tgp_debate_discount_var_tt + set_variable = { + name = tgp_debate_discount_var + years = 5 + } + } + stress_impact = { + greedy = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + is_any_movement_leader = yes + add = 50 + } + } + } + + option = { # Just get some Movement Power + name = tgp_dynastic_cycle_events.0050.b + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + + option = { # Focus on yourself + name = tgp_dynastic_cycle_events.0050.c + change_influence = medium_influence_gain + stress_impact = { + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = humble + factor = 0 + } + } + } +} diff --git a/events/dlc/tgp/tgp_east_asia_decision_events.txt b/events/dlc/tgp/tgp_east_asia_decision_events.txt new file mode 100644 index 00000000..a34cf72c --- /dev/null +++ b/events/dlc/tgp/tgp_east_asia_decision_events.txt @@ -0,0 +1,966 @@ + +namespace = tgp_east_asia_decision_events + +#You adopted Mandala +tgp_east_asia_decision_events.0010 = { + type = character_event + title = tgp_east_asia_decision_events.0010.t + desc = tgp_east_asia_decision_events.0010.desc + theme = mandala + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = zealous } + animation = personality_zealous + } + animation = eccentric + } + immediate = { + if = { + limit = { has_variable = vying_for_mandala_divinity } + custom_description_no_bullet = { text = because_of_your_divine_happenstance_tt } + divine_happenstance_adopt_mandala_effect = yes + remove_variable = vying_for_mandala_divinity + } + } + #Alright, and I'll take a Temple Citadel too, please + option = { + name = tgp_east_asia_decision_events.0010.a + trigger = { + any_directly_owned_province = { has_holding_type = tribal_holding } + } + #This changes all holdings for Tribals, or only the Capital for everyone else + if = { + limit = { + culture = { + has_cultural_parameter = mandala_tributaries + } + confederation ?= { is_house_based = no } + } + hidden_effect = { + confederation = { + every_confederation_member = { + limit = { + this != root + } + add_to_list = tributaries + } + } + } + } + change_to_mandala_government_and_citadel_effect = yes + if = { + limit = { + culture = { + has_cultural_parameter = mandala_tributaries + } + any_in_list = { + list = tributaries + is_alive = yes + } + } + hidden_effect = { + every_in_list = { + list = tributaries + confederation = { + remove_confederation_member = prev + } + start_tributary_interaction_effect = { + TRIBUTARY = this + SUZERAIN = root + } + } + } + custom_tooltip = confederates_to_tributaries_tt + } + ai_chance = { + base = 100 + } + } + #Only the government for me thanks + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + capital_province = { has_holding_type = temple_citadel_holding } + } + desc = tgp_east_asia_decision_events.0010.b_temple_citadel + } + desc = tgp_east_asia_decision_events.0010.b + } + } + } + trigger = { + #Sorry, Tribal Holdings need to go + NOR = { + capital_province = { has_holding_type = tribal_holding } + any_directly_owned_province = { has_holding_type = tribal_holding } + } + #You need to either have a Temple Citadel or somewhere to build a Temple Citadel to avoid noob trap + OR = { + any_realm_province = { + OR = { + has_holding = no + has_holding_type = temple_citadel_holding + } + } + capital_province = { has_holding_type = temple_citadel_holding } + } + + } + if = { + limit = { + culture = { + has_cultural_parameter = mandala_tributaries + } + confederation ?= { is_house_based = no } + } + hidden_effect = { + confederation = { + every_confederation_member = { + limit = { + this != root + } + add_to_list = tributaries + } + } + } + } + change_to_mandala_government_effect = yes + if = { + limit = { + culture = { + has_cultural_parameter = mandala_tributaries + } + any_in_list = { + list = tributaries + is_alive = yes + } + } + hidden_effect = { + every_in_list = { + list = tributaries + confederation = { + remove_confederation_member = prev + } + start_tributary_interaction_effect = { + TRIBUTARY = this + SUZERAIN = root + } + } + } + custom_tooltip = confederates_to_tributaries_tt + } + ai_chance = { + base = 0 + } + } +} + +#Vassals get notified +tgp_east_asia_decision_events.0015 = { + type = letter_event + opening = tgp_east_asia_decision_events.0015.opening + desc = tgp_east_asia_decision_events.0015.desc + sender = { + character = scope:liege + animation = personality_zealous + } + immediate = { + liege = { + save_scope_as = liege + show_as_tooltip = { change_government = mandala_government } + } + } + #What does this mean + option = { + name = tgp_east_asia_decision_events.0015.a + } +} + + +#You assimilated to your Overlord being Mandala +tgp_east_asia_decision_events.0020 = { + type = character_event + title = tgp_east_asia_decision_events.0020.t + desc = tgp_east_asia_decision_events.0020.desc + theme = mandala + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = zealous } + animation = personality_zealous + } + animation = eccentric + } + lower_right_portrait = { + character = scope:overlord + } + immediate = { + overlord = { save_scope_as = overlord } + if = { + limit = { + NOR = { + faith = overlord.faith + faith.religious_head ?= root + } + } + set_character_faith = overlord.faith + custom_tooltip = tgp_east_asia_decision_events.0020.close_family_post_tt + hidden_effect = { + # Family at court also convert + every_close_family_member = { + limit = { + is_courtier_of = root + faith != root.overlord.faith + } + set_character_faith = root.overlord.faith + } + } + } + } + #Alright, and I'll take a Temple Citadel too, please + option = { + name = tgp_east_asia_decision_events.0020.a + if = { + limit = { + NOT = { government_has_flag = government_is_mandala } + } + #This changes all holdings for Tribals, or only the Capital for everyone else + change_to_mandala_government_and_citadel_effect = yes + } + ai_chance = { + base = 100 + } + } + #Only the government for me thanks + option = { + name = tgp_east_asia_decision_events.0020.b + trigger = { + NOR = { + government_has_flag = government_is_mandala + #Sorry, Tribal Holdings need to go + capital_province = { has_holding_type = tribal_holding } + } + #You need to either have a Temple Citadel or somewhere to build a Temple Citadel to avoid noob trap + any_realm_province = { + OR = { + has_holding = no + has_holding_type = temple_citadel_holding + } + } + } + change_to_mandala_government_effect = yes + ai_chance = { + base = 0 + } + } + after = { + #Change the tributary type to Mandala + if = { + limit = { + is_tributary_of = scope:overlord + NOT = { has_subject_contract_group = tributary_mandala } + } + hidden_effect = { + end_tributary = yes + #This still triggers the invalidation toast, somehow — should be reverted when code Jira TIT-68838 is fixed + trigger_event = { + id = tgp_east_asia_decision_events.0021 + delayed = yes + } + } + } + } +} + +#Ful-fix to make the tributary update not invalidate +tgp_east_asia_decision_events.0021 = { + hidden = yes + immediate = { + start_tributary_interaction_effect = { + TRIBUTARY = root + SUZERAIN = scope:overlord + } + } +} + +#Vassals get notified +tgp_east_asia_decision_events.0025 = { + type = letter_event + opening = tgp_east_asia_decision_events.0025.opening + desc = tgp_east_asia_decision_events.0025.desc + sender = { + character = scope:liege + animation = personality_zealous + } + immediate = { + liege = { + save_scope_as = liege + overlord = { save_scope_as = overlord } + show_as_tooltip = { mandala_assimilation_effect = yes } + } + } + #What does this mean + option = { + name = tgp_east_asia_decision_events.0025.a + } +} + + +#Your Mandala Liege turned Clan +tgp_east_asia_decision_events.0030 = { + type = character_event + title = tgp_east_asia_decision_events.0030.t + desc = tgp_east_asia_decision_events.0030.desc + theme = court + override_background = { reference = throne_room } + left_portrait = { + character = root + animation = worry + } + lower_right_portrait = { + character = scope:liege + } + immediate = { + liege = { + save_scope_as = liege + show_as_tooltip = { change_government = clan_government } + } + show_as_tooltip = { + if = { + limit = { + capital_province = { + NOR = { + has_holding_type = temple_citadel_holding + has_holding_type = castle_holding + } + } + } + capital_province = { set_holding_type = castle_holding } + } + change_government = clan_government + #Start off crown authorities + if = { + limit = { + NOT = { has_realm_law = crown_authority_0 } + } + add_realm_law_skip_effects = crown_authority_0 + } + } + } + #Okidoki + option = { + name = tgp_east_asia_decision_events.0030.a + ai_chance = { + base = 100 + } + } +} + + +#Assimilation Payout Event +tgp_east_asia_decision_events.0100 = { + type = character_event + title = tgp_east_asia_decision_events.0100.t + desc = tgp_east_asia_decision_events.0100.desc + theme = mandala + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = zealous } + animation = personality_zealous + } + animation = admiration + } + right_portrait = { + character = scope:overlord + animation = personality_zealous + } + trigger = { + this != top_overlord + government_has_flag = government_is_mandala + AND = { + has_variable = mandala_assimilation_devaraja + var:mandala_assimilation_devaraja = { + government_has_flag = government_is_mandala + this = { is_alive = yes } + this = overlord + } + } + AND = { + has_variable = mandala_assimilation_devaraja_piety_level + var:mandala_assimilation_devaraja_piety_level >= overlord.piety_level + } + } + on_trigger_fail = { trigger_event = tgp_east_asia_decision_events.0110 } + #Did they level up? + override_effect_2d = { + trigger = { overlord.piety_level > var:mandala_assimilation_devaraja_piety_level } + reference = legend_glow + } + immediate = { + overlord = { save_scope_as = overlord } + } + #Cool! + option = { + name = tgp_east_asia_decision_events.0100.a + if = { + limit = { has_character_flag = assimilation_payout_t3 } + add_piety = assimilation_piety_payout_t3 + add_legitimacy_effect = { LEGITIMACY = assimilation_legitimacy_payout_t3 } + } + else_if = { + limit = { has_character_flag = assimilation_payout_t2 } + add_piety = assimilation_piety_payout_t2 + add_legitimacy_effect = { LEGITIMACY = assimilation_legitimacy_payout_t2 } + } + else_if = { + limit = { has_character_flag = assimilation_payout_t1 } + add_piety = assimilation_piety_payout_t1 + add_legitimacy_effect = { LEGITIMACY = assimilation_legitimacy_payout_t1 } + } + } + after = { mandala_clean_up_variables_effect = yes } +} + +#Whelp, either you or your Devaraja have lost your way +tgp_east_asia_decision_events.0110 = { + hidden = yes + + immediate = { + var:mandala_assimilation_devaraja ?= { save_scope_as = saved_devaraja } + send_interface_message = { + type = event_conversion_bad_text + title = failed_assimilation_payout_msg + desc = failed_assimilation_payout_msg_desc + left_icon = root + right_icon = scope:saved_devaraja + } + mandala_clean_up_variables_effect = yes + } +} + +scripted_trigger base_court_brahmin_triggers = { + is_adult = yes + has_any_disease_trigger = no +} + +scripted_effect recruit_mandala_court_position_effect = { + pay_short_term_gold = { + target = $RECRUITEE$ + gold = $GOLD_VALUE$ + } + add_courtier = $RECRUITEE$ + appoint_court_position = { + recipient = $RECRUITEE$ + court_position = $COURT_POSITION$ + } + hidden_effect = { + $RECRUITEE$ = { + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 25 + } + } + } +} + +#Hire a Court Brahmin +tgp_east_asia_decision_events.0200 = { + type = character_event + title = tgp_east_asia_decision_events.0200.t + desc = tgp_east_asia_decision_events.0200.desc + theme = mandala + left_portrait = { + character = scope:great_brahmin_option + animation = personality_zealous + } + right_portrait = { + character = scope:good_brahmin_option + animation = thinking + } + immediate = { + #Good character + if = { + limit = { + any_pool_character = { + province = root.capital_province + base_court_brahmin_triggers = yes + court_brahmin_validity_trigger = { EMPLOYER = root } + "aptitude(court_brahmin_court_position)" = 3 + } + } + random_pool_character = { + province = root.capital_province + limit = { + base_court_brahmin_triggers = yes + court_brahmin_validity_trigger = { EMPLOYER = root } + "aptitude(court_brahmin_court_position)" = 3 + } + save_scope_as = good_brahmin_option + } + } + else = { + create_character = { + location = root.capital_province + template = tgp_court_brahmin_template + age = { 25 40 } + random_traits_list = { + count = 1 + education_learning_1 = {} + education_learning_2 = {} + } + save_scope_as = good_brahmin_option + after_creation = { save_scope_as = goodly_created } + } + hidden_effect = { + random_list = { + 50 = { + religion:buddhism_religion = { + random_faith = { + save_scope_as = brahmin_faith + } + } + } + 50 = { + religion:hinduism_religion = { + random_faith = { + save_scope_as = brahmin_faith + } + } + } + } + scope:good_brahmin_option = { + set_character_faith = scope:brahmin_faith + } + } + } + #Great character + if = { + limit = { + any_pool_character = { + province = root.capital_province + base_court_brahmin_triggers = yes + court_brahmin_validity_trigger = { EMPLOYER = root } + "aptitude(court_brahmin_court_position)" = 5 + } + } + random_pool_character = { + province = root.capital_province + limit = { + base_court_brahmin_triggers = yes + court_brahmin_validity_trigger = { EMPLOYER = root } + "aptitude(court_brahmin_court_position)" = 5 + } + save_scope_as = great_brahmin_option + } + } + else = { + create_character = { + location = root.capital_province + gender_female_chance = root_faith_clergy_gender_female_chance + template = tgp_court_brahmin_template + age = { 40 50 } + trait = devoted + trait = compassionate + trait = education_learning_4 + random_traits_list = { + count = 1 + theologian = {} + avaricious = {} + } + save_scope_as = great_brahmin_option + after_creation = { save_scope_as = greatly_created } + } + hidden_effect = { + random_list = { + 50 = { + religion:buddhism_religion = { + random_faith = { + save_scope_as = brahmin_faith + } + } + } + 50 = { + religion:hinduism_religion = { + random_faith = { + save_scope_as = brahmin_faith + } + } + } + } + scope:great_brahmin_option = { + set_character_faith = scope:brahmin_faith + } + } + } + } + #Great option + option = { + name = tgp_east_asia_decision_events.0200.a + custom_tooltip = tgp_east_asia_decision_events.0200.a.aptitude + recruit_mandala_court_position_effect = { + RECRUITEE = scope:great_brahmin_option + GOLD_VALUE = medium_gold_value + COURT_POSITION = court_brahmin_court_position + } + ai_chance = { + base = 100 + modifier = { + short_term_gold > medium_gold_value + } + } + } + #Good option + option = { + name = tgp_east_asia_decision_events.0200.b + custom_tooltip = tgp_east_asia_decision_events.0200.b.aptitude + recruit_mandala_court_position_effect = { + RECRUITEE = scope:good_brahmin_option + GOLD_VALUE = minor_gold_value + COURT_POSITION = court_brahmin_court_position + } + } + #Nah + option = { + name = tgp_east_asia_decision_events.0200.c + } + #Sweep, sweep + after = { + if = { + limit = { + exists = scope:goodly_created + NOT = { + scope:goodly_created = { is_courtier_of = root } + } + } + scope:goodly_created = { silent_disappearance_effect = yes } + } + if = { + limit = { + exists = scope:greatly_created + NOT = { + scope:greatly_created = { is_courtier_of = root } + } + } + scope:greatly_created = { silent_disappearance_effect = yes } + } + } +} + +#Hire a Khlon Glan +tgp_east_asia_decision_events.0210 = { + type = character_event + title = tgp_east_asia_decision_events.0210.t + desc = tgp_east_asia_decision_events.0210.desc + theme = mandala + override_background = armory + left_portrait = { + character = scope:great_khlon_glan_option + animation = survey + } + right_portrait = { + character = scope:good_khlon_glan_option + animation = chess_cocky + } + immediate = { + #Good character + if = { + limit = { + any_pool_character = { + province = root.capital_province + base_court_brahmin_triggers = yes + khlon_glan_validity_trigger = { EMPLOYER = root } + "aptitude(khlon_glan_court_position)" = 3 + } + } + random_pool_character = { + province = root.capital_province + limit = { + base_court_brahmin_triggers = yes + khlon_glan_validity_trigger = { EMPLOYER = root } + "aptitude(khlon_glan_court_position)" = 3 + } + save_scope_as = good_khlon_glan_option + } + } + else = { + create_character = { + location = root.capital_province + template = tgp_khlon_glan_template + age = { 30 40 } + random_traits_list = { + count = 1 + education_stewardship_1 = {} + education_stewardship_2 = {} + education_martial_1 = {} + education_martial_2 = {} + } + save_scope_as = good_khlon_glan_option + after_creation = { save_scope_as = goodly_created } + } + scope:good_khlon_glan_option = { + if = { + limit = { martial < 10 } + add_martial_skill = { 4 6 } + } + if = { + limit = { stewardship < 10 } + add_stewardship_skill = { 4 6 } + } + } + } + #Great character + if = { + limit = { + any_pool_character = { + province = root.capital_province + base_court_brahmin_triggers = yes + khlon_glan_validity_trigger = { EMPLOYER = root } + "aptitude(khlon_glan_court_position)" = 5 + } + } + random_pool_character = { + province = root.capital_province + limit = { + base_court_brahmin_triggers = yes + khlon_glan_validity_trigger = { EMPLOYER = root } + "aptitude(khlon_glan_court_position)" = 5 + } + save_scope_as = great_khlon_glan_option + } + } + else = { + create_character = { + location = root.capital_province + template = tgp_khlon_glan_template + age = { 40 50 } + random_traits_list = { + count = 1 + education_stewardship_3 = {} + education_stewardship_4 = {} + education_martial_3 = {} + education_martial_4 = {} + } + random_traits_list = { + count = 1 + administrator = {} + overseer = {} + } + trait = organizer + save_scope_as = great_khlon_glan_option + after_creation = { save_scope_as = greatly_created } + } + scope:great_khlon_glan_option = { + if = { + limit = { martial < 10 } + add_martial_skill = { 6 8 } + } + if = { + limit = { stewardship < 10 } + add_stewardship_skill = { 6 8 } + } + } + } + } + #Great option + option = { + name = tgp_east_asia_decision_events.0210.a + custom_tooltip = tgp_east_asia_decision_events.0210.a.aptitude + recruit_mandala_court_position_effect = { + RECRUITEE = scope:great_khlon_glan_option + GOLD_VALUE = medium_gold_value + COURT_POSITION = khlon_glan_court_position + } + ai_chance = { + base = 100 + modifier = { + short_term_gold > medium_gold_value + } + } + } + #Good option + option = { + name = tgp_east_asia_decision_events.0210.b + custom_tooltip = tgp_east_asia_decision_events.0210.b.aptitude + recruit_mandala_court_position_effect = { + RECRUITEE = scope:good_khlon_glan_option + GOLD_VALUE = minor_gold_value + COURT_POSITION = khlon_glan_court_position + } + } + #Nah + option = { + name = tgp_east_asia_decision_events.0210.c + } + #Sweep, sweep + after = { + if = { + limit = { + exists = scope:goodly_created + NOT = { + scope:goodly_created = { is_courtier_of = root } + } + } + scope:goodly_created = { silent_disappearance_effect = yes } + } + if = { + limit = { + exists = scope:greatly_created + NOT = { + scope:greatly_created = { is_courtier_of = root } + } + } + scope:greatly_created = { silent_disappearance_effect = yes } + } + } +} + +#Create Bunga Mas +tgp_east_asia_decision_events.0300 = { + type = character_event + title = tgp_east_asia_decision_events.0300.t + desc = { + desc = tgp_east_asia_decision_events.0300.desc + first_valid = { + triggered_desc = { + trigger = { + scope:newly_created_bunga_mas = { rarity = illustrious } + } + desc = tgp_east_asia_decision_events.0300.outro.illustrious + } + triggered_desc = { + trigger = { + scope:newly_created_bunga_mas = { rarity = famed } + } + desc = tgp_east_asia_decision_events.0300.outro.famed + } + triggered_desc = { + trigger = { + scope:newly_created_bunga_mas = { rarity = masterwork } + } + desc = tgp_east_asia_decision_events.0300.outro.masterwork + } + desc = tgp_east_asia_decision_events.0300.outro + } + } + theme = mandala + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:newly_created_bunga_mas = { rarity = illustrious } + } + animation = ecstasy + } + triggered_animation = { + trigger = { + scope:newly_created_bunga_mas = { rarity = famed } + } + animation = admiration + } + triggered_animation = { + trigger = { + scope:newly_created_bunga_mas = { rarity = masterwork } + } + animation = interested + } + animation = thinking + } + right_portrait = { + character = scope:local_artisan + animation = admiration + } + artifact = { + target = scope:newly_created_bunga_mas + position = lower_center_portrait + } + immediate = { + overlord = { save_scope_as = overlord } + + random_list = { + 50 = { + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + } + 25 = { set_artifact_rarity_famed = yes } + 10 = { + trigger = { has_relation_best_friend = scope:overlord } + set_artifact_rarity_illustrious = yes + } + } + + scope:local_artisan = { + hidden_effect_new_object = { + create_artifact = { + name = bunga_mas + description = common_bunga_mas_desc + modifier = artifact_placeholder_modifier + wealth = scope:wealth + quality = scope:quality + type = pedestal + visuals = bunga_mas + save_scope_as = newly_created_bunga_mas + } + scope:newly_created_bunga_mas = { + remove_artifact_modifier = artifact_placeholder_modifier + if = { + limit = { rarity = illustrious } + set_artifact_description = illustrious_bunga_mas_desc + add_artifact_modifier = artifact_monthly_piety_gain_per_legitimacy_level_mult_3_modifier + add_artifact_modifier = artifact_legitimacy_loss_mult_5_modifier + } + else_if = { + limit = { rarity = famed } + set_artifact_description = famed_bunga_mas_desc + add_artifact_modifier = artifact_monthly_piety_gain_per_legitimacy_level_mult_2_modifier + add_artifact_modifier = artifact_legitimacy_loss_mult_4_modifier + } + else_if = { + limit = { rarity = masterwork } + set_artifact_description = masterwork_bunga_mas_desc + add_artifact_modifier = artifact_monthly_piety_gain_per_legitimacy_level_mult_2_modifier + add_artifact_modifier = artifact_legitimacy_loss_mult_3_modifier + } + else = { + add_artifact_modifier = artifact_monthly_piety_gain_per_legitimacy_level_mult_1_modifier + add_artifact_modifier = artifact_legitimacy_loss_mult_2_modifier + } + set_variable = { + name = bunga_mas_created_by + value = root + } + } + } + } + + } + + #Nah + option = { + name = tgp_east_asia_decision_events.0300.a + scope:newly_created_bunga_mas = { + set_owner = root + if = { + limit = { rarity = illustrious } + custom_tooltip = illustrious_bunga_mas_desc.tt + } + else_if = { + limit = { rarity = famed } + custom_tooltip = famed_bunga_mas_desc.tt + } + else_if = { + limit = { rarity = masterwork } + custom_tooltip = masterwork_bunga_mas_desc.tt + } + else = { custom_tooltip = common_bunga_mas_desc.tt } + } + ai_chance = { + base = 50 + } + } +} diff --git a/events/dlc/tgp/tgp_east_asia_interaction_events.txt b/events/dlc/tgp/tgp_east_asia_interaction_events.txt new file mode 100644 index 00000000..823a2aab --- /dev/null +++ b/events/dlc/tgp/tgp_east_asia_interaction_events.txt @@ -0,0 +1,1106 @@ + +namespace = tgp_east_asia_interaction_events + +#Notify the former Suzerain that they were dropped! +tgp_east_asia_interaction_events.0010 = { + type = letter_event + opening = tgp_east_asia_interaction_events.0010.opening + desc = tgp_east_asia_interaction_events.0010.desc + sender = { + character = scope:leaving_tributary + animation = personality_honorable + } + immediate = { + custom_tooltip = tgp_east_asia_interaction_events.0010.tt + } + #How can this be! + option = { + name = tgp_east_asia_interaction_events.0010.a + } +} + + +#I'm sorry, let me keep being your tributary for a while longer! +tgp_east_asia_interaction_events.0020 = { + type = letter_event + opening = tgp_east_asia_interaction_events.0020.opening + desc = tgp_east_asia_interaction_events.0020.desc + sender = { + character = scope:recipient + animation = personality_honorable + } + immediate = { + if = { + limit = { + NOR = { + scope:decrease_tax_obligation_1 = yes + scope:decrease_tax_obligation_2 = yes + scope:decrease_tax_obligation_3 = yes + scope:decrease_tax_obligation_4 = yes + scope:decrease_tax_obligation_5 = yes + scope:decrease_piety_obligation_1 = yes + scope:decrease_piety_obligation_2 = yes + scope:decrease_prestige_obligation_1 = yes + scope:decrease_prestige_obligation_2 = yes + scope:decrease_levy_obligation_1 = yes + scope:decrease_levy_obligation_2 = yes + scope:decrease_levy_obligation_3 = yes + scope:decrease_levy_obligation_4 = yes + scope:decrease_levy_obligation_5 = yes + scope:hook = yes + #scope:dread = yes + } + } + #You're quite the smooth-talker huh + scope:actor.dynasty ?= { + add_dynasty_prestige = { + value = miniscule_dynasty_prestige_value + divide = 2 + } + } + } + } + #That's what I thought. + option = { + name = tgp_east_asia_interaction_events.0020.a + custom_tooltip = reassert_tributary_interaction_effect_tt + } +} + +#Nah, I don't feel like being reasserted +tgp_east_asia_interaction_events.0025 = { + type = letter_event + opening = tgp_east_asia_interaction_events.0025.opening + desc = tgp_east_asia_interaction_events.0025.desc + sender = { + character = scope:recipient + animation = dismissal + } + immediate = { + scope:actor = { add_prestige = medium_prestige_loss } + scope:recipient = { + add_opinion = { + modifier = reassertion_request_denied_opinion + target = scope:actor + opinion = -20 + } + } + } + #Ayyy + option = { + name = tgp_east_asia_interaction_events.0025.a + } +} + + +#Suzerain: Your Tributary is being Embraced by someone else! +tgp_east_asia_interaction_events.0030 = { + type = character_event + title = tgp_east_asia_interaction_events.0030.t + desc = tgp_east_asia_interaction_events.0030.desc + theme = mandala + left_portrait = { + character = scope:recipient + animation = prayer + camera = camera_event_very_left_further_back + } + right_portrait = { + character = scope:actor + animation = wedding_priest + camera = camera_event_scheme_far_right + } + immediate = { + add_character_flag = allowed_war_declaration_sans_truce_penalties + } + #Spend some resources + option = { + name = tgp_east_asia_interaction_events.0030.a + #Pay some resources to make them stay + add_piety = major_piety_loss + #Let the instigator know what happened + scope:actor = { trigger_event = tgp_east_asia_interaction_events.0035 } + ai_chance = { + base = 100 + modifier = { + piety <= major_piety_value + factor = 0 + } + } + } + #Start a war against the Tributary + option = { + name = tgp_east_asia_interaction_events.0030.b + scope:recipient.suzerain = { save_scope_as = warring_suzerain } + reason = alert + add_internal_flag = special + # To war! + if = { + limit = { has_truce = scope:recipient } + cancel_truce_one_way = scope:recipient + } + start_war = { + casus_belli = make_tributary_cb + target = scope:recipient + } + #Let the instigator know what happened + scope:actor = { trigger_event = tgp_east_asia_interaction_events.0035 } + ai_chance = { + base = 100 + modifier = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + factor = 0 + } + modifier = { + is_at_war = yes + factor = 0 + } + modifier = { + military_power <= scope:recipient.military_power + factor = 0 + } + } + } + #_This is fine_ + option = { + name = tgp_east_asia_interaction_events.0030.c + #They're a bit irked + scope:recipient.suzerain = { + if = { + limit = { is_ai = yes } + add_opinion = { + target = scope:actor + modifier = embraced_my_tributary_opinion + opinion = -20 + } + } + } + #No more tributary, huh + scope:recipient = { + end_tributary = yes + hidden_effect = { mandala_embrace_tributary_effect = yes } + + } + #Wa-waw + add_piety = miniscule_piety_loss + ai_chance = { + base = 100 + } + } + after = { remove_character_flag = allowed_war_declaration_sans_truce_penalties } + +} + + +#Embracer: Your Tributary (with a former and also present Suzerain) is in another castle +tgp_east_asia_interaction_events.0035 = { + type = letter_event + opening = tgp_east_asia_interaction_events.0035.opening + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:warring_suzerain } + desc = tgp_east_asia_interaction_events.0035.desc.warring + } + desc = tgp_east_asia_interaction_events.0035.desc + } + } + sender = { + character = scope:sending_character + triggered_animation = { + trigger = { + NOT = { scope:sending_character = scope:recipient } + } + animation = rage + } + animation = dismissal + } + immediate = { + if = { + limit = { exists = scope:warring_suzerain } + scope:warring_suzerain = { + save_scope_as = sending_character + add_opinion = { + target = root + modifier = attempted_to_embrace_my_tributary_opinion + opinion = -10 + } + } + scope:recipient = { + add_opinion = { + modifier = warred_into_submission_opinion # this opinion acts as a built-in cooldown + target = scope:actor + years = 5 + } + } + } + else = { + scope:recipient = { + save_scope_as = sending_character + add_opinion = { + modifier = tributary_request_denied_opinion # this opinion also acts as a built-in cooldown + target = scope:actor + years = 3 + } + } + } + } + #How can this be! + option = { + name = tgp_east_asia_interaction_events.0035.a + } +} + + +# Favor +tgp_east_asia_interaction_events.1000 = { + type = letter_event + opening = tgp_east_asia_interaction_events.1000.opening + desc = { + desc = tgp_east_asia_interaction_events.1000.desc + desc = tgp_east_asia_interaction_events.1000.favor + } + sender = scope:recipient + + trigger = { + exists = scope:demanded_mandala + scope:recipient.primary_title = scope:demanded_mandala + scope:recipient = { target_is_liege_or_above = scope:actor } + } + + #Accept + option = { + name = tgp_east_asia_interaction_events.1000.a + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_east_asia_interaction_events.1000.accept_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + add_hook = { + target = scope:actor + type = favor_hook + } + change_to_mandala_interaction_effect = yes + } + } + stress_impact = { + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 75 + opinion_modifier = { + opinion_target = scope:recipient + multiplier = 0.5 + } + } + } + + #Refuse + option = { + name = tgp_east_asia_interaction_events.1000.b + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_east_asia_interaction_events.1000.refuse_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + custom_tooltip = demand_mandala_interaction_vassal_refuses + # Opinion + if = { + limit = { + scope:actor = { is_ai = yes } + } + reverse_add_opinion = { + target = scope:actor + modifier = angry_opinion + opinion = -25 + } + } + } + } + ai_chance = { + base = 10 + } + } + + #Use a Hook to force it through + option = { + name = religious_interaction.2012.c + trigger = { has_strong_usable_hook = scope:recipient } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_east_asia_interaction_events.1000.force_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + scope:actor = { use_hook = scope:recipient } + change_to_mandala_interaction_effect = yes + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } +} + +# Gold +tgp_east_asia_interaction_events.1001 = { + type = letter_event + opening = tgp_east_asia_interaction_events.1000.opening + desc = { + desc = tgp_east_asia_interaction_events.1000.desc + desc = tgp_east_asia_interaction_events.1001.gold + } + sender = scope:recipient + + trigger = { + exists = scope:demanded_mandala + scope:recipient.primary_title = scope:demanded_mandala + scope:recipient = { target_is_liege_or_above = scope:actor } + } + + #Accept + option = { + name = tgp_east_asia_interaction_events.1002.a + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_east_asia_interaction_events.1000.accept_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + change_to_mandala_interaction_effect = yes + } + } + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_greed = -1 + ai_rationality = 0.5 + } + modifier = { + factor = 0.2 + gold <= 0 + } + opinion_modifier = { + opinion_target = scope:recipient + multiplier = 0.5 + } + } + } + + #Refuse + option = { + name = tgp_east_asia_interaction_events.1000.b + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_east_asia_interaction_events.1000.refuse_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + custom_tooltip = demand_mandala_interaction_vassal_refuses + if = { + limit = { + scope:actor = { is_ai = yes } + } + reverse_add_opinion = { + target = scope:actor + modifier = angry_opinion + opinion = -25 + } + } + } + } + ai_chance = { + base = 10 + modifier = { + add = 100 + gold < medium_gold_value + } + } + } + + #Use a Hook to force it through + option = { + name = religious_interaction.2011.c + trigger = { has_strong_usable_hook = scope:recipient } + save_scope_value_as = { # Cancel extra gold + name = gold + value = no + } + scope:recipient = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_east_asia_interaction_events.1000.force_toast + left_icon = scope:actor + right_icon = scope:demanded_mandala + scope:actor = { use_hook = scope:recipient } + change_to_mandala_interaction_effect = yes + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } +} + + +tgp_east_asia_interaction_events.1002 = { + type = letter_event + opening = tgp_east_asia_interaction_events.1003.opening + desc = tgp_east_asia_interaction_events.1003.desc + sender = scope:actor + + trigger = { + exists = scope:demanded_mandala + scope:recipient.primary_title = scope:demanded_mandala + scope:recipient = { target_is_liege_or_above = scope:actor } + } + + #Accept + option = { + name = tgp_east_asia_interaction_events.1003.a + scope:actor = { + send_interface_toast = { + type = event_toast_effect_good + title = turn_subject_into_mandala_interaction_accept + left_icon = scope:recipient + change_to_mandala_interaction_effect = yes + } + } + stress_impact = { + greedy = medium_stress_impact_gain + } + ai_chance = { + base = 0 + turn_subject_into_mandala_acceptance_modifier = yes + modifier = { # We increase the value to compensate for the potentially high AI values in the other options + factor = 2 + always = yes + } + } + } + + #Favor + option = { + name = tgp_east_asia_interaction_events.1003.b + trigger = { + can_add_hook = { + target = scope:actor + type = favor_hook + } + scope:hook = no + } + show_as_unavailable = { scope:hook = yes } + custom_description_no_bullet = { + text = if_actor_accepts_desc + object = scope:actor + } + show_as_tooltip = { + add_hook = { + target = scope:actor + type = favor_hook + } + change_to_mandala_interaction_effect = yes + } + scope:actor = { + trigger_event = { + id = tgp_east_asia_interaction_events.1000 + days = 5 + } + } + ai_chance = { + base = 100 + modifier = { + add = { + value = 50 + # This goes double for your Powerful Vassals. A better contract is likely to be much more important than a short-term payout. + if = { + limit = { is_powerful_vassal_of = scope:actor } + add = 100 + } + } + this.liege = scope:actor + } + modifier = { + has_trait = ambitious + add = 50 + } + } + } + + #Gold + option = { + name = tgp_east_asia_interaction_events.1003.c + trigger = { scope:hook = no } + show_as_unavailable = { scope:hook = yes } + save_scope_value_as = { + name = gold + value = yes + } + custom_description_no_bullet = { + text = if_actor_accepts_desc + object = scope:actor + } + show_as_tooltip = { + change_to_mandala_interaction_effect = yes + } + scope:actor = { + trigger_event = { + id = tgp_east_asia_interaction_events.1001 + days = 5 + } + } + ai_chance = { + base = 100 + modifier = { + add = 50 # More likely to ask for gold if they're poor + scope:recipient.short_term_gold < medium_gold_value + } + modifier = { + add = { # Much more likely to ask for gold if involved in one of their own wars (they want to win). + value = 50 + if = { + # Especially true if they're in debt! + limit = { gold < 0 } + add = 150 + } + } + is_at_war = yes + any_character_war = { is_war_leader = scope:recipient } + } + modifier = { + has_trait = greedy + add = 50 + } + modifier = { + ai_greed < high_negative_ai_value + add = -50 + } + } + } + + #Refuse + option = { + name = tgp_east_asia_interaction_events.1003.d + trigger = { scope:hook = no } + show_as_unavailable = { scope:hook = yes } + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = turn_subject_into_mandala_interaction_refuse + left_icon = scope:recipient + custom_tooltip = demand_mandala_interaction_vassal_refuses + } + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = angry_opinion + target = scope:recipient + opinion = -25 + } + } + } + ai_chance = { + base = 20 + opinion_modifier = { + opinion_target = scope:actor + multiplier = -0.5 + } + modifier = { + has_dread_level_towards = { + target = scope:actor + level = 1 + } + add = -15 + } + modifier = { + has_dread_level_towards = { + target = scope:actor + level = 2 + } + add = -30 + } + modifier = { + has_trait = stubborn + add = 25 + } + modifier = { + has_trait = arrogant + add = 25 + } + modifier = { + has_trait = ambitious + add = -25 + } + } + } +} + +scripted_trigger is_root_faith_dominant_gender = { + OR = { + AND = { + is_male = yes + root.faith = { + OR = { + has_doctrine_parameter = male_dominated_law + has_doctrine_parameter = gender_equal_law + } + } + } + AND = { + is_female = yes + root.faith = { + OR = { + has_doctrine_parameter = female_dominated_law + has_doctrine_parameter = gender_equal_law + } + } + } + } +} + +tgp_east_asia_interaction_events.2000 = { + type = character_event + title = tgp_east_asia_interaction_events.2000.t + desc = tgp_east_asia_interaction_events.2000.desc + window = big_event_window + theme = prison + override_background = dungeon + + left_portrait = { + character = scope:third_prisoner + animation = prisondungeon + outfit_tags = { beggar_rags } + override_imprisonment_visuals = yes + } + + center_portrait = { + character = scope:recipient + animation = prisondungeon + outfit_tags = { beggar_rags } + override_imprisonment_visuals = yes + } + + right_portrait = { + character = scope:second_prisoner + animation = prisondungeon + outfit_tags = { beggar_rags } + override_imprisonment_visuals = yes + } + + immediate = { + hidden_effect = { + scope:recipient = { + every_close_or_extended_family_member = { + if = { + limit = { + top_liege = scope:actor + house = scope:recipient.house + is_travelling = no + NOR = { + any_spouse = { + house ?= scope:actor.house + } + any_parent = { + house ?= scope:actor.house + } + } + } + if = { + limit = { + age >= 16 + NOT = { + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:actor + } + } + AND = { + is_root_faith_dominant_gender = yes + OR = { + is_parent_of = scope:recipient + is_child_of = scope:recipient + } + } + } + add_to_list = those_to_kill + } + else = { + add_to_list = those_to_banish + } + } + # If they're beyond your reach, we make sure you can still punish them if they return + if = { + limit = { + house = scope:recipient.house + OR = { + top_liege != scope:actor + is_travelling = yes + } + NOR = { + any_spouse = { + house ?= scope:actor.house + } + any_parent = { + house ?= scope:actor.house + } + } + } + if = { + limit = { + age >= 16 + NOT = { + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:actor + } + } + AND = { + is_root_faith_dominant_gender = yes + OR = { + is_parent_of = scope:recipient + is_child_of = scope:recipient + } + } + } + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_execution_opinion + } + } + else = { + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_banishment_opinion + } + } + } + } + every_consort = { + if = { + limit = { + top_liege = scope:actor + is_travelling = no + NOR = { + any_parent = { + house ?= scope:actor.house + } + tgp_is_above_retirement_age_trigger = { + REALM_OWNER = scope:actor + } + } + } + add_to_list = those_to_banish + } + else = { + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_banishment_opinion + } + } + } + # we don't want you to get tyranny from swinging the hammer, as we decide that elsewhere + every_in_list = { + list = those_to_banish + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_banishment_opinion + } + } + every_in_list = { + list = those_to_kill + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_execution_opinion + } + } + random_in_list = { + list = those_to_kill + save_scope_as = second_prisoner + } + random_in_list = { + list = those_to_banish + save_scope_as = third_prisoner + } + if = { + limit = { + NOT = { + exists = scope:third_prisoner + } + } + random_in_list = { + list = those_to_kill + limit = { + this != scope:second_prisoner + } + save_scope_as = third_prisoner + } + } + } + every_in_list = { + list = those_to_banish + limit = { + is_imprisoned = no + } + scope:actor = { + imprison = { + target = prev + type = house_arrest + } + } + add_character_flag = is_currently_being_purged + add_to_list = asset_forfeiture_list + } + every_in_list = { + list = those_to_kill + limit = { + is_imprisoned = no + } + scope:actor = { + imprison = { + target = prev + type = house_arrest + } + } + add_character_flag = is_currently_being_purged + add_to_list = asset_forfeiture_list + } + scope:recipient = { + add_character_flag = is_currently_being_purged + add_to_list = asset_forfeiture_list + } + } + } + + option = { + name = tgp_east_asia_interaction_events.2000.a + scope:actor = { + add_treasury_or_gold = { + value = { + add = { + every_in_list = { + list = asset_forfeiture_list + limit = { + gold > 0 + } + add = current_gold_value + } + } + } + } + add_dread = { + value = miniscule_dread_gain + multiply = { + value = { + value = 0 + add = { + every_in_list = { + list = those_to_banish + limit = { + NOT = { + scope:actor = { + OR = { + has_banish_reason = prev + has_execute_reason = prev + } + } + } + } + add = { + value = highest_held_title_tier + multiply = 0.5 + round = yes + } + } + } + add = { + every_in_list = { + list = those_to_kill + limit = { + NOT = { + scope:actor = { + has_execute_reason = prev + } + } + } + add = highest_held_title_tier + } + } + add = scope:recipient.highest_held_title_tier + } + } + } + if = { + limit = { + NOT = { + scope:actor = { + has_execute_reason = scope:recipient + } + } + } + add_tyranny = { + value = medium_tyranny_gain + multiply = { + value = { + value = 0 + add = { + every_in_list = { + list = those_to_banish + add = { + value = highest_held_title_tier + multiply = 0.5 + round = yes + } + } + } + add = { + every_in_list = { + list = those_to_kill + add = highest_held_title_tier + } + } + add = scope:recipient.highest_held_title_tier + } + } + } + if = { + limit = { + exists = top_participant_group:dynastic_cycle + any_character_situation = { + situation_type = dynastic_cycle + } + } + situation:dynastic_cycle ?= { + if = { + limit = { + situation_top_has_catalyst = catalyst_tyrannical_extinguish_noble_family + } + trigger_situation_catalyst = { + catalyst = catalyst_tyrannical_extinguish_noble_family + character = root + } + } + } + } + } + } + hidden_effect = { + every_in_list = { + list = asset_forfeiture_list + limit = { + gold > 0 + } + remove_short_term_gold = { + value = current_gold_value # we make sure the asset forfeiture sticks + } + } + } + every_in_list = { + list = those_to_banish + hidden_effect = { + release_from_prison = yes # we can't banish them directly from prison, so we need to temporarily cut them loose + if = { + limit = { + is_ruler = no + liege != scope:recipient + } + set_employer = scope:recipient # and then we round them up again so they have a realm to be banished from + } + root = { + remove_opinion = { # because the imprisonment reason was already consumed earlier, we need to reset this in case they come back later + modifier = purged_banishment_opinion + target = prev + } + } + reverse_add_opinion = { + target = root + opinion = -25 + modifier = purged_banishment_opinion + } + } + banish = yes # and then we give them the boot + if = { + limit = { + has_character_flag = is_currently_being_purged + } + remove_character_flag = is_currently_being_purged + } + } + hidden_effect = { + every_in_list = { + list = those_to_kill + family_purge_execute_prisoner_effect = { + VICTIM = this + EXECUTIONER = root + } + } + family_purge_execute_prisoner_effect = { + VICTIM = scope:recipient + EXECUTIONER = root + } + } + show_as_tooltip = { # So we don't get spammed with the opinion changes from the effects above in the tooltip + every_in_list = { + list = those_to_kill + death = { + death_reason = death_execution + killer = root + } + } + scope:recipient = { + death = { + death_reason = death_execution + killer = root + } + } + } + save_scope_as = purger + hidden_effect = { + every_player = { + limit = { + dynasty = scope:recipient.dynasty + } + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_east_asia_interaction_events.2000.a.title + left_icon = root + right_icon = scope:recipient + custom_tooltip = tgp_east_asia_interaction_events.2000.a.tt + } + } + } + if = { + limit = { + has_execute_reason = scope:recipient + } + stress_impact = { + sadistic = medium_stress_impact_loss + compassionate = minor_stress_impact_gain + forgiving = medium_stress_impact_gain + generous = minor_stress_impact_gain + } + } + else = { + stress_impact = { + sadistic = medium_stress_impact_loss + compassionate = major_stress_impact_gain + forgiving = medium_stress_impact_gain + generous = medium_stress_impact_gain + trusting = minor_stress_impact_gain + content = minor_stress_impact_gain + } + } + } +} diff --git a/events/dlc/tgp/tgp_faction_events.txt b/events/dlc/tgp/tgp_faction_events.txt new file mode 100644 index 00000000..69c80c0f --- /dev/null +++ b/events/dlc/tgp/tgp_faction_events.txt @@ -0,0 +1,528 @@ +namespace = tgp_faction_events + +scripted_effect faction_demand_japanese_regent_rejected_effect = { + # This effect should always be placed here, _before_ all the other effects in the block. + trigger_event = { on_action = on_faction_demand_rejected } + show_as_tooltip = { + scope:faction = { + faction_start_war = {} + } + } +} + +# Ceremonial Regent Faction Demand +tgp_faction_events.0101 = { + type = letter_event + sender = scope:faction_leader + opening = "FACTION_JAPANESE_REPLACE_REGENT" + desc = { + first_valid = { + triggered_desc = { + trigger = { tgp_has_ceremonial_liege_title_trigger = yes } + desc = "FACTION_JAPANESE_REPLACE_RULER_DESC" + } + desc = "FACTION_JAPANESE_REPLACE_REGENT_DESC" + } + } + + trigger = { + # May have ceased to exist by the time this triggers + exists = scope:faction + } + + immediate = { + # Grab our scope for loc. + save_scope_as = faction_target + } + + option = { + name = "FACTION_DEMAND_ACCEPT" + add_dread = medium_dread_loss + # LEGITIMACY LOSS FOR ACCEPTING FACTION DEMANDS + faction_accept_demand_legitimacy_effect = yes + add_prestige = -500 + faction_demand_regent_transfer_effect = { + NEW_REGENT = scope:faction_leader + REASON = faction_demand + } + add_character_flag = { + flag = recent_replace_regent_faction_war + years = 10 + } + scope:faction_leader = { + trigger_event = { id = tgp_faction_events.0102 } + } + # This effect should always be placed here, _after_ everything except the ai_chance. + trigger_event = { on_action = on_faction_demand_accepted } + ai_chance = { + base = 10 + modifier = { + add = 90 + scope:faction = { faction_power >= 100 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 125 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 150 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 200 } + } + modifier = { + add = 50 + any_character_war = { + is_war_leader = root + is_defender = root + } + } + modifier = { + factor = 0.1 + any_ally = { + NOR = { + target_is_liege_or_above = root + target_is_vassal_or_below = root + } + max_military_strength > root.max_military_strength + } + } + modifier = { + add = 10000 + scope:faction_leader = { is_yes_men_enabled = yes } + } + modifier = { # The Kampaku always fights + factor = 0 + has_title = title:e_japan + government_has_flag = government_is_japan_administrative + } + } + } + + option = { + name = "FACTION_DEMAND_REFUSE" + faction_demand_japanese_regent_rejected_effect = yes + scope:faction_leader = { + trigger_event = { + id = tgp_faction_events.0103 + days = 1 + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 4.0 + } + modifier = { + add = 50 + scope:faction = { faction_power < 80 } + } + modifier = { + add = 100 + scope:faction = { faction_power < 60 } + } + modifier = { + add = 1000 + scope:faction = { faction_power < 40 } + } + modifier = { + add = 10000 + scope:faction_leader = { is_no_men_enabled = yes } + } + } + } +} + +# Japanese Regent Faction Demand Accepted +tgp_faction_events.0102 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_REPLACE_REGENT_ACCEPTED" + desc = "FACTION_JAPANESE_REPLACE_REGENT_ACCEPTED_DESC" + + immediate = { + show_as_tooltip = { + get_title = primary_title + if = { + limit = { + government_has_flag = government_is_japan_administrative + tgp_has_ceremonial_liege_title_trigger = no + NOT = { + has_realm_law = japanese_regency_succession_law + } + } + add_realm_law_skip_effects = japanese_regency_succession_law + } + else = { + add_realm_law_skip_effects = single_heir_succession_law + } + } + } + + option = { + name = "FACTION_DEMAND_ACCEPTED_OPT" + } +} + +# Japanese Regent Faction Demand Refused +tgp_faction_events.0103 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_REPLACE_REGENT_REFUSED" + desc = "FACTION_JAPANESE_REPLACE_REGENT_REFUSED_DESC" + + option = { + name = "FACTION_DEMAND_REFUSED_OPT" + scope:faction = { + faction_start_war = {} + every_faction_member = { + limit = { + NOT = { this = scope:faction.faction_leader } + } + trigger_event = tgp_faction_events.0104 + } + } + } +} + +# Japanese Regent Faction Demand Refused Member Notice +tgp_faction_events.0104 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_REPLACE_REGENT_REFUSED" + desc = "FACTION_JAPANESE_REPLACE_REGENT_REFUSED_DESC" + + option = { name = "FACTION_DEMAND_REFUSED_OPT" } +} + +# Japanese Regent Faction Demand Send Notice +tgp_faction_events.0105 = { + type = letter_event + sender = scope:faction_leader + opening = "FACTION_JAPANESE_REPLACE_REGENT_SEND_DEMAND_NOTIFICATION" + desc = "FACTION_JAPANESE_REPLACE_REGENT_SEND_DEMAND_NOTIFICATION_DESC" + + option = { name = "FACTION_DEMAND_SEND_DEMAND_NOTIFICATION_OPT" } +} + +scripted_effect faction_demand_restore_emperor_rejected_effect = { + # This effect should always be placed here, _before_ all the other effects in the block. + trigger_event = { on_action = on_faction_demand_rejected } + show_as_tooltip = { + scope:faction = { + faction_start_war = {} + } + } +} + +# Restore Emperor Faction Demand +tgp_faction_events.0201 = { + type = letter_event + sender = scope:faction_leader + opening = "FACTION_JAPANESE_RESTORE_EMPEROR" + desc = "FACTION_JAPANESE_RESTORE_EMPEROR_DESC" + + trigger = { + # May have ceased to exist by the time this triggers + exists = scope:faction + } + + immediate = { + # Grab our scope for loc. + save_scope_as = faction_target + } + + option = { + name = "FACTION_DEMAND_ACCEPT" + add_dread = medium_dread_loss + # LEGITIMACY LOSS FOR ACCEPTING FACTION DEMANDS + faction_accept_demand_legitimacy_effect = yes + add_prestige = -500 + scope:faction = { + special_character = { save_scope_as = ceremonial_liege } + faction_leader = { + trigger_event = { id = tgp_faction_events.0202 } + } + if = { + limit = { exists = this } + destroy_faction = yes + } + } + show_as_tooltip = { + restore_ceremonial_liege_faction_combined_effect = yes + } + # This effect should always be placed here, _after_ everything except the ai_chance. + trigger_event = { on_action = on_faction_demand_accepted } + ai_chance = { + base = 10 + modifier = { + add = 90 + scope:faction = { faction_power >= 100 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 125 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 150 } + } + modifier = { + add = 50 + scope:faction = { faction_power >= 200 } + } + modifier = { + add = 50 + any_character_war = { + is_war_leader = root + is_defender = root + } + } + modifier = { + factor = 0.1 + any_ally = { + NOR = { + target_is_liege_or_above = root + target_is_vassal_or_below = root + } + max_military_strength > root.max_military_strength + } + } + modifier = { + add = 10000 + scope:faction_leader = { is_yes_men_enabled = yes } + } + } + } + + option = { + name = { + trigger = { + scope:faction_leader = { tgp_has_ceremonial_liege_title_trigger = no } + } + text = tgp_faction_events.0201.b + } + name = { + trigger = { + scope:faction_leader = { tgp_has_ceremonial_liege_title_trigger = yes } + } + text = tgp_faction_events.0201.b.cm + } + faction_demand_restore_emperor_rejected_effect = yes + scope:faction_leader = { + trigger_event = { + id = tgp_faction_events.0203 + days = 1 + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 4.0 + } + modifier = { + add = 50 + scope:faction = { faction_power < 80 } + } + modifier = { + add = 100 + scope:faction = { faction_power < 60 } + } + modifier = { + add = 1000 + scope:faction = { faction_power < 40 } + } + } + } +} + +# Restore Emperor Faction Demand Accepted +tgp_faction_events.0202 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_RESTORE_EMPEROR_ACCEPTED" + desc = "FACTION_JAPANESE_RESTORE_EMPEROR_ACCEPTED_DESC" + + immediate = { + save_scope_as = faction_restoration + scope:faction.special_character = { save_scope_as = ceremonial_monarch } + if = { + limit = { this = scope:ceremonial_monarch } + restore_ceremonial_liege_faction_combined_effect = yes + } + else = { + scope:faction_target = { save_scope_as = defender } + trigger_event = tgp_faction_events.0206 + } + } + + option = { + name = "FACTION_DEMAND_ACCEPTED_OPT" + } +} + +# Restore Emperor Faction Demand Refused +tgp_faction_events.0203 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_RESTORE_EMPEROR_REFUSED" + desc = "FACTION_JAPANESE_RESTORE_EMPEROR_REFUSED_DESC" + + option = { + name = "FACTION_DEMAND_REFUSED_OPT" + scope:faction = { + faction_start_war = {} + every_faction_member = { + limit = { + NOT = { this = scope:faction.faction_leader } + } + trigger_event = tgp_faction_events.0204 + } + } + } +} + +# Restore Emperor Faction Demand Refused Member Notice +tgp_faction_events.0204 = { + type = letter_event + sender = scope:faction_target + opening = "FACTION_JAPANESE_RESTORE_EMPEROR_REFUSED" + desc = "FACTION_JAPANESE_RESTORE_EMPEROR_REFUSED_DESC" + + option = { name = "FACTION_DEMAND_REFUSED_OPT" } +} + +# Restore Emperor Faction Demand Send Notice +tgp_faction_events.0205 = { + type = letter_event + sender = scope:faction_leader + opening = "FACTION_JAPANESE_RESTORE_EMPEROR_SEND_DEMAND_NOTIFICATION" + desc = "FACTION_JAPANESE_RESTORE_EMPEROR_SEND_DEMAND_NOTIFICATION_DESC" + + option = { name = "FACTION_DEMAND_SEND_DEMAND_NOTIFICATION_OPT" } +} + +# Restore Emperor Faction Aftermath +tgp_faction_events.0206 = { + type = character_event + title = tgp_faction_events.0206.t + desc = tgp_faction_events.0206.desc + override_background = { reference = throne_room_scope } + theme = war + left_portrait = { + character = root + animation = war_over_win + } + right_portrait = { + character = scope:ceremonial_liege + animation = war_over_tie + } + lower_center_portrait = scope:defender + + trigger = { + tgp_realm_has_ceremonial_liege_trigger = yes + tgp_has_ceremonial_liege_title_trigger = no + } + + on_trigger_fail = { + if = { + limit = { tgp_realm_has_ceremonial_liege_trigger = yes } + restore_ceremonial_liege_faction_combined_effect = yes + } + } + + immediate = { + if = { + limit = { NOT = { exists = scope:attacker } } + save_scope_as = attacker + } + tgp_save_realm_ceremonial_liege_effect = yes + scope:ceremonial_liege = { save_scope_as = background_throne_room_scope } + } + + option = { + name = tgp_faction_events.0206.a + restore_ceremonial_liege_faction_combined_effect = yes + add_hook = { + target = scope:ceremonial_liege + type = favor_hook + } + scope:ceremonial_liege = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 50 + } + } + every_in_list = { + list = attackers + limit = { + NOT = { this = root } + } + custom = faction_member_custom + add_opinion = { + target = root + modifier = respect_opinion + opinion = 25 + } + } + stress_impact = { + ambitious = minor_stress_impact_gain + arbitrary = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -0.5 + ai_boldness = -0.5 + ai_honor = 0.5 + } + } + } + + option = { + name = tgp_faction_events.0206.b + faction_demand_regent_transfer_effect = { + NEW_REGENT = scope:attacker + REASON = faction_demand + } + add_tyranny = major_tyranny_gain + reverse_add_opinion = { + target = scope:ceremonial_liege + modifier = angry_opinion + opinion = -50 + } + every_in_list = { + list = attackers + limit = { + NOR = { + this = root + house ?= root.house + } + } + custom = faction_member_custom + add_opinion = { + target = root + modifier = angry_opinion + opinion = -25 + } + } + stress_impact = { + honest = minor_stress_impact_gain + just = minor_stress_impact_gain + content = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = -50 + ai_value_modifier = { + ai_greed = 0.5 + ai_boldness = 0.5 + ai_honor = -0.5 + } + } + } +} diff --git a/events/dlc/tgp/tgp_genpei_character_events.txt b/events/dlc/tgp/tgp_genpei_character_events.txt new file mode 100644 index 00000000..1b8fa7d5 --- /dev/null +++ b/events/dlc/tgp/tgp_genpei_character_events.txt @@ -0,0 +1,1408 @@ +#namespace = tgp_genpei_character +# +#scripted_effect save_genpei_scopes_effect = { +# # Fujiwara +# character:japanese_fujiwara_460 ?= { save_scope_as = tadamichi_fujiwara } # Father of Motofusa +# character:japanese_fujiwara_461 ?= { save_scope_as = motozane_fujiwara } # Brother of Motofusa, last true Kampaku +# character:japanese_fujiwara_497 ?= { save_scope_as = hidehira_fujiwara } # Oshu Fujiwara leader +# character:japanese_fujiwara_511 ?= { save_scope_as = motofusa_fujiwara } # Fujiwara leader +# # Minamoto +# character:japanese_minamoto_seiwa_9 ?= { save_scope_as = yoshitomo_minamoto } # Father of Yoritomo, killed in Heiji rebellion +# character:japanese_minamoto_seiwa_10 ?= { save_scope_as = yoritomo_minamoto } # Kawachi Minamoto leader, first Shogun +# character:japanese_minamoto_seiwa_139 ?= { save_scope_as = yoshitsune_minamoto } # Brother of Yoritomo, famous general +# character:japanese_minamoto_seiwa_207 ?= { save_scope_as = yoshinaka_minamoto } # Yoshinaka, cousin of Yoritomo, and rival +# character:japanese_minamoto_seiwa_205 ?= { save_scope_as = yoshikata_minamoto } # Father of Yoshinaka +# character:japanese_minamoto_seiwa_59 ?= { save_scope_as = yorimasa_minamoto } # Settsu Minamoto leader, first seppuku-er +# # Taira +# character:japanese_taira_kanmu_34 ?= { save_scope_as = kiyomori_taira } # Ise Taira leader +# character:japanese_taira_kanmu_68 ?= { save_scope_as = noriko_taira } # daughter of Kiyomori, wife of Norihito +# # Yamato +# character:japanese_yamato_54 ?= { save_scope_as = norihito_tenno } # Emperor Takakura +# character:japanese_yamato_51 ?= { save_scope_as = go_shirakawa } # Father of Takakura +# title:k_chrysanthemum_throne.holder ?= { save_scope_as = current_emperor } +# #Get old emperor +# scope:new_emperor.primary_title.previous_holder ?= { +# save_scope_as = old_emperor +# } +#} +# +###################################### +## Minamoto Events +###################################### +# +## (Kawachi) Minamoto Yoritomo +# +##Initial Event, explaining the situation +#tgp_genpei_character.1000 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.1000.t +# desc = tgp_genpei_character.1000.desc +# window = big_event_window +# theme = war +# left_portrait = { +# character = root +# animation = anger +# } +# center_portrait = { +# character = scope:yorimasa_minamoto +# animation = war_over_win +# } +# right_portrait = { +# character = scope:yoshinaka_minamoto +# animation = disapproval +# } +# lower_center_portrait = scope:kiyomori_taira +# lower_left_portrait = scope:norihito_tenno +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_scope_as = ruler +# save_genpei_scopes_effect = yes +# } +# #Option A) #Choose to go your own way +# option = { +# name = tgp_genpei_character.1000.a +# custom_tooltip = tgp_genpei_character.1000.a.flavor +# add_martial_lifestyle_xp = medium_lifestyle_xp +# ai_chance = { +# base = 0 +# } +# } +# #Option B) #Try to reconcile with your dynasty, to create a united front +# option = { +# name = tgp_genpei_character.1000.b +# flavor = tgp_genpei_character.1000.b.flavor +# reverse_add_opinion = { +# target = scope:yorimasa_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# reverse_add_opinion = { +# target = scope:yoshinaka_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# house = { +# change_house_relation_effect = { +# HOUSE = scope:yoshinaka_minamoto.house +# VALUE = house_relation_improve_minor_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:yoshinaka_minamoto +# TITLE = scope:dummy_gender +# } +# } +# #Kiyomori players will want to fight Yoritomo, so we need ai to choose this +# ai_chance = { +# base = 100 +# } +# } +#} +# +##After Kiyomori puts his grandson on the throne, a chance to get block leadership +#tgp_genpei_character.1010 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.1010.t +# desc = { +# desc = tgp_genpei_character.1010.desc.intro +# first_valid = { +# #You are bloc leader +# triggered_desc = { +# trigger = { +# house.house_confederation.leading_house.house_head ?= this +# } +# desc = tgp_genpei_character.1010.desc.blocboss +# } +# #You are not bloc leader +# desc = tgp_genpei_character.1010.desc.notblocboss +# } +# } +# window = big_event_window +# theme = war +# left_portrait = { +# character = scope:ruler +# animation = anger +# camera = camera_body +# } +# center_portrait = { +# character = scope:minamoto_ruler +# animation = disapproval +# } +# right_portrait = { +# character = scope:kiyomori_taira +# animation = war_over_win +# } +# lower_center_portrait = scope:yoshinaka_minamoto +# lower_left_portrait = scope:new_emperor +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_scope_as = ruler +# save_genpei_scopes_effect = yes +# +# #find Minamoto +# top_liege ?= { +# random_noble_family = { +# limit = { +# holder = { +# this != root +# dynasty ?= dynasty:japanese_minamoto_seiwa +# house ?= { +# exists = house_confederation +# confederation.leading_house ?= house +# NOT = { house_confederation = root.top_liege.house.house_confederation } +# } +# } +# } +# alternative_limit = { +# holder = { +# this != root +# dynasty ?= dynasty:japanese_minamoto_seiwa +# house ?= { +# exists = house_confederation +# NOT = { house_confederation = root.top_liege.house.house_confederation } +# } +# } +# } +# holder = { +# save_scope_as = minamoto_ruler +# house = { save_scope_as = minamoto_house } +# } +# } +# } +# } +# #Option A) #Rally the bloc, so you can become bloc leader +# option = { +# name = tgp_genpei_character.1010.a +# flavor = tgp_genpei_character.1010.a.flavor +# custom_tooltip = tgp_genpei_character.1010.a.tt +# #Boost relations with other houses in bloc so you can take leadership +# hidden_effect = { +# house.house_confederation = { +# every_confederation_member_house = { +# # Exclude self and leader +# limit = { +# NOR = { +# this = root.house +# this = root.house.house_confederation.leading_house +# } +# } +# #Boost relations with other houses in bloc +# change_house_relation_effect = { +# HOUSE = root.house +# VALUE = house_relation_improve_major_value +# REASON = historical +# CHAR = root +# TARGET_CHAR = house_head +# TITLE = scope:dummy_gender +# } +# } +# } +# } +# #Make things bad with your bloc head since you're going to steal his bloc +# house = { +# change_house_relation_effect = { +# HOUSE = house_confederation.leading_house +# VALUE = house_relation_damage_minor_value +# REASON = conflict +# CHAR = root +# TARGET_CHAR = house_confederation.leading_house.house_head +# TITLE = scope:dummy_gender +# } +# } +# add_martial_lifestyle_xp = medium_lifestyle_xp +# ai_chance = { +# base = 75 +# } +# } +# #Option B) #Try to make nice with Kiyomori +# option = { +# name = tgp_genpei_character.1010.b +# flavor = tgp_genpei_character.1010.b.flavor +# add_character_modifier = { +# modifier = confident_strategist +# years = 5 +# } +# reverse_add_opinion = { +# target = scope:kiyomori_taira +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# house = { +# change_house_relation_effect = { +# HOUSE = scope:kiyomori_taira.house +# VALUE = house_relation_improve_minor_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:kiyomori_taira +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 25 +# } +# } +#} +# +## (Kiso) Minamoto Yoshinaka +# +##Starting event for Yoshinaka that sets the given circumstances/objectives/obstacles/stakes +#tgp_genpei_character.1090 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.1090.t +# desc = tgp_genpei_character.1090.desc +# window = big_event_window +# theme = war +# override_background = bp3_hills_winter +# left_portrait = { +# character = root +# animation = throne_room_one_handed_passive_1 +# camera = camera_body +# } +# right_portrait = { +# character = scope:yoritomo_minamoto +# animation = disapproval +# camera = camera_event_right_pointing_left +# } +# lower_center_portrait = scope:kiyomori_taira +# lower_left_portrait = scope:yoshikata_minamoto +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_scope_as = ruler +# save_genpei_scopes_effect = yes +# } +# #Option A) #Choose to go your own way +# option = { +# name = tgp_genpei_character.1090.a +# flavor = tgp_genpei_character.1090.a.flavor +# add_martial_lifestyle_xp = medium_lifestyle_xp +# ai_chance = { +# base = 75 +# } +# } +# #Option B) #Try to reconcile with your dynasty, to create a united front +# option = { +# name = tgp_genpei_character.1090.b +# reverse_add_opinion = { +# target = scope:yorimasa_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# reverse_add_opinion = { +# target = scope:yoritomo_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# house = { +# change_house_relation_effect = { +# HOUSE = scope:yoritomo_minamoto.house +# VALUE = house_relation_improve_minor_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:yoritomo_minamoto +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 25 +# } +# } +#} +# +##After Kiyomori puts his grandson on the throne, a chance to align with Yoritomo or break up block leadership. +#scripted_effect tgp_yoshinaka_new_house_bloc_effect = { +##Create new bloc and steal members of Yoritomo's bloc +# if = { # LEAVE OLD BLOC IF NECESSARY +# limit = { is_confederation_member = yes } +# house = { +# set_variable = { +# name = bloc_leaving_reason +# value = flag:reason_events +# days = 4 +# } +# tgp_leave_house_bloc_effect = { +# OPINION = flag:yes +# TRUCE = flag:no +# } +# } +# } +# # CREATE NEW BLOC +# house = { +# if = { +# limit = { +# NOT = { exists = house_confederation } +# } +# tgp_create_house_bloc_effect = { TYPE = none } +# } +# } +# #Then steal members from the Yoritomo's bloc (only if they like him, and order by opinion) +# scope:yoritomo_minamoto.house.house_confederation = { +# save_scope_value_as = { +# name = half_of_bloc +# value = { +# value = member_count +# multiply = 0.5 +# } +# } +# +# ordered_confederation_member_house = { +# limit = { +# #exclude self +# NOR = { +# this = root.house +# this = house_confederation.leading_house +# } +# } +# order_by = "house_head.opinion(root)" +# max = scope:half_of_bloc +# #always put this when there is a max or it will be unhappy who knows why +# check_range_bounds = no +# hidden_effect = { +# set_variable = { +# name = bloc_leaving_reason +# value = flag:reason_events +# days = 4 +# } +# # LEAVE OLD BLOC +# tgp_leave_house_bloc_effect = { +# OPINION = flag:no +# TRUCE = flag:yes +# } +# } +# tgp_join_house_bloc_effect = { +# INVITER = root.house +# OPINION = flag:yes +# } +# custom_tooltip = { +# text = join_house_bloc_yoshinaka_tt +# } +# } +# } +#} +#tgp_genpei_character.1095 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.1095.t +# desc = tgp_genpei_character.1095.desc +# window = big_event_window +# theme = war +# override_background = bp3_hills_winter +# left_portrait = { +# character = root +# animation = throne_room_one_handed_passive_1 +# camera = camera_body +# } +# right_portrait = { +# character = scope:yoritomo_minamoto +# animation = disapproval +# camera = camera_event_right_pointing_left +# } +# lower_right_portrait = scope:current_emperor +# lower_center_portrait = scope:kiyomori_taira +# lower_left_portrait = scope:yoshikata_minamoto +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_scope_as = ruler +# save_genpei_scopes_effect = yes +# } +# #Option A) #Go your own way +# option = { +# name = tgp_genpei_character.1095.a +# flavor = tgp_genpei_character.1095.a.flavor +# add_martial_lifestyle_xp = medium_lifestyle_xp +# +# #If you're not the bloc leader, create new bloc and steal members of Yoritomo's bloc +# if = { +# limit = { +# house.house_confederation.leading_house.house_head != root +# } +# #effect to create new bloc and steal members of Yoritomo's bloc +# tgp_yoshinaka_new_house_bloc_effect = yes +# } +# custom_tooltip = tgp_genpei_character.1010.a.tt +# #Boost relations with other houses in bloc so they are happy to roll with your decisions +# hidden_effect = { +# house.house_confederation = { +# every_confederation_member_house = { +# # Exclude self and leader +# limit = { +# NOR = { +# this = root.house +# this = root.house.house_confederation.leading_house +# } +# } +# #Boost relations with other houses in bloc +# change_house_relation_effect = { +# HOUSE = root.house +# VALUE = house_relation_improve_minor_value +# REASON = historical +# CHAR = root +# TARGET_CHAR = house_head +# TITLE = scope:dummy_gender +# } +# } +# } +# } +# +# ai_chance = { +# base = 0 +# } +# } +# #Option B) #Try to reconcile with your dynasty, to create a united front +# option = { +# name = tgp_genpei_character.1095.b +# flavor = tgp_genpei_character.1095.b.flavor +# if = { +# limit = { +# has_relation_rival = scope:yoritomo_minamoto +# } +# remove_relation_rival = scope:yoritomo_minamoto +# } +# reverse_add_opinion = { +# target = scope:yorimasa_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# reverse_add_opinion = { +# target = scope:yoritomo_minamoto +# modifier = attempts_of_a_united_minamoto_clan +# opinion = 50 +# } +# house = { +# change_house_relation_effect = { +# HOUSE = scope:yoritomo_minamoto.house +# VALUE = house_relation_improve_minor_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:yoritomo_minamoto +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 100 +# } +# } +#} +# +## (Kawachi) Minamoto Yoshitsune +# +##Initial Event, explaining the situation +#tgp_genpei_character.1100 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.1100.t +# desc = tgp_genpei_character.1100.desc +# window = big_event_window +# theme = battle +# override_background = { reference = army_camp } +# left_portrait = { +# character = root +# animation = chudan_no_kamae +# } +# center_portrait = { +# character = scope:hidehira_fujiwara +# animation = war_over_tie +# } +# +# lower_left_portrait = scope:yoritomo_minamoto +# lower_center_portrait = scope:yorimasa_minamoto +# lower_right_portrait = scope:kiyomori_taira +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# show_as_tooltip = { #There for context +# set_relation_friend = { reason = friend_generic_history target = scope:hidehira_fujiwara } +# } +# } +# +# option = { #Remain loyal to the Fujiwara Court +# name = tgp_genpei_character.1100.a +# add_trait = loyal +# add_piety = minor_piety_value +# house = { +# change_house_relation_effect = { +# HOUSE = scope:hidehira_fujiwara.house +# VALUE = house_relation_improve_medium_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:hidehira_fujiwara +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 50 +# } +# } +# +# option = { #Be more Minamoto Alligned +# name = tgp_genpei_character.1100.b +# dynasty = { +# add_dynasty_prestige = medium_dynasty_prestige_gain +# dynast = { +# if = { +# limit = { +# is_ai = no +# } +# reverse_add_opinion = { +# target = root +# modifier = stood_with_minamoto_clan +# opinion = 50 +# } +# } +# add_opinion = { +# target = root +# modifier = stood_with_minamoto_clan +# opinion = 50 +# } +# } +# } +# house = { +# change_house_relation_effect = { +# HOUSE = root.dynasty.dynast.house +# VALUE = house_relation_improve_medium_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = root.dynasty.dynast +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 25 +# } +# } +# +# option = { #Go full adventurer; winning duels makes you stronger +# name = tgp_genpei_character.1100.c +# set_variable = { +# name = ushiwakamaru_duels_won +# value = 0 +# } +# add_character_modifier = { +# modifier = tgp_japan_ushiwakamaru +# years = -1 +# } +# give_nickname = nick_ushiwakamaru +# custom_tooltip = stay_duelist_adventurer +# ai_chance = { +# base = 25 +# } +# } +#} +# +################################# +## Taira Clan Events +################################# +# +## Kiyomori Taira +# +##Initial Event, setup up ambitions to put grandson on throne +#tgp_genpei_character.2000 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.2000.t +# desc = tgp_genpei_character.2000.desc +# theme = crown +# override_background = { reference = tgp_asia_throne_room } +# left_portrait = { +# character = root +# animation = personality_bold +# camera = camera_body_right +# } +# center_portrait = { +# character = scope:noriko_taira +# animation = flirtation +# } +# right_portrait = { +# character = scope:norihito_tenno +# animation = holding_hu +# } +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# +# title:k_chrysanthemum_throne.holder ?= { +# save_scope_as = current_emperor +# } +# +# random_courtier = { +# limit = { +# wet_nurse_validity_trigger = { EMPLOYER = scope:current_emperor } +# } +# save_scope_as = wet_nurse +# } +# if = { +# limit = { +# NOT = { +# exists = scope:wet_nurse +# } +# } +# create_character = { +# template = bp2_wet_nurse_template +# location = root.location +# save_scope_as = wet_nurse +# } +# } +# } +# #Option A) Maintain the Status Quo, not upsetting any clans +# option = { +# name = tgp_genpei_character.2000.a +# every_vassal = { +# custom = every_non_taira_vassal +# limit = { +# dynasty != root.dynasty +# } +# add_opinion = { +# target = root +# modifier = respected_status_quo +# opinion = 15 +# } +# } +# stress_impact = { +# ambitious = minor_stress_impact_gain +# brave = minor_stress_impact_gain +# arrogant = minor_stress_impact_gain +# patient = medium_stress_impact_loss +# craven = minor_stress_impact_loss +# } +# ai_chance = { +# base = 25 +# } +# } +# +# #Option B) Slander him +# option = { +# name = tgp_genpei_character.2000.b +# flavor = tgp_genpei_character.2000.b.flavor +# add_intrigue_lifestyle_xp = medium_lifestyle_experience +# add_prestige = minor_prestige_loss +# if = { +# limit = { +# NOT = { +# any_scheme = { +# scheme_type = slander +# scheme_target_character = scope:norihito_tenno +# } +# } +# } +# #If we don't have a scheme, let's scheme with a boost +# start_scheme = { +# type = slander +# target_character = scope:norihito_tenno +# } +# } +# custom_tooltip = { +# text = tgp_japan_yearly_events.1200.b.tt +# random_scheme = { +# limit = { +# scheme_type = slander +# scheme_target_character = scope:norihito_tenno +# } +# add_scheme_modifier = { type = bided_my_time } +# } +# } +# stress_impact = { +# arrogant = minor_stress_impact_gain +# brave = minor_stress_impact_gain +# patient = minor_stress_impact_loss +# vengeful = medium_stress_impact_loss +# ambitious = minor_stress_impact_loss +# } +# ai_chance = { +# base = 75 +# } +# } +# +# #Option B) Get wet nurse for family +# option = { +# name = tgp_genpei_character.2000.c +# flavor = tgp_genpei_character.2000.c.flavor +# trigger = { +# scope:wet_nurse = { +# would_be_valid_for_court_position = { +# employer = scope:norihito_tenno +# court_position = court_physician_court_position +# } +# } +# } +# remove_short_term_gold = minor_gold_value +# #give wetnurse +# court_position_grant_effect = { +# POS = wet_nurse +# CANDIDATE = scope:wet_nurse +# EMPLOYER = scope:norihito_tenno +# } +# scope:norihito_tenno = { +# add_opinion = { +# target = root +# modifier = sent_me_support +# opinion = 15 +# } +# } +# ai_chance = { +# base = 25 +# } +# } +#} +# +##Replacing Current Emperor with a Relative +#tgp_genpei_character.2010 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.2010.t +# desc = tgp_genpei_character.2010.desc +# theme = intrigue +# left_portrait = { +# character = root +# animation = interested +# camera = camera_body_right +# } +# center_portrait = { +# character = scope:previous_emperor +# animation = crying +# } +# right_portrait = { +# character = scope:go_shirakawa +# animation = disapproval +# } +# lower_left_portrait = scope:new_emperor +# lower_center_portrait = scope:fujiwara_ruler +# lower_right_portrait = scope:minamoto_ruler +# +# trigger = { +# has_tgp_dlc_trigger = yes +# this = character:japanese_taira_kanmu_34 +# title:k_chrysanthemum_throne.holder ?= { +# any_child = { +# is_available_child = yes +# trigger_if = { +# limit = { is_male = yes } +# faith_dominant_gender_male_or_equal = yes +# } +# trigger_else = { +# faith_dominant_gender_female_or_equal = yes +# } +# } +# } +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# title:k_chrysanthemum_throne.holder ?= { +# save_scope_as = previous_emperor +# #find new emperor (ideally our grandson) +# ordered_child = { +# limit = { +# is_available_child = yes +# is_close_or_extended_family_of = scope:kiyomori_taira +# OR = { +# AND = { +# faith_dominant_gender_male_or_equal = yes +# is_male = yes +# } +# faith_dominant_gender_female_or_equal = yes +# } +# } +# order_by = age +# save_scope_as = new_emperor +# } +# } +# #find Minamoto +# top_liege = { +# random_noble_family = { +# limit = { +# holder = { +# dynasty ?= dynasty:japanese_minamoto_seiwa +# house ?= { +# exists = house_confederation +# confederation.leading_house ?= house +# NOT = { house_confederation = root.top_liege.house.house_confederation } +# } +# } +# } +# alternative_limit = { +# holder = { +# dynasty ?= dynasty:japanese_minamoto_seiwa +# house ?= { +# exists = house_confederation +# NOT = { house_confederation = root.top_liege.house.house_confederation } +# } +# } +# } +# holder = { +# save_scope_as = minamoto_ruler +# house = { save_scope_as = minamoto_house } +# } +# } +# } +# #find Fujiwara +# random_vassal = { +# limit = { +# is_house_head = yes +# house = house:house_fujiwara_matsudono +# confederation.leading_house ?= house +# } +# alternative_limit = { +# is_house_head = yes +# house = house:house_fujiwara_matsudono +# } +# save_scope_as = fujiwara_ruler +# } +# } +# #Option A) Replace the Emperor - Incur the Wrath of other major powers +# option = { +# name = tgp_genpei_character.2010.a +# #Under no circumstances would an action like that be seen just +# add_tyranny = 50 +# add_dread = 30 +# #depose him! +# scope:previous_emperor = { +# depose_effect = { +# DEPOSER = scope:new_emperor +# } +# } +# +# scope:previous_emperor = { +# if = { +# limit = { is_ai = yes } +# add_opinion = { +# target = root +# modifier = forced_my_abdication_opinion +# } +# } +# if = { +# limit = { can_set_relation_rival_trigger = { CHARACTER = root } } +# set_relation_rival = { +# target = root +# reason = rival_forced_my_abdication_reason +# } +# } +# } +# +# add_hook = { +# target = scope:new_emperor +# type = strong_influence_hook +# } +# +# add_character_modifier = { +# modifier = tgp_japan_control_over_emperor +# years = 25 +# } +# +# custom_tooltip = minamoto_clan_will_respond_to_our_actions +# if = { +# limit = { +# exists = scope:minamoto_ruler +# } +# #Have the Yamatos join up with the Minamotos +# scope:previous_emperor.house ?= { +# if = { +# limit = { exists = house_confederation } +# set_variable = { +# name = bloc_leaving_reason +# value = flag:reason_events +# days = 4 +# } +# tgp_leave_house_bloc_effect = { +# OPINION = flag:yes +# TRUCE = flag:no +# } +# } +# tgp_join_house_bloc_effect = { +# INVITER = scope:minamoto_ruler.house +# OPINION = flag:yes +# } +# } +# } +# +# stress_impact = { +# patient = minor_stress_impact_gain +# arrogant = medium_stress_impact_loss +# ambitious = minor_stress_impact_loss +# } +# #Might be forcing it, but this happening most of the time would be ideal +# ai_chance = { +# base = 100 +# } +# #Trigger event for Yoritomo to gain bloc leadership +# scope:yoritomo_minamoto ?= { +# trigger_event = { +# id = tgp_genpei_character.1010 +# days = { 6 13 } +# } +# } +# #Trigger event for Yoshinaka to support Yoritomo or gain bloc leadership +# scope:yoshinaka_minamoto ?= { +# trigger_event = { +# id = tgp_genpei_character.1095 +# days = { 30 35 } +# } +# } +# } +# #Option B) Make common cause with the Fujiwara to eliminate the Minamoto +# option = { +# name = tgp_genpei_character.2010.b +# flavor = tgp_genpei_character.2010.b.flavor +# add_prestige = minor_prestige_value +# add_intrigue_lifestyle_xp = medium_lifestyle_experience +# #Make things good with fujiwara +# house = { +# change_house_relation_effect = { +# HOUSE = scope:fujiwara_ruler.house +# VALUE = house_relation_improve_medium_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:fujiwara_ruler +# TITLE = scope:dummy_gender +# } +# } +# #Make things bad with minamoto +# house = { +# change_house_relation_effect = { +# HOUSE = scope:minamoto_ruler.house +# VALUE = house_relation_damage_major_value +# REASON = conflict +# CHAR = root +# TARGET_CHAR = scope:minamoto_ruler +# TITLE = scope:dummy_gender +# } +# } +# stress_impact = { +# ambitious = medium_stress_impact_gain +# patient = minor_stress_impact_loss +# } +# ai_chance = { +# base = 20 +# } +# } +# #Option C) Make common cause with the Minamoto to eliminate the Fujiwara (get bonus to becoming shogun) +# option = { +# name = tgp_genpei_character.2010.c +# flavor = tgp_genpei_character.2010.c.flavor +# add_prestige = minor_prestige_value +# add_martial_lifestyle_xp = medium_lifestyle_experience +# #Make things good with minamoto +# house = { +# change_house_relation_effect = { +# HOUSE = scope:minamoto_ruler.house +# VALUE = house_relation_improve_medium_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:minamoto_ruler +# TITLE = scope:dummy_gender +# } +# } +# #Make things bad with fujiwara +# house = { +# change_house_relation_effect = { +# HOUSE = scope:fujiwara_ruler.house +# VALUE = house_relation_damage_major_value +# REASON = conflict +# CHAR = root +# TARGET_CHAR = scope:fujiwara_ruler +# TITLE = scope:dummy_gender +# } +# } +# stress_impact = { +# arrogant = medium_stress_impact_gain +# patient = minor_stress_impact_loss +# } +# ai_chance = { +# base = 20 +# } +# } +# #Option D) #Reignite your friendship with Go Shirakawa +# option = { +# name = tgp_genpei_character.2010.d +# flavor = tgp_genpei_character.2010.d.flavor +# add_diplomacy_lifestyle_xp = medium_lifestyle_experience +# add_piety = medium_piety_gain +# if = { +# #If we have a scheme, boost it! +# limit = { +# NOT = { +# any_scheme = { +# scheme_type = befriend +# scheme_target_character = scope:go_shirakawa +# } +# } +# } +# #If we don't have a scheme, let's scheme with a boost +# start_scheme = { +# type = befriend +# target_character = scope:go_shirakawa +# } +# } +# custom_tooltip = { +# text = tgp_japan_yearly_events.1200.c.tt +# random_scheme = { +# limit = { +# scheme_type = befriend +# scheme_target_character = scope:go_shirakawa +# } +# add_scheme_modifier = { type = settled_differences_modifier } +# } +# } +# stress_impact = { +# ambitious = minor_stress_impact_loss +# patient = medium_stress_impact_loss +# } +# ai_chance = { +# base = 10 +# modifier = { +# factor = 0 +# has_trait = impatient +# has_trait = paranoid +# has_trait = arrogant +# has_trait = shy +# } +# } +# } +#} +# +################################# +## Fujiwara Related Events +################################ +# +## Fujiwara Motofusa +# +## Initial EventWar being inevitable in Japan. Slander Kiyomori 2)Ally with Go Shirakawa or 3) Ally with Northern Fujiwara +#tgp_genpei_character.3000 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.3000.t +# desc = tgp_genpei_character.3000.desc +# window = big_event_window +# theme = crown +# left_portrait = { +# character = scope:motofusa_fujiwara +# animation = sadness +# } +# +# lower_left_portrait = scope:kiyomori_taira +# lower_center_portrait = scope:go_shirakawa +# lower_right_portrait = scope:hidehira_fujiwara +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# } +# #Option A) Slander Kiyomori +# option = { +# name = tgp_genpei_character.3000.a +# flavor = tgp_genpei_character.3000.a.flavor +# +# trigger = { +# scope:kiyomori_taira ?= { is_alive = yes } +# } +# +# change_influence = medium_influence_loss +# add_intrigue_lifestyle_xp = medium_lifestyle_experience +# add_prestige = minor_prestige_gain +# scope:kiyomori_taira = { +# every_vassal_or_below = { +# limit = { has_vassal_stance = courtly } +# custom = every_courtly_vassal +# add_opinion = { +# modifier = admiration_opinion +# target = scope:motofusa_fujiwara +# opinion = 30 +# } +# } +# } +# stress_impact = { +# arrogant = minor_stress_impact_loss +# } +# ai_chance = { +# base = 90 +# } +# } +# #Option B) #Send a letter to the retired Emperor +# option = { +# name = tgp_genpei_character.3000.b +# flavor = tgp_genpei_character.3000.b.flavor +# +# trigger = { +# scope:go_shirakawa ?= { +# is_alive = yes +# NOT = { house.house_confederation = root.house.house_confederation } +# } +# } +# +# custom_tooltip = send_letter_to_go_shirakawa +# +# scope:go_shirakawa = { +# show_as_tooltip = { +# random_list = { +# 1 = { +# add_prestige = major_prestige_gain +# } +# 1 = { +# house = { +# tgp_join_house_bloc_effect = { +# INVITER = scope:motofusa_fujiwara.house +# OPINION = flag:no +# } +# } +# set_relation_friend = { reason = friend_generic_history target = scope:motofusa_fujiwara } +# } +# } +# } +# trigger_event = { +# id = tgp_genpei_character.3010 +# days = 1 +# } +# } +# +# ai_chance = { +# base = 10 +# } +# } +# +# #Option C) Improve relations with northern Fujiwara. +# option = { +# name = tgp_genpei_character.3000.c +# flavor = tgp_genpei_character.3000.c.flavor +# +# trigger = { +# exists = scope:hidehira_fujiwara +# scope:hidehira_fujiwara ?= { is_alive = yes } +# } +# +# add_prestige = medium_prestige_loss +# #Make things good with northern Fujiwara +# house = { +# change_house_relation_effect = { +# HOUSE = scope:hidehira_fujiwara.house +# VALUE = house_relation_improve_medium_value +# REASON = friend +# CHAR = root +# TARGET_CHAR = scope:hidehira_fujiwara +# TITLE = scope:dummy_gender +# } +# } +# #Make things bad with the Taira +# house = { +# change_house_relation_effect = { +# HOUSE = scope:kiyomori_taira.house +# VALUE = house_relation_damage_major_value +# REASON = conflict +# CHAR = root +# TARGET_CHAR = scope:kiyomori_taira +# TITLE = scope:dummy_gender +# } +# } +# ai_chance = { +# base = 90 +# } +# } +#} +# +##Letter asking Go-Shirakawa for support +#tgp_genpei_character.3010 = { +# type = letter_event +# opening = tgp_genpei_character.3010.opening +# desc = tgp_genpei_character.3010.desc +# +# sender = { +# character = scope:motofusa_fujiwara +# animation = beg +# } +# +# option = { +# name = tgp_genpei_character.3010.a +# +# add_prestige = major_prestige_gain +# +# reverse_add_opinion = { +# target = scope:motofusa_fujiwara +# modifier = insulted_opinion +# opinion = -25 +# } +# +# ai_chance = { +# base = 0 +# } +# } +# +# option = { +# name = tgp_genpei_character.3010.b +# +# house = { +# tgp_join_house_bloc_effect = { +# INVITER = scope:motofusa_fujiwara.house +# OPINION = flag:no +# } +# } +# +# set_relation_friend = { reason = friend_generic_history target = scope:motofusa_fujiwara } +# +# ai_chance = { +# base = 100 +# } +# } +#} +# +## Fujiwara Hidehira +# +## Initial Event +#tgp_genpei_character.3100 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.3100.t +# desc = tgp_genpei_character.3100.desc +# theme = crown +# left_portrait = { +# character = root +# animation = war_over_win +# } +# right_portrait = { +# character = scope:yoshitsune_minamoto +# animation = marshal +# } +# lower_right_portrait = scope:kiyomori_taira +# lower_center_portrait = scope:motofusa_fujiwara +# override_background = { reference = study } +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# } +# +# option = { # Accept your position as the Governor of the North +# name = tgp_genpei_character.3100.a +# +# domicile = { +# add_domicile_building = japanese_manor_main_04 +# } +# +# ai_chance = { +# base = 25 +# } +# } +# +# option = { # Become more active in the Genpei Conflict about to break out +# name = tgp_genpei_character.3100.b +# +# show_as_tooltip = { +# add_character_modifier = { +# modifier = tgp_japan_fujiwara_hidehira_back_in_town +# years = 25 +# } +# } +# +# add_diplomacy_lifestyle_xp = medium_lifestyle_xp +# +# add_intrigue_lifestyle_xp = medium_lifestyle_xp +# +# ai_chance = { +# base = 75 +# } +# } +#} +# +################################# +## Yamato Events +################################# +# +## Go-Shirakawa Starting Event +#tgp_genpei_character.4000 = { +# type = character_event +# window = big_event_window +# title = tgp_genpei_character.4000.t +# desc = tgp_genpei_character.4000.desc +# theme = crown +# left_portrait = { +# character = root +# animation = sadness +# } +# right_portrait = { +# character = scope:norihito_tenno +# animation = holding_hu +# } +# lower_left_portrait = scope:yoritomo_minamoto +# lower_right_portrait = scope:kiyomori_taira +# +# trigger = { +# has_tgp_dlc_trigger = yes +# } +# +# immediate = { +# save_genpei_scopes_effect = yes +# } +# +# option = { # Be more active, opposing the Taira +# name = tgp_genpei_character.4000.a +# +# set_relation_rival = { +# target = scope:kiyomori_taira +# reason = rival_historical +# } +# +# change_influence = massive_influence_value +# +# top_liege = { +# every_vassal = { +# custom = every_non_taira_vassal +# limit = { +# dynasty != scope:kiyomori_taira.dynasty +# this != root +# } +# add_opinion = { +# target = root +# modifier = spoke_against_taira_rule +# opinion = 25 +# } +# } +# } +# +# ai_chance = { +# base = 25 +# } +# } +# +# option = { # Bide your time, wait for an opportunity first +# name = tgp_genpei_character.4000.b +# +# +# +# stress_impact = { +# impatient = major_stress_impact_gain +# } +# +# ai_chance = { +# base = 75 +# } +# } +#} +# \ No newline at end of file diff --git a/events/dlc/tgp/tgp_governor_contract_events.txt b/events/dlc/tgp/tgp_governor_contract_events.txt new file mode 100644 index 00000000..2b5655c0 --- /dev/null +++ b/events/dlc/tgp/tgp_governor_contract_events.txt @@ -0,0 +1,3495 @@ +########################## +# GOVERNOR CONTRACT EVENTS +########################## +namespace = tgp_governor_contract_event + +### Jail Inspection + +tgp_governor_contract_event.0010 = { + type = character_event + title = tgp_governor_contract_event.0010.t + desc = tgp_governor_contract_event.0010.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = jail_inspection + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = jail_inspection_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0010.a + + custom_tooltip = tgp_governor_contract_event.0010.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:jail_inspection_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0001 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0010.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0001 = { + type = character_event + title = tgp_governor_contract_event.0001.t + desc = tgp_governor_contract_event.0001.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:sick_prisoner + animation = prisondungeon + } + override_background = { + reference = dungeon + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = jail_inspection + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + trait = pneumonic + trait = murderer + save_scope_as = sick_prisoner + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0001.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = renovate_jail + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0001.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = improve_their_conditions + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_honor = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0001.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = pardon_some_of_them + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0001.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = beat_the_complainers + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0001.e + trigger = { + exists = scope:governance_option_e + } + scope:ongoing_contract = { + complete_task_contract = convict_labor + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + after = { + hidden_effect = { + scope:sick_prisoner ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Potent Physick + +tgp_governor_contract_event.0011 = { + type = character_event + title = tgp_governor_contract_event.0011.t + desc = tgp_governor_contract_event.0011.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = potent_physick + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = potent_physick_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0011.a + + custom_tooltip = tgp_governor_contract_event.0011.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:potent_physick_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0002 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0011.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0002 = { + type = character_event + title = tgp_governor_contract_event.0002.t + desc = tgp_governor_contract_event.0002.desc + theme = administrative + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:snake_oil_peddler + animation = personality_greedy + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = potent_physick + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = good_merchant_template + faith = scope:ongoing_destination.faith + culture = scope:ongoing_destination.culture + location = scope:task_contract.task_contract_location + trait = greedy + save_scope_as = snake_oil_peddler + } + save_court_physician_as_effect = { SCOPE_NAME = physician } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0002.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = emergency_appropriation + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0002.b + trigger = { exists = scope:governance_option_b } + duel = { + skills = { diplomacy intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0002.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = licensing_issue + } + } + 50 = { + desc = tgp_governor_contract_event.0002.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_licensing_issue + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0002.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = begone_quack + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0002.d + trigger = { + exists = scope:governance_option_d + } + scope:ongoing_contract = { + complete_task_contract = hire_the_quack + } + if = { + limit = { + exists = scope:physician + } + revoke_court_position = { + recipient = scope:physician + court_position = court_physician_court_position + } + } + add_courtier = scope:snake_oil_peddler + court_position_grant_effect = { + EMPLOYER = root + POS = court_physician + CANDIDATE = scope:snake_oil_peddler + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0002.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = down_the_hatch + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + after = { + scope:snake_oil_peddler ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# Irregular Accounting + +tgp_governor_contract_event.0012 = { + type = character_event + title = tgp_governor_contract_event.0012.t + desc = tgp_governor_contract_event.0012.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = irregular_accounting + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = irregular_accounting_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0012.a + + custom_tooltip = tgp_governor_contract_event.0012.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:irregular_accounting_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0003 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0012.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0003 = { + type = character_event + title = tgp_governor_contract_event.0003.t + desc = tgp_governor_contract_event.0003.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:dubious_tax_agent + animation = personality_greedy + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = irregular_accounting + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + trait = deceitful + trait = greedy + trait = ambitious + save_scope_as = dubious_tax_agent + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0003.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = confiscation_and_incarceration + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0003.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = recruit_embezzler + } + if = { + limit = { + can_recruit_character_to_court_trigger = { + RECRUITER = root + RECRUITEE = scope:dubious_tax_agent + } + scope:dubious_tax_agent ?= { + NOT = { is_courtier_of = root } + } + } + add_courtier = scope:dubious_tax_agent + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = -20 + } + } + } + option = { + name = tgp_governor_contract_event.0003.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = cover_up + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0003.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = into_your_pocket + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0003.e + trigger = { exists = scope:governance_option_e } + duel = { + skills = { stewardship intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0003.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = continue_the_charade + } + } + 50 = { + desc = tgp_governor_contract_event.0003.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_continue_the_charade + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1.5 + } + } + } + after = { + scope:dubious_tax_agent ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# SALT SMUGGLERS + +tgp_governor_contract_event.0013 = { + type = character_event + title = tgp_governor_contract_event.0013.t + desc = tgp_governor_contract_event.0013.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = salt_smugglers + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = salt_smugglers_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0013.a + + custom_tooltip = tgp_governor_contract_event.0013.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:salt_smugglers_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0004 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0013.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0004 = { + type = character_event + title = tgp_governor_contract_event.0004.t + desc = tgp_governor_contract_event.0004.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:salt_smuggler + animation = prisonhouse + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = salt_smugglers + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + save_scope_as = salt_smuggler + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0004.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = execute_smuggler + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0004.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = cut_a_deal + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0004.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { martial intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0004.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = interrogate_smuggler + } + } + 50 = { + desc = tgp_governor_contract_event.0004.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_interrogate_smuggler + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0004.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { diplomacy intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0004.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = a_cut_of_the_take + } + } + 50 = { + desc = tgp_governor_contract_event.0004.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_a_cut_of_the_take + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0004.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = recruit_smuggler + } + if = { + limit = { + can_recruit_character_to_court_trigger = { + RECRUITER = root + RECRUITEE = scope:salt_smuggler + } + scope:salt_smuggler ?= { + NOT = { is_courtier_of = root } + } + } + add_courtier = scope:salt_smuggler + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + add = -20 + } + } + } + after = { + scope:salt_smuggler ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# Hoarding Grain + +tgp_governor_contract_event.0014 = { + type = character_event + title = tgp_governor_contract_event.0014.t + desc = tgp_governor_contract_event.0014.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = hoarding_grain + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = hoarding_grain_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0014.a + + custom_tooltip = tgp_governor_contract_event.0014.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:hoarding_grain_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0005 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0014.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0005 = { + type = character_event + title = tgp_governor_contract_event.0005.t + desc = tgp_governor_contract_event.0005.desc + theme = administrative + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:grain_hoarding_local_notable + animation = anger + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = hoarding_grain + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + save_scope_as = grain_hoarding_local_notable + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0005.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = release_the_grain + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0005.b + trigger = { exists = scope:governance_option_b } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0005.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = shame_them + } + } + 50 = { + desc = tgp_governor_contract_event.0005.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_shame_them + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0005.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { diplomacy martial } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0005.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = intimidate_them + } + } + 50 = { + desc = tgp_governor_contract_event.0005.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_intimidate_them + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0005.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = purchase_grain_yourself + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0005.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = bribe_with_offices + } + if = { + limit = { + can_recruit_character_to_court_trigger = { + RECRUITER = root + RECRUITEE = scope:grain_hoarding_local_notable + } + scope:grain_hoarding_local_notable ?= { + NOT = { is_courtier_of = root } + } + } + add_courtier = scope:grain_hoarding_local_notable + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + } + } + } + after = { + scope:grain_hoarding_local_notable ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# Doddering Magistrate + +tgp_governor_contract_event.0015 = { + type = character_event + title = tgp_governor_contract_event.0015.t + desc = tgp_governor_contract_event.0015.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = doddering_magistrate + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = doddering_magistrate_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0015.a + + custom_tooltip = tgp_governor_contract_event.0015.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:doddering_magistrate_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0006 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0015.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0006 = { + type = character_event + title = tgp_governor_contract_event.0006.t + desc = tgp_governor_contract_event.0006.desc + theme = administrative + left_portrait = { + character = root + animation = boredom + } + right_portrait = { + character = scope:elderly_magistrate + animation = personality_honorable + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = doddering_magistrate + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + save_scope_as = elderly_magistrate + age = { 80 90 } + trait = stubborn + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0006.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = appoint_substitute + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0006.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = force_him_out + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0006.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = promote_somewhere_harmless + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0006.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = let_him_continue + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0006.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = demote_him + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + ai_compassion = -1 + } + } + } + after = { + scope:elderly_magistrate ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# Tax Exemption Petition + +tgp_governor_contract_event.0007 = { + type = character_event + title = tgp_governor_contract_event.0007.t + desc = tgp_governor_contract_event.0007.desc + theme = administrative + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:village_elder + animation = beg + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = burdensome_taxes + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + save_scope_as = village_elder + age = 70 + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0007.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + duel = { + skills = { stewardship } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0007.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = revise_tax_assessment + } + } + 50 = { + desc = tgp_governor_contract_event.0007.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_revise_tax_assessment + } + } + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0007.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = waive_their_taxes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0007.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = pay_it_yourself + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0007.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = delayed_taxes + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0007.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = imprison_debtors + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + after = { + scope:village_elder ?= { + silent_disappearance_effect = yes + } + } +} + +# Unsafe Highways +tgp_governor_contract_event.0008 = { + type = character_event + title = tgp_governor_contract_event.0008.t + desc = tgp_governor_contract_event.0008.desc + theme = administrative + left_portrait = { + character = root + animation = personality_content + } + right_portrait = { + character = scope:fearful_merchant + animation = stress + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = unsafe_highways + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = unsafe_highways_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + save_scope_as = fearful_merchant + trait = craven + trait = greedy + } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0008.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = merchant_funded_government_escort + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0008.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = send_out_the_patrols + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0008.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0008.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = talk_them_into_bodyguards + } + } + 50 = { + desc = tgp_governor_contract_event.0008.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_talk_them_into_bodyguards + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0008.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { diplomacy intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0008.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = threaten_with_sanctions + } + } + 50 = { + desc = tgp_governor_contract_event.0008.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_threaten_with_sanctions + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0008.e + trigger = { exists = scope:governance_option_e } + duel = { + skills = { diplomacy stewardship } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0008.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = entice_with_promises + } + } + 50 = { + desc = tgp_governor_contract_event.0008.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_entice_with_promises + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + } + } + after = { + scope:fearful_merchant ?= { + if = { + limit = { + NOT = { is_courtier_of = root } + } + silent_disappearance_effect = yes + } + } + } +} + +# Dam in Disrepair +tgp_governor_contract_event.0009 = { + type = character_event + title = tgp_governor_contract_event.0009.t + desc = tgp_governor_contract_event.0009.desc + theme = administrative + left_portrait = { + character = root + animation = worry + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = dam_in_disrepair + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = dam_in_disrepair_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + } + + option = { # Special governor trait option + name = tgp_governor_contract_event.0009.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = conscientious_mobilization + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0009.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = forced_labor + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_compassion = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0009.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { diplomacy intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0009.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = compel_the_wealthy + } + } + 50 = { + desc = tgp_governor_contract_event.0009.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_compel_the_wealthy + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0009.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = personal_contribution + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_compassion = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0009.e + trigger = { exists = scope:governance_option_e } + duel = { + skills = { stewardship diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0009.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = requisition_state_resources + } + } + 50 = { + desc = tgp_governor_contract_event.0009.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_requisition_state_resources + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } +} + +# Lines in the Soil + +tgp_governor_contract_event.0020 = { + type = character_event + title = tgp_governor_contract_event.0020.t + desc = tgp_governor_contract_event.0020.desc + theme = administrative + left_portrait = { + character = root + animation = thinking + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = lines_in_the_soil + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = lines_in_the_soil_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0020.a + + custom_tooltip = tgp_governor_contract_event.0020.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:lines_in_the_soil_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0021 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0020.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0021 = { + type = character_event + title = tgp_governor_contract_event.0021.t + desc = tgp_governor_contract_event.0021.desc + theme = administrative + left_portrait = { + character = scope:quarrelling_landowner_one + animation = anger + } + right_portrait = { + character = scope:quarrelling_landowner_two + animation = rage + } + lower_left_portrait = { + character = root + } + override_background = { + reference = dungeon + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = lines_in_the_soil + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = lines_in_the_soil_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_landowner_one + trait = greedy + trait = stubborn + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_landowner_two + trait = greedy + trait = stubborn + } + } + option = { + name = tgp_governor_contract_event.0021.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = land_resurvey + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0021.b + trigger = { exists = scope:governance_option_b } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0021.b.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = consult_archives + } + } + 50 = { + desc = tgp_governor_contract_event.0021.b.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_consult_archives + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0021.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = split_the_land + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0021.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0021.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = purchase_claims + } + } + 50 = { + desc = tgp_governor_contract_event.0021.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_purchase_claims + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_sociability = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0021.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = declare_state_property + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + after = { + hidden_effect = { + scope:quarrelling_landowner_one ?= { + silent_disappearance_effect = yes + } + scope:quarrelling_landowner_two ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Fraud in Broad Daylight + +tgp_governor_contract_event.0022 = { + type = character_event + title = tgp_governor_contract_event.0022.t + desc = tgp_governor_contract_event.0022.desc + theme = administrative + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:reporting_councillor + animation = worry + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = fraud_in_broad_daylight + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = fraud_in_broad_daylight_destination + } + } + random_councillor = { + limit = { + is_available = yes + } + save_scope_as = reporting_councillor + } + } + + option = { + name = tgp_governor_contract_event.0022.a + + custom_tooltip = tgp_governor_contract_event.0022.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:fraud_in_broad_daylight_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0023 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0022.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0023 = { + type = character_event + title = tgp_governor_contract_event.0023.t + desc = tgp_governor_contract_event.0023.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = fraud_in_broad_daylight + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + } + option = { + name = tgp_governor_contract_event.0023.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = goods_inspection + } + ai_chance = { + base = 100 + } + } + option = { + name = tgp_governor_contract_event.0023.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = reward_for_information + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0023.c + trigger = { exists = scope:governance_option_b } + duel = { + skills = { intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0023.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = undercover_clerks + } + } + 50 = { + desc = tgp_governor_contract_event.0023.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_undercover_clerks + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + + } + } + option = { + name = tgp_governor_contract_event.0023.d + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = merchant_association + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0023.e + trigger = { exists = scope:governance_option_b } + duel = { + skills = { martial intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0023.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = surprise_raid + } + } + 50 = { + desc = tgp_governor_contract_event.0023.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_surprise_raid + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_boldness = 1 + } + } + } + after = { + hidden_effect = { + scope:merchant_magnate ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Crumbling Bridge + +tgp_governor_contract_event.0024 = { + type = character_event + title = tgp_governor_contract_event.0024.t + desc = tgp_governor_contract_event.0024.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = crumbling_bridge + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = crumbling_bridge_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0024.a + + custom_tooltip = tgp_governor_contract_event.0024.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:crumbling_bridge_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0025 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0024.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0025 = { + type = character_event + title = tgp_governor_contract_event.0025.t + desc = tgp_governor_contract_event.0025.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = crumbling_bridge + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + } + option = { + name = tgp_governor_contract_event.0025.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = army_assistance + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0025.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = temporary_substitute + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0025.c + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = ferry_crossing + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0025.d + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = slower_replacement + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0025.e + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = settle_caravans + } + duel = { + skills = { stewardship learning } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0025.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = settle_caravans + } + } + 50 = { + desc = tgp_governor_contract_event.0025.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_settle_caravans + } + } + } + ai_chance = { + base = 100 + } + } +} + +# A Confusion of Tongues + +tgp_governor_contract_event.0026 = { + type = character_event + title = tgp_governor_contract_event.0026.t + desc = tgp_governor_contract_event.0026.desc + theme = administrative + left_portrait = { + character = root + animation = thinking + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = confusion_of_tongues + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = confusion_of_tongues_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0026.a + + custom_tooltip = tgp_governor_contract_event.0026.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:confusion_of_tongues_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0027 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0026.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0027 = { + type = character_event + title = tgp_governor_contract_event.0027.t + desc = tgp_governor_contract_event.0027.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:local_magistrate + animation = thinking + } + lower_right_portrait = { + character = scope:incomprehensible_merchant + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = confusion_of_tongues + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 6 } + random_county_in_region = { + region = world_asia_and_india + limit = { + any_province = { + is_coastal = yes + } + culture = { NOT = { has_cultural_pillar = heritage_chinese } } + } + save_scope_as = merchant_origin_county + } + scope:merchant_origin_county.culture = { + save_scope_as = merchant_origin_county_culture + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = local_magistrate + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = scope:merchant_origin_county_culture + faith = scope:merchant_origin_county.faith + save_scope_as = incomprehensible_merchant + } + scope:task_contract = { + set_variable = { + name = foreign_merchant_culture + value = scope:incomprehensible_merchant.culture + } + } + } + option = { + name = tgp_governor_contract_event.0027.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = temporary_housing + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0027.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = search_for_translator + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0027.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = confiscate_their_goods + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_boldness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0027.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0027.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = communicate_through_gestures + } + } + 50 = { + desc = tgp_governor_contract_event.0027.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_communicate_through_gestures + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0027.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = put_them_under_guard + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0027.f + trigger = { + exists = scope:governance_option_f + } + scope:ongoing_contract = { + complete_task_contract = i_know_this_one + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + after = { + hidden_effect = { + scope:incomprehensible_merchant ?= { + silent_disappearance_effect = yes + } + } + } +} +# Seditious Storytelling + +tgp_governor_contract_event.0028 = { + type = character_event + title = tgp_governor_contract_event.0028.t + desc = tgp_governor_contract_event.0028.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = seditious_storytelling + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = seditious_storytelling_destination + } + } + random_councillor = { + limit = { + is_available = yes + } + save_scope_as = concerned_councillor + } + } + + option = { + name = tgp_governor_contract_event.0028.a + + custom_tooltip = tgp_governor_contract_event.0028.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:seditious_storytelling_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0029 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0028.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0029 = { + type = character_event + title = tgp_governor_contract_event.0029.t + desc = tgp_governor_contract_event.0029.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:seditious_storyteller + animation = thinking + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = seditious_storytelling + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = seditious_storyteller + trait = honest + trait = stubborn + } + } + option = { + name = tgp_governor_contract_event.0029.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = censor_storyteller + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0029.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = arrest_storyteller + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0029.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = encourage_rival_storytellers + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0029.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = intimidate_audience + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0029.e + trigger = { exists = scope:governance_option_e } + duel = { + skills = { diplomacy intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0029.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = persuade_storyteller + } + } + 50 = { + desc = tgp_governor_contract_event.0029.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_persuade_storyteller + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + after = { + hidden_effect = { + scope:seditious_storyteller ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Quaking in Panic + +tgp_governor_contract_event.0030 = { + type = character_event + title = tgp_governor_contract_event.0030.t + desc = tgp_governor_contract_event.0030.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + right_portrait = { + character = scope:my_councillor + animation = thinking + } + lower_right_portrait = { + character = scope:alarmed_councillor + animation = worry + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = quaking_in_panic + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = quaking_in_panic_destination + } + } + random_councillor = { + limit = { + is_available = yes + } + save_scope_as = my_councillor + } + random_councillor = { + limit = { + is_available = yes + NOT = { this = scope:my_councillor } + } + save_scope_as = alarmed_councillor + } + } + + option = { + name = tgp_governor_contract_event.0030.a + + custom_tooltip = tgp_governor_contract_event.0030.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:quaking_in_panic_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0031 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0030.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0031 = { + type = character_event + title = tgp_governor_contract_event.0031.t + desc = tgp_governor_contract_event.0031.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:panicked_villager + animation = fear + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = quaking_in_panic + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = panicked_villager + trait = craven + } + } + option = { + name = tgp_governor_contract_event.0031.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0031.a.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = convene_public_meeting + } + } + 50 = { + desc = tgp_governor_contract_event.0031.a.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_convene_public_meeting + } + } + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0031.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = deploy_guards + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_vengefulness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0031.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = appeal_to_local_leadership + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0031.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { stewardship } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0031.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = architectural_inspection + } + } + 50 = { + desc = tgp_governor_contract_event.0031.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_architectural_inspection + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0031.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = population_transfer + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + after = { + hidden_effect = { + scope:panicked_villager ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Monopoly in the Marketplace + +tgp_governor_contract_event.0032 = { + type = character_event + title = tgp_governor_contract_event.0032.t + desc = tgp_governor_contract_event.0032.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + right_portrait = { + character = scope:plaintive_merchant + animation = anger + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = monopoly_in_the_marketplace + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = monopoly_in_the_marketplace_destination + } + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = plaintive_merchant + } + } + + option = { + name = tgp_governor_contract_event.0032.a + + custom_tooltip = tgp_governor_contract_event.0032.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:monopoly_in_the_marketplace_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0033 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0032.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } + after = { + hidden_effect = { + scope:plaintive_merchant ?= { + silent_disappearance_effect = yes + } + } + } +} + +tgp_governor_contract_event.0033 = { + type = character_event + title = tgp_governor_contract_event.0033.t + desc = tgp_governor_contract_event.0033.desc + theme = administrative + override_background = { reference = market } + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:merchant_magnate + animation = admiration + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = monopoly_in_the_marketplace + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + trait = greedy + trait = deceitful + trait = ambitious + save_scope_as = merchant_magnate + } + } + option = { + name = tgp_governor_contract_event.0033.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = strict_regulations + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0033.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = association_stalls_only + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0033.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = levy_special_tax + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0033.d + trigger = { exists = scope:governance_option_d } + duel = { + skills = { stewardship intrigue } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0033.d.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = back_competitors + } + } + 50 = { + desc = tgp_governor_contract_event.0033.d.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_back_competitors + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0033.e + trigger = { exists = scope:governance_option_e } + scope:ongoing_contract = { + complete_task_contract = seize_merchant_goods + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + } + } + } + after = { + hidden_effect = { + scope:merchant_magnate ?= { + silent_disappearance_effect = yes + } + } + } +} + +# Contested Inheritance + +tgp_governor_contract_event.0034 = { + type = character_event + title = tgp_governor_contract_event.0034.t + desc = tgp_governor_contract_event.0034.desc + theme = administrative + left_portrait = { + character = root + animation = pondering + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = contested_inheritance + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = contested_inheritance_destination + } + } + } + + option = { + name = tgp_governor_contract_event.0034.a + + custom_tooltip = tgp_governor_contract_event.0034.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:contested_inheritance_destination + ARRIVAL_EVENT = tgp_governor_contract_event.0035 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.0034.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { + add = 100 + is_available = no + } + modifier = { + add = 200 + has_trait = lazy + NOT = { has_trait = greedy } # Greedy always wants more gold, even when lazy. + } + } + } +} + +tgp_governor_contract_event.0035 = { + type = character_event + title = tgp_governor_contract_event.0035.t + desc = tgp_governor_contract_event.0035.desc + theme = administrative + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:quarrelling_heir_one + animation = thinking + } + lower_left_portrait = { + character = scope:quarrelling_heir_two + } + lower_center_portrait = { + character = scope:quarrelling_heir_three + } + lower_right_portrait = { + character = scope:quarrelling_heir_four + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = contested_inheritance + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 5 } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_heir_one + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_heir_two + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_heir_three + } + create_character = { + template = merchant_template + location = scope:task_contract.task_contract_location + location = root.location + culture = root.location.culture + faith = root.location.faith + save_scope_as = quarrelling_heir_four + } + } + option = { + name = tgp_governor_contract_event.0035.a + trigger = { + exists = scope:governance_option_a + has_trait = governor # To show that the trait unlocks the option + } + scope:ongoing_contract = { + complete_task_contract = declare_communal_property + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_governor_contract_event.0035.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = award_according_to_seniority + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0035.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { intrigue stewardship } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0035.c.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = award_to_highest_bidder + } + } + 50 = { + desc = tgp_governor_contract_event.0035.c.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_award_to_highest_bidder + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + } + } + } + option = { + name = tgp_governor_contract_event.0035.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = adhere_to_testament + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } + option = { + name = tgp_governor_contract_event.0035.e + trigger = { exists = scope:governance_option_e } + duel = { + skills = { diplomacy } + value = decent_skill_rating + 50 = { + desc = tgp_governor_contract_event.0035.e.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + scope:ongoing_contract = { + complete_task_contract = persuade_private_settlement + } + } + 50 = { + desc = tgp_governor_contract_event.0035.e.failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + scope:ongoing_contract ?= { + complete_task_contract = failure_persuade_private_settlement + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + } + } + after = { + hidden_effect = { + scope:quarrelling_heir_one ?= { + silent_disappearance_effect = yes + } + scope:quarrelling_heir_two ?= { + silent_disappearance_effect = yes + } + scope:quarrelling_heir_three ?= { + silent_disappearance_effect = yes + } + scope:quarrelling_heir_four ?= { + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/tgp/tgp_governor_contract_events_2000.txt b/events/dlc/tgp/tgp_governor_contract_events_2000.txt new file mode 100644 index 00000000..6e925a42 --- /dev/null +++ b/events/dlc/tgp/tgp_governor_contract_events_2000.txt @@ -0,0 +1,502 @@ +########################## +# GOVERNOR CONTRACT EVENTS +########################## +namespace = tgp_governor_contract_event + +### Missing Equipment +# Intro event +tgp_governor_contract_event.2000 = { + type = character_event + title = tgp_governor_contract_event.2000.t + desc = tgp_governor_contract_event.2000.desc + theme = administrative + left_portrait = { + character = root + animation = worry + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = missing_equipment + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = robbery_location + } + } + + # Save the capital location + top_liege = { + capital_province = { + save_scope_as = capital_location + } + } + } + + option = { # Let's pay the workshops a visit. + name = tgp_governor_contract_event.2000.a + + # Travel to the capital and visit a workshop/production facility + custom_tooltip = { + text = tgp_governor_contract_event.2000.a_tt + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:capital_location + ARRIVAL_EVENT = tgp_governor_contract_event.2001 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_governor_contract_event.2000.b + + scope:ongoing_contract = { + complete_task_contract = buy_replacements + } + + ai_chance = { + base = 0 + + modifier = { # The AI may take this if they have A LOT of gold + add = 100 + short_term_gold >= massive_gold_value + } + } + } + + option = { + name = tgp_governor_contract_event.2000.c + + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + + modifier = { # Pick this only if necessary + add = 100 + is_available = no + } + } + } +} + +# Arrival at the workshop +tgp_governor_contract_event.2001 = { + type = character_event + title = tgp_governor_contract_event.2001.t + desc = tgp_governor_contract_event.2001.desc + theme = administrative + override_background = { reference = market } + left_portrait = { + character = root + animation = disapproval + } + right_portrait = { + character = scope:foreman + animation = reading + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = missing_equipment + } + save_scope_as = ongoing_contract + } + + # Save the capital location + top_liege = { + capital_province = { + save_scope_as = capital_location + } + } + + # Find/create a foreman for us to talk to + if = { + limit = { + any_pool_character = { + province = scope:capital_location + is_physically_able_ai_adult = yes + } + } + random_pool_character = { + province = scope:capital_location + limit = { + is_physically_able_ai_adult = yes + } + save_scope_as = foreman + } + } + else = { + create_character = { + template = scholar_character + culture = scope:capital_location.county.culture + faith = scope:capital_location.county.faith + location = scope:capital_location + gender_female_chance = root_faith_dominant_gender_female_chance + save_scope_as = foreman + } + } + + # Check if you have an important relation at the imperial court + top_liege = { + if = { + limit = { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + save_scope_as = court_relation + } + else_if = { + limit = { + cp:councillor_chancellor ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + } + cp:councillor_chancellor = { save_scope_as = court_relation } + } + else_if = { + limit = { + cp:councillor_marshal ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + } + cp:councillor_marshal = { save_scope_as = court_relation } + } + else_if = { + limit = { + cp:councillor_steward ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + } + cp:councillor_steward = { save_scope_as = court_relation } + } + else_if = { + limit = { + cp:councillor_spymaster ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + } + cp:councillor_spymaster = { save_scope_as = court_relation } + } + else_if = { + limit = { + cp:councillor_court_chaplain ?= { + OR = { + has_relation_friend = root + has_relation_lover = root + is_close_or_extended_family_of = root + root = { has_hook = prev } + } + } + } + cp:councillor_court_chaplain = { save_scope_as = court_relation } + } + } + + hidden_effect = { # Delay the travel until the events are resolved + current_travel_plan ?= { + delay_travel_plan = { days = 180 } + } + } + } + + option = { # A _clerical_ error? [relation] will hear about this... + name = tgp_governor_contract_event.2001.a + + trigger = { + exists = scope:court_relation + } + + custom_tooltip = { + text = tgp_governor_contract_event.2001.a.tt + trigger_event = { + id = tgp_governor_contract_event.2002 + } + } + + ai_chance = { + base = 100 + } + } + + option = { # Surely some additional compensation is in order? + name = tgp_governor_contract_event.2001.b + + duel = { + skill = diplomacy + value = 10 + 50 = { # Success + desc = tgp_governor_contract_event.2001.tt_success_desc + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + } + trigger_event = { + id = tgp_governor_contract_event.2002 + } + custom_tooltip = tgp_governor_contract_event.2001.tt_success + } + 50 = { # Failure + desc = tgp_governor_contract_event.2001.tt_failure_desc + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + } + trigger_event = { + id = tgp_governor_contract_event.2003 + } + custom_tooltip = tgp_governor_contract_event.2001.tt_failure + show_as_tooltip = { # Actual deduction is done in follow-up event + change_influence = medium_influence_loss + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + content = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + diplomacy >= good_skill_level + } + modifier = { + factor = 0 + exists = scope:court_relation + } + modifier = { + factor = 0 + has_trait = content + } + } + } + + option = { # It would be unfortunate if your incompetence became public, no? + name = tgp_governor_contract_event.2001.c + + duel = { + skill = intrigue + value = 10 + 50 = { # Success + desc = tgp_governor_contract_event.2001.tt_success_desc + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + } + trigger_event = { + id = tgp_governor_contract_event.2002 + } + custom_tooltip = tgp_governor_contract_event.2001.tt_success + } + 50 = { # Failure + desc = tgp_governor_contract_event.2001.tt_failure_desc + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + } + trigger_event = { + id = tgp_governor_contract_event.2003 + } + custom_tooltip = tgp_governor_contract_event.2001.tt_failure + show_as_tooltip = { # Actual deduction is done in follow-up event + change_influence = medium_influence_loss + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 0 + + modifier = { + factor = 2 + intrigue >= good_skill_level + } + modifier = { + factor = 1.2 + has_trait = deceitful + } + modifier = { + factor = 0 + has_trait = compassionate + } + } + } + + option = { # Very well. Just make certain that it does. + name = tgp_governor_contract_event.2001.d + + scope:ongoing_contract = { + complete_task_contract = offered_replacements + } + + current_travel_plan ?= { resume_travel_plan = yes } + + ai_chance = { + base = 50 + + modifier = { + factor = 2 + has_trait = content + } + } + } +} + +# Workship visit: Success +tgp_governor_contract_event.2002 = { + type = character_event + title = tgp_governor_contract_event.2002.t + desc = tgp_governor_contract_event.2002.desc + theme = administrative + override_background = { reference = market } + left_portrait = { + character = root + animation = schadenfreude + } + right_portrait = { + character = scope:foreman + animation = obsequious_bow + } + + immediate = { + generate_governance_outcome_effect = { OPTIONS = 4 } + } + + # Special governor trait option + option = { # Let's secure a number of shipments in the future. + name = tgp_governor_contract_event.2002.a + + trigger = { + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = secure_future_deliveries + } + + ai_chance = { + base = 100 + } + } + + option = { # Secure me your next #EMP two#! shipments. + name = tgp_governor_contract_event.2002.b + trigger = { exists = scope:governance_option_b } + + scope:ongoing_contract = { + complete_task_contract = demand_extra_shipment + } + + ai_chance = { + base = 25 + } + } + + option = { # A monetary compensation is in order. + name = tgp_governor_contract_event.2002.c + trigger = { exists = scope:governance_option_c } + + scope:ongoing_contract = { + complete_task_contract = demand_gold + } + + ai_chance = { + base = 25 + } + } + + option = { # Send me the best equipment you have available. + name = tgp_governor_contract_event.2002.d + trigger = { exists = scope:governance_option_d } + + scope:ongoing_contract = { + complete_task_contract = demand_best_equipment + } + + ai_chance = { + base = 25 + } + } + + after = { + current_travel_plan ?= { resume_travel_plan = yes } + } +} + +# Workship visit: Failure +tgp_governor_contract_event.2003 = { + type = character_event + title = tgp_governor_contract_event.2003.t + desc = tgp_governor_contract_event.2003.desc + theme = administrative + override_background = { reference = market } + left_portrait = { + character = root + animation = disappointed + } + right_portrait = { + character = scope:foreman + animation = anger + } + + immediate = { + } + + option = { # Fine. + name = tgp_governor_contract_event.2003.a + + scope:ongoing_contract = { + complete_task_contract = offered_replacements + } + + change_influence = medium_influence_loss + add_prestige = medium_prestige_loss + } + + after = { + current_travel_plan ?= { resume_travel_plan = yes } + } +} diff --git a/events/dlc/tgp/tgp_house_blocs.txt b/events/dlc/tgp/tgp_house_blocs.txt new file mode 100644 index 00000000..c6dc8d55 --- /dev/null +++ b/events/dlc/tgp/tgp_house_blocs.txt @@ -0,0 +1,176 @@ +namespace = tgp_house_blocs + +# Message management + +tgp_house_blocs.0001 = { + type = character_event + hidden = yes + + trigger = { has_character_flag = bloc_message_flag } + + immediate = { + # Notify all members about them leaving. + send_interface_message = { + type = msg_left_house_bloc + title = msg_left_bloc_root + desc = msg_left_bloc_desc_root + left_icon = scope:leaver.house + right_icon = scope:bloc.leading_house + custom_description = { + text = leave_house_bloc_effect + subject = house.house_head + } + } + every_player = { + limit = { + confederation ?= scope:bloc + NOT = { this = root } + } + send_interface_message = { + type = msg_left_house_bloc + title = msg_left_bloc + desc = msg_left_bloc_desc + left_icon = scope:leaver.house + right_icon = scope:bloc.leading_house + custom_description = { + text = leave_house_bloc_effect + subject = scope:leaver.house_head + } + } + } + remove_character_flag = bloc_message_flag + } +} + +tgp_house_blocs.0002 = { + type = character_event + hidden = yes + + trigger = { has_character_flag = bloc_message_flag } + + immediate = { + # Notify all members about them leaving. + send_interface_message = { + type = msg_joined_house_bloc + title = msg_joined_bloc_root + desc = msg_joined_bloc_desc_root + left_icon = scope:joiner.house + right_icon = scope:bloc.leading_house + custom_description = { + text = join_house_bloc_effect + subject = scope:joiner + object = scope:bloc.leading_house.house_head + } + } + every_player = { + limit = { + confederation ?= scope:bloc + NOT = { this = root } + } + send_interface_message = { + type = msg_joined_house_bloc + title = msg_joined_bloc + desc = msg_joined_bloc_desc + left_icon = scope:joiner.house + right_icon = scope:bloc.leading_house + custom_description = { + text = join_house_bloc_effect + subject = scope:joiner + object = scope:bloc.leading_house.house_head + } + } + } + remove_character_flag = bloc_message_flag + } +} + +tgp_house_blocs.0010 = { + type = character_event + hidden = yes + + immediate = { + bloc_leader_change_aspiration_cohesion_effect = yes + } +} + +# Strength Unlock + +tgp_house_blocs.1001 = { + type = character_event + title = tgp_house_blocs.1001.t + desc = tgp_house_blocs.1001.desc + theme = war + left_portrait = { + character = root + animation = thinking + } + right_portrait = { + character = scope:bloc_leader + animation = japanese_war_fan + } + override_background = { reference = army_camp } + + trigger = { + is_ruler = yes + exists = house.house_confederation + NOT = { is_at_war_with = house.house_confederation.leading_house.house_head } + } + + immediate = { + house = { + house_confederation = { + leading_house.house_head = { save_scope_as = bloc_leader } + } + every_house_member = { + limit = { + is_landed = yes + top_liege = root.top_liege + OR = { + liege = scope:bloc_leader + liege = root + } + NOR = { + this = root + is_at_war_with = house.house_confederation.leading_house.house_head + } + } + add_to_list = war_joiners + } + } + } + + option = { + name = tgp_house_blocs.1001.a + scope:war = { + add_attacker = root + } + every_in_list = { + list = war_joiners + save_temporary_scope_as = war_joiner_temp + scope:war = { + add_attacker = scope:war_joiner_temp + } + } + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_house_blocs.1001.b + house = { + set_variable = { + name = bloc_leaving_reason + value = flag:reason_events + days = 4 + } + tgp_leave_house_bloc_effect = { + OPINION = flag:yes + TRUCE = flag:yes + } + } + ai_chance = { + base = 0 + } + } +} diff --git a/events/dlc/tgp/tgp_interaction_events.txt b/events/dlc/tgp/tgp_interaction_events.txt new file mode 100644 index 00000000..acacb5c8 --- /dev/null +++ b/events/dlc/tgp/tgp_interaction_events.txt @@ -0,0 +1,1185 @@ +namespace = tgp_interaction_event + +# Send Treasury interaction events +tgp_interaction_event.0001 = { + type = letter_event + opening = char_interaction.0010.opening + desc = tgp_interaction_event.0001.desc + sender = scope:recipient + + trigger = { + scope:actor = { + is_alive = yes + } + scope:recipient = { + is_alive = yes + } + } + + immediate = { + # Let's calculate a reward + random_list = { + 10 = { # Give hook + trigger = { + can_add_hook = { + target = scope:recipient + type = favor_hook + } + } + modifier = { + is_liege_or_above_of = scope:recipient + factor = 1.5 + } + modifier = { # Non-powerful families are more likely to offer a hook + scope:recipient.house ?= { + is_powerful_family = no + is_dominant_family = no + } + factor = 1.5 + } + + save_scope_as = treasury_hook + } + 10 = { # Become a disciple + trigger = { + scope:recipient = { + NOR = { + # Does not have any of these relations already + any_relation = { type = disciple } + any_relation = { type = elder } + + # And is someone who could actually be a disciple + has_trait = ambitious + has_trait = arrogant + } + } + } + modifier = { + scope:recipient = { + has_trait = trusting + } + add = 5 + } + modifier = { + scope:recipient = { + has_trait = humble + } + add = 5 + } + + save_scope_as = treasury_become_disciple + } + 10 = { # Give influence + modifier = { + scope:recipient.influence_level > 3 + add = 10 + } + + save_scope_as = treasury_influence + } + } + } + + option = { + name = tgp_interaction_event.0001.a + + switch = { + trigger = exists + scope:treasury_hook = { + add_hook = { + target = scope:recipient + type = favor_hook + } + } + scope:treasury_become_disciple = { + set_elder_relation_effect = { + ELDER = scope:actor + DISCIPLE = scope:recipient + MERIT = minor_merit_gain + } + } + scope:treasury_influence = { + change_influence = medium_influence_gain + } + } + } +} + +# Request Military Aid interaction events +# Recipient receives the request +tgp_interaction_event.0010 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = tgp_interaction_event.0010.desc + sender = scope:actor + + trigger = { + scope:actor = { is_alive = yes } + scope:recipient = { is_alive = yes } + scope:joining_governor = { is_alive = yes } + } + + option = { # Join the war yourself (if applicable) + name = tgp_interaction_event.0010.a + trigger = { + trigger_if = { + limit = { + this = top_liege + } + is_character_interaction_valid = { + recipient = scope:actor + interaction = join_vassal_war_interaction + } + } + trigger_else = { + vassal_contract_has_flag = celestial_military_appointment + NOR = { + this = scope:actor + any_war_ally = { this = scope:actor } + any_war_enemy = { this = scope:actor } + is_at_war_with = scope:actor + } + } + } + + save_scope_as = joining_character + if = { + limit = { + this = top_liege + is_character_interaction_valid = { + recipient = scope:actor + interaction = join_vassal_war_interaction + } + } + custom_tooltip = { + text = join_vassal_war_interaction_desc + open_interaction_window = { + interaction = join_vassal_war_interaction + actor = root + recipient = scope:actor + } + } + } + else = { + scope:actor = { + every_character_war = { + limit = { + is_war_leader = scope:actor + is_attacker = scope:actor + } + add_attacker = scope:joining_character + } + every_character_war = { + limit = { + is_war_leader = scope:actor + is_defender = scope:actor + } + add_defender = scope:joining_character + } + + # Send response to actor + trigger_event = tgp_interaction_event.0012 + } + } + + ai_chance = { + base = 0 + } + } + option = { # Have any military governor join the war + name = tgp_interaction_event.0010.b + + scope:joining_governor = { + save_scope_as = joining_character + trigger_event = tgp_interaction_event.0011 + } + scope:actor = { + every_character_war = { + limit = { + is_war_leader = scope:actor + is_attacker = scope:actor + } + add_attacker = scope:joining_character + } + every_character_war = { + limit = { + is_war_leader = scope:actor + is_defender = scope:actor + } + add_defender = scope:joining_character + } + + # Send response to actor + trigger_event = tgp_interaction_event.0012 + } + + ai_chance = { # The AI always sends someone + base = 100 + } + } + option = { # Players have the option to not send anyone, and use celestial_send_military_aid_interaction instead + name = tgp_interaction_event.0010.c + + custom_tooltip = { + text = celestial_send_military_aid_interaction + open_interaction_window = { + interaction = celestial_send_military_aid_interaction + actor = root + recipient = scope:actor + } + } + + ai_chance = { + base = 0 + } + } +} + +# Military governor receives an order to join the war +tgp_interaction_event.0011 = { + type = letter_event + opening = tgp_interaction_event.0011.opening + desc = tgp_interaction_event.0011.desc + sender = scope:recipient + + immediate = { + show_as_tooltip = { + scope:actor = { + every_character_war = { + limit = { + is_war_leader = scope:actor + is_attacker = scope:actor + } + add_attacker = scope:joining_governor + } + every_character_war = { + limit = { + is_war_leader = scope:actor + is_defender = scope:actor + } + add_defender = scope:joining_governor + } + } + } + } + + option = { + name = { + trigger = { + top_liege.cp:councillor_marshal ?= scope:recipient + } + text = tgp_interaction_event.0011.a + } + name = { + trigger = { + NOT = { top_liege.cp:councillor_marshal ?= scope:recipient } + } + text = tgp_interaction_event.0011.b + } + } +} + +# Actor receives a response +tgp_interaction_event.0012 = { + type = letter_event + opening = tgp_interaction_event.0011.opening + desc = { + triggered_desc = { + trigger = { + scope:joining_character = scope:recipient + } + desc = tgp_interaction_event.0012.desc_marshal + } + desc = tgp_interaction_event.0012.desc_governor + } + sender = scope:recipient + + immediate = { + show_as_tooltip = { + every_character_war = { + limit = { + is_war_leader = scope:actor + is_attacker = scope:actor + } + add_attacker = scope:joining_character + } + every_character_war = { + limit = { + is_war_leader = scope:actor + is_defender = scope:actor + } + add_defender = scope:joining_character + } + } + } + + option = { + name = tgp_interaction_event.0012.a + } +} + +# Recipient/governor receives news of military governor joining war +tgp_interaction_event.0015 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = tgp_interaction_event.0015.desc + sender = scope:actor + + immediate = { + custom_tooltip = celestial_send_military_aid_effect_desc + } + + option = { + name = tgp_interaction_event.0012.a + } +} + +# Secondary recipient/military governor receives order to join war +tgp_interaction_event.0016 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = tgp_interaction_event.0016.desc + sender = scope:actor + + immediate = { + custom_tooltip = celestial_send_military_aid_effect_desc + } + + option = { + name = tgp_interaction_event.0016.a + } +} + +# Siphon Treasury starting event +tgp_interaction_event.0020 = { + type = character_event + title = tgp_interaction_event.0020.t + desc = tgp_interaction_event.0020.desc + theme = generic_intrigue_scheme + left_portrait = { + character = root + animation = schadenfreude + } + + option = { + name = tgp_interaction_event.0020.a + custom_tooltip = siphon_destination_gold_tt + scope:scheme = { + set_variable = { + name = siphon_destination + value = flag:gold + } + } + ai_chance = { + base = 0 + modifier = { + gold <= treasury + add = 100 + } + } + } + option = { + name = tgp_interaction_event.0020.b + custom_tooltip = siphon_destination_treasury_tt + scope:scheme = { + set_variable = { + name = siphon_destination + value = flag:treasury + } + } + ai_chance = { + base = 0 + modifier = { + gold > treasury + add = 100 + } + } + } +} + +# Break with Elder notification event +tgp_interaction_event.0030 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = { + desc = tgp_interaction_event.0030.desc + triggered_desc = { + trigger = { exists = scope:new_elder } + desc = tgp_interaction_event.0030.desc_new_elder + } + } + sender = scope:actor + + immediate = { + show_as_tooltip = { + scope:actor = { + remove_relation_elder = scope:recipient + if = { + limit = { + exists = scope:new_elder + } + set_relation_elder = scope:new_elder + root = { + set_relation_grudge = scope:new_elder + } + } + } + } + } + + option = { + name = { + trigger = { + exists = scope:new_elder + } + text = tgp_interaction_event.0030.a_new_elder + } + name = tgp_interaction_event.0030.a + } +} + +# Find Elder notification event +tgp_interaction_event.0031 = { + type = letter_event + opening = tgp_interaction_event.0031.opening + desc = tgp_interaction_event.0031.desc + sender = scope:actor + + immediate = { + } + + option = { + name = tgp_interaction_event.0031.a + scope:actor = { trigger_event = tgp_interaction_event.00311 } + show_as_tooltip = { + scope:actor = { + set_elder_relation_effect = { + ELDER = scope:secondary_recipient + DISCIPLE = scope:actor + MERIT = minor_merit_gain + } + } + } + ai_will_select = { + value = scope:secondary_recipient.find_elder_acceptance_value + } + } + option = { + name = tgp_interaction_event.0031.b + scope:actor = { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_interaction_event.0031.b.tt + left_icon = scope:secondary_recipient + add_opinion = { + target = scope:secondary_recipient + modifier = refused_to_be_elder_opinion + opinion = -10 + } + } + } + ai_will_select = { + value = scope:secondary_recipient.find_elder_acceptance_value + multiply = -1 + } + } +} + +scripted_effect tgp_dynastic_cycle_add_to_elders_movement_effect = { + custom_tooltip = tgp_dynastic_cycle_add_to_elders_movement_effect_tt + if = { + limit = { + scope:secondary_recipient = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = expansion_movement + } + } + } + set_variable = { + name = movement_member + value = flag:expansion + } + } + else_if = { + limit = { + scope:secondary_recipient = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + } + } + set_variable = { + name = movement_member + value = flag:advancement + } + } + else_if = { + limit = { + scope:secondary_recipient = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = pro_hegemon_movement + } + } + } + set_variable = { + name = movement_member + value = flag:pro_hegemon + } + } + else_if = { + limit = { + scope:secondary_recipient = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + } + set_variable = { + name = movement_member + value = flag:conservative + } + } +} + +tgp_interaction_event.00311 = { + type = letter_event + opening = tgp_interaction_event.00311.opening + desc = { + desc = tgp_interaction_event.00311.desc.intro + first_valid = { + triggered_desc = { + trigger = { + exists = scope:elder_movement + } + desc = tgp_interaction_event.00311.desc.movement + } + desc = tgp_interaction_event.00311.desc.no_movement + } + } + sender = scope:secondary_recipient + + immediate = { + scope:actor = { + set_elder_relation_effect = { + ELDER = scope:secondary_recipient + DISCIPLE = scope:actor + MERIT = minor_merit_gain + } + } + if = { + limit = { + situation:dynastic_cycle ?= { + any_situation_participant = { + this = scope:actor + } + any_situation_participant = { + this = scope:secondary_recipient + } + } + scope:secondary_recipient = { + NOT = { + top_participant_group:dynastic_cycle = { participant_group_type = undecided_movement } + } + } + scope:actor = { + NOT = { is_in_same_movement_as = { TARGET = scope:secondary_recipient } } + } + } + scope:secondary_recipient = { + top_participant_group:dynastic_cycle ?= { save_scope_as = elder_movement } + } + top_participant_group:dynastic_cycle ?= { save_scope_as = my_movement } + } + } + + option = { # I'll join + name = tgp_interaction_event.00311.a + trigger = { exists = scope:elder_movement } + tgp_dynastic_cycle_add_to_elders_movement_effect = yes + ai_chance = { + base = 100 + } + } + + option = { # Nah + name = tgp_interaction_event.00311.b + trigger = { exists = scope:elder_movement } + change_influence = major_influence_loss + scope:secondary_recipient = { + add_opinion = { + target = root + opinion = -20 + modifier = disappointed_opinion + } + } + ai_chance = { + base = 100 + modifier = { # AI will always join the movement if possible + exists = scope:elder_movement + factor = 0 + } + } + } + + option = { # Not in China + name = tgp_interaction_event.00311.c + trigger = { + NOT = { exists = scope:elder_movement } + } + ai_chance = { + base = 100 + } + } +} + +# Break with Disciple notification event +tgp_interaction_event.0032 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = tgp_interaction_event.0032.desc + + sender = scope:actor + + immediate = { + show_as_tooltip = { + scope:actor = { + remove_relation_disciple = scope:recipient + } + } + } + + option = { + name = tgp_interaction_event.0032.a + } +} + +# Secretary Director changed his own mandate +tgp_interaction_event.0041 = { + type = letter_event + opening = tgp_interaction_event.0010.opening + desc = tgp_interaction_event.0041.desc + sender = scope:actor + + immediate = { + show_as_tooltip = { + switch = { + trigger = yes + scope:placate_movements = { + set_diarchy_mandate = placate_movements + scope:actor = { + set_variable = { + name = diarch_forced_mandate + value = flag:placate_movements + } + } + } + scope:promote_might = { + set_diarchy_mandate = promote_might + scope:actor = { + set_variable = { + name = diarch_forced_mandate + value = flag:promote_might + } + } + } + scope:promote_merit = { + set_diarchy_mandate = promote_merit + scope:actor = { + set_variable = { + name = diarch_forced_mandate + value = flag:promote_merit + } + } + } + } + } + } + option = { + name = tgp_interaction_event.0041.a + scope:actor = { + tgp_activate_catalyst_against_hegemon_effect = { + HEGEMON = root + CATALYST = catalyst_diarch_mandate + } + } + } +} + +# Secretary Director trains knights +tgp_interaction_event.0042 = { + type = character_event + title = ep3_contract_event.0091.t + desc = { + desc = ep3_contract_event.0091.desc + first_valid = { + triggered_desc = { + trigger = { scope:helper = root } + desc = { + desc = ep3_contract_event.0091.desc_me + first_valid = { + triggered_desc = { + trigger = { root.prowess < high_skill_rating } + desc = ep3_contract_event.0091.desc_me_high_prowess + } + desc = ep3_contract_event.0091.desc_me_low_prowess + } + } + } + desc = { + desc = ep3_contract_event.0091.desc_helper + first_valid = { + triggered_desc = { + trigger = { scope:helper.prowess < high_skill_rating } + desc = ep3_contract_event.0091.desc_high_prowess + } + desc = ep3_contract_event.0091.desc_low_prowess + } + } + } + desc = ep3_contract_event.0091.desc_outro + } + theme = war + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:helper = root + root.prowess < high_skill_rating + } + animation = random_weapon_yield + } + triggered_animation = { + trigger = { + scope:helper = root + root.prowess >= high_skill_rating + } + animation = inspect_weapon + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess < high_skill_rating + } + animation = stunned + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess >= high_skill_rating + } + animation = disappointed + } + } + right_portrait = { + character = scope:knight + triggered_animation = { + trigger = { + scope:helper = root + root.prowess < high_skill_rating + } + animation = random_weapon_celebrate + } + triggered_animation = { + trigger = { + scope:helper = root + root.prowess >= high_skill_rating + } + animation = random_weapon_yield + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess < high_skill_rating + } + animation = random_weapon_celebrate + } + triggered_animation = { + trigger = { + scope:helper != root + scope:helper.prowess >= high_skill_rating + } + animation = random_weapon_yield + } + } + lower_left_portrait = { + trigger = { scope:helper != root } + character = scope:helper + } + lower_right_portrait = { + character = scope:task_contract_councillor + } + lower_center_portrait = { + character = scope:task_contract_councillor_liege + } + + immediate = { + scope:recipient = { + save_scope_as = task_contract_employer + cp:councillor_marshal ?= { + if = { + limit = { + this != scope:knight + } + save_scope_as = task_contract_councillor + } + } + } + cp:councillor_marshal ?= { + add_to_list = helpers_list + } + # search for anyone that could help you train them + random_court_position_holder = { + type = grand_guardian_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = fire_dragon_engineer_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = chief_qadi_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = garuda_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = court_tutor_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = master_of_horse_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = master_of_hunt_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = bodyguard_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = champion_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = executioner_court_position + add_to_list = helpers_list + } + random_court_position_holder = { + type = master_assassin_court_position + add_to_list = helpers_list + } + random_in_list = { + list = helpers_list + save_scope_as = helper + } + if = { + limit = { + NOT = { exists = scope:helper } + } + save_scope_as = helper + } + scope:helper = { + random_character_trait = { + limit = { + has_trait_category = commander + } + save_scope_as = trait_to_teach + } + } + scope:helper = { + set_signature_weapon_effect = yes + } + scope:knight = { + set_signature_weapon_effect = yes + } + } + + # steal the knight + option = { + name = ep3_contract_event.0091.a + trigger = { scope:knight = { is_landed = no } } + duel = { + skill = diplomacy + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_recruit + modifier = { + add = root.prestige_level + factor = 5 + } + send_interface_toast = { + title = ep3_contract_event.0091_won_recruit + left_icon = root + right_icon = scope:knight + add_courtier = scope:knight + change_influence = { + value = scope:knight.prowess + multiply = -4 + } + pay_short_term_gold = { + target = scope:recipient + gold = { + value = scope:knight.prowess + multiply = 5 + } + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0091_lost_recruit + send_interface_toast = { + title = ep3_contract_event.0091_lost_recruit + left_icon = root + right_icon = scope:knight + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + impatient = minor_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + callous = minor_stress_impact_loss + deceitful = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = diplomacy + } + } + } + + # teach them a trait you know + option = { + name = ep3_contract_event.0091.b + trigger = { + exists = scope:trait_to_teach + scope:knight = { + NOT = { has_trait = scope:trait_to_teach } + } + } + duel = { + skill = martial + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_trait + modifier = { + add = root.learning + } + send_interface_toast = { + title = ep3_contract_event.0091_won_trait + left_icon = root + right_icon = scope:knight + scope:knight = { + add_trait = scope:trait_to_teach + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + } + 25 = { + desc = ep3_contract_event.0091_lost + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + arrogant = minor_stress_impact_loss + stubborn = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + highest_skill = martial + } + } + } + + # let helper teach them some prowess + option = { + name = ep3_contract_event.0091.c + trigger = { + exists = scope:helper + scope:helper != root + } + scope:helper = { + duel = { + skill = prowess + target = scope:knight + 25 = { + desc = ep3_contract_event.0091_won_helper + send_interface_toast = { + title = ep3_contract_event.0091_won_helper + left_icon = root + right_icon = scope:knight + scope:knight = { + add_prowess_skill = { + value = scope:helper.prowess + subtract = scope:knight.prowess + divide = 4 + add = { + value = scope:knight.ai_boldness + divide = 10 + } + add = { + value = scope:helper.ai_boldness + divide = 10 + } + min = 2 + max = 5 + } + force_character_skill_recalculation = yes + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + } + 25 = { + desc = ep3_contract_event.0091_lost + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_gain + ambitious = minor_stress_impact_gain + humble = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + add = 100 + scope:helper.prowess > scope:knight.prowess + } + } + } + + # teach them some prowess yourself + option = { + name = ep3_contract_event.0091.d + duel = { + skill = prowess + target = scope:knight + 50 = { + desc = ep3_contract_event.0091_won + send_interface_toast = { + title = ep3_contract_event.0091_won + left_icon = root + right_icon = scope:knight + scope:knight = { + add_prowess_skill = { + value = root.prowess + subtract = scope:knight.prowess + divide = 4 + add = { + value = scope:knight.ai_boldness + divide = 10 + } + add = { + value = root.ai_boldness + divide = 10 + } + min = 1 + max = 4 + } + force_character_skill_recalculation = yes + } + } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + add = { + value = scope:knight.ai_energy + divide = -10 + } + } + modifier = { + add = { + value = root.ai_energy + divide = -10 + } + } + } + 50 = { + desc = ep3_contract_event.0091_lost + send_interface_toast = { + title = ep3_contract_event.0091_lost + left_icon = root + right_icon = scope:knight + } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + modifier = { + add = { + value = scope:knight.ai_energy + divide = 10 + } + } + modifier = { + add = { + value = root.ai_energy + divide = 10 + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_loss + ambitious = minor_stress_impact_loss + humble = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + add = 100 + prowess > scope:knight.prowess + } + } + } +} diff --git a/events/dlc/tgp/tgp_japan_career_events.txt b/events/dlc/tgp/tgp_japan_career_events.txt new file mode 100644 index 00000000..38962a15 --- /dev/null +++ b/events/dlc/tgp/tgp_japan_career_events.txt @@ -0,0 +1,125 @@ +################################### +# JAPAN CAREER EVENTS +################################### +namespace = tgp_japan_career + +### EVENT LIST #################################################################### +## 0001 - Intro in 1066 +## 0002 - Intro in 1178 +################################################################################### + +# Intro Event - Who are you playing as and what is your situation +# Also acts as an introduction when you start playing in Japan +tgp_japan_career.0001 = { + type = character_event + window = big_event_window + title = tgp_japan_career.0001.t + desc = { + desc = tgp_japan_career.0001.desc + first_valid = { + triggered_desc = { + trigger = { has_title = title:k_chrysanthemum_throne } #is tenno + desc = tgp_japan_career.0001.tenno_desc + } + triggered_desc = { + trigger = { has_title = title:e_japan } #is kampaku + desc = tgp_japan_career.0001.kampaku_desc + } + triggered_desc = { + trigger = { government_has_flag = government_is_japan_feudal } #is soryo + desc = tgp_japan_career.0001.soryo_desc + } + triggered_desc = { + trigger = { government_has_flag = government_is_japan_administrative } #is ritsuryo + desc = tgp_japan_career.0001.ritsuryo_desc + } + } + desc = tgp_japan_career.0001.desc_2 + } + theme = diplomacy + override_icon = { + trigger = { government_has_flag = government_is_japan_feudal } + reference ="gfx/interface/icons/event_types/type_war.dds" + } + override_header_background = { + trigger = { government_has_flag = government_is_japan_feudal } + reference = "gfx/interface/window_event/event_header_red.dds" + } + override_background = { + trigger = { + has_title = title:k_chrysanthemum_throne + } + reference = tgp_garden_asia + } + override_background = { + trigger = { + has_title = title:e_japan + } + reference = tgp_study_japan + } + override_background = { + trigger = { + government_has_flag = government_is_japan_feudal + } + reference = tgp_crossroad_inn_asia + } + override_background = { + trigger = { + government_has_flag = government_is_japan_administrative + } + reference = bedchamber + } + + + left_portrait = { + character = root + triggered_animation = { + trigger = { + government_has_flag = government_is_japan_feudal #Soryo ruler should have their sword out + } + animation = inspect_weapon + } + animation = chancellor + } + + right_portrait = { + character = player_heir + triggered_animation = { + trigger = { + government_has_flag = government_is_japan_feudal #Soryo ruler should have their sword out + } + animation = horse_archer_aggressive + camera = camera_event_scheme_vs_left_look_left + } + animation = holding_scrolls + } + + trigger = { + has_tgp_dlc_trigger = yes + government_is_japanese_trigger = yes + } + + immediate = { + # Scopes + save_scope_as = new_ruler + house ?= { save_scope_as = ruler_family } + top_liege = { save_scope_as = kampaku } + player_heir ?= { save_scope_as = heir } + } + + option = { + name = tgp_japan_career.0001.a + add_character_modifier = { + modifier = tgp_japan_peace_modifier + years = 20 + } + } + + option = { + name = tgp_japan_career.0001.b + add_character_modifier = { + modifier = tgp_japan_war_modifier + years = 20 + } + } +} diff --git a/events/dlc/tgp/tgp_japan_decision_events.txt b/events/dlc/tgp/tgp_japan_decision_events.txt new file mode 100644 index 00000000..39703a34 --- /dev/null +++ b/events/dlc/tgp/tgp_japan_decision_events.txt @@ -0,0 +1,3317 @@ +namespace = tgp_japan_decision + +# tgp_japan_establish_house_fief_decision + +scripted_effect tgp_establish_house_fief_save_scopes_effect = { + top_liege ?= { save_scope_as = regent } + save_scope_as = new_head + house = { + save_scope_as = old_house + house_head = { save_scope_as = old_head } + } + random_held_title = { + limit = { is_noble_family_title = yes } + save_scope_as = old_nf_title + } +} + +tgp_japan_decision.9001 = { # CHOOSE HOUSE NAME EVENT - WITH WIDGET + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { has_character_flag = establish_house_fief } + desc = tgp_japan_decision.9001.t.fief + } + desc = tgp_japan_decision.9001.t.cadet + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + this != scope:old_head + has_character_flag = establish_house_fief + } + desc = tgp_japan_decision.9001.desc.fief_split_house + } + desc = tgp_japan_decision.9001.desc.cadet + } + first_valid = { + triggered_desc = { + trigger = { + has_character_flag = establish_house_fief + var:petition_liege_house_fief_allowed_flag ?= top_liege + top_liege = { government_allows = administrative } + } + desc = tgp_japan_decision.9001.desc.permission + } + triggered_desc = { + trigger = { + has_character_flag = establish_house_fief + top_liege = { government_allows = administrative } + } + desc = tgp_japan_decision.9001.desc.crime + } + triggered_desc = { + trigger = { has_character_flag = establish_house_fief } + desc = tgp_japan_decision.9001.desc.feudal + } + } + desc = tgp_japan_decision.9001.desc.fief_name + } + theme = realm + + left_portrait = { + character = root + animation = thinking + } + lower_left_portrait = { + character = scope:old_head + trigger = { + NOR = { + scope:regent ?= this + root = this + } + } + } + lower_right_portrait = scope:regent + + #NAMING WIDGET + widget = { + gui = "event_window_widget_enter_text" + container = "dynamic_birth_name" + controller = { + type = text + data = { + key = new_japanese_house_name + default = { + localization_key = dynn_Abe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Abe } } + } + default = { + localization_key = dynn_Adachi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Adachi } } + } + default = { + localization_key = dynn_Aida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Aida } } + } + default = { + localization_key = dynn_Aihara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Aihara } } + } + default = { + localization_key = dynn_AikO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_AikO_ } } + } + default = { + localization_key = dynn_Akamatsu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akamatsu } } + } + default = { + localization_key = dynn_Akasu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akasu } } + } + default = { + localization_key = dynn_Akata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akata } } + } + default = { + localization_key = dynn_Akahori + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akahori } } + } + default = { + localization_key = dynn_Akatsuka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akatsuka } } + } + default = { + localization_key = dynn_Akazawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akazawa } } + } + default = { + localization_key = dynn_Akiyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akiyama } } + } + default = { + localization_key = dynn_Akizuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Akizuki } } + } + default = { + localization_key = dynn_Amago + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Amago } } + } + default = { + localization_key = dynn_Amano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Amano } } + } + default = { + localization_key = dynn_Amenomori + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Amenomori } } + } + default = { + localization_key = dynn_Anami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Anami } } + } + default = { + localization_key = dynn_Ano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ano } } + } + default = { + localization_key = dynn_Anzai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Anzai } } + } + default = { + localization_key = dynn_Aoyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Aoyama } } + } + default = { + localization_key = dynn_Asaba + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asaba } } + } + default = { + localization_key = dynn_Asaka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asaka } } + } + default = { + localization_key = dynn_Asakura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asakura } } + } + default = { + localization_key = dynn_Asami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asami } } + } + default = { + localization_key = dynn_Asano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asano } } + } + default = { + localization_key = dynn_Asari + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asari } } + } + default = { + localization_key = dynn_Ashida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ashida } } + } + default = { + localization_key = dynn_Ashikaga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ashikaga } } + } + default = { + localization_key = dynn_Ashina_JP + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ashina_JP } } + } + default = { + localization_key = dynn_Aso + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Aso } } + } + default = { + localization_key = dynn_Asuke + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Asuke } } + } + default = { + localization_key = dynn_Atobe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Atobe } } + } + default = { + localization_key = dynn_Awata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Awata } } + } + default = { + localization_key = dynn_Bessho + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Bessho } } + } + default = { + localization_key = dynn_Chiba + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Chiba } } + } + default = { + localization_key = dynn_Chichibu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Chichibu } } + } + default = { + localization_key = dynn_ChO_sokabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ChO_sokabe } } + } + default = { + localization_key = dynn_Date + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Date } } + } + default = { + localization_key = dynn_Deura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Deura } } + } + default = { + localization_key = dynn_Doi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Doi } } + } + default = { + localization_key = dynn_Ebina + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ebina } } + } + default = { + localization_key = dynn_Ema + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ema } } + } + default = { + localization_key = dynn_Fukushima + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Fukushima } } + } + default = { + localization_key = dynn_Furuichi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Furuichi } } + } + default = { + localization_key = dynn_Hachisuka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hachisuka } } + } + default = { + localization_key = dynn_Haga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Haga } } + } + default = { + localization_key = dynn_HanyU__2 + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_HanyU__2 } } + } + default = { + localization_key = dynn_Hara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hara } } + } + default = { + localization_key = dynn_Harada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Harada } } + } + default = { + localization_key = dynn_Haraishi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Haraishi } } + } + default = { + localization_key = dynn_Hasuike + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hasuike } } + } + default = { + localization_key = dynn_Hatano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hatano } } + } + default = { + localization_key = dynn_Hatakeyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hatakeyama } } + } + default = { + localization_key = dynn_Hatta + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hatta } } + } + default = { + localization_key = dynn_Hattori + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hattori } } + } + default = { + localization_key = dynn_Hayami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hayami } } + } + default = { + localization_key = dynn_Hayashi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hayashi } } + } + default = { + localization_key = dynn_Henmi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Henmi } } + } + default = { + localization_key = dynn_Higuchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Higuchi } } + } + default = { + localization_key = dynn_Hiki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hiki } } + } + default = { + localization_key = dynn_Hikida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hikida } } + } + default = { + localization_key = dynn_Hiraga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hiraga } } + } + default = { + localization_key = dynn_Hirukawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hirukawa } } + } + default = { + localization_key = dynn_Hizume + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hizume } } + } + default = { + localization_key = dynn_HO_jO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_HO_jO_ } } + } + default = { + localization_key = dynn_Honda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Honda } } + } + default = { + localization_key = dynn_HonjO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_HonjO_ } } + } + default = { + localization_key = dynn_Hoshina + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hoshina } } + } + default = { + localization_key = dynn_Hosokawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hosokawa } } + } + default = { + localization_key = dynn_Hotta + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hotta } } + } + default = { + localization_key = dynn_Hozumi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Hozumi } } + } + default = { + localization_key = dynn_Iba_JP + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Iba_JP } } + } + default = { + localization_key = dynn_Ichiji + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ichiji } } + } + default = { + localization_key = dynn_Iga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Iga } } + } + default = { + localization_key = dynn_Ii + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ii } } + } + default = { + localization_key = dynn_Iida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Iida } } + } + default = { + localization_key = dynn_Iinuma + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Iinuma } } + } + default = { + localization_key = dynn_Ikeda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ikeda } } + } + default = { + localization_key = dynn_Ikoma + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ikoma } } + } + default = { + localization_key = dynn_Imai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Imai } } + } + default = { + localization_key = dynn_Imagawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Imagawa } } + } + default = { + localization_key = dynn_Ina + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ina } } + } + default = { + localization_key = dynn_Inage + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Inage } } + } + default = { + localization_key = dynn_Inazawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Inazawa } } + } + default = { + localization_key = dynn_Inomata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Inomata } } + } + default = { + localization_key = dynn_Inoue + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Inoue } } + } + default = { + localization_key = dynn_IntO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_IntO_ } } + } + default = { + localization_key = dynn_Irie + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Irie } } + } + default = { + localization_key = dynn_Irobe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Irobe } } + } + default = { + localization_key = dynn_Isa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Isa } } + } + default = { + localization_key = dynn_Ishikawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ishikawa } } + } + default = { + localization_key = dynn_Ishitani + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ishitani } } + } + default = { + localization_key = dynn_Isshiki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Isshiki } } + } + default = { + localization_key = dynn_Itakura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Itakura } } + } + default = { + localization_key = dynn_ItO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ItO_ } } + } + default = { + localization_key = dynn_ItO__2 + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ItO__2 } } + } + default = { + localization_key = dynn_Itoga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Itoga } } + } + default = { + localization_key = dynn_Izumi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Izumi } } + } + default = { + localization_key = dynn_Iwamatsu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Iwamatsu } } + } + default = { + localization_key = dynn_Jinbo + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Jinbo } } + } + default = { + localization_key = dynn_Kagami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kagami } } + } + default = { + localization_key = dynn_Kagawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kagawa } } + } + default = { + localization_key = dynn_Kaji + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kaji } } + } + default = { + localization_key = dynn_Kajiwara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kajiwara } } + } + default = { + localization_key = dynn_Kamachi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kamachi } } + } + default = { + localization_key = dynn_Kambara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kambara } } + } + default = { + localization_key = dynn_Kanazu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kanazu } } + } + default = { + localization_key = dynn_Kanbe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kanbe } } + } + default = { + localization_key = dynn_Kaneda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kaneda } } + } + default = { + localization_key = dynn_Kaneko + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kaneko } } + } + default = { + localization_key = dynn_Kano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kano } } + } + default = { + localization_key = dynn_Kasai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kasai } } + } + default = { + localization_key = dynn_Kasuga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kasuga } } + } + default = { + localization_key = dynn_Kasukabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kasukabe } } + } + default = { + localization_key = dynn_Katagiri + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Katagiri } } + } + default = { + localization_key = dynn_Kataoka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kataoka } } + } + default = { + localization_key = dynn_Katsuta + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Katsuta } } + } + default = { + localization_key = dynn_Kawagoe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kawagoe } } + } + default = { + localization_key = dynn_Kawasaki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kawasaki } } + } + default = { + localization_key = dynn_Kawazu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kawazu } } + } + default = { + localization_key = dynn_Kida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kida } } + } + default = { + localization_key = dynn_Kikkawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kikkawa } } + } + default = { + localization_key = dynn_Kikuchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kikuchi } } + } + default = { + localization_key = dynn_Kimotsuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kimotsuki } } + } + default = { + localization_key = dynn_Kira + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kira } } + } + default = { + localization_key = dynn_Kiso + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kiso } } + } + default = { + localization_key = dynn_Kitahara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kitahara } } + } + default = { + localization_key = dynn_KO_no + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KO_no } } + } + default = { + localization_key = dynn_KO_sokabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KO_sokabe } } + } + default = { + localization_key = dynn_Kobayakawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kobayakawa } } + } + default = { + localization_key = dynn_Kodama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kodama } } + } + default = { + localization_key = dynn_Kokubu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kokubu } } + } + default = { + localization_key = dynn_Kosaka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kosaka } } + } + default = { + localization_key = dynn_Kuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kuki } } + } + default = { + localization_key = dynn_Kumabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kumabe } } + } + default = { + localization_key = dynn_Kumagai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kumagai } } + } + default = { + localization_key = dynn_Kumasaka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kumasaka } } + } + default = { + localization_key = dynn_Kurita + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kurita } } + } + default = { + localization_key = dynn_Kutsuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kutsuki } } + } + default = { + localization_key = dynn_Maki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Maki } } + } + default = { + localization_key = dynn_Makino + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Makino } } + } + default = { + localization_key = dynn_Masuda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Masuda } } + } + default = { + localization_key = dynn_Matano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Matano } } + } + default = { + localization_key = dynn_Matsudaira + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Matsudaira } } + } + default = { + localization_key = dynn_Matsura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Matsura } } + } + default = { + localization_key = dynn_Migata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Migata } } + } + default = { + localization_key = dynn_Mikata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mikata } } + } + default = { + localization_key = dynn_Mimura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mimura } } + } + default = { + localization_key = dynn_Minase + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Minase } } + } + default = { + localization_key = dynn_Misawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Misawa } } + } + default = { + localization_key = dynn_Mitai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mitai } } + } + default = { + localization_key = dynn_Mitoya + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mitoya } } + } + default = { + localization_key = dynn_Miura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Miura } } + } + default = { + localization_key = dynn_Miyoshi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Miyoshi } } + } + default = { + localization_key = dynn_Mizokui + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mizokui } } + } + default = { + localization_key = dynn_Mochizuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mochizuki } } + } + default = { + localization_key = dynn_Mogami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mogami } } + } + default = { + localization_key = dynn_Mokusai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mokusai } } + } + default = { + localization_key = dynn_Momonoi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Momonoi } } + } + default = { + localization_key = dynn_Mori_JP # Not prounounced "Mōri" yet + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Mori_JP } } + } + default = { + localization_key = dynn_Murakami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Murakami } } + } + default = { + localization_key = dynn_Murayama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Murayama } } + } + default = { + localization_key = dynn_Nagae + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nagae } } + } + default = { + localization_key = dynn_Nagao + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nagao } } + } + default = { + localization_key = dynn_Nagasa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nagasa } } + } + default = { + localization_key = dynn_NakajO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_NakajO_ } } + } + default = { + localization_key = dynn_Nakamura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nakamura } } + } + default = { + localization_key = dynn_Nakano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nakano } } + } + default = { + localization_key = dynn_Namba + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Namba } } + } + default = { + localization_key = dynn_Namekata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Namekata } } + } + default = { + localization_key = dynn_Nanbu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nanbu } } + } + default = { + localization_key = dynn_NanjO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_NanjO_ } } + } + default = { + localization_key = dynn_Narita + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Narita } } + } + default = { + localization_key = dynn_Nasu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nasu } } + } + default = { + localization_key = dynn_Natsume + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Natsume } } + } + default = { + localization_key = dynn_Nemoto + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nemoto } } + } + default = { + localization_key = dynn_Nezu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nezu } } + } + default = { + localization_key = dynn_Nikaido + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nikaido } } + } + default = { + localization_key = dynn_Niki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Niki } } + } + default = { + localization_key = dynn_Nissai + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nissai } } + } + default = { + localization_key = dynn_Nogi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nogi } } + } + default = { + localization_key = dynn_Nomoto + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nomoto } } + } + default = { + localization_key = dynn_Nose + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nose } } + } + default = { + localization_key = dynn_Noyo + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Noyo } } + } + default = { + localization_key = dynn_Nishina + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nishina } } + } + default = { + localization_key = dynn_Nitta + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nitta } } + } + default = { + localization_key = dynn_Niwa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Niwa } } + } + default = { + localization_key = dynn_O_ba + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_ba } } + } + default = { + localization_key = dynn_O_hara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_hara } } + } + default = { + localization_key = dynn_O_i + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_i } } + } + default = { + localization_key = dynn_O_kawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_kawa } } + } + default = { + localization_key = dynn_O_mi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_mi } } + } + default = { + localization_key = dynn_O_miya + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_miya } } + } + default = { + localization_key = dynn_O_no + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_no } } + } + default = { + localization_key = dynn_O_suga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_suga } } + } + default = { + localization_key = dynn_O_ta + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_ta } } + } + default = { + localization_key = dynn_O_tawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_tawa } } + } + default = { + localization_key = dynn_O_tomo + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_tomo } } + } + default = { + localization_key = dynn_O_uchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_uchi } } + } + default = { + localization_key = dynn_O_zone + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_zone } } + } + default = { + localization_key = dynn_Obata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Obata } } + } + default = { + localization_key = dynn_Obu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Obu } } + } + default = { + localization_key = dynn_Oda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Oda } } + } + default = { + localization_key = dynn_Odagiri + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Odagiri } } + } + default = { + localization_key = dynn_Ogasawara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ogasawara } } + } + default = { + localization_key = dynn_Ogata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ogata } } + } + default = { + localization_key = dynn_Ogawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ogawa } } + } + default = { + localization_key = dynn_Okabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Okabe } } + } + default = { + localization_key = dynn_Okada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Okada } } + } + default = { + localization_key = dynn_Okazaki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Okazaki } } + } + default = { + localization_key = dynn_Onodera + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Onodera } } + } + default = { + localization_key = dynn_Onozaki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Onozaki } } + } + default = { + localization_key = dynn_Osada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Osada } } + } + default = { + localization_key = dynn_Oyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Oyama } } + } + default = { + localization_key = dynn_Oyamada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Oyamada } } + } + default = { + localization_key = dynn_Sado + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sado } } + } + default = { + localization_key = dynn_Sagae + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sagae } } + } + default = { + localization_key = dynn_Sagara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sagara } } + } + default = { + localization_key = dynn_Saji + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Saji } } + } + default = { + localization_key = dynn_Sakuma + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sakuma } } + } + default = { + localization_key = dynn_Sanada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sanada } } + } + default = { + localization_key = dynn_Sano + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sano } } + } + default = { + localization_key = dynn_Sasaki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sasaki } } + } + default = { + localization_key = dynn_Satake + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Satake } } + } + default = { + localization_key = dynn_Satomi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Satomi } } + } + default = { + localization_key = dynn_Sawara + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sawara } } + } + default = { + localization_key = dynn_Seki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Seki } } + } + default = { + localization_key = dynn_Seno_o + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Seno_o } } + } + default = { + localization_key = dynn_Shiba + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shiba } } + } + default = { + localization_key = dynn_Shibuya + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shibuya } } + } + default = { + localization_key = dynn_Shida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shida } } + } + default = { + localization_key = dynn_Shiga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shiga } } + } + default = { + localization_key = dynn_Shima + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shima } } + } + default = { + localization_key = dynn_Shimazu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shimazu } } + } + default = { + localization_key = dynn_ShimokO_be + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ShimokO_be } } + } + default = { + localization_key = dynn_Shinagawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shinagawa } } + } + default = { + localization_key = dynn_ShingU_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ShingU_ } } + } + default = { + localization_key = dynn_Shinmen + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shinmen } } + } + default = { + localization_key = dynn_Shioda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shioda } } + } + default = { + localization_key = dynn_Shionoya + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shionoya } } + } + default = { + localization_key = dynn_Shiratori + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Shiratori } } + } + default = { + localization_key = dynn_SO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SO_ } } + } + default = { + localization_key = dynn_Soga_2 + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Soga } } + } + default = { + localization_key = dynn_Sogabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sogabe } } + } + default = { + localization_key = dynn_SogO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SogO_ } } + } + default = { + localization_key = dynn_SO_ma + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SO_ma } } + } + default = { + localization_key = dynn_SO_sa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SO_sa } } + } + default = { + localization_key = dynn_Sugime + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sugime } } + } + default = { + localization_key = dynn_Sugimoto + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Sugimoto } } + } + default = { + localization_key = dynn_Suzuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Suzuki } } + } + default = { + localization_key = dynn_Tada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tada } } + } + default = { + localization_key = dynn_Taguchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Taguchi } } + } + default = { + localization_key = dynn_Takaoka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Takaoka } } + } + default = { + localization_key = dynn_Takayasu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Takayasu } } + } + default = { + localization_key = dynn_Takeda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Takeda } } + } + default = { + localization_key = dynn_Takeishi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Takeishi } } + } + default = { + localization_key = dynn_Takezaki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Takezaki } } + } + default = { + localization_key = dynn_Tamura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tamura } } + } + default = { + localization_key = dynn_Tanaka + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tanaka } } + } + default = { + localization_key = dynn_Tashiro + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tashiro } } + } + default = { + localization_key = dynn_TO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_TO_ } } + } + default = { + localization_key = dynn_TO_gO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_TO_gO_ } } + } + default = { + localization_key = dynn_Togashi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Togashi } } + } + default = { + localization_key = dynn_Toida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Toida } } + } + default = { + localization_key = dynn_Toki_JP + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Toki_JP } } + } + default = { + localization_key = dynn_Tokiwa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tokiwa } } + } + default = { + localization_key = dynn_Tokuda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tokuda } } + } + default = { + localization_key = dynn_Tokugawa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tokugawa } } + } + default = { + localization_key = dynn_Tomono + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tomono } } + } + default = { + localization_key = dynn_Tomura + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tomura } } + } + default = { + localization_key = dynn_Toshima + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Toshima } } + } + default = { + localization_key = dynn_Tsuchiya + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tsuchiya } } + } + default = { + localization_key = dynn_Tsutsumi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tsutsumi } } + } + default = { + localization_key = dynn_Toyoda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Toyoda } } + } + default = { + localization_key = dynn_Toyoyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Toyoyama } } + } + default = { + localization_key = dynn_Ueda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ueda } } + } + default = { + localization_key = dynn_Uesugi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Uesugi } } + } + default = { + localization_key = dynn_Ui + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ui } } + } + default = { + localization_key = dynn_Uji_ie + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Uji_ie } } + } + default = { + localization_key = dynn_Unno + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Unno } } + } + default = { + localization_key = dynn_Urakami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Urakami } } + } + default = { + localization_key = dynn_Usami + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Usami } } + } + default = { + localization_key = dynn_Ushimaru + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ushimaru } } + } + default = { + localization_key = dynn_Ushioda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Ushioda } } + } + default = { + localization_key = dynn_Usuki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Usuki } } + } + default = { + localization_key = dynn_Wada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Wada } } + } + default = { + localization_key = dynn_Wasada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Wasada } } + } + default = { + localization_key = dynn_Washizu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Washizu } } + } + default = { + localization_key = dynn_Watanabe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Watanabe } } + } + default = { + localization_key = dynn_Watari + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Watari } } + } + default = { + localization_key = dynn_Yamada + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamada } } + } + default = { + localization_key = dynn_Yamaga + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamaga } } + } + default = { + localization_key = dynn_Yamagata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamagata } } + } + default = { + localization_key = dynn_Yamaguchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamaguchi } } + } + default = { + localization_key = dynn_Yamamoto + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamamoto } } + } + default = { + localization_key = dynn_Yamana + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamana } } + } + default = { + localization_key = dynn_Yamauchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yamauchi } } + } + default = { + localization_key = dynn_Yashiro + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yashiro } } + } + default = { + localization_key = dynn_Yasu + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yasu } } + } + default = { + localization_key = dynn_Yasuda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yasuda } } + } + default = { + localization_key = dynn_Yasutomi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yasutomi } } + } + default = { + localization_key = dynn_Yoda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yoda } } + } + default = { + localization_key = dynn_Yokoyama + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yokoyama } } + } + default = { + localization_key = dynn_Yomoda + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yomoda } } + } + default = { + localization_key = dynn_Yoshida + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yoshida } } + } + default = { + localization_key = dynn_YU_ki + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_YU_ki } } + } + default = { + localization_key = dynn_Yuasa + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yuasa } } + } + default = { + localization_key = dynn_Yuri + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Yuri } } + } + ### KYOTO + default = { + localization_key = dynn_Awata + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Awata } } + } + default = { + localization_key = dynn_Awataguchi + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Awataguchi } } + } + default = { + localization_key = dynn_GojO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_GojO_ } } + } + default = { + localization_key = dynn_IchijO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_IchijO_ } } + } + default = { + localization_key = dynn_Kitabatake + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Kitabatake } } + } + default = { + localization_key = dynn_Konoe + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Konoe } } + } + default = { + localization_key = dynn_KyO_goku + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KyO_goku } } + } + default = { + localization_key = dynn_Nakamikado + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Nakamikado } } + } + default = { + localization_key = dynn_NijO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_NijO_ } } + } + default = { + localization_key = dynn_O_inomikado + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_O_inomikado } } + } + default = { + localization_key = dynn_Rokkaku + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Rokkaku } } + } + default = { + localization_key = dynn_RokujO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_RokujO_ } } + } + default = { + localization_key = dynn_SanjO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SanjO_ } } + } + default = { + localization_key = dynn_ShijO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_ShijO_ } } + } + default = { + localization_key = dynn_Tsuchimikado + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_Tsuchimikado } } + } + ### FUJIWARA + default = { + localization_key = dynn_AndO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_AndO_ } } + } + default = { + localization_key = dynn_EndO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_EndO_ } } + } + default = { + localization_key = dynn_GotO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_GotO_ } } + } + default = { + localization_key = dynn_KatO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KatO_ } } + } + default = { + localization_key = dynn_KondO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KondO_ } } + } + default = { + localization_key = dynn_KudO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_KudO_ } } + } + default = { + localization_key = dynn_MutO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_MutO_ } } + } + default = { + localization_key = dynn_SaitO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SaitO_ } } + } + default = { + localization_key = dynn_SatO_ + trigger = { is_target_in_variable_list = { name = japanese_house_names target = flag:dynn_SatO_ } } + } + ### OTHER + default = { + localization_key = japanese_house_domicile_barony + trigger = { + exists = scope:domicile_barony + trigger_if = { + limit = { has_variable_list = japanese_house_names } + variable_list_size = { + name = japanese_house_names + value < 2 + } + } + } + } + default = { + localization_key = japanese_house_random_barony + trigger = { + exists = scope:random_barony + NOT = { has_character_flag = found_cadet_branch } + trigger_if = { + limit = { has_variable_list = japanese_house_names } + variable_list_size = { + name = japanese_house_names + value < 2 + } + } + } + } + default = { + localization_key = japanese_house_first_name + trigger = { + exists = scope:old_head + has_character_flag = found_cadet_branch + trigger_if = { + limit = { has_variable_list = japanese_house_names } + variable_list_size = { + name = japanese_house_names + value < 2 + } + } + } + } + default = { + localization_key = japanese_house_primary_county + trigger = { + exists = scope:primary_county + trigger_if = { + limit = { has_variable_list = japanese_house_names } + variable_list_size = { + name = japanese_house_names + value < 3 + } + } + } + } + default = { + localization_key = japanese_house_domicile_county + trigger = { + exists = scope:domicile_county + trigger_if = { + limit = { has_variable_list = japanese_house_names } + variable_list_size = { + name = japanese_house_names + value < 3 + } + } + } + } + } + } + setup_scope = { + root = { save_scope_as = text_target } + } + } + + immediate = { + top_liege = { save_scope_as = regent } + save_scope_as = new_head + save_scope_as = new_house_head # don't ask + house = { + save_scope_as = old_house + house_head = { save_scope_as = old_head } + } + if = { + limit = { domicile.domicile_location.county.holder ?= root } + domicile.domicile_location.barony = { + save_scope_as = domicile_barony + county = { save_scope_as = domicile_county } + } + } + else_if = { + limit = { + is_landed = no + scope:old_head.domicile.domicile_location.county.holder ?= scope:old_head + } + scope:old_head.domicile.domicile_location.barony = { + save_scope_as = domicile_barony + county = { save_scope_as = domicile_county } + } + } + else_if = { + limit = { is_landed = yes } + save_scope_as = land_haver + } + else = { + limit = { house.house_head = { is_landed = yes } } + house.house_head = { save_scope_as = land_haver } + } + scope:land_haver.capital_county ?= { + save_scope_as = primary_county + random_county_province = { + limit = { + NOT = { has_holding_type = church_holding } + } + alternative_limit = { always = yes } + barony = { save_scope_as = random_barony } + } + } + hidden_effect = { + if = { + limit = { + NOT = { has_character_flag = found_cadet_branch } + } + if = { + limit = { domicile.domicile_location.county ?= title:c_yamashiro } + while = { + count = 3 + assign_japanese_house_name_options_kyoto_effect = yes + } + } + else = { + while = { + count = 3 + assign_japanese_house_name_options_effect = yes + } + } + } + else = { + if = { + limit = { domicile.domicile_location.county ?= title:c_yamashiro } + while = { + count = 1 + assign_japanese_house_name_options_kyoto_effect = yes + } + } + else = { + while = { + count = 1 + assign_japanese_house_name_options_effect = yes + } + } + } + } + if = { + limit = { is_ai = yes } + random_list = { + 10 = { + trigger = { has_variable_list = japanese_house_names } + random_in_list = { + variable = japanese_house_names + save_scope_as = house_name + root = { + set_variable = { + name = new_japanese_house_name + value = scope:house_name + } + } + } + } + 1 = { + trigger = { exists = scope:domicile_barony } + set_variable = { + name = new_japanese_house_name + value = flag:japanese_house_domicile_barony + } + } + 1 = { + trigger = { exists = scope:domicile_county } + set_variable = { + name = new_japanese_house_name + value = flag:japanese_house_domicile_county + } + } + 1 = { + trigger = { exists = scope:random_barony } + set_variable = { + name = new_japanese_house_name + value = flag:japanese_house_random_barony + } + } + 1 = { + trigger = { + exists = scope:old_head + has_character_flag = found_cadet_branch + government_allows = administrative + } + set_variable = { + name = new_japanese_house_name + value = flag:japanese_house_first_name + } + } + } + } + switch = { + trigger = has_character_flag + establish_house_fief = { + tgp_establish_house_fief_save_scopes_effect = yes + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_adopting_feudal_government" + } + fallback = { + play_music_cue = "mx_cue_low_key_positive" + } + } + } + + option = { + name = { + trigger = { has_character_flag = establish_house_fief } + text = tgp_japan_decision.9001.a.fief + } + name = { + trigger = { has_character_flag = found_cadet_branch } + text = tgp_japan_decision.9001.a.cadet + } + } + + after = { + clear_variable_list = japanese_house_names + if = { + limit = { + NOT = { has_variable = new_japanese_house_name } + } + if = { + limit = { is_ai = no } + set_variable = { + name = new_japanese_house_name + value = flag:custom + } + } + } + switch = { + trigger = has_character_flag + found_cadet_branch = { + found_cadet_house_decision_effect = { + CHARACTER = root + PRESTIGE = minor_prestige_gain + } + #scope:new_title ?= { set_title_name_dynamic = japanese_noble_family_name } + } + establish_house_fief = { + japan_establish_house_fief_effect = yes + } + fallback = { + found_cadet_house_decision_effect = { + CHARACTER = root + PRESTIGE = major_prestige_gain + } + #scope:new_title ?= { set_title_name_dynamic = japanese_noble_family_name } + } + } + switch = { + trigger = has_character_flag + found_cadet_branch = { remove_character_flag = found_cadet_branch } + establish_house_fief = { remove_character_flag = establish_house_fief } + } + if = { # Help AI with Manors to propogate Soryo + limit = { + is_ai = yes + exists = scope:new_title + exists = domicile + exists = scope:old_head.domicile + } + scope:old_head.domicile = { + if = { + limit = { + has_domicile_building = japanese_manor_main_02 + root.culture ?= { has_innovation = innovation_manorialism } + } + add_domicile_building = japanese_manor_main_03 + } + else_if = { + limit = { + has_domicile_building = japanese_manor_main_03 + root.culture ?= { has_innovation = innovation_development_03 } + } + add_domicile_building = japanese_manor_main_04 + } + else_if = { + limit = { + has_domicile_building = japanese_manor_main_04 + root.culture ?= { has_innovation = innovation_cranes } + } + add_domicile_building = japanese_manor_main_05 + } + else_if = { + limit = { + has_domicile_building = japanese_manor_main_05 + root.culture ?= { has_innovation = innovation_cranes } + } + add_domicile_building = japanese_manor_main_06 + } + } + } + if = { # JOIN BLOC + limit = { exists = scope:old_house.house_confederation } + house = { + tgp_join_house_bloc_effect = { + INVITER = scope:old_house + OPINION = flag:no + } + set_cadet_aspiration_cooldown_effect = yes + } + } + } +} + +tgp_japan_decision.9002 = { # SAME CLAN EVENT - NO WIDGET + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { is_landed = no } + desc = tgp_japan_decision.9002.t.landless + } + desc = tgp_japan_decision.9002.t + } + } + desc = { + desc = tgp_japan_decision.9002.desc + first_valid = { + triggered_desc = { + trigger = { is_landed = no } + desc = tgp_japan_decision.9002.desc.landless + } + desc = tgp_japan_decision.9002.desc.landed + } + first_valid = { + triggered_desc = { + trigger = { + var:petition_liege_house_fief_allowed_flag ?= top_liege + top_liege = { government_allows = administrative } + } + desc = tgp_japan_decision.9001.desc.permission + } + triggered_desc = { + trigger = { + top_liege = { government_allows = administrative } + } + desc = tgp_japan_decision.9001.desc.crime + } + desc = tgp_japan_decision.9001.desc.feudal + } + } + theme = realm + left_portrait = { + character = root + animation = thinking + } + lower_right_portrait = scope:regent + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_adopting_feudal_government" + tgp_establish_house_fief_save_scopes_effect = yes + japan_establish_house_fief_effect = yes + } + + option = { + name = tgp_japan_decision.9002.a + } +} + +tgp_japan_decision.9005 = { # NOTIFICATION FOR OLD HOUSE HEADS + type = character_event + title = { + triggered_desc = { + trigger = { + scope:new_head = { is_landed = no } + } + desc = tgp_japan_decision.9005.t.landless + } + desc = tgp_japan_decision.9005.t + } + desc = tgp_japan_decision.9005.desc + theme = realm + + left_portrait = { + character = scope:new_head + animation = war_over_tie + } + + trigger = { + is_ai = no + NOT = { scope:new_head ?= this } + } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_adopting_feudal_government" + show_as_tooltip = { + scope:new_head = { + set_house = scope:new_head.house + #get_title = scope:new_nf_title + change_government = japan_feudal_government + if = { + limit = { + NOT = { var:petition_liege_house_fief_allowed_flag ?= scope:regent } + } + reverse_add_opinion = { + modifier = admin_soryo_conquest_crime + target = scope:regent + } + } + } + } + } + + option = { + name = tgp_japan_decision.9005.a + } +} + +# tgp_japan_become_shogun_decision + +tgp_japan_decision.9101 = { + type = character_event + window = fullscreen_event + title = tgp_japan_decision.9101.t + desc = tgp_japan_decision.9101.desc + theme = crown + override_background = { reference = tgp_fullscreen_japanese_shogunate } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = devoted } + animation = war_over_win + } + animation = japanese_war_fan + } + right_portrait = { + character = scope:ceremonial_liege + animation = holding_hu + } + + immediate = { + save_scope_as = shogun + tgp_save_realm_ceremonial_liege_effect = yes + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + if = { + limit = { + any_vassal = { + is_landed = yes + has_government = japan_administrative_government + highest_held_title_tier >= tier_county + } + } + custom_tooltip = tgp_japan_become_shogun_decision_vassal_revocation_effect + } + # Inform Vassals + every_vassal_or_below = { + limit = { + is_ruler = yes + } + trigger_event = tgp_japan_decision.9102 + } + # Rewards + japanese_become_shogun_reward_effect = yes + } + + option = { + name = tgp_japan_decision.9101.a + } +} + +tgp_japan_decision.9102 = { + type = character_event + title = tgp_japan_decision.9102.t + desc = { + desc = tgp_japan_decision.9102.desc + first_valid = { + triggered_desc = { + trigger = { exists = scope:title_change } + desc = tgp_japan_decision.9102.admin + } + triggered_desc = { + trigger = { is_landed = yes } + desc = tgp_japan_decision.9102.feudal + } + desc = tgp_japan_decision.9102.fallback + } + } + theme = realm + + left_portrait = { + character = root + animation = war_over_win + } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:title_change } + desc = tgp_japan_decision.9102.a.admin + } + desc = tgp_japan_decision.9101.a + } + } + } + if = { + limit = { + government_has_flag = government_is_japan_administrative + } + change_government = japan_feudal_government + } + } +} + +# tgp_japan_imperial_branch_decision + +tgp_japan_decision.9201 = { + type = character_event + title = tgp_japan_decision.9201.t + desc = { + desc = tgp_japan_decision.9201.desc + first_valid = { + triggered_desc = { + trigger = { + exists = scope:minamoto_house + exists = scope:taira_house + } + desc = tgp_japan_decision.9201.both + } + triggered_desc = { + trigger = { exists = scope:minamoto_house } + desc = tgp_japan_decision.9201.minamoto + } + triggered_desc = { + trigger = { exists = scope:taira_house } + desc = tgp_japan_decision.9201.taira + } + } + } + theme = family + left_portrait = { + character = root + animation = throne_room_bow_1 + } + right_portrait = { + character = scope:ceremonial_liege + animation = holding_hu + } + lower_left_portrait = scope:minamoto_head + lower_center_portrait = { + character = scope:nearest_emperor + trigger = { + NOT = { this = scope:ceremonial_liege } + } + } + lower_right_portrait = scope:taira_head + override_background = { reference = throne_room_scope } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_restoring_japanese_emperor" + tgp_save_realm_ceremonial_liege_effect = yes + scope:ceremonial_liege = { save_scope_as = background_throne_room_scope } + top_liege = { save_scope_as = liege } + house = { + save_scope_as = old_house + house_head = { save_scope_as = old_house_head } + } + } + + option = { # Join Existing Minamoto + name = tgp_japan_decision.9201.a + trigger = { exists = scope:minamoto_house } + highlight_portrait = scope:minamoto_house.house_head + japan_set_house_effect = { NEW_HOUSE = scope:minamoto_house } + reverse_add_opinion = { + target = scope:minamoto_head + modifier = respect_opinion + opinion = 25 + } + ai_chance = { + base = 5 + modifier = { + scope:minamoto_house.house_head = { is_close_family_of = root } + add = 25 + } + } + } + + option = { # Join Existing Taira + name = tgp_japan_decision.9201.b + trigger = { exists = scope:taira_house } + highlight_portrait = scope:taira_house.house_head + japan_set_house_effect = { NEW_HOUSE = scope:taira_house } + reverse_add_opinion = { + target = scope:taira_head + modifier = respect_opinion + opinion = 25 + } + ai_chance = { + base = 5 + modifier = { + scope:taira_house.house_head = { is_close_family_of = root } + add = 25 + } + } + } + + option = { # Found New Minamoto + name = tgp_japan_decision.9201.c + trigger = { + NOT = { exists = scope:minamoto_house } + } + # Prestige cost for not joining existing + if = { + limit = { exists = scope:taira_house } + add_prestige = medium_prestige_loss + } + custom_tooltip = { + text = tgp_japan_decision.9201.c.tt + create_dynasty = { + name = dynn_Minamoto + coat_of_arms = japanese_minamoto_seiwa + spread_to_descendants = yes + save_scope_as = new_dynasty + } + scope:new_dynasty ?= { + set_coa = dynasty:japanese_minamoto_seiwa + set_variable = { name = minamoto_flag } + hidden_effect = { add_dynasty_prestige_level = 4 } + } + house = { + save_scope_as = new_house + set_coa = dynasty:japanese_minamoto_seiwa + set_house_name = new_honsei_house_name + } + } + if = { + limit = { government_allows = noble_families } + create_noble_family_effect = { GOVERNMENT_GIVER = this } + } + ai_chance = { + base = 25 + modifier = { # Avoid AI creating both + exists = scope:taira_house + add = -20 + } + } + } + + option = { # Found New Taira + name = tgp_japan_decision.9201.d + trigger = { + NOT = { exists = scope:taira_house } + } + # Prestige cost for not joining existing + if = { + limit = { exists = scope:minamoto_house } + add_prestige = medium_prestige_loss + } + custom_tooltip = { + text = tgp_japan_decision.9201.d.tt + create_dynasty = { + name = dynn_Taira + coat_of_arms = japanese_taira_kanmu + spread_to_descendants = yes + save_scope_as = new_dynasty + } + scope:new_dynasty ?= { + set_coa = dynasty:japanese_taira_kanmu + set_variable = { name = taira_flag } + hidden_effect = { add_dynasty_prestige_level = 4 } + } + house = { + save_scope_as = new_house + set_coa = dynasty:japanese_taira_kanmu + set_house_name = new_honsei_house_name + } + } + if = { + limit = { government_allows = noble_families } + create_noble_family_effect = { GOVERNMENT_GIVER = this } + } + ai_chance = { + base = 25 + modifier = { # Avoid AI creating both + exists = scope:minamoto_house + add = -20 + } + } + } + + after = { + if = { # JOIN BLOC + limit = { exists = scope:old_house.house_confederation } + house = { + tgp_join_house_bloc_effect = { + INVITER = scope:old_house + OPINION = flag:no + } + } + } + # Move to 'Kingdom' if necessary + if = { + limit = { + is_ruler = no + top_liege != scope:regent + } + scope:regent = { add_courtier = root } + } + # Message + if = { + limit = { exists = scope:new_house } + hidden_effect = { + every_player = { + limit = { top_liege = title:e_japan.holder } + send_interface_message = { + type = event_generic_neutral + title = tgp_japan_decision.9201.message_title + left_icon = root + right_icon = scope:nearest_emperor + show_as_tooltip = { + root = { set_house = scope:new_house } + } + } + } + } + } + # ERROR SUPPRESSION + if = { + limit = { + has_variable = fujiwara_flag + has_variable = minamoto_flag + has_variable = taira_flag + } + } + } +} + +# tgp_japan_emperor_restoration_decision + +tgp_japan_decision.9301 = { + type = character_event + title = tgp_japan_decision.9301.t + desc = tgp_japan_decision.9301.desc + theme = crown + + left_portrait = { + character = root + animation = holding_hu + } + right_portrait = { + character = scope:attacker + animation = war_over_win + trigger = { + NOT = { this = root } + } + } + lower_center_portrait = scope:defender + + override_effect_2d = { reference = legend_glow } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_restoring_japanese_emperor" + save_scope_as = tenno + save_scope_as = bg_override_char + japan_clear_flavour_flags_effect = yes + set_global_variable = { + name = tenno_restored + value = yes + } + add_character_flag = ceremonial_liege_flag + # Inform Vassals + every_player = { + limit = { is_vassal_or_below_of = root } + trigger_event = tgp_japan_decision.9302 + } + restore_ceremonial_liege_faction_reward_effect = yes + } + + option = { + name = tgp_japan_decision.9301.a + } +} + +tgp_japan_decision.9302 = { + type = character_event + title = tgp_japan_decision.9302.t + desc = tgp_japan_decision.9302.desc + theme = crown + + override_effect_2d = { reference = legend_glow } + + left_portrait = { + character = scope:tenno + animation = holding_hu + } + right_portrait = { + character = scope:attacker + animation = war_over_win + trigger = { + NOT = { this = scope:tenno } + } + } + lower_center_portrait = scope:defender + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_restoring_japanese_emperor" + show_as_tooltip = { + scope:tenno = { restore_ceremonial_liege_faction_reward_effect = yes } + } + } + + option = { + name = tgp_japan_decision.9302.a + } +} + +#Become a Poet - Ceremony - House Aspiration +tgp_japan_decision.9401 = { + type = character_event + title = tgp_japan_decision.9401.t + desc = tgp_japan_decision.9401.desc + theme = education + left_portrait = { + character = root + animation = writing + } + + #Study to become a poet + option = { + name = tgp_japan_decision.9401.a + + duel = { + skill = learning + value = high_skill_rating + 50 = { #Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + modifier = { + has_trait = shrewd + add = 10 + } + modifier = { + has_trait = scholar + add = 10 + } + send_interface_toast = { + title = tgp_japan_decision.9401.a.toast.success + left_icon = root + add_trait = lifestyle_poet + add_stress = minor_stress_gain + } + } + + 50 = { #Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + send_interface_toast = { + title = tgp_japan_decision.9401.a.toast.failure + left_icon = root + add_stress = medium_stress_gain + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 1 + ai_sociability = 1 + } + } + } + + #Opt out + option = { + name = tgp_japan_decision.9401.b + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + ai_energy = -1 + ai_sociability = -1 + } + } + } +} + +# tgp_japan_become_a_monk_decision - Becoming a Buddhist monk near the end of your life (or when you become seriously ill) +tgp_japan_decision.9500 = { + type = character_event + title = tgp_japan_decision.9500.t + desc = tgp_japan_decision.9500.desc + theme = faith + left_portrait = { + character = root + animation = personality_zealous + } + + option = { + name = tgp_japan_decision.9500.a + add_trait = devoted + tgp_renounce_estate_effect = yes + } +} + +# tgp_japan_establish_soryo_administration_decision + +tgp_japan_decision.9601 = { + type = character_event + hidden = yes + + immediate = { + save_scope_as = daijo_daijin + # Inform Vassals + every_vassal = { + limit = { + highest_held_title_tier >= tier_county + is_landed = yes + # Exclude members of bloc, allies, prisoners + NOR = { + house.house_confederation ?= scope:daijo_daijin.house.house_confederation + is_allied_to = scope:daijo_daijin + is_imprisoned_by = scope:daijo_daijin + } + } + trigger_event = tgp_japan_decision.9602 + } + # After AI decisions + trigger_event = { + id = tgp_japan_decision.9604 + delayed = yes + } + } +} + +tgp_japan_decision.9602 = { # Vassal AI event + type = character_event + hidden = yes + + trigger = { is_ai = yes } + + on_trigger_fail = { # Create player list to handle separately + save_temporary_scope_as = war_joiner_temp + scope:daijo_daijin = { + add_to_variable_list = { + name = war_players + target = scope:war_joiner_temp + months = 1 + } + } + } + + immediate = { + random_list = { + 20 = { # Join war + trigger = { + # Only bloc leaders join + trigger_if = { + limit = { exists = house.house_confederation.leading_house } + is_house_head = yes + house.house_confederation.leading_house ?= house + } + trigger_else = { always = yes } + } + modifier = { + add = 15 + is_house_head = yes + house.house_confederation.leading_house ?= house + } + modifier = { + add = 15 + house = { has_house_aspiration_parameter = unlocks_japanese_manor_archive } + } + modifier = { + add = 15 + house = { has_house_aspiration_parameter = ceremony_cheaper_feasts } + } + modifier = { + add = 30 + has_relation_rival = scope:daijo_daijin + } + modifier = { + add = 30 + house = { + any_house_relation = { + has_house_relation_level = feud + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + modifier = { + add = 20 + house = { + any_house_relation = { + has_house_relation_level = rivalry + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + modifier = { + add = 10 + house = { + any_house_relation = { + has_house_relation_level = quarrel + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + modifier = { + add = 15 + government_allows = administrative + } + save_temporary_scope_as = war_joiner_temp + scope:daijo_daijin = { + add_to_variable_list = { + name = war_joiners + target = scope:war_joiner_temp + months = 1 + } + } + if = { + limit = { + is_house_head = yes + house.house_confederation.leading_house ?= house + } + top_liege = { + every_vassal = { + limit = { + highest_held_title_tier > tier_barony + house.house_confederation ?= root.house.house_confederation + } + save_temporary_scope_as = war_joiner_temp + scope:daijo_daijin = { + add_to_variable_list = { + name = war_joiners + target = scope:war_joiner_temp + months = 1 + } + } + } + } + } + } + 10 = { # Don't join war + opinion_modifier = { + opinion_target = scope:daijo_daijin + multiplier = -0.1 + } + ai_value_modifier = { + ai_boldness = -0.1 + } + modifier = { + add = 30 + house = { + any_house_relation = { + has_house_relation_level = amity + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + modifier = { + add = 20 + house = { + any_house_relation = { + has_house_relation_level = friendly + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + modifier = { + add = 10 + house = { + any_house_relation = { + has_house_relation_level = cordial + any_relation_house = { this = scope:daijo_daijin.house } + } + } + } + } + } + } +} + +tgp_japan_decision.9603 = { # Vassal player event + type = character_event + title = tgp_japan_decision.9603.t + desc = { + desc = tgp_japan_decision.9603.desc + triggered_desc = { + trigger = { exists = scope:leader } + desc = tgp_japan_decision.9603.leader + } + } + theme = war + + left_portrait = { + character = scope:daijo_daijin + animation = japanese_war_fan + } + lower_left_portrait = scope:leader + lower_center_portrait = scope:portrait_1 + lower_right_portrait = scope:portrait_2 + + trigger = { + is_ai = no + } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + show_as_tooltip = { + scope:daijo_daijin = { + custom_description_no_bullet = { text = if_you_win_effect } + show_as_tooltip = { japanese_establish_soryo_administration_reward_effect = yes } + } + } + } + + option = { + name = { + text = tgp_japan_decision.9603.a.bloc + trigger = { house.house_confederation.leading_house ?= house } + } + name = { + text = tgp_japan_decision.9603.a + trigger = { + NOT = { house.house_confederation.leading_house ?= house } + } + } + hidden_effect = { + if = { + limit = { is_defender_in_war = scope:war } + scope:war = { remove_participant = root } + } + } + scope:war = { add_attacker = root } + if = { + limit = { + is_house_head = yes + house.house_confederation.leading_house = root.house + } + custom_tooltip = tgp_japan_decision.9603.a.tt + hidden_effect = { + top_liege = { + every_vassal = { + limit = { + NOT = { this = root } + highest_held_title_tier > tier_barony + house.house_confederation ?= root.house.house_confederation + } + save_temporary_scope_as = war_joiner_temp + if = { + limit = { + exists = scope:war + is_defender_in_war = scope:war + } + scope:war = { remove_participant = scope:war_joiner_temp } + } + scope:war ?= { add_attacker = scope:war_joiner_temp } + } + } + } + } + } + + option = { + name = tgp_japan_decision.9603.b + } +} + +tgp_japan_decision.9604 = { # War setup + type = character_event + hidden = yes + + immediate = { + if = { + limit = { any_in_list = { variable = war_joiners } } + # Find bloc leaders + every_in_list = { + variable = war_joiners + limit = { + is_house_head = yes + house.house_confederation.leading_house ?= house # Prefer Bloc Leaders + } + add_to_list = bloc_leaders + } + # Find bloc leader as war leader, and power portraits + ordered_in_list = { + list = bloc_leaders + order_by = { + value = 0 + # TODO_CD_TGP_JP AWAITING CODE SUPPORT + #add = tgp_confederation_military_power + } + max = 3 + if = { + limit = { exists = scope:portrait_1 } + save_scope_as = portrait_2 + } + else_if = { + limit = { exists = scope:leader } + save_scope_as = portrait_1 + } + else = { save_scope_as = leader } + } + # Find non bloc leader if necessary, or power portraits + ordered_in_list = { + variable = war_joiners + order_by = { + value = 0 + add = military_power + } + max = 3 + if = { + limit = { exists = scope:portrait_1 } + save_scope_as = portrait_2 + } + else_if = { + limit = { exists = scope:leader } + save_scope_as = portrait_1 + } + else_if = { + limit = { + NOT = { exists = scope:leader } + } + save_scope_as = leader + } + } + # Start war + scope:leader ?= { + start_war = { + cb = japan_establish_soryo_administration_cb + target = scope:daijo_daijin + } + random_character_war = { + limit = { + primary_attacker = scope:leader + primary_defender = scope:daijo_daijin + using_cb = japan_establish_soryo_administration_cb + } + save_scope_as = war + } + } + # Counter for other joiners + set_variable = { + name = other_joiners_count + value = 0 + } + # Add other participants + every_in_list = { + variable = war_joiners + limit = { NOT = { this = scope:leader } } + save_temporary_scope_as = war_joiner_temp + if = { + limit = { + exists = scope:war + is_defender_in_war = scope:war + } + scope:war = { remove_participant = scope:war_joiner_temp } + } + scope:war ?= { add_attacker = scope:war_joiner_temp } + if = { + limit = { + is_house_head = yes + house.house_confederation.leading_house ?= house + } + add_to_list = bloc_leaders + } + else_if = { + limit = { NOT = { exists = house.house_confederation } } + add_to_list = other_joiners + root = { + change_variable = { + name = other_joiners_count + add = 1 + } + } + } + } + } + trigger_event = { + id = tgp_japan_decision.9605 + delayed = yes + } + } +} + +tgp_japan_decision.9605 = { # War start event + type = character_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:war } + desc = tgp_japan_decision.9605.t + } + desc = tgp_japan_decision.9606.t + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:war } + desc = tgp_japan_decision.9605.desc + } + desc = tgp_japan_decision.9605.peace + } + } + theme = war + + left_portrait = { + character = scope:daijo_daijin + animation = japanese_war_fan + } + lower_left_portrait = scope:leader + lower_center_portrait = scope:portrait_1 + lower_right_portrait = scope:portrait_2 + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + add_character_flag = wear_armor + if = { + limit = { exists = scope:leader } + # Start war + if = { + limit = { any_in_list = { list = bloc_leaders } } + every_in_list = { + list = bloc_leaders + custom_tooltip = tgp_establish_soryo_administration_bloc_leaders_tt + } + } + # Tooltip + if = { + limit = { any_in_list = { list = other_joiners } } + custom_tooltip = tgp_establish_soryo_administration_other_joiners_tt + } + } + else = { japanese_establish_soryo_administration_reward_effect = yes } + } + + option = { + name = tgp_japan_decision.9605.a + trigger = { exists = scope:war } + show_as_tooltip = { + custom_description_no_bullet = { text = if_you_win_effect } + show_as_tooltip = { japanese_establish_soryo_administration_reward_effect = yes } + } + } + + option = { + name = tgp_japan_decision.9605.b + trigger = { + NOT = { exists = scope:war } + } + japanese_establish_soryo_administration_reward_effect = yes + every_player = { + limit = { + top_liege = scope:daijo_daijin + NOT = { this = scope:daijo_daijin } + } + trigger_event = tgp_japan_decision.9607 + } + } + + after = { + remove_character_flag = wear_armor + if = { + limit = { exists = scope:leader } + every_in_list = { + variable = war_players + trigger_event = tgp_japan_decision.9603 + } + } + remove_variable = other_joiners_count + } +} + +tgp_japan_decision.9606 = { # War won event + type = character_event + title = tgp_japan_decision.9606.t + desc = tgp_japan_decision.9606.desc + theme = war + + left_portrait = { + character = scope:daijo_daijin + animation = japanese_war_fan + } + right_portrait = { + character = scope:leader + triggered_animation = { + trigger = { is_imprisoned = yes } + animation = prisonhouse + } + animation = war_over_loss + override_imprisonment_visuals = yes + } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + japanese_establish_soryo_administration_reward_effect = yes + } + + option = { + name = tgp_japan_decision.9606.a + } + + after = { + every_player = { + limit = { + top_liege = scope:daijo_daijin + NOT = { this = scope:daijo_daijin } + } + trigger_event = tgp_japan_decision.9607 + } + } +} + +tgp_japan_decision.9607 = { # War won vassal event + type = character_event + title = tgp_japan_decision.9606.t + desc = tgp_japan_decision.9607.desc + theme = war + + left_portrait = { + character = scope:daijo_daijin + animation = war_over_win + } + right_portrait = { + character = scope:leader + triggered_animation = { + trigger = { is_imprisoned = yes } + animation = prisonhouse + } + animation = war_over_loss + override_imprisonment_visuals = yes + } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + show_as_tooltip = { japanese_establish_soryo_administration_reward_effect = yes } + } + + option = { + name = tgp_japan_decision.9607.a + } +} + +# tgp_japan_restore_japanese_monarchy_decision + +tgp_japan_decision.9901 = { + type = character_event + title = tgp_japan_decision.9901.t + desc = tgp_japan_decision.9901.desc + theme = realm + left_portrait = { + character = scope:kampaku + triggered_animation = { + trigger = { this = scope:scion } + animation = war_over_tie + } + animation = throne_room_bow_1 + } + right_portrait = { + character = scope:scion + animation = war_over_tie + trigger = { this != scope:kampaku } + } + override_background = { reference = throne_room_scope } + + immediate = { + play_music_cue = "mx_cue_sacredrite" + show_as_tooltip = { tgp_restore_japanese_monarchy_decision_effect = yes } + tgp_restore_japanese_monarchy_yamato_restoration_effect = yes + every_player = { + limit = { is_vassal_or_below_of = root } + trigger_event = tgp_japan_decision.9902 + } + } + + option = { # Rule as Regent + name = { + trigger = { this = scope:scion } + text = tgp_japan_decision.9901.a + } + name = { + trigger = { this != scope:scion } + text = tgp_japan_decision.9901.a.scion + } + } +} + +tgp_japan_decision.9902 = { + type = character_event + title = tgp_japan_decision.9901.t + desc = tgp_japan_decision.9902.desc + theme = family + left_portrait = { + character = scope:kampaku + triggered_animation = { + trigger = { this = scope:scion } + animation = war_over_tie + } + animation = throne_room_bow_1 + } + right_portrait = { + character = scope:scion + animation = war_over_tie + trigger = { this != scope:kampaku } + } + override_background = { reference = throne_room_scope } + + immediate = { + play_music_cue = "mx_cue_sacredrite" + show_as_tooltip = { + scope:kampaku = { + tgp_restore_japanese_monarchy_decision_effect = yes + tgp_restore_japanese_monarchy_yamato_restoration_effect = yes + } + } + } + + option = { # Long live the Emperor + name = tgp_japan_decision.9902.a + } +} + +# tgp_japan_restore_japanese_government_decision + +tgp_japan_decision.9911 = { + type = character_event + title = tgp_japan_decision.9911.t + desc = { + desc = tgp_japan_decision.9911.desc + triggered_desc = { + trigger = { exists = scope:rebel } + desc = tgp_japan_decision.9911.rebel + } + } + theme = crown + left_portrait = { + character = scope:kampaku + animation = chaplain + } + right_portrait = { + character = scope:ceremonial_liege + animation = holding_hu + } + lower_right_portrait = scope:rebel + override_background = { reference = throne_room_scope } + + immediate = { + tgp_save_realm_ceremonial_liege_effect = yes + tgp_restore_japanese_government_decision_effect = yes + } + + option = { # Yay + name = tgp_japan_decision.9911.a + } +} + +tgp_japan_decision.9912 = { + type = character_event + title = tgp_japan_decision.9911.t + desc = { + desc = tgp_japan_decision.9912.desc + triggered_desc = { + trigger = { exists = scope:rebel } + desc = tgp_japan_decision.9912.rebel + } + } + theme = realm + left_portrait = { + character = scope:kampaku + animation = war_over_tie + } + override_background = { reference = throne_room_scope } + + trigger = { + NOT = { is_at_war_with = scope:kampaku } + } + + immediate = { + show_as_tooltip = { + scope:kampaku = { tgp_restore_japanese_government_decision_effect = yes } + } + } + + option = { # Yay + name = tgp_japan_decision.9911.a + if = { + limit = { + NOT = { has_government = japan_administrative_government } + } + change_government = japan_administrative_government + } + } + + option = { # Boo + name = tgp_japan_decision.9912.b + trigger = { + is_ai = no + NOR = { + is_at_war_with = scope:kampaku + has_government = japan_administrative_government + } + } + every_in_list = { + list = war_to_join + limit = { + NOT = { is_defender = root } + } + hidden_effect = { set_called_to = root } + add_attacker = root + } + reverse_add_opinion = { + target = scope:kampaku + modifier = rebellious_vassal_opinion + } + } +} + +#Player called to war by rebellious vassal. (vs imprisonment) +tgp_japan_decision.9913 = { + type = letter_event + opening = { + desc = call_ally.0100.opening + } + desc = tgp_japan_decision.9913.desc + + sender = { + character = scope:recipient + animation = anger + } + + option = { + name = tgp_japan_decision.9913.a + scope:recipient = { + every_character_war = { + limit = { + using_cb = japan_refused_ritsuryo_cb + casus_belli = { + primary_attacker = scope:recipient + primary_defender = scope:actor + } + } + hidden_effect = { set_called_to = root } + add_attacker = root + } + scope:recipient = { + add_opinion = { + target = root + modifier = helped_me_against_tyrant_opinion + } + } + } + } + option = { + name = tgp_japan_decision.9913.b + scope:recipient = { + add_opinion = { + target = root + modifier = sided_with_tyrant_opinion + } + } + } +} +scripted_trigger dominion_fight = { + exists = scope:main_defender + NOT = { + any_in_list = { + list = potential_vassals + } + } +} +scripted_trigger dominion_fight_partial = { + exists = scope:main_defender + any_in_list = { + list = potential_vassals + } +} +#Assert Regional Dominion +#tgp_japan_decision.9960 +tgp_japan_decision.9960 = { + type = character_event + window = big_event_window + title = tgp_japan_decision.9960.t + desc = { + desc = tgp_japan_decision.9960.intro + first_valid = { + #de jure vassals agree to let you be duke + triggered_desc = { + trigger = { + NOT = { exists = scope:main_defender } + } + desc = tgp_japan_decision.9960.agree + } + #some de jure vassals agree to let you be duke, some will fight you + triggered_desc = { + trigger = { dominion_fight_partial = yes } + desc = tgp_japan_decision.9960.partial_war + } + #all jure vassals will fight you + desc = tgp_japan_decision.9960.full_war + } + } + theme = battle + override_icon = { + trigger = { dominion_fight = no } + reference = "gfx/interface/icons/event_types/type_authority.dds" + } + override_icon = { + trigger = { dominion_fight = yes } + reference ="gfx/interface/icons/event_types/type_war.dds" + } + override_header_background = { + trigger = { dominion_fight = yes } + reference = "gfx/interface/window_event/event_header_red.dds" + } + override_sound = { + trigger = { dominion_fight = no } + reference = "event:/SFX/Events/Themes/sfx_event_theme_type_diplomacy" + } + left_portrait = { + character = scope:super_soryo + triggered_animation = { + trigger = { + is_adult = yes + dominion_fight = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + #it's war! + animation = gedan_no_kamae + } + #it's not war! + animation = personality_content + } + right_portrait = { #main defender + character = scope:main_defender + camera = camera_event_right_crowner_crowning + } + override_background = { + trigger = { dominion_fight = yes } + #it's war! + reference = army_camp + } + override_background = { reference = bp1_crossroads_inn } + override_effect_2d = { + trigger = { dominion_fight = no } + reference = legend_glow + } + immediate = { + if = { + limit = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + add_character_flag = { + flag = wear_armor + days = 1 + } + } + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + + tgp_japan_assert_regional_dominion_government_decision_effect = yes + } + #fight + option = { + trigger = { dominion_fight = yes } + name = tgp_japan_decision.9960.a + } + #no fight + option = { + trigger = { dominion_fight = no } + name = tgp_japan_decision.9960.b + } + after = { + remove_character_flag = wear_armor + } +} +#winner follow up +tgp_japan_decision.9961 = { + type = character_event + window = big_event_window + title = tgp_japan_decision.9961.t + desc = tgp_japan_decision.9961.desc + theme = battle + override_icon = { + trigger = { dominion_fight = yes } + reference ="gfx/interface/icons/event_types/type_hunt.dds" + } + override_header_background = { reference = "gfx/interface/window_event/header_neutral.dds" } + left_portrait = { + character = scope:winner + triggered_animation = { + trigger = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + animation = japanese_war_fan + } + animation = personality_content + } + override_background = { reference = battlefield } + override_effect_2d = { reference = legend_glow } + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_become_japanese_shogun" + if = { + limit = { + is_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + add_character_flag = { + flag = wear_armor + days = 1 + } + } + scope:title_scope = { tgp_japan_assert_regional_dominance_war_outcome_effect = yes } + } + #you won, enjoy + option = { + name = tgp_japan_decision.9961.a + } + after = { + remove_character_flag = wear_armor + } +} +#loser follow up +tgp_japan_decision.9962 = { + type = character_event + window = big_event_window + title = tgp_japan_decision.9962.t + desc = tgp_japan_decision.9962.desc + theme = battle + override_icon = { + trigger = { dominion_fight = yes } + reference ="gfx/interface/icons/event_types/type_hunt.dds" + } + override_header_background = { reference = "gfx/interface/window_event/header_neutral.dds" } + left_portrait = { + character = scope:loser + animation = shame + } + #main defender + right_portrait = { + character = scope:winner + animation = war_over_win + } + override_background = { + reference = battlefield + } + override_effect_2d = { + reference = rain + } + immediate = { + play_music_cue = "mx_cue_general_crusade_event_3" + } + #you lost, enjoy + option = { + name = tgp_japan_decision.9962.a + } +} +#letter event +tgp_japan_decision.9963 = { + type = letter_event + opening = tgp_japan_decision.9963.opening + desc = tgp_japan_decision.9963.desc + sender = scope:super_soryo + #decline war + option = { + name = tgp_japan_decision.9963.a + play_music_cue = mx_cue_combat_stinger + custom_tooltip = tgp_japan_decision.9963.a.tt + } + #join war + option = { + name = tgp_japan_decision.9963.b + scope:super_soryo_war = { + add_defender = root + hidden_effect = { + set_called_to = root + } + } + } +} diff --git a/events/dlc/tgp/tgp_japan_general_events.txt b/events/dlc/tgp/tgp_japan_general_events.txt new file mode 100644 index 00000000..7a697d63 --- /dev/null +++ b/events/dlc/tgp/tgp_japan_general_events.txt @@ -0,0 +1,1626 @@ +namespace = tgp_japan_general + +#tgp_japan_general.9001 = { +# type = character_event +# title = tgp_japan_general.9001.t +# desc = tgp_japan_general.9001.desc +# theme = realm +# +# immediate = { +# } +# +# option = { +# name = tgp_japan_general.9001.a +# } +#} +# +#tgp_japan_general.9010 = { +# type = character_event +# title = tgp_japan_general.9010.t +# desc = tgp_japan_general.9010.desc +# theme = realm +# +# immediate = { +# } +# +# option = { +# name = tgp_japan_general.9010.a +# } +#} + + +# INSTALL BLOC OUTCOME +scripted_trigger tgp_japan_general_8800_trigger = { + is_adult = yes + is_ruler = no + is_clergy = no + is_faith_dominant_gender = yes + is_incapable = no + is_lowborn = no + save_temporary_scope_as = potential_temp + root = { + any_held_title = { + count = 0 + place_in_line_of_succession = { + target = scope:potential_temp + value <= 3 + } + } + } + NOR = { + scope:potential_temp = root.player_heir + scope:potential_temp = root.primary_heir + scope:family_1 ?= scope:potential_temp + scope:family_2 ?= scope:potential_temp + scope:family_3 ?= scope:potential_temp + scope:fallback_1 ?= scope:potential_temp + scope:fallback_2 ?= scope:potential_temp + scope:fallback_3 ?= scope:potential_temp + trigger_if = { + limit = { exists = scope:potential_temp.house } + OR = { + scope:fallback_1.house ?= scope:potential_temp.house + scope:fallback_2.house ?= scope:potential_temp.house + } + } + } +} + +scripted_effect tgp_japan_general_8800_scope_effect = { + if = { + limit = { exists = scope:$NAME$_2 } + save_scope_as = $NAME$_3 + } + else_if = { + limit = { exists = scope:$NAME$_1 } + save_scope_as = $NAME$_2 + } + else = { save_scope_as = $NAME$_1 } + tgp_japan_general_8800_portrait_effect = yes +} + +scripted_effect tgp_japan_general_8800_portrait_effect = { + if = { + limit = { exists = scope:portrait_3 } + # early out + } + else_if = { + limit = { exists = scope:portrait_2 } + save_scope_as = portrait_3 + add_to_list = potential_list + } + else_if = { + limit = { exists = scope:portrait_1 } + save_scope_as = portrait_2 + add_to_list = potential_list + } + else = { + save_scope_as = portrait_1 + add_to_list = potential_list + } +} + +scripted_effect tgp_japan_general_8800_grant_effect = { + save_scope_as = recipient + + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + + #As this is just a county conquest, simply grab the designated county. + every_in_list = { + list = target_titles + change_title_holder = { + holder = scope:recipient + change = scope:change + } + } + + if = { + limit = { + root.liege = { is_independent_ruler = no } + } + change_liege = { + liege = root.liege + change = scope:change + } + } + + resolve_title_and_vassal_change = scope:change + + root = { + + if = { + limit = { + can_add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + add_hook = { + target = scope:recipient + type = loyalty_hook + } + } + } + + scope:recipient = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 25 + } + if = { + limit = { + NOT = { government_has_flag = government_is_japan_feudal } + } + change_government = japan_feudal_government + } + if = { + limit = { is_house_head = no } + custom_tooltip = { + text = tgp_japan_general.8800.cadet_tt + add_character_flag = found_cadet_branch + trigger_event = tgp_japan_decision.9001 + } + } + house = { + tgp_join_house_bloc_effect = { + INVITER = root.house + OPINION = flag:yes + } + set_variable = { + name = bloc_expansion_won_forced_membership_var + years = 5 + } + save_scope_as = new_house + } + root.house = { + switch = { + trigger = has_house_aspiration_parameter + ceremony_cheaper_feasts = { #Ceremony + scope:new_house = { + set_house_aspiration = { + type = ceremony + level = 1 + } + } + } + determination_spymaster_task_find_secrets_efficiency = { #Determination + scope:new_house = { + scope:new_house = { + set_house_aspiration = { + type = determination + level = 1 + } + } + } + } + unlocks_japanese_manor_shrine = { #Humility + scope:new_house = { + scope:new_house = { + set_house_aspiration = { + type = humility + level = 1 + } + } + } + } + unlocks_japanese_manor_brewery = { #Prosperity + scope:new_house = { + scope:new_house = { + set_house_aspiration = { + type = prosperity + level = 1 + } + } + } + } + service_house_improved_educator_outcome_chance = { #Service + scope:new_house = { + scope:new_house = { + set_house_aspiration = { + type = service + level = 1 + } + } + } + } + unlocks_japanese_manor_armory = { #Strength + scope:new_house = { + scope:new_house = { + set_house_aspiration = { + type = strength + level = 1 + } + } + } + } + } + } + } + every_in_list = { + list = potential_list + limit = { + NOT = { this = scope:recipient } + } + custom = tgp_japan_general_8800_custom + add_opinion = { + target = scope:recipient + modifier = annoyed_opinion + opinion = -15 + } + } +} + +tgp_japan_general.8800 = { + type = character_event + title = tgp_japan_general.8800.t + desc = tgp_japan_general.8800.desc + theme = war + override_background = { reference = estate } + left_portrait = { + character = root + animation = japanese_war_fan + } + lower_right_portrait = scope:portrait_3 + lower_center_portrait = scope:portrait_2 + lower_left_portrait = scope:portrait_1 + override_background = { reference = throne_room_scope } + + immediate = { + save_scope_as = winner + scope:defender = { save_scope_as = loser } + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_adopting_feudal_government" + house.house_confederation = { + tgp_bloc_change_cohesion_effect = { + VALUE = 5 + ICON = scope:attacker + REASON = install_bloc_member + } + } + every_child = { + limit = { tgp_japan_general_8800_trigger = yes } + add_to_list = potential_family + } + every_sibling = { + limit = { tgp_japan_general_8800_trigger = yes } + add_to_list = potential_family + } + every_close_or_extended_family_member = { + limit = { + OR = { + is_uncle_or_aunt_of = root + is_nibling_of = root + } + tgp_japan_general_8800_trigger = yes + } + add_to_list = potential_family + } + every_close_or_extended_family_member = { + limit = { + is_nibling_of = root + tgp_japan_general_8800_trigger = yes + } + add_to_list = potential_family + } + hidden_effect = { + ordered_in_list = { + list = potential_family + order_by = "opinion(root)" + tgp_japan_general_8800_scope_effect = { NAME = family } + } + } + if = { + limit = { NOT = { exists = scope:portrait_3 } } + every_councillor = { + limit = { + NOT = { is_in_list = potential_family } + tgp_japan_general_8800_trigger = yes + } + add_to_list = potential_fallback + } + every_knight = { + limit = { + NOT = { is_in_list = potential_family } + tgp_japan_general_8800_trigger = yes + } + add_to_list = potential_fallback + } + every_courtier = { + limit = { + NOT = { is_in_list = potential_family } + tgp_japan_general_8800_trigger = yes + } + add_to_list = potential_fallback + } + hidden_effect = { + while = { + count = 3 + random_in_list = { + list = potential_fallback + limit = { + is_house_head = yes + tgp_japan_general_8800_trigger = yes + } + alternative_limit = { + tgp_japan_general_8800_trigger = yes + } + weight = { + base = 1 + modifier = { add = "opinion(root)" } + modifier = { is_councillor = yes add = 50 } + modifier = { is_knight = yes add = 25 } + } + tgp_japan_general_8800_scope_effect = { NAME = fallback } + } + } + if = { + limit = { + NOT = { + exists = scope:fallback_1 + } + } + create_character = { + template = new_warrior_character + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + employer = root + faith = root.faith + culture = root.culture + dynasty = generate + gender_female_chance = root_soldier_female_chance + save_scope_as = fallback_1 + } + } + } + } + if = { + limit = { NOT = { exists = scope:portrait_3 } } + hidden_effect = { + while = { + count = 3 + random_pool_guest = { + limit = { + is_house_head = yes + tgp_japan_general_8800_trigger = yes + } + alternative_limit = { + tgp_japan_general_8800_trigger = yes + } + weight = { + base = 1 + modifier = { add = "opinion(root)" } + } + tgp_japan_general_8800_scope_effect = { NAME = fallback } + } + } + } + } + # EP3 Laamp possibility warning + scope:defender = { ep3_war_loss_adventurer_tt_effect = yes } + } + + option = { + name = tgp_japan_general.8800.a + trigger = { exists = scope:family_1 } + scope:family_1 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:family_1 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.b + trigger = { exists = scope:family_2 } + scope:family_2 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:family_2 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.c + trigger = { exists = scope:family_3 } + scope:family_3 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:family_3 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.e + trigger = { + exists = scope:fallback_1 + calc_true_if = { + amount < 3 + exists = scope:family_1 + exists = scope:family_2 + exists = scope:family_3 + } + } + scope:fallback_1 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:fallback_1 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.f + trigger = { + exists = scope:fallback_2 + calc_true_if = { + amount < 3 + exists = scope:family_1 + exists = scope:family_2 + exists = scope:family_3 + exists = scope:fallback_1 + } + } + scope:fallback_2 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:fallback_2 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.g + trigger = { + exists = scope:fallback_3 + calc_true_if = { + amount < 3 + exists = scope:family_1 + exists = scope:family_2 + exists = scope:family_3 + exists = scope:fallback_1 + exists = scope:fallback_2 + } + } + scope:fallback_3 = { tgp_japan_general_8800_grant_effect = yes } + ai_chance = { + base = 10 + opinion_modifier = { + opinion_target = scope:fallback_3 + multiplier = 1 + } + } + } + + option = { + name = tgp_japan_general.8800.h + + create_title_and_vassal_change = { + type = conquest + save_scope_as = change + add_claim_on_loss = yes + } + + #As this is just a county conquest, simply grab the designated county. + every_in_list = { + list = target_titles + change_title_holder = { + holder = root + change = scope:change + } + } + + resolve_title_and_vassal_change = scope:change + + every_in_list = { + list = potential_list + limit = { is_ai = yes } + custom = tgp_japan_general_8800_custom + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -25 + } + } + ai_chance = { + base = 300 + modifier = { + domain_limit_available <= 0 + factor = 0 + } + } + } +} + +## NEW CEREMONIAL EMPEROR NOTIFICATION + +scripted_effect tgp_new_ceremonial_liege_notification_effect = { + $TITLE$ = { + save_scope_as = ceremonial_title + holder = { save_scope_as = ceremonial_liege } + previous_holder = { save_scope_as = previous_holder } + } + hidden_effect = { + every_player = { + limit = { $TITLE$.var:ceremonial_title.holder.top_liege = top_liege } + send_interface_message = { + type = msg_liege_changed + title = new_ceremonial_liege_message_title + left_icon = scope:ceremonial_liege + right_icon = scope:previous_holder + custom_tooltip = new_ceremonial_liege_message_effect + } + } + } +} + +tgp_japan_general.9100 = { + type = character_event + title = tgp_japan_general.9100.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:murder } + desc = tgp_japan_general.9100.desc_murdered + } + triggered_desc = { + trigger = { + scope:previous_holder = { is_alive = no } + } + desc = tgp_japan_general.9100.desc_dead + } + triggered_desc = { + trigger = { + scope:previous_holder = top_liege + } + desc = tgp_japan_general.9100.desc_joko + } + desc = tgp_japan_general.9100.desc_alive + } + desc = tgp_japan_general.9100.desc + } + theme = crown + left_portrait = { + character = root + animation = war_over_tie + } + right_portrait = { + character = top_liege + animation = chancellor + trigger = { + NOT = { this = root } + } + } + lower_right_portrait = scope:title.previous_holder + override_background = { reference = throne_room } + + trigger = { + exists = scope:previous_holder + scope:title = { exists = var:ceremonial_title } + NOR = { + scope:transfer_type = flag:conquest + scope:transfer_type = flag:conquest_claim + } + } + + immediate = { + show_as_tooltip = { get_title = scope:title } + if = { + limit = { + OR = { + any_secret = { + type = secret_murder + secret_target = scope:previous_holder + } + scope:previous_holder ?= { + is_alive = no + killer ?= root + } + } + } + save_scope_value_as = { + name = murder + value = yes + } + } + assign_quirk_effect = yes + scope:title = { + previous_holder ?= { save_scope_as = previous_holder } + save_scope_as = ceremonial_title + holder = { + house = { save_scope_as = ceremonial_house } + save_scope_as = ceremonial_liege + house = { save_scope_as = ceremonial_house } + if = { + limit = { government_is_japanese_trigger = yes } + ### REVOKE ALL GOVERNORSHIPS IF TENNO NOT RESTORED + if = { + limit = { + is_independent_ruler = no + NOT = { has_global_variable = tenno_restored } + } + every_held_title = { + limit = { + tier >= tier_county + is_landless_type_title = no + is_noble_family_title = no + NOT = { scope:title ?= this } + } + add_to_list = lost_titles + } + create_title_and_vassal_change = { + type = conquest + save_scope_as = title_change + add_claim_on_loss = no + } + every_in_list = { + list = lost_titles + change_title_holder_include_vassals = { + holder = root.top_liege + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + } + } + ### CLEANUP RELEVANT TRAITS + if = { + limit = { has_trait = former_emperor } + remove_trait = former_emperor + } + } + } + tgp_new_ceremonial_liege_notification_effect = { TITLE = scope:title } + } + + option = { + name = tgp_japan_general.9100.a + } +} + +## BECOME CLOISTRED EMPEROR DECISION FOR CEREMONIAL EMPEROR REGENT + +tgp_japan_general.9120 = { + type = character_event + title = tgp_japan_general.9120.t + desc = tgp_japan_general.9120.desc + theme = crown + left_portrait = { + character = root + animation = holding_hu + } + lower_left_portrait = { + character = scope:emperor_player_heir + trigger = { this != title:e_japan.previous_holder } + } + lower_right_portrait = { + character = title:e_japan.previous_holder + } + + trigger = { + has_tgp_dlc_trigger = yes + NOR = { + has_global_variable = tenno_restored + var:ascended_throne_reason ?= flag:conquest_claim + var:ascended_throne_reason ?= flag:conquest + } + } + + on_trigger_fail = { + trigger_event = tgp_japan_general.9100 + } + + immediate = { + player_heir = { save_scope_as = emperor_player_heir } + } + + # Become Cloistered Emperor + option = { + name = tgp_japan_general.9120.a + japan_clear_flavour_flags_effect = yes + add_character_flag = joko_flag + change_influence = major_influence_gain + if = { + limit = { + NOT = { has_trait = devoted } + } + add_trait = devoted + } + if = { + limit = { + NOT = { has_trait = former_emperor } + } + add_trait = former_emperor + } + create_title_and_vassal_change = { + type = appointment + save_scope_as = title_change + add_claim_on_loss = no + } + title:k_chrysanthemum_throne = { + change_title_holder = { + holder = scope:emperor_player_heir + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + scope:emperor_player_heir = { add_character_flag = ceremonial_liege_flag } + tgp_new_ceremonial_liege_notification_effect = { TITLE = title:k_chrysanthemum_throne } + ai_chance = { + base = 50 + } + } + + #Option B + option = { + name = tgp_japan_general.9120.b + japan_clear_flavour_flags_effect = yes + add_character_flag = ceremonial_liege_flag + add_prestige = major_prestige_loss + every_vassal = { + custom = custom.every_vassal + add_opinion = { + target = root + modifier = angry_opinion + opinion = -25 + } + } + custom_tooltip = tgp_japan_emperor_restoration_decision_faction_effect + ai_chance = { + base = 0 + } + } +} + +# IMPERIAL POLICY NOTIFICATION + +tgp_japan_general.9300 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { scope:liege = { has_realm_law = defense_mobilization_law } } + desc = tgp_japan_general.9300.t.defense_mobilization_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = disarmament_law } } + desc = tgp_japan_general.9300.t.disarmament_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = isolation_law } } + desc = tgp_japan_general.9300.t.isolation_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = imperial_expansion_law } } + desc = tgp_japan_general.9300.t.imperial_expansion_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = manor_reform_law } } + desc = tgp_japan_general.9300.t.manor_reform_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = bandit_crackdown_law } } + desc = tgp_japan_general.9300.t.bandit_crackdown_law + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:liege ?= root + scope:ceremonial_liege != root + } + desc = tgp_japan_general.9300.restored_emperor + } + triggered_desc = { + trigger = { + scope:ceremonial_liege ?= root + scope:liege != root + } + desc = tgp_japan_general.9300.ceremonial_liege + } + triggered_desc = { + trigger = { + scope:ceremonial_liege ?= root + scope:liege = root + } + desc = tgp_japan_general.9300.restored_emperor + } + triggered_desc = { + trigger = { scope:ceremonial_liege != scope:liege } + desc = tgp_japan_general.9300.vassal_ceremonial + } + desc = tgp_japan_general.9300.vassal + } + desc = tgp_japan_general.9300.outro + first_valid = { + triggered_desc = { + trigger = { scope:liege = { has_realm_law = defense_mobilization_law } } + desc = tgp_japan_general.9300.defense_mobilization_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = disarmament_law } } + desc = tgp_japan_general.9300.disarmament_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = isolation_law } } + desc = tgp_japan_general.9300.isolation_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = imperial_expansion_law } } + desc = tgp_japan_general.9300.imperial_expansion_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = manor_reform_law } } + desc = tgp_japan_general.9300.manor_reform_law + } + triggered_desc = { + trigger = { scope:liege = { has_realm_law = bandit_crackdown_law } } + desc = tgp_japan_general.9300.bandit_crackdown_law + } + } + } + theme = crown + left_portrait = { + character = scope:liege + animation = writing + } + right_portrait = { + character = scope:ceremonial_liege + animation = holding_hu + trigger = { + NOT = { this = scope:liege } + } + } + override_background = { reference = throne_room_scope } + + immediate = { + play_sound_effect = "event:/DLC/EP4/SFX/Stingers/Japan/tgp_mx_sting_restoring_japanese_emperor" + tgp_save_realm_ceremonial_liege_effect = yes + if = { + limit = { tgp_realm_has_ceremonial_liege_trigger = no } + save_scope_as = ceremonial_liege + save_scope_as = liege + } + scope:ceremonial_liege ?= { save_scope_as = background_throne_room_scope } + scope:liege = { + if = { + limit = { NOT = { exists = scope:background_throne_room_scope } } + save_scope_as background_throne_room_scope + } + } + } + + option = { + name = { + trigger = { + scope:liege = { has_realm_law = disarmament_law } + government_has_flag = government_is_japan_feudal + } + text = tgp_japan_general.9300.a.disarmament_soryo + } + name = { + text = tgp_japan_general.9300.a + } + scope:liege = { + show_as_tooltip = { + switch = { + trigger = has_realm_law + defense_mobilization_law = { add_realm_law = defense_mobilization_law } + disarmament_law = { add_realm_law = disarmament_law } + isolation_law = { add_realm_law = isolation_law } + imperial_expansion_law = { add_realm_law = imperial_expansion_law } + manor_reform_law = { add_realm_law = manor_reform_law } + bandit_crackdown_law = { add_realm_law = bandit_crackdown_law } + } + } + } + } +} + +#scripted stuff for Eradicate House cb post war events tgp_japan_general.9550 + +#valid courtiers to kill +scripted_trigger tgp_japan_soryo_eradicate_cb_valid_courtier = { + NOR = { + scope:loser_spouse ?= this + scope:loser_heir ?= this + is_close_family_of = scope:loser + } +} +#valid house members to kill +scripted_trigger tgp_japan_soryo_eradicate_cb_valid_family = { + NOT = { + scope:loser_heir ?= this + } + OR = { + is_close_family_of = scope:loser + is_spouse_of = scope:loser + } +} +#If loser isn't house head (i.e. has no manor), their heir becomes a landless adventurer. If not we move their manor to a friendly lord's land. +scripted_effect tgp_japan_soryo_eradicate_cb_heir_go_to_savior = { + scope:loser_heir ?= { + if = { + limit = { + NOT = { + exists = scope:loser.domicile + } + has_dlc_feature = roads_to_power + } + create_landless_adventurer_title_effect = { + REASON = flag:eradicate + FLAVOR_CHAR = scope:winner + } + } + else = { + custom_tooltip = { + text = tgp_japan_soryo_eradicate_cb_heir_move_manor_to_savior_tt + scope:loser.domicile = { + move_domicile = scope:savior.capital_province + } + } + } + } +} +#If loser successfully flees and isn't house head (i.e. has no manor), they becomes a landless adventurer. If not we move their manor to a friendly lord's land. +scripted_effect tgp_japan_soryo_eradicate_cb_loser_go_to_savior = { + if = { + limit = { + NOT = { + exists = scope:loser.domicile + } + has_dlc_feature = roads_to_power + } + create_landless_adventurer_title_effect = { + REASON = flag:eradicate + FLAVOR_CHAR = scope:winner + } + } + else_if = { + limit = { + exists = scope:savior + } + custom_tooltip = { + text = tgp_japan_soryo_eradicate_cb_heir_move_to_savior_tt + scope:loser.domicile = { + move_domicile = scope:savior.capital_province + } + } + } + else = { + custom_tooltip = { + text = tgp_japan_soryo_eradicate_cb_heir_move_to_cap_tt + scope:loser.domicile = { + move_domicile = scope:loser_heir.top_liege.capital_province + } + } + } +} +#Loser kills loser's family to avoid dishonor +scripted_effect tgp_japan_soryo_eradicate_cb_kill_family = { + scope:loser = { + every_courtier = { + custom = every_close_family_house_member_in_court + custom_tooltip = is_killed_by_you_and_you_kill_self + limit = { + OR = { + AND = { + house = scope:loser.house + is_close_family_of = scope:loser + } + is_spouse_of = scope:loser + } + NOT = { + this = scope:loser_heir + } + } + hidden_effect = { + death = { + death_reason = death_avoid_dishonor + killer = scope:winner + } + } + + } + } +} +#Winner kills loser's family +scripted_effect tgp_japan_soryo_eradicate_cb_kill_house = { + scope:loser = { + every_courtier = { + custom = every_house_member_in_court + limit = { + OR = { + is_spouse_of = scope:loser + house = scope:loser.house + } + NOT = { + scope:loser_heir ?= this + } + } + death = { + death_reason = death_eradicated + killer = scope:winner + } + } + house = { + every_house_member = { + custom = every_house_member_mad + add_opinion = { + modifier = eradicated_my_house_opinion + target = scope:winner + } + } + } + } +} +#You lost Eradicate House cb war tgp_japan_general.9550 +tgp_japan_general.9550 = { + type = character_event + title = tgp_japan_general.9550.t + window = big_event_window + desc = { + first_valid = { + #You started it, but lost + triggered_desc = { + trigger = { + scope:loser = scope:attacker + } + desc = tgp_japan_general.9550.desc.intro.a + } + #You were attacked + desc = tgp_japan_general.9550.desc.intro.b + } + desc = tgp_japan_general.9550.desc + first_valid = { + #You are alone + triggered_desc = { + trigger = { + NOR = { + exists = scope:loser_spouse + exists = scope:loser_heir + } + } + desc = tgp_japan_general.9550.desc.alone + } + #you are with your family + desc = tgp_japan_general.9550.desc.fam + } + desc = tgp_japan_general.9550.desc.end + } + theme = death + override_background = { + reference = corridor_night + } + #war loser + left_portrait = { + character = scope:loser + animation = beg + } + #spouse + center_portrait = { + trigger = { exists = scope:loser_spouse } + character = scope:loser_spouse + animation = crying + } + #heir + right_portrait = { + trigger = { exists = scope:loser_heir } + character = scope:loser_heir + animation = disbelief + } + #killed courtiers + lower_left_portrait = { + trigger = { exists = scope:dead_courtier_1 } + character = scope:dead_courtier_1 + } + lower_center_portrait = { + trigger = { exists = scope:dead_courtier_2 } + character = scope:dead_courtier_2 + } + lower_right_portrait = { + trigger = { exists = scope:dead_courtier_3 } + character = scope:dead_courtier_3 + } + + immediate = { + save_scope_as = loser + if = { + limit = { + scope:loser = scope:attacker + } + scope:defender = { + save_scope_as = winner + } + } + else = { + scope:attacker = { + save_scope_as = winner + } + } + #Find close family if they exist + #spouse + scope:loser.primary_spouse ?= { + save_scope_as = loser_spouse + } + #heir + scope:loser.player_heir ?= { + if = { + limit = { + is_courtier_of = scope:loser + } + save_scope_as = loser_heir + } + } + #Find courtiers to kill + ordered_courtier = { + limit = { + tgp_japan_soryo_eradicate_cb_valid_courtier = yes + } + #the more they like you the more it hurts + order_by = "opinion(root)" + max = 3 + #always put this when there is a max or it will be unhappy who knows why + check_range_bounds = no + if = { + limit = { exists = scope:dead_courtier_2 } + save_scope_as = dead_courtier_3 + } + else_if = { + limit = { exists = scope:dead_courtier_1 } + save_scope_as = dead_courtier_2 + } + else = { save_scope_as = dead_courtier_1 } + death = { + death_reason = death_eradicated + killer = scope:winner + } + } + + #Find savior for you or your heir to flee to the lands of + top_liege = { + ordered_vassal = { + limit = { + NOT = { + this = scope:loser + } + is_landed = yes + highest_held_title_tier > tier_barony + } + order_by = "opinion(root)" + save_scope_as = savior + } + } + } + + #1) kill yourself (and family) to maintain honor + option = { + name = { + text = { + first_valid = { + #alone + triggered_desc = { + trigger = { + NOT = { + exists = scope:loser_spouse + exists = scope:loser_heir + } + } + desc = tgp_japan_general.9550.a.alone + } + #if you have family + desc = tgp_japan_general.9550.a.fam + } + } + } + flavor = { + first_valid = { + #alone + triggered_desc = { + trigger = { + NOT = { + exists = scope:loser_spouse + exists = scope:loser_heir + } + } + desc = tgp_japan_general.9550.a.alone.flavor + } + #fam + desc = tgp_japan_general.9550.a.fam.flavor + } + } + #Heir sets up manor in land of savior + show_as_tooltip = { + tgp_japan_soryo_eradicate_cb_heir_go_to_savior = yes + tgp_japan_soryo_eradicate_cb_kill_family = yes + + #then kill yourself + death = { + death_reason = death_avoid_dishonor + } + } + + house = { + add_house_modifier = { + modifier = house_eradicated_suicide_modifier + years = house_eradicated_duration_value + } + } + save_scope_as = suicide + ai_chance = { base = 0} + } + #2) attempt to flee (lose honor but maybe keep life) + option = { + name = tgp_japan_general.9550.b + flavor = tgp_japan_general.9550.b.flavor + + duel = { + skill = intrigue + value = high_skill_rating + #If you win you escape and move your manor to a friendly lord's land or if you don't have manor you become an adventurer + 5 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 1 + } + modifier = { + add = { + value = prowess + subtract = average_skill_rating + } + } + modifier = { + add = 1.5 + has_character_modifier = childhood_prison_escape + } + desc = tgp_japan_general.9550.b.success + send_interface_toast = { + title = tgp_japan_general.9550.b.success + left_icon = scope:loser + right_icon = scope:winner + tgp_japan_soryo_eradicate_cb_loser_go_to_savior = yes + } + save_scope_as = flee_success + } + 15 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 1 + } + modifier = { + add = 2.5 + OR = { + has_trait = weak + has_trait = craven + has_trait = physique_bad_1 + } + } + modifier = { + add = 5 + OR = { + has_trait = physique_bad_2 + has_trait = physique_bad_3 + } + } + desc = tgp_japan_general.9550.b.failure + show_as_tooltip = { + death = { + death_reason = death_eradicated + killer = scope:winner + } + tgp_japan_soryo_eradicate_cb_kill_house = yes + } + send_interface_toast = { + title = tgp_japan_general.9550.b.failure + left_icon = scope:loser + right_icon = scope:winner + } + } + } + stress_impact = { + brave = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + ai_chance = { base = 0} + house = { + add_house_modifier = { + modifier = house_eradicated_modifier + years = house_eradicated_duration_value + } + } + } + #3) put yourself to the mercy of your captor (AI only option so you can execute them) + option = { + name = tgp_japan_general.9550.c + #only for AI + trigger = { + is_ai = yes + } + ai_chance = { base = 100} + house = { + add_house_modifier = { + modifier = house_eradicated_modifier + years = house_eradicated_duration_value + } + } + } + after = { + scope:winner = { + trigger_event = tgp_japan_general.9551 + } + } +} +#You won eradicate house cb war +tgp_japan_general.9551 = { + type = character_event + window = big_event_window + title = tgp_japan_general.9551.t + desc = { + first_valid = { + #if you capture loser + triggered_desc = { + trigger = { + NOR = { + exists = scope:flee_success + exists = scope:suicide + } + } + desc = tgp_japan_general.9551.desc.intro + } + #intro for alt + desc = tgp_japan_general.9551.desc.alt.intro + } + first_valid = { + #if loser suicides + triggered_desc = { + trigger = { + exists = scope:suicide + } + desc = tgp_japan_general.9551.desc.alt.suicide + } + #if loser escapes + triggered_desc = { + trigger = { + exists = scope:flee_success + } + desc = tgp_japan_general.9551.desc.alt.escape + } + } + #outro for alt + triggered_desc = { + trigger = { + OR = { + exists = scope:flee_success + exists = scope:suicide + } + } + desc = tgp_japan_general.9551.desc.alt.outro + } + } + + theme = battle + override_effect_2d = { reference = flies } + #root winner + left_portrait = { + character = scope:winner + triggered_animation = { + trigger = { + NOR = { + exists = scope:flee_success + exists = scope:suicide + } + } + #off with his head! + animation = chudan_no_kamae + } + #I didn't get to kill him! + animation = anger + camera = camera_event_center_coronation_kneeling + } + #loser + right_portrait = { + trigger = { + NOR = { + exists = scope:flee_success + exists = scope:suicide + } + } + character = scope:loser + animation = anger + camera = camera_event_near_angle_345_close + } + #freshly killed loser house members + lower_left_portrait = { + trigger = { exists = scope:portrait } + character = scope:portrait + } + lower_center_portrait = { + trigger = { exists = scope:dead_loser_family_2 } + character = scope:dead_loser_family_2 + } + lower_right_portrait = { + trigger = { exists = scope:dead_loser_family_3 } + character = scope:dead_loser_family_3 + } + + immediate = { + #find loser's region + scope:loser.capital_county.empire = { + save_scope_as = loser_region + } + if = { + limit = { exists = scope:suicide } + tgp_japan_soryo_eradicate_cb_heir_go_to_savior = yes + tgp_japan_soryo_eradicate_cb_kill_family = yes + } + #take land + tgp_japan_soryo_eradicate_cb_transfer_effect = yes + if = { + limit = { exists = scope:suicide } + scope:loser = { + death = { + death_reason = death_avoid_dishonor + killer = scope:winner + } + } + } + scope:loser_heir ?= { + #make loser_heir and nemesis or rival friends + if = { + limit = { + can_set_relation_nemesis_trigger = { + CHARACTER = scope:winner + } + } + set_relation_nemesis = { + reason = nemesis_killed_family + target = scope:winner + } + } + else_if = { + limit = { + can_set_relation_rival_trigger = { + CHARACTER = scope:winner + } + } + set_relation_rival = { + reason = nemesis_killed_family + target = scope:winner + } + } + #make loser_heir and savior friends + if = { + limit = { + can_set_relation_friend_trigger = { + CHARACTER = scope:winner + } + } + set_relation_friend = { + reason = friend_eradication_save + target = scope:savior + } + } + } + #grab some of the loser's house members to kill right away to help set the mood + scope:loser = { + ordered_courtier = { + limit = { + tgp_japan_soryo_eradicate_cb_valid_family = yes + } + order_by = "opinion(scope:loser)" + max = 3 + check_range_bounds = no + if = { + limit = { exists = scope:dead_loser_family_2 } + save_scope_as = dead_loser_family_3 + } + else_if = { + limit = { exists = scope:dead_loser_family_1 } + save_scope_as = dead_loser_family_2 + } + else = { save_scope_as = dead_loser_family_1 } + death = { + death_reason = death_eradicated + killer = scope:winner + } + } + } + if = { + limit = { + OR = { + exists = scope:suicide + exists = scope:flee_success + } + } + scope:loser = { save_scope_as = portrait } + } + else = { + scope:dead_loser_family_1 ?= { save_scope_as = portrait } + } + } + + #1) Execute loser and eradicate the house! + option = { + name = tgp_japan_general.9551.a + flavor = tgp_japan_general.9551.a.flavor + show_as_tooltip = { + scope:loser = { + death = { + death_reason = death_avoid_dishonor + killer = scope:winner + } + } + } + #kill house + tgp_japan_soryo_eradicate_cb_kill_house = yes + add_dread = medium_dread_gain + house = { + add_house_modifier = { + modifier = rival_eradicated_modifier + years = house_eradicated_duration_value + } + } + #kill loser + if = { + limit = { + NOT = { exists = scope:suicide } + } + scope:loser = { + death = { + death_reason = death_eradicated + killer = scope:winner + } + } + } + } +} + +# Event to force the historical birth of Emperor Antoku for Genpei content +tgp_japan_general.9910 = { + type = character_event + hidden = yes + + trigger = { has_tgp_dlc_trigger = yes } + + immediate = { + add_trait = pregnant + set_variable = { + name = historical_pregnancy + value = flag:antoku + years = 1 # fallback cleanup + } + set_variable = { + name = historical_pregnancy_start + value = 430048 # ~1178.3.15 + } + add_character_flag = { + flag = birth_will_go_smoothly + years = 1 # fallback cleanup + } + trigger_event = { + id = birth.0001 + days = 82 # 1178.12.22 + } + # Error suppression + show_as_tooltip = { trigger_event = tgp_japan_general.9910 } + } +} diff --git a/events/dlc/tgp/tgp_japan_yearly_events.txt b/events/dlc/tgp/tgp_japan_yearly_events.txt new file mode 100644 index 00000000..d56ae41f --- /dev/null +++ b/events/dlc/tgp/tgp_japan_yearly_events.txt @@ -0,0 +1,4388 @@ +namespace = tgp_japan_yearly_events + +########################################################## +# Japan Yearly Events +# tgp_japan_yearly_events - 0001-0999 +# by Anna Johansson and Laurence Kennedy +########################################################## + +########################################################## +# 0001 - Spreading Joy - Furoshiki (gift wrap something for a loved one) +# 0006 - Treasures from the Sea - Ama divers (establish a trade deal with them) +# 0012 - Monkey Business - Onsen +# 0013 - Purifying the Spirit - Onsen +# 0014 - Taking It Easy - Onsen +# 0021 - Among the Blossoms - Hanami (Cherry Blossoms) +# 0026 - Tales of the Tengu - Tengu +# 0027 - Prove Your Worth - Tengu +# 0028 - False Rumors - Tengu +# 0029 - Practice Makes Perfect - Tengu +# 0036 - Green Thumb +# 1200 - Congestion in the Capital +# 1210 - Fit to Lead? +# 1225 - A Poetic Life +######################################################### + +# 0001 - Spreading Joy - Furoshiki (gift wrap something for a loved one) +tgp_japan_yearly_events.0001 = { + type = character_event + title = tgp_japan_yearly_events.0001.t + desc = tgp_japan_yearly_events.0001.desc + theme = love + override_background = market + cooldown = { years = 30 } + left_portrait = { + character = root + animation = japanese_war_fan + } + + #Person we care about + right_portrait = { + character = scope:gift_receiver + animation = disapproval + camera = camera_event_center_close_to_right + } + + artifact = { + target = scope:gift_uchiwa + position = lower_left_portrait + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_healthy_adult = yes + culture = { + has_cultural_pillar = heritage_japonic + } + location = { + geographical_region = world_asia_japan + } + any_relation = { + type = friend + type = best_friend + type = soulmate + type = lover + type = crush + is_ai = yes + } + any_spouse = { + is_ai = yes + } + } + + immediate = { + every_relation = { + type = friend + type = best_friend + type = soulmate + type = lover + type = crush + limit = { + is_ai = yes + } + add_to_list = potential_gift_receiver + } + random_spouse = { + limit = { + is_ai = yes + } + add_to_list = potential_gift_receiver + } + + ordered_in_list = { + list = potential_gift_receiver + #find the person who likes you the least so improving your relationship is most impactful. + order_by = { + value = "opinion(root)" + multiply = -1 + max = 1 + } + save_scope_as = gift_receiver + } + + #Uchiwa is a type of fan that was popular in China/Japan + hidden_effect_new_object = { + create_artifact = { + name = uchiwa + description = uchiwa_desc + rarity = common + type = miscellaneous + visuals = tapestry + modifier = artifact_attraction_opinion_1_modifier + modifier = artifact_fertility_gain_1_modifier + save_scope_as = gift_uchiwa + } + } + } + + #Option A) Get gift for someone you care about + option = { + name = tgp_japan_yearly_events.0001.a + + scope:gift_uchiwa = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 1 + } + set_owner = { + target = scope:gift_receiver + history = { + actor = root + recipient = scope:gift_receiver + type = given + } + } + } + + send_interface_toast = { + title = tgp_japan_yearly_events.0001.a_spouse_toast + left_icon = root + right_icon = scope:gift_receiver + + if = { + limit = { + can_set_relation_lover_trigger = { CHARACTER = scope:gift_receiver } + } + progress_towards_lover_effect = { + CHARACTER = scope:gift_receiver + REASON = tgp_progress_towards_lover_furoshiki + OPINION = 0 + } + } + + reverse_add_opinion = { + modifier = grateful_opinion + target = scope:gift_receiver + opinion = 30 + } + } + + remove_short_term_gold = minor_gold_value + + stress_impact = { + gregarious = minor_stress_impact_loss + generous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_sociability = 1 + } + } + } + + #Option B) You get artifact for yourself + option = { + name = tgp_japan_yearly_events.0001.b + flavor = tgp_japan_yearly_events.0001.b.flavor + scope:gift_uchiwa = { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 1 + } + set_owner = { + target = root + history = { + recipient = root + type = purchased + } + } + } + remove_short_term_gold = minor_gold_value + stress_impact = { + gregarious = minor_stress_impact_gain + generous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_sociability = -1 + } + } + } + #Option C) You are above these petty merchants and their wares (opt out) + option = { + name = tgp_japan_yearly_events.0001.c + add_piety = minor_piety_gain + stress_impact = { + gregarious = minor_stress_impact_gain + generous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_sociability = -1 + } + } + } +} + +# 0006 - Treasures from the Sea - Ama divers (establish a trade deal with them) +tgp_japan_yearly_events.0006 = { + type = character_event + title = tgp_japan_yearly_events.0006.t + desc = tgp_japan_yearly_events.0006.desc + theme = travel + override_background = bp3_coast + cooldown = { years = 30 } + left_portrait = { + character = root + animation = steward + } + + right_portrait = { + character = scope:pearl_diver + animation = idle + outfit_tags = { no_clothes } + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + is_location_valid_for_travel_event_on_land = yes + location = { + geographical_region = world_asia_japan + is_coastal = yes + } + } + + immediate = { + create_character = { + template = tgp_japan_yearly_events_pearl_diver_template + location = root.location + save_scope_as = pearl_diver + } + } + + #Diplomacy Duel - Selling freshly caught fish/seaweed + option = { + name = tgp_japan_yearly_events.0006.a + + duel = { + skill = diplomacy + target = scope:pearl_diver + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.success + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.success + left_icon = root + right_icon = scope:pearl_diver + capital_county.title_province = { + add_province_modifier = { + modifier = tgp_japan_fresh_fish_county_modifier + years = 10 + } + } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + remove_short_term_gold = tiny_gold_value + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.failure + left_icon = root + right_icon = scope:pearl_diver + add_prestige = minor_prestige_loss + } + } + } + } + + stress_impact = { + gluttonous = minor_stress_impact_gain + temperate = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_sociability = 1 + } + } + } + + #Stewardship Duel - Selling found pearls + option = { + name = tgp_japan_yearly_events.0006.b + + duel = { + skill = stewardship + target = scope:pearl_diver + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.success + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.success + left_icon = root + right_icon = scope:pearl_diver + capital_county.title_province = { + add_province_modifier = { + modifier = tgp_japan_pearl_county_modifier + years = 10 + } + } + add_stewardship_lifestyle_xp = medium_lifestyle_xp + remove_short_term_gold = tiny_gold_value + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.failure + left_icon = root + right_icon = scope:pearl_diver + add_prestige = minor_prestige_loss + } + } + } + } + + stress_impact = { + generous = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_rationality = 1 + ai_sociability = 1 + } + } + } + + #Learning Duel - Giving abalone to temples + option = { + name = tgp_japan_yearly_events.0006.c + + duel = { + skill = learning + target = scope:pearl_diver + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.success + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.success + left_icon = root + right_icon = scope:pearl_diver + capital_county.title_province = { + add_province_modifier = { + modifier = tgp_japan_abalone_temple_offerings_county_modifier + years = 10 + } + } + add_learning_lifestyle_xp = medium_lifestyle_xp + remove_short_term_gold = tiny_gold_value + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0006.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0006.tt.failure + left_icon = root + right_icon = scope:pearl_diver + add_prestige = minor_prestige_loss + } + } + } + } + + stress_impact = { + lazy = minor_stress_impact_gain + diligent = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = 1 + ai_sociability = 1 + } + } + } + + #Opt out + option = { + name = tgp_japan_yearly_events.0006.d + add_prestige = minor_prestige_gain + + stress_impact = { + diligent = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + } + } + + after = { + scope:pearl_diver ?= { + silent_disappearance_ai_effect = yes + } + } +} + +# 0012 - Monkey Business - Onsen +tgp_japan_yearly_events.0012 = { + type = character_event + title = tgp_japan_yearly_events.0012.t + desc = tgp_japan_yearly_events.0012.desc + theme = travel + override_background = bp3_mountain_winter + cooldown = { years = 20 } + override_effect_2d = { reference = fog } + left_portrait = { + character = root + animation = disbelief + } + + widget = { + is_shown = { + current_season_winter = yes + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + NOT = { + has_character_flag = had_event_tgp_japan_yearly_events.0013 + has_character_flag = had_event_tgp_japan_yearly_events.0014 + } + location = { + geographical_region = world_asia_japan + OR = { + terrain = mountains + terrain = hills + } + } + } + + immediate = { + add_character_flag = { + flag = had_event_tgp_japan_yearly_events.0012 + years = 15 + } + } + + #Martial/Intimidation - scare the monkey away from the hot spring + option = { + name = tgp_japan_yearly_events.0012.a + + current_travel_plan = { + delay_travel_plan = { days = 3 } + } + + duel = { + skill = martial + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 20 + max = 90 + } + desc = tgp_japan_yearly_events.0012.a.monkey.martial.tt.success + send_interface_toast = { + title = tgp_japan_yearly_events.0012.a.monkey.martial.tt.success + left_icon = root + add_character_modifier = { + modifier = tpg_japan_hot_spring_relaxation_modifier + years = 5 + } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 20 + max = 90 + } + desc = tgp_japan_yearly_events.0012.a.monkey.martial.tt.failure + send_interface_toast = { + title = tgp_japan_yearly_events.0012.a.monkey.martial.tt.failure + left_icon = root + add_prestige = medium_prestige_loss + } + } + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + martial >= decent_skill_rating + add = 20 + } + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = -1 + ai_vengefulness = 1 + } + } + } + + #Intrigue/Disguise - prove to the monkey that you are no threat + option = { + name = tgp_japan_yearly_events.0012.b + + current_travel_plan = { + delay_travel_plan = { days = 3 } + } + + duel = { + skill = intrigue + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0012.b.monkey.intrigue.tt.success + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0012.b.monkey.intrigue.tt.success + left_icon = root + add_character_modifier = { + modifier = tpg_japan_hot_spring_relaxation_modifier + years = 5 + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0012.b.monkey.intrigue.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0012.b.monkey.intrigue.tt.failure + left_icon = root + add_prestige = medium_prestige_loss + } + } + } + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + intrigue >= decent_skill_rating + add = 20 + } + ai_value_modifier = { + ai_boldness = 1 + ai_rationality = -1 + } + } + } + + #Opt out, you don't want to mess with the monkey + option = { + name = tgp_japan_yearly_events.0012.c + + add_stress = minor_stress_loss + + stress_impact = { + brave = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = -1 + ai_rationality = 1 + } + } + } +} + +# 0013 - Purifying the Spirit - Onsen +tgp_japan_yearly_events.0013 = { + type = character_event + title = tgp_japan_yearly_events.0013.t + desc = tgp_japan_yearly_events.0013.desc + theme = travel + override_background = bp3_hills_winter + cooldown = { years = 20 } + override_effect_2d = { reference = fog } + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:mystic + animation = physician + } + + widget = { + is_shown = { + current_season_winter = yes + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + NOT = { + has_character_flag = had_event_tgp_japan_yearly_events.0012 + has_character_flag = had_event_tgp_japan_yearly_events.0014 + } + location = { + geographical_region = world_asia_japan + OR = { + terrain = mountains + terrain = hills + } + } + } + + immediate = { + add_character_flag = { + flag = had_event_tgp_japan_yearly_events.0013 + years = 15 + } + + random_pool_character = { + province = root.location + limit = { + has_trait = lifestyle_mystic + is_available_healthy_ai_adult = yes + } + save_scope_as = mystic + } + if = { + limit = { + NOT = { exists = scope:mystic } + } + create_character = { + template = default_mystic_character + culture = root.culture + location = root.location + save_scope_as = mystic + } + add_character_flag = { + flag = fake_mystic + days = 1 + } + } + } + + #Join the mystic in his ritualistic bath, chance of random ailments or buffs + option = { + name = tgp_japan_yearly_events.0013.a + + current_travel_plan = { + delay_travel_plan = { days = 3 } + } + + add_character_modifier = { + modifier = tpg_japan_hot_spring_relaxation_modifier + years = 5 + } + if = { + limit = { + has_trait = ill + } + remove_trait = ill + } + + random_list = { + 33 = { + custom_tooltip = tgp_japan_yearly_mystic_positive.tt + send_interface_toast = { + title = tgp_japan_yearly_mystic_positive.tt + left_icon = root + right_icon = scope:mystic + + add_character_modifier = { + modifier = tgp_japan_hot_spring_mystic_positive_modifier + years = 5 + } + } + } + 33 = { + custom_tooltip = tgp_japan_yearly_mystic_neutral.tt + send_interface_toast = { + title = tgp_japan_yearly_mystic_neutral.tt + left_icon = root + right_icon = scope:mystic + + add_character_modifier = { + modifier = tgp_japan_hot_spring_mystic_neutral_modifier + years = 5 + } + } + } + 33 = { + custom_tooltip = tgp_japan_yearly_mystic_negative.tt + send_interface_toast = { + title = tgp_japan_yearly_mystic_negative.tt + left_icon = root + right_icon = scope:mystic + + add_character_modifier = { + modifier = tgp_japan_hot_spring_mystic_negative_modifier + years = 5 + } + } + } + } + + stress_impact = { + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_compassion = 1 + ai_sociability = 1 + } + } + } + + #Ask for guidance/wisdom, but do not join him + option = { + name = tgp_japan_yearly_events.0013.b + + current_travel_plan = { + delay_travel_plan = { days = 3 } + } + + duel = { + skill = learning + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0013.b.mystic.learning.tt.success + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0013.b.mystic.learning.tt.success + left_icon = root + right_icon = scope:mystic + add_learning_lifestyle_xp = medium_lifestyle_xp + + if = { + limit = { + has_trait = lifestyle_mystic + } + add_trait_xp = { + trait = lifestyle_mystic + value = lifestyle_mystic_xp_gain_minor_value + } + } + else = { + random = { + chance = 33 + add_trait = lifestyle_mystic + } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0013.b.mystic.learning.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + title = tgp_japan_yearly_events.0013.b.mystic.learning.tt.failure + left_icon = root + right_icon = scope:mystic + add_piety = medium_piety_loss + } + } + } + } + + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + ai_compassion = -1 + ai_rationality = 1 + ai_sociability = 1 + } + } + } + + #Opt out + option = { + name = tgp_japan_yearly_events.0013.c + + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + + add_stress = minor_stress_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + ai_compassion = -1 + ai_rationality = 1 + ai_sociability = 1 + } + } + } + after = { + if = { + limit = { + has_character_flag = fake_mystic + } + } + scope:mystic ?= { + silent_disappearance_effect = yes + } + } +} + +# 0014 - Taking It Easy - Onsen +tgp_japan_yearly_events.0014 = { + type = character_event + title = tgp_japan_yearly_events.0014.t + desc = tgp_japan_yearly_events.0014.desc + theme = travel + override_background = bp3_mountain_winter + override_effect_2d = { reference = fog } + cooldown = { years = 20 } + left_portrait = { + character = root + animation = admiration + } + + widget = { + is_shown = { + current_season_winter = yes + } + gui = "event_window_widget_vfx_snow" + container = "foreground_shader_vfx_container" + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + NOT = { + has_character_flag = had_event_tgp_japan_yearly_events.0012 + has_character_flag = had_event_tgp_japan_yearly_events.0013 + } + location = { + geographical_region = world_asia_japan + OR = { + terrain = mountains + terrain = hills + } + } + } + + immediate = { + add_character_flag = { + flag = had_event_tgp_japan_yearly_events.0014 + years = 15 + } + } + + #Take a relaxing bath, stress reduction + option = { + name = tgp_japan_yearly_events.0014.a + + current_travel_plan = { + delay_travel_plan = { days = 5 } + } + + add_character_modifier = { + modifier = tpg_japan_hot_spring_relaxation_modifier + years = 5 + } + + add_stress = medium_stress_loss + + stress_impact = { + lazy = minor_stress_impact_loss + patient = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 1 + } + } + } + + #Take an extended time off, additional stress reduction + option = { + name = tgp_japan_yearly_events.0014.b + + current_travel_plan = { + delay_travel_plan = { days = 10 } + } + + + add_character_modifier = { + modifier = tpg_japan_hot_spring_relaxation_modifier + years = 10 + } + + add_stress = major_stress_loss + + stress_impact = { + lazy = minor_stress_impact_loss + patient = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = 1 + } + } + } + + #Opt out + option = { + name = tgp_japan_yearly_events.0014.c + + stress_impact = { + lazy = minor_stress_impact_gain + impatient = minor_stress_impact_loss + } + + add_prestige = minor_prestige_gain + + add_stress = minor_stress_loss + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + ai_energy = -1 + } + } + } +} + +# 0021 - Among the Blossoms - Hanami (Cherry Blossoms) +tgp_japan_yearly_events.0021 = { + type = character_event + title = tgp_japan_yearly_events.0021.t + desc = tgp_japan_yearly_events.0021.desc + theme = love + override_background = garden + cooldown = { years = 15 } + left_portrait = { + character = root + animation = toast_goblet + } + right_portrait = { + character = scope:hanami_enjoyer + animation = storyteller + } + + trigger = { + has_tgp_dlc_trigger = yes + drinks_alcohol_trigger = yes + any_courtier = { + NOT = { has_trait = blind } + is_available_healthy_adult = yes + } + location = { + geographical_region = world_asia_japan + } + NOT = { has_trait = blind } + is_available_healthy_adult = yes + is_at_war = no + #The trees are in bloom between the end of March until early May + current_season_spring = yes + } + + immediate = { + random_courtier = { + limit = { + NOT = { has_trait = blind } + is_available_healthy_adult = yes + } + save_scope_as = hanami_enjoyer + } + } + + #Make an offering of sake to appease the gods + option = { + name = tgp_japan_yearly_events.0021.a + random_list = { + #Character modifier + 40 = { + show_chance = no + desc = tgp_japan_yearly_events.0021.a_pleased_deities.tt + send_interface_toast = { + right_icon = root + title = tgp_japan_yearly_events.0021.a_char_modifier.tt + add_character_modifier = { + modifier = tgp_japan_sake_offering_character_modifier + years = 5 + } + } + } + #County modifier + 40 = { + show_chance = no + desc = tgp_japan_yearly_events.0021.a_pleased_deities.tt + send_interface_toast = { + right_icon = root + title = tgp_japan_yearly_events.0021.a_county_modifier.tt + capital_county = { + add_county_modifier = { + modifier = tgp_japan_sake_offering_county_modifier + years = 5 + } + } + } + } + #Nothing happens + 20 = { + show_chance = no + desc = tgp_japan_yearly_events.0021.a_nothing_happens.tt + send_interface_toast = { + right_icon = root + title = tgp_japan_yearly_events.0021.a_nothing_happens.tt + } + } + } + add_piety = minor_piety_gain + + add_stress = minor_stress_loss + + stress_impact = { + calm = minor_stress_impact_loss + humble = minor_stress_impact_loss + cynical = major_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + ai_energy = 1 + } + } + } + + #Simply take in the view of the celebration + option = { + name = tgp_japan_yearly_events.0021.b + + add_prestige = miniscule_prestige_gain + + add_stress = major_stress_loss + + stress_impact = { + calm = minor_stress_impact_loss + humble = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + ai_energy = 1 + } + } + } +} + +# 0026 - Tales of the Tengu - Tengu +tgp_japan_yearly_events.0026 = { + type = character_event + title = tgp_japan_yearly_events.0026.t + desc = tgp_japan_yearly_events.0026.desc + theme = memory_intrigue + override_background = tavern + cooldown = { years = 70 } + left_portrait = { + character = scope:rumormonger + animation = toast_goblet + } + right_portrait = { + character = scope:gossiper + animation = wedding_drunk + } + + trigger = { + has_tgp_dlc_trigger = yes + location = { + geographical_region = world_asia_japan + } + any_courtier_or_guest = { + count >= 2 + is_available_healthy_adult = yes + NOT = { + has_trait = temperate + } + } + is_available_healthy_adult = yes + } + + immediate = { + random_courtier_or_guest = { + limit = { + is_available_healthy_adult = yes + NOT = { + has_trait = temperate + } + } + save_scope_as = rumormonger + } + random_courtier_or_guest = { + limit = { + is_available_healthy_adult = yes + NOR = { + this = scope:rumormonger + has_trait = temperate + } + } + save_scope_as = gossiper + } + } + + #Options A) Intrigued by the rumors, try to find this Tengu + option = { + name = tgp_japan_yearly_events.0026.a + custom_tooltip = tgp_japan_yearly_events.0026.a.tt + add_character_flag = { + flag = tengu_rumors + years = 30 + } + + add_character_modifier = { + modifier = tgp_japan_tengu_rumors_character_modifier + years = 30 + } + + stress_impact = { + trusting = minor_stress_impact_loss + paranoid = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + ai_energy = 1 + } + } + } + + # Option B) Don't bother with the talk of drunks + option = { + name = tgp_japan_yearly_events.0026.b + + add_prestige = minor_prestige_gain + + stress_impact = { + trusting = minor_stress_impact_gain + paranoid = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = -1 + } + } + } +} + +# 0027 - Prove Your Worth - Tengu +tgp_japan_yearly_events.0027 = { + type = character_event + title = tgp_japan_yearly_events.0027.t + desc = tgp_japan_yearly_events.0027.desc + theme = travel + left_portrait = { + character = root + animation = aggressive_sword + } + right_portrait = { + character = scope:tengu_warrior + animation = hasso_no_kamae + camera = camera_event_center_background_crowd_right + } + override_effect_2d = { reference = fog } + trigger = { + has_tgp_dlc_trigger = yes + has_character_flag = tengu_rumors + NOT = { + has_character_flag = had_event_tgp_japan_yearly_events.0028 + } + location = { + geographical_region = world_asia_japan + OR = { + terrain = mountains + terrain = forest + } + } + is_available_travelling_adult = yes + } + + #Create a samurai warrior + immediate = { + hidden_effect = { + remove_character_modifier = tgp_japan_tengu_rumors_character_modifier + } + + create_character = { + template = tgp_japan_yearly_events_tengu_warrior_template + location = root.location + after_creation = { + add_trait = disfigured + add_trait = albino + add_character_flag = no_headgear + } + save_scope_as = tengu_warrior + } + + scope:tengu_warrior = { + random_character_trait = { + limit = { + has_trait_category = commander + } + save_scope_as = commander_trait + } + } + + add_character_flag = { + flag = had_event_tgp_japan_yearly_events.0027 + years = 30 + } + } + + #Prove your worth, fight the warrior + option = { + name = tgp_japan_yearly_events.0027.a + + + duel = { + skill = prowess + target = scope:tengu_warrior + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0027.a.tt.success + min = 20 + max = 90 + send_interface_toast = { + title = tgp_japan_yearly_events.0027.a.tt.success + left_icon = root + right_icon = scope:tengu_warrior + custom_tooltip = tgp_japan_yearly_events.0027.a.tt.success_explanation + current_travel_plan = { + delay_travel_plan = { days = 14 } + } + add_character_flag = { + flag = real_tengu + days = 1 + } + trigger_event = { + id = tgp_japan_yearly_events.0029 + days = 13 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0027.a.tt.failure + min = 20 + max = 90 + send_interface_toast = { + title = tgp_japan_yearly_events.0027.a.tt.failure + left_icon = root + right_icon = scope:tengu_warrior + increase_wounds_no_death_effect = { REASON = battle } + + add_prestige = minor_prestige_loss + } + } + } + + stress_impact = { + brave = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 1 + ai_rationality = -1 + ai_energy = 1 + } + } + } + + #Try to convince the warrior to join you + option = { + name = tgp_japan_yearly_events.0027.b + + duel = { + skill = diplomacy + target = scope:tengu_warrior + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0027.b.tt.success + min = 20 + max = 90 + send_interface_toast = { + title = tgp_japan_yearly_events.0027.b.tt.success + left_icon = root + right_icon = scope:tengu_warrior + current_travel_plan = { + add_companion = scope:tengu_warrior + } + add_character_flag = { + flag = real_tengu + days = 1 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_japan_yearly_events.0027.b.tt.failure + min = 20 + max = 90 + send_interface_toast = { + title = tgp_japan_yearly_events.0027.b.tt.failure + left_icon = root + right_icon = scope:tengu_warrior + increase_wounds_no_death_effect = { REASON = battle } + } + } + } + + stress_impact = { + trusting = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_sociability = 1 + } + } + } + + #Run away + option = { + name = tgp_japan_yearly_events.0027.c + + current_travel_plan = { + delay_travel_plan = { days = 7 } + } + + stress_impact = { + craven = minor_stress_impact_loss + shy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_sociability = -1 + } + } + } + + after = { + remove_character_flag = tengu_rumors + if = { + limit = { + NOT = { + has_character_flag = real_tengu + } + } + scope:tengu_warrior ?= { + silent_disappearance_effect = yes + } + } + } +} + +# 0028 - False Rumors - Tengu +tgp_japan_yearly_events.0028 = { + type = character_event + title = tgp_japan_yearly_events.0028.t + desc = tgp_japan_yearly_events.0028.desc + theme = travel + left_portrait = { + character = root + animation = anger + camera = camera_body_right + } + widget = { + gui = "event_window_widget_vfx_fog" + container = "foreground_shader_vfx_container" + } + + trigger = { + has_tgp_dlc_trigger = yes + has_character_flag = tengu_rumors + NOT = { + has_character_flag = had_event_tgp_japan_yearly_events.0027 + } + location = { + geographical_region = world_asia_japan + OR = { + terrain = mountains + terrain = forest + } + } + is_available_travelling_adult = yes + } + + immediate = { + hidden_effect = { + remove_character_modifier = tgp_japan_tengu_rumors_character_modifier + } + + add_character_flag = { + flag = had_event_tgp_japan_yearly_events.0028 + years = 20 + } + } + + #Become a bit more cautious for the future + option = { + name = tgp_japan_yearly_events.0028.a + + add_character_modifier = { + modifier = tgp_japan_cautious_curiosity_character_modifier + years = 5 + } + + stress_impact = { + craven = minor_stress_impact_loss + trusting = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_vengefulness = -1 + ai_sociability = -1 + } + } + } + + #Scream to let out some stress/disappointment + option = { + name = tgp_japan_yearly_events.0028.b + + stress_impact = { + base = medium_stress_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + ai_vengefulness = 1 + } + } + } + + after = { + remove_character_flag = tengu_rumors + } +} + +# 0029 - Practice Makes Perfect - Tengu +tgp_japan_yearly_events.0029 = { + type = character_event + title = tgp_japan_yearly_events.0029.t + desc = tgp_japan_yearly_events.0029.desc + theme = travel + left_portrait = { + character = root + animation = chudan_no_kamae + camera = camera_event_center_mostly_away_right + } + right_portrait = { + character = scope:tengu_warrior + animation = chudan_no_kamae + camera = camera_event_center_pointing_forward_fov35 + } + + trigger = { + has_tgp_dlc_trigger = yes + scope:tengu_warrior ?= { is_alive = yes } + } + + #Gain blademaster combined with a trait your mentor has + option = { + name = tgp_japan_yearly_events.0029.a + + if = { + limit = { + NOT = { + has_trait = lifestyle_blademaster + } + } + add_trait = lifestyle_blademaster + } + else = { + add_trait_xp = { + trait = lifestyle_blademaster + value = 10 + } + } + + add_trait = scope:commander_trait + + stress_impact = { + ambitious = minor_stress_impact_loss + diligent = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_rationality = 1 + } + } + } + + option = { + name = tgp_japan_yearly_events.0029.b + + if = { + limit = { + NOT = { + has_trait = lifestyle_blademaster + } + } + add_trait = lifestyle_blademaster + } + else = { + add_trait_xp = { + trait = lifestyle_blademaster + value = 10 + } + } + + add_martial_lifestyle_perk_points = 1 + + stress_impact = { + ambitious = minor_stress_impact_loss + diligent = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + add = 100 + has_lifestyle = martial_lifestyle + } + ai_value_modifier = { + ai_honor = 1 + ai_rationality = 1 + } + } + } +} + +# 0036 - Reflection of Pure Land +tgp_japan_yearly_events.0036 = { + type = character_event + title = tgp_japan_yearly_events.0036.t + desc = tgp_japan_yearly_events.0036.desc + theme = memory_positive + override_background = garden + cooldown = { years = 30 } + left_portrait = { + character = root + animation = debating + camera = camera_council + } + right_portrait = { + character = scope:gardener + animation = interested + } + + trigger = { + has_tgp_dlc_trigger = yes + is_valid_for_japan_events_trigger = yes + employs_court_position = court_gardener_court_position + is_available_healthy_adult = yes + } + + immediate = { + random_court_position_holder = { + limit = { + is_available_ai_adult = yes + } + type = court_gardener_court_position + save_scope_as = gardener + } + } + + # Option A) Assist the gardener and get piety and possibly gardener trait. + option = { + name = tgp_japan_yearly_events.0036.a + custom_tooltip = tgp_japan_yearly_events.0036.a.random_chance + add_piety = medium_piety_gain + if = { + limit = { + NOT = { has_trait = lifestyle_gardener } + } + random = { + chance = { + value = 20 + if = { + limit = { + root.stewardship >= monumentally_high_skill_rating + } + add = 20 + } + else_if = { + limit = { + root.stewardship >= extremely_high_skill_rating + } + add = 15 + } + else_if = { + limit = { + root.stewardship >= very_high_skill_rating + } + add = 10 + } + else_if = { + limit = { + root.stewardship >= high_skill_rating + } + add = 5 + } + } + add_trait = lifestyle_gardener + } + } + else_if = { + limit = { + NOT = { has_trait = lifestyle_herbalist } + } + add_trait = lifestyle_herbalist + } + else = { + add_stress = minor_stress_loss + } + + stress_impact = { + compassionate = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 5 + ai_value_modifier = { + ai_compassion = 1 + ai_energy = 1 + } + } + } + + # Option B) More fish to get diplomacy bonus + option = { + name = tgp_japan_yearly_events.0036.b + + add_character_modifier = { + modifier = tpg_japan_add_fish_to_pond_modifier + years = 3 + } + + stress_impact = { + calm = minor_stress_impact_loss + content = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + ai_energy = -1 + } + } + } +} + +# 1200 - Congestion in the Capital +# by Laurence Kennedy +tgp_japan_yearly_events.1200 = { + type = character_event + title = tgp_japan_yearly_events.1200.t + desc = tgp_japan_yearly_events.1200.desc + theme = vassal + cooldown = { years = 20 } + override_background = { + reference = tgp_japanese_city + } + #You, the Kampaku + left_portrait = { + character = scope:kampaku + animation = disbelief + } + + #upstart vassal + right_portrait = { + character = scope:upstart + animation = jockey_walk + camera = camera_event_horse_right + } + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = root.capital_province + has_title = title:e_japan + NOT = { has_title = title:k_chrysanthemum_throne } + government_has_flag = government_is_japan_administrative + any_vassal = { + is_available_ai_adult = yes + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + } + immediate = { + random_vassal = { + limit = { + is_available_ai_adult = yes + OR = { + has_trait = arrogant + has_trait = ambitious + } + } + save_scope_as = upstart + } + + title:k_chrysanthemum_throne.holder ?= { + save_scope_as = emperor + } + + save_scope_as = kampaku + } + #Drag him from his horse! + option = { + name = tgp_japan_yearly_events.1200.a + #Your men hurt the Upstart + scope:upstart = { + increase_wounds_effect = { REASON = horse_riding_accident } + add_opinion = { + target = scope:kampaku + modifier = angry_opinion + opinion = low_negative_opinion + } + } + #You gain influence and prestige + change_influence = medium_influence_gain + add_prestige = medium_prestige_gain + #Upstart loses prestige and influence + scope:upstart = { + add_prestige = minor_prestige_loss + change_influence = medium_influence_loss + #If possible it progresses rivalry + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:kampaku } + } + progress_towards_rival_effect = { + REASON = rival_pulled_me_off_horse + CHARACTER = scope:kampaku + OPINION = default_rival_opinion + } + } + #otherwise it makes them like you less + else = { + add_opinion = { + target = scope:kampaku + modifier = humbled_opinion + opinion = -40 + } + } + } + stress_impact = { + craven = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + humble = minor_stress_impact_gain + just = medium_stress_impact_loss + callous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = craven + has_trait = compassionate + has_trait = humble + } + } + } + #Let him think he can get away with this + option = { + name = tgp_japan_yearly_events.1200.b + add_intrigue_lifestyle_xp = medium_lifestyle_experience + change_influence = minor_influence_loss + #If we have a scheme, boost it! + if = { + limit = { + NOT = { + any_scheme = { + scheme_type = slander + scheme_target_character = scope:upstart + } + } + } + #If we don't have a scheme, let's scheme with a boost + start_scheme = { + type = slander + target_character = scope:upstart + } + } + custom_tooltip = { + text = tgp_japan_yearly_events.1200.b.tt + random_scheme = { + limit = { + scheme_type = slander + scheme_target_character = scope:upstart + } + add_scheme_modifier = { + type = bided_my_time + } + } + } + stress_impact = { + ambitious = minor_stress_impact_gain + brave = minor_stress_impact_gain + just = minor_stress_impact_gain + vengeful = medium_stress_impact_loss + craven = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = ambitious + has_trait = brave + has_trait = just + } + } + } + #Kill him with kindness + option = { + name = tgp_japan_yearly_events.1200.c + add_diplomacy_lifestyle_xp = medium_lifestyle_experience + add_piety = medium_piety_gain + change_influence = minor_influence_loss + if = { + #If we have a scheme, boost it! + limit = { + NOT = { + any_scheme = { + scheme_type = befriend + scheme_target_character = scope:upstart + } + } + } + #If we don't have a scheme, let's scheme with a boost + start_scheme = { + type = befriend + target_character = scope:upstart + } + } + custom_tooltip = { + text = tgp_japan_yearly_events.1200.c.tt + random_scheme = { + limit = { + scheme_type = befriend + scheme_target_character = scope:upstart + } + add_scheme_modifier = { type = settled_differences_modifier } + } + } + stress_impact = { + impatient = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + shy = minor_stress_impact_gain + trusting = minor_stress_impact_gain + patient = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = impatient + has_trait = paranoid + has_trait = arrogant + has_trait = shy + } + } + } +} + +scripted_effect create_cadet_house_effect = { + add_character_flag = found_cadet_branch + add_trait = disinherited + trigger_event = tgp_japan_decision.9001 +} + +# 1210 - Fit to Lead? +# by Laurence Kennedy +tgp_japan_yearly_events.1210 = { + type = character_event + title = tgp_japan_yearly_events.1210.t + desc = { + desc = tgp_japan_yearly_events.1210.desc.intro + random_valid = { + #low prowess house head + triggered_desc = { + trigger = { scope:reason ?= flag:weak_prowess } + desc = tgp_japan_yearly_events.1210.desc.reason_weak_prowess + } + #Unhealthy house head + triggered_desc = { + trigger = { scope:reason ?= flag:bad_health } + desc = tgp_japan_yearly_events.1210.desc.reason_bad_health + } + #drunk house head + triggered_desc = { + trigger = { scope:reason ?= flag:drunkard } + desc = tgp_japan_yearly_events.1210.desc.reason_drunkard + } + #bad genetics + triggered_desc = { + trigger = { scope:reason ?= flag:bad_genetic } + desc = tgp_japan_yearly_events.1210.desc.bad_genetic + } + #sinful + triggered_desc = { + trigger = { scope:reason ?= flag:sinful } + desc = tgp_japan_yearly_events.1210.desc.sinful + } + #low legitimacy + triggered_desc = { + trigger = { scope:reason ?= flag:low_legitimacy } + desc = tgp_japan_yearly_events.1210.desc.low_legitimacy + } + #older sibling + triggered_desc = { + trigger = { scope:reason ?= flag:older_sibling } + desc = tgp_japan_yearly_events.1210.desc.older_sibling + } + #illegitimized + triggered_desc = { + trigger = { scope:reason ?= flag:illegitimized } + desc = tgp_japan_yearly_events.1210.desc.illegitimized + } + + #child of a concubine + triggered_desc = { + trigger = { scope:reason ?= flag:concubine_child } + desc = tgp_japan_yearly_events.1210.desc.concubine_child + } + #Wrong Gender + triggered_desc = { + trigger = { scope:reason ?= flag:non_dominant_gender } + desc = tgp_japan_yearly_events.1210.desc.reason_non_dominant_gender + } + #Fallback + triggered_desc = { + trigger = { scope:reason ?= flag:fallback } + desc = tgp_japan_yearly_events.1210.desc.reason_fallback + } + } + desc = tgp_japan_yearly_events.1210.desc.outro + } + theme = dynasty + cooldown = { years = 20 } + override_background = { + reference = throne_room + } + #You, the Contested House Head + left_portrait = { + character = scope:new_house_head + animation = disgust + camera = camera_event_crowd + } + + #The person contesting your place as house head + right_portrait = { + character = scope:contester + animation = debating + } + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + government_is_japanese_trigger = yes + is_house_head = yes + has_domicile = yes + is_independent_ruler = no + any_close_or_extended_family_member = { + is_available_ai_adult = yes + #make sure they live in japan + top_liege ?= root.top_liege + is_house_head = no + house = root.house + # Dominant gender + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + #if it's your kid, stricter requirements + trigger_if = { + limit = { + is_child_of = root + } + #you're too old, become a monk! + root.age > 60 + #he hates you + opinion = { target = root value <= low_positive_opinion } + #he's a little shit + OR = { + has_trait = ambitious + has_trait = arrogant + } + } + #not a friendly with you + NOR = { + has_trait = loyal + has_friendly_relationship_trigger = { CHARACTER = root } + this = root + has_trait = humble + has_trait = content + has_trait = devoted + } + } + } + immediate = { + #This is root + save_scope_as = new_house_head + #find a contester + random_close_or_extended_family_member = { + limit = { + is_available_ai_adult = yes + #make sure they live in japan + top_liege ?= root.top_liege + is_house_head = no + house = root.house + # Dominant gender + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + #if it's your kid, stricter requirements + trigger_if = { + limit = { + is_child_of = root + } + #you're too old, become a monk! + root.age > 60 + #he hates you + opinion = { target = root value <= low_positive_opinion } + #he's a little shit + OR = { + has_trait = ambitious + has_trait = arrogant + } + } + #not a friendly with you + NOR = { + has_trait = loyal + has_friendly_relationship_trigger = { CHARACTER = root } + this = root + has_trait = humble + has_trait = content + has_trait = devoted + } + } + weight = { + base = 1 + modifier = { + has_trait = ambitious + add = 20 + } + modifier = { + has_trait = arrogant + add = 20 + } + modifier = { + has_trait = lazy + add = -10 + } + modifier = { + is_close_family_of = scope:new_house_head + add = 40 + } + modifier = { + is_child_of = scope:new_house_head + add = -50 + } + } + save_scope_as = contester + } + if = { + limit = { + any_held_county = { + count > 1 + is_landless_type_title = no + } + } + ordered_held_county = { + limit = { + is_landless_type_title = no + NOT = { this = root.capital_county } + } + order_by = { + value = 0 + subtract = root.capital_province.num_buildings + } + save_scope_as = gift_county + } + } + #reason for being challenged as house head + random_list = { + #low prowess + 100 = { + trigger = { + prowess < scope:contester.prowess + } + save_scope_value_as = { + name = reason + value = flag:weak_prowess + } + } + #Unhealthy house head + 100 = { + trigger = { + is_healthy = no + NOT = { + scope:contester = { + is_healthy = no + } + } + } + save_scope_value_as = { + name = reason + value = flag:bad_health + } + } + #drunk house head + 100 = { + trigger = { + has_trait = drunkard + NOT = { + scope:contester = { + has_trait = drunkard + } + } + } + save_scope_value_as = { + name = reason + value = flag:drunkard + } + } + #bad congenital traits + 100 = { + trigger = { + num_of_bad_genetic_traits > scope:contester.num_of_bad_genetic_traits + } + save_scope_value_as = { + name = reason + value = flag:bad_genetic + } + } + #low legitimacy + 100 = { + trigger = { + has_legitimacy = yes + legitimacy < 3 + } + save_scope_value_as = { + name = reason + value = flag:low_legitimacy + } + } + #sinful traits + 100 = { + trigger = { + num_sinful_traits > scope:contester.num_sinful_traits + } + save_scope_value_as = { + name = reason + value = flag:sinful + } + } + 100 = { + trigger = { + OR = { + has_trait = child_of_concubine + has_trait = child_of_concubine_female + } + NOR = { + scope:contester = { + has_trait = child_of_concubine + has_trait = child_of_concubine_female + } + } + } + save_scope_value_as = { + name = reason + value = flag:concubine_child + } + } + #find an older sibling who is the right gender to inherit + 100 = { + trigger = { + scope:contester = { + is_sibling_of = scope:new_house_head + age > scope:new_house_head.age + trigger_if = { + limit = { is_male = yes } + scope:new_house_head = { + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + trigger_else = { + scope:new_house_head = { + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + } + } + } + save_scope_value_as = { + name = reason + value = flag:older_sibling + } + } + + #house head was illegitimized + 100 = { + trigger = { + OR = { + AND = { + has_trait = bastard + scope:new_house_head = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + scope:contester = { + NOR = { + AND = { + has_trait = bastard + scope:new_house_head = { + faith = { NOT = { has_doctrine = doctrine_bastardry_none } } + } + } + has_trait = denounced + has_trait = disinherited + } + } + } + save_scope_value_as = { + name = reason + value = flag:illegitimized + } + } + #wrong gender + 100 = { + trigger = { + OR = { + AND = { + is_male = yes + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + AND = { + is_female = yes + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + scope:contester = { + OR = { + AND = { + is_male = no + OR = { + has_realm_law = female_only_law + has_realm_law = female_preference_law + } + } + AND = { + is_female = no + OR = { + has_realm_law = male_only_law + has_realm_law = male_preference_law + } + } + } + } + } + save_scope_value_as = { + name = reason + value = flag:non_dominant_gender + } + } + #fallback + 1 = { + save_scope_value_as = { + name = reason + value = flag:fallback + } + } + } + } + # a) Rebuke this outrageous claim! + option = { + name = tgp_japan_yearly_events.1210.a + #You gain Prestige and Dread + add_prestige = medium_prestige_gain + add_dread = medium_dread_gain + #Contester doesn't like you + scope:contester = { + #They go to the pool if they're your courtier + if = { + limit = { + is_courtier_of = scope:new_house_head + } + move_to_pool = yes + } + #their family is upset by contester's departure + if = { + limit = { + scope:contester = { + NOT = { is_close_family_of = root } + } + } + every_close_family_member = { + custom = all_family_members + limit = { + scope:new_house_head != this + } + add_opinion = { + modifier = sullied_our_house_opinion + target = scope:new_house_head + } + } + } + #If possible it progresses rivalry + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:new_house_head } + } + progress_towards_rival_effect = { + REASON = rival_challenged_house_head_status + CHARACTER = scope:new_house_head + OPINION = default_rival_opinion + } + } + #otherwise it makes them like you even less + else = { + add_opinion = { + target = scope:new_house_head + modifier = humbled_opinion + opinion = -60 + } + } + } + stress_impact = { + craven = minor_stress_impact_gain + humble = minor_stress_impact_gain + just = medium_stress_impact_loss + callous = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = craven + has_trait = humble + } + } + } + #b) Compromise by giving them a cadet branch with modifier that has has friendly house relations + option = { + name = tgp_japan_yearly_events.1210.b + flavor = tgp_japan_yearly_events.1210.b.flavor + trigger = { exists = scope:gift_county } + #You gain Piety + add_piety = medium_piety_gain + # Give land + create_title_and_vassal_change = { + type = granted + save_scope_as = change + add_claim_on_loss = no + } + scope:gift_county = { + change_title_holder = { + holder = scope:contester + change = scope:change + } + } + resolve_title_and_vassal_change = scope:change + #Contester gets cadet branch and likes you + scope:contester = { + custom_tooltip = { + text = tgp_japan_yearly_events.1210.b.tt + create_cadet_house_effect = yes + create_noble_family_effect = { GOVERNMENT_GIVER = root } + house = { + set_house_relation = { + target = scope:new_house_head.house + level = friendly + description = house_relation_friendly_reason_cadet_branch_permission_desc + } + } + } + add_opinion = { + target = scope:new_house_head + modifier = respect_opinion + opinion = low_positive_opinion + } + if = { + limit = { + scope:contester = { + NOT = { is_close_family_of = root } + } + } + #their family appreciates your kindness + every_close_family_member = { + custom = all_family_members + limit = { + scope:new_house_head != this + } + add_opinion = { + modifier = kindness_opinion + target = scope:new_house_head + opinion = 35 + } + } + } + } + stress_impact = { + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + content = medium_stress_impact_loss + } + ai_chance = { + base = 25 + modifier = { + factor = 0 + has_trait = ambitious + has_trait = arrogant + } + modifier = { + top_liege = { + any_vassal = { + count >= 100 + is_landed = no + } + } + factor = 0 + } + } + } + #c) Smooth it over + option = { + name = tgp_japan_yearly_events.1210.c + add_diplomacy_lifestyle_xp = medium_lifestyle_experience + + #Diplomacy Challenge + duel = { + skill = diplomacy + value = high_skill_rating + # Good outcome! + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 5 + desc = tgp_japan_yearly_events.1210.c.good + send_interface_toast = { + title = tgp_japan_yearly_events.1210.c.good + change_influence = major_influence_gain + house = { + every_house_member = { + custom = tgp_japan_yearly_events.1210.c.good.tt + limit = { + NOT = { this = root } + } + add_opinion = { + target = root + modifier = respect_opinion + opinion = 20 + } + } + } + scope:contester = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 30 + } + } + } + } + # Mid outcome. + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = tgp_japan_yearly_events.1210.c.bad + send_interface_toast = { + title = tgp_japan_yearly_events.1210.c.bad + pay_short_term_gold = { + target = scope:contester + gold = minor_gold_value + } + scope:contester = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 15 + } + } + } + } + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 5 + desc = tgp_japan_yearly_events.1210.c.ugly + send_interface_toast = { + title = tgp_japan_yearly_events.1210.c.ugly + add_prestige = medium_prestige_loss + scope:contester = { + #You really put your foot in it, nemesis time + if = { + limit = { + can_set_relation_nemesis_trigger = { CHARACTER = scope:new_house_head } + } + set_relation_nemesis = { + target = scope:new_house_head + reason = rival_challenged_house_head_status + } + } + #If you already have a nemesis, it's possible it progresses rivalry + else_if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:new_house_head } + } + progress_towards_rival_effect = { + REASON = rival_challenged_house_head_status + CHARACTER = scope:new_house_head + OPINION = default_rival_opinion + } + } + #otherwise it makes them like you even less + else = { + add_opinion = { + target = scope:new_house_head + modifier = humbled_opinion + opinion = -60 + } + } + } + } + } + } + stress_impact = { + impatient = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + shy = minor_stress_impact_gain + trusting = minor_stress_impact_gain + patient = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = impatient + has_trait = arrogant + has_trait = shy + } + } + } + #d) Ignore it. + option = { + name = tgp_japan_yearly_events.1210.d + flavor = tgp_japan_yearly_events.1210.d.flavor + #You gain influence and prestige + change_influence = minor_influence_gain + add_prestige = minor_prestige_gain + #Contester gets cadet branch and dislikes you + scope:contester = { + custom_tooltip = { + text = tgp_japan_yearly_events.1210.d.tt + create_cadet_house_effect = yes + create_noble_family_effect = { GOVERNMENT_GIVER = root } + house = { + set_house_relation = { + target = scope:new_house_head.house + level = quarrel + description = house_relation_quarrel_reason_cadet_branch_permission_desc + } + } + } + add_opinion = { + target = scope:new_house_head + modifier = angry_opinion + opinion = low_negative_opinion + } + } + stress_impact = { + ambitious = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + content = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + ai_chance = { + base = 25 + modifier = { + factor = 0 + has_trait = ambitious + has_trait = arrogant + } + modifier = { + top_liege = { + any_vassal = { + count >= 100 + is_landed = no + } + } + factor = 0 + } + } + } +} +# 1225 - A Poetic Life +# by Laurence Kennedy +tgp_japan_yearly_events.1225 = { + type = character_event + title = tgp_japan_yearly_events.1225.t + desc = { + #if teacher + triggered_desc = { + trigger = { exists = scope:poet_influencer } + desc = tgp_japan_yearly_events.1225.desc.intro.influencer + } + #Fallback + triggered_desc = { + trigger = { + NOT = { exists = scope:poet_influencer } + } + desc = tgp_japan_yearly_events.1225.desc.intro + } + desc = tgp_japan_yearly_events.1225.desc + } + theme = education + cooldown = { years = 100 } + #You, the poet to be + left_portrait = { + character = scope:new_poet + animation = admiration + } + #Your teacher if you have one guardian, elder, tutor etc + right_portrait = { + character = scope:poet_influencer + animation = debating + } + trigger = { + has_tgp_dlc_trigger = yes + NOT = { + has_trait = lifestyle_poet + } + #East Asia values poetry + location = { + geographical_region = world_asia_east + } + government_has_flag = government_is_tribal + age >= 10 + is_lowborn = no + probably_unintelligent_trigger = no + } + immediate = { + #This is root + save_scope_as = new_poet + #find a teacher figure if they exist + every_relation = { + type = guardian + type = elder + type = mentor + add_to_list = potential_poet_influencer + } + every_courtier = { + limit = { + has_trait = lifestyle_poet + } + add_to_list = potential_poet_influencer + } + every_court_position_holder = { + type = court_poet_court_position + type = court_tutor_court_position + type = court_scholar_court_position + add_to_list = potential_poet_influencer + } + + every_parent = { + add_to_list = potential_poet_influencer + } + random_in_list = { + list = potential_poet_influencer + limit = { + has_trait = lifestyle_poet + is_available_ai_adult = yes + probably_unintelligent_trigger = no + } + alternative_limit = { + is_available_ai_adult = yes + probably_unintelligent_trigger = no + } + weight = { + base = 1 + opinion_modifier = { + opinion_target = root + multiplier = 1 + } + is_of_minor_interest_to_weight_up_modifier = { CHARACTER = root } + is_of_major_interest_to_weight_up_modifier = { CHARACTER = root } + } + save_scope_as = poet_influencer + } + } + # a) Poetry is a way of life, start living! + option = { + name = tgp_japan_yearly_events.1225.a + flavor = tgp_japan_yearly_events.1225.a.flavor + add_character_modifier = { + modifier = tgp_japan_a_poetic_life_modifier + } + add_trait = lifestyle_poet + stress_impact = { + impatient = minor_stress_impact_gain + humble = minor_stress_impact_gain + content = minor_stress_impact_gain + ambitious = medium_stress_impact_loss + eccentric = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = impatient + has_trait = content + has_trait = humble + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + } + } + } + + #b) alt no poetry give xp? + option = { + name = tgp_japan_yearly_events.1225.b + add_prestige = minor_prestige_gain + gain_appropriate_lifestyle_major_xp_effect = yes + stress_impact = { + patient = minor_stress_impact_gain + fickle = minor_stress_impact_gain + impatient = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = patient + has_trait = fickle + } + } + } + } +} + +# 1260 - A Poetic Life : Love and Death +# by Laurence Kennedy +tgp_japan_yearly_events.1260 = { + type = character_event + title = tgp_japan_yearly_events.1260.t + desc = { + desc = tgp_japan_yearly_events.1260.desc + } + override_effect_2d = { + reference = legend_glow + } + theme = romance_scheme + override_background = { + reference = garden + } + cooldown = { years = 100 } + #You, the poet ready for inspiration + left_portrait = { + character = scope:inspired_poet + animation = love + } + trigger = { + has_tgp_dlc_trigger = yes + has_trait = lifestyle_poet + is_adult = yes + } + immediate = { + #This is root + save_scope_as = inspired_poet + } + # a) Poetry is a way of life, start living! + option = { + name = tgp_japan_yearly_events.1260.a + flavor = tgp_japan_yearly_events.1260.a.flavor + #If they didn't get the poetry learning event give them a modifier + if = { + limit = { + NOT = { + has_character_modifier = tgp_japan_a_poetic_life_modifier + } + } + add_character_modifier = { + modifier = tgp_japan_a_poetic_life_modifier + years = { 10 20 } + } + } + add_trait = lifestyle_poet + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = minor_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = medium_stress_impact_loss + lustful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + } + } + } + #b) Maybe poetry isn't for me? + option = { + name = tgp_japan_yearly_events.1260.b + add_piety = medium_piety_gain + stress_impact = { + lustful = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + chaste = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = gregarious + } + } + } + } + after = { + trigger_event = { + on_action = tgp_japan_poetry_events + days = 365 + } + } +} + +scripted_effect count_poet_inspiration_events = { + if = { + limit = { + has_variable = count_poet_inspiration + } + change_variable = { + name = count_poet_inspiration + add = 1 + } + } + else = { + set_variable = { + name = count_poet_inspiration + value = 1 + } + } + #trigger next event after a year + if = { + limit = { + has_variable = count_poet_inspiration + var:count_poet_inspiration < 3 + } + trigger_event = { + on_action = tgp_japan_poetry_events + months = { 10 12 } + } + } + #trigger follow up where you get your book of poetry + else = { + trigger_event = { + id = tgp_japan_yearly_events.1270 + days = { 14 29 } + } + } + +} + +scripted_trigger can_have_poet_inspiration_trigger = { + trigger_if = { + limit = { + exists = var:count_poet_inspiration + } + var:count_poet_inspiration < 3 + } +} +# 1261 - A Poetic Life : Imperial Immortality +# by Laurence Kennedy +tgp_japan_yearly_events.1261 = { + type = character_event + title = tgp_japan_yearly_events.1261.t + desc = { + desc = tgp_japan_yearly_events.1261.desc + triggered_desc = { + trigger = { + scope:inspired_poet = { + has_trait = eunuch + } + } + desc = tgp_japan_yearly_events.1261.chop.desc + } + } + override_effect_2d = { + reference = legend_glow + } + theme = romance_scheme + override_background = { + reference = corridor_night + } + cooldown = { years = 100 } + #You, the poet ready for to attend on your topliege's spouse + left_portrait = { + character = scope:inspired_poet + animation = love + } + #A spouse to help with your immortality + right_portrait = { + character = scope:top_liege_spouse + animation = flirtation + } + + lower_center_portrait = { + character = scope:top_cuckold + animation = anger + } + + trigger = { + can_have_poet_inspiration_trigger = yes + has_tgp_dlc_trigger = yes + has_trait = lifestyle_poet + is_adult = yes + is_available = yes + + #find a emperor or top liege to meet the spouse of + OR = { + AND = { + tgp_realm_has_ceremonial_liege_trigger = yes + top_liege.primary_title.var:administrative_ui_special_title.holder = { + this != root + any_spouse = { + this != root + possibly_interested_in_character_trigger = { CHARACTER = root } + might_cheat_on_every_partner_trigger = yes + } + } + } + top_liege = { + this != root + any_spouse = { + this != root + possibly_interested_in_character_trigger = { CHARACTER = root } + might_cheat_on_every_partner_trigger = yes + } + } + } + } + + immediate = { + #This is you + save_scope_as = inspired_poet + #Find spouse of top liege or ceremonial liege + tgp_save_realm_ceremonial_liege_effect = yes + if = { + limit = { + scope:ceremonial_liege ?= { + this != root + any_spouse = { + count > 0 + } + } + } + scope:ceremonial_liege = { + save_scope_as = top_cuckold + random_spouse = { + limit = { + #don't sleep with yourself + this != root + possibly_interested_in_character_trigger = { + CHARACTER = root + } + might_cheat_on_every_partner_trigger = yes + } + save_scope_as = top_liege_spouse + } + } + } + else = { + top_liege = { + save_scope_as = top_cuckold + random_spouse = { + limit = { + #don't sleep with yourself + this != root + possibly_interested_in_character_trigger = { + CHARACTER = root + } + might_cheat_on_every_partner_trigger = yes + } + save_scope_as = top_liege_spouse + } + } + } + } + + # a) Let's be immortal together! + option = { + name = tgp_japan_yearly_events.1261.a + flavor = tgp_japan_yearly_events.1261.a.flavor + trigger = { + NOT = { + scope:inspired_poet = { + has_trait = eunuch + } + } + } + had_sex_with_effect = { + CHARACTER = scope:top_liege_spouse + PREGNANCY_CHANCE = pregnancy_chance + } + scope:top_liege_spouse ?= { + add_opinion = { + target = scope:inspired_poet + modifier = pleased_opinion + opinion = 30 + } + } + add_character_modifier = { + modifier = tgp_japan_made_high_liege_cuckold_modifier + years = { 10 20 } + } + dynasty = { + add_dynasty_prestige = minor_dynasty_prestige_gain + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = medium_stress_impact_gain + loyal = medium_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = minor_stress_impact_loss + lustful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + has_trait = loyal + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + prowess <= high_skill_rating + } + modifier = { + factor = 0 + NOT = { + possibly_interested_in_character_trigger = { + CHARACTER = scope:top_liege_spouse + } + } + might_cheat_on_every_partner_trigger = no + } + modifier = { + factor = 100 + possibly_interested_in_character_trigger = { + CHARACTER = scope:top_liege_spouse + } + might_cheat_on_every_partner_trigger = yes + } + } + } + # d) eunuch sex + option = { + name = tgp_japan_yearly_events.1261.d + trigger = { + scope:inspired_poet = { + has_trait = eunuch + } + } + had_sex_with_effect = { + CHARACTER = scope:top_liege_spouse + PREGNANCY_CHANCE = 0 + } + scope:top_liege_spouse ?= { + add_opinion = { + target = scope:inspired_poet + modifier = pleased_opinion + opinion = 30 + } + } + add_character_modifier = { + modifier = tgp_japan_made_high_liege_cuckold_modifier + years = { 10 20 } + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = minor_stress_impact_gain + loyal = minor_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = minor_stress_impact_loss + lustful = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + has_trait = loyal + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + prowess <= high_skill_rating + } + modifier = { + factor = 0 + NOT = { + possibly_interested_in_character_trigger = { + CHARACTER = scope:top_liege_spouse + } + } + might_cheat_on_every_partner_trigger = no + } + modifier = { + factor = 100 + possibly_interested_in_character_trigger = { + CHARACTER = scope:top_liege_spouse + } + might_cheat_on_every_partner_trigger = yes + } + } + } + #b) Maybe exchanging a poem is enough + option = { + name = tgp_japan_yearly_events.1261.b + add_prestige = medium_prestige_gain + change_influence = medium_influence_gain + add_trait_xp = { + trait = lifestyle_poet + value = { 5 10 } + } + stress_impact = { + lustful = minor_stress_impact_gain + shy = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + chaste = minor_stress_impact_loss + just = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = shy + has_trait = eccentric + } + } + } + } + #c) I don't want to upset the emperor + option = { + name = tgp_japan_yearly_events.1261.c + add_piety = medium_piety_gain + scope:top_liege_spouse ?= { + add_opinion = { + target = scope:inspired_poet + modifier = angry_opinion + opinion = -40 + } + } + if = { + limit = { + NOT = { + has_trait = loyal + } + } + add_trait = loyal + } + stress_impact = { + lustful = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + chaste = minor_stress_impact_loss + shy = minor_stress_impact_loss + craven = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = gregarious + has_trait = eccentric + } + } + } + } + after = { + count_poet_inspiration_events = yes + } +} + +# 1262 - A Poetic Life: An Exchange of Verses +# by Laurence Kennedy +tgp_japan_yearly_events.1262 = { + type = character_event + title = tgp_japan_yearly_events.1262.t + desc = { + desc = tgp_japan_yearly_events.1262.desc.intro + #Inspiration in Japan + triggered_desc = { + trigger = { + location = { + geographical_region = world_asia_japan + } + } + desc = tgp_japan_yearly_events.1262.japan.inspo + } + #Inspiration elsewhere + triggered_desc = { + trigger = { + NOT = { + location = { + geographical_region = world_asia_japan + } + } + } + desc = tgp_japan_yearly_events.1262.inspo + } + #body + desc = tgp_japan_yearly_events.1262.desc + #Outro in Japan + triggered_desc = { + trigger = { + location = { + geographical_region = world_asia_japan + } + } + desc = tgp_japan_yearly_events.1262.japan.outro + } + #Outro elsewhere + triggered_desc = { + trigger = { + NOT = { + location = { + geographical_region = world_asia_japan + } + } + } + desc = tgp_japan_yearly_events.1262.outro + } + desc = tgp_japan_yearly_events.1262.japan.outro.outro + } + theme = intrigue_temptation_focus + #If in Japan + override_background = { + trigger = { + location = { + geographical_region = world_asia_japan + } + } + reference = moon_festival_night_japan + } + #If not in Japan + override_background = { + trigger = { + NOT = { + location = { + geographical_region = world_asia_japan + } + } + } + reference = alley_night + } + + cooldown = { years = 100 } + #You, the poet + left_portrait = { + character = scope:inspired_poet + animation = love + } + #Another poet who wants to exchange verses among other things + right_portrait = { + character = scope:local_poet + triggered_animation = { + trigger = { + location = { + geographical_region = world_asia_japan + } + } + animation = fanning_coyly + } + animation = admiration + } + + trigger = { + can_have_poet_inspiration_trigger = yes + has_tgp_dlc_trigger = yes + has_trait = lifestyle_poet + is_adult = yes + is_available = yes + } + + immediate = { + #This is you + save_scope_as = inspired_poet + #find a local poet who is into you + location = { + random_character_in_location = { + limit = { + #don't sleep with yourself + this != root + #make sure they're into you + possibly_interested_in_character_trigger = { + CHARACTER = scope:inspired_poet + } + #make sure you're into them as well + scope:inspired_poet = { + possibly_interested_in_character_trigger = { + CHARACTER = prev + } + } + might_cheat_on_every_partner_trigger = yes + is_adult = yes + has_trait = lifestyle_poet + } + save_scope_as = local_poet + } + } + #or make a local poet if none are to be found + if = { + limit = { + NOT = { exists = scope:local_poet } + } + create_character = { + template = tgp_poet_lover_template + location = root.location + save_scope_as = local_poet + after_creation = { + add_character_flag = created + } + } + add_character_flag = { + flag = fake_local_poet + days = 1 + } + } + location = { + save_scope_as = local_poet_spot + } + } + + # a) Friendship is fun (friends can exchange lines about love) + option = { + name = tgp_japan_yearly_events.1262.a + flavor = tgp_japan_yearly_events.1262.a.flavor + add_trait_xp = { + trait = lifestyle_poet + value = { 10 15 } + } + add_diplomacy_lifestyle_xp = minor_lifestyle_xp + scope:local_poet = { + #If possible progress friendship + if = { + limit = { + can_set_relation_friend_trigger = { CHARACTER = scope:inspired_poet } + } + progress_towards_friend_effect = { + REASON = friend_renga_poetry + CHARACTER = scope:inspired_poet + OPINION = 30 + } + } + #otherwise it makes them like them more at the very least + else = { + add_opinion = { + target = scope:inspired_poet + modifier = charmed_opinion + opinion = 20 + } + } + } + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + paranoid = minor_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = paranoid + } + } + } + } + #b) Exchange more than poetry (I'll compose a verse while we tumble) + option = { + name = tgp_japan_yearly_events.1262.b + flavor = tgp_japan_yearly_events.1262.b.flavor + had_sex_with_effect = { + CHARACTER = scope:local_poet + PREGNANCY_CHANCE = pregnancy_chance + } + add_character_modifier = { + modifier = tgp_japan_exchanged_verses_modifier + years = { 10 20 } + } + scope:local_poet ?= { + add_opinion = { + target = scope:inspired_poet + modifier = charmed_opinion + opinion = 40 + } + } + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = medium_stress_impact_gain + paranoid = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 10 + possibly_interested_in_character_trigger = { + CHARACTER = scope:local_poet + } + might_cheat_on_every_partner_trigger = yes + } + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + has_trait = paranoid + } + } + #helps limit poets generated + modifier = { + factor = 0 + diplomacy <= high_skill_rating + prowess <= high_skill_rating + } + modifier = { + factor = 0 + NOT = { + possibly_interested_in_character_trigger = { + CHARACTER = scope:local_poet + } + } + might_cheat_on_every_partner_trigger = no + } + } + } + #c) You think it's an assassin and run thinking about the ephemeral nature of your own life + option = { + name = tgp_japan_yearly_events.1262.c + trigger = { + has_trait = paranoid + } + scope:local_poet ?= { + add_opinion = { + target = scope:inspired_poet + modifier = angry_opinion + opinion = -40 + } + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + add_character_modifier = {# + modifier = more_vigilant_recistance_modifier + days = 1095 + } + add_character_flag = { + flag = no_love + days = 1 + } + + stress_impact = { + lustful = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + chaste = minor_stress_impact_loss + shy = minor_stress_impact_loss + paranoid = medium_stress_impact_loss + + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = gregarious + } + } + } + } + after = { + if = { + limit = { + has_character_flag = fake_local_poet + has_character_flag = no_love + } + scope:local_poet ?= { + silent_disappearance_effect = yes + } + } + count_poet_inspiration_events = yes + scope:local_poet ?= { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# 1263 - A Poetic Life: Ephemeral Beauty in the Wilds +# by Laurence Kennedy +tgp_japan_yearly_events.1263 = { + type = character_event + title = tgp_japan_yearly_events.1263.t + desc = tgp_japan_yearly_events.1263.desc + override_effect_2d = { + reference = rain + } + theme = romance_scheme + override_background = { + reference = wilderness + } + cooldown = { years = 100 } + #You, the poet + left_portrait = { + character = scope:inspired_poet + animation = love + } + #A local beauty + right_portrait = { + character = scope:rural_beauty + animation = dancing + outfit_tags = { no_clothes } + } + artifact = { + position = lower_right_portrait + target = scope:newly_created_artifact + } + + trigger = { + can_have_poet_inspiration_trigger = yes + has_tgp_dlc_trigger = yes + has_trait = lifestyle_poet + is_adult = yes + is_available = yes + } + immediate = { + #This is you + save_scope_as = inspired_poet + #Make artifact + get_pressed_flower_species_effect = { LOCATION = root.location} + hidden_effect = { + create_artifact_pressed_flower_effect = { OWNER = root } + random_list = { + 10 = { # Poisonous Flowers + trigger = { has_personality_benevolent_trigger = no } + modifier = { + factor = 2 + has_trait = schemer + } + modifier = { + factor = 2 + any_scheme = { scheme_type = murder } + } + modifier = { + factor = 2 + has_trait = education_intrigue + } + modifier = { + factor = 2 + has_trait = callous + } + save_scope_as = poisonous_herbs + } + 10 = { # Medicinal Flowers + modifier = { + factor = 2 + has_trait = schemer + } + modifier = { + factor = 2 + has_court_position = court_physician_court_position + } + modifier = { + factor = 2 + has_trait = education_learning + } + modifier = { + factor = 2 + has_trait = compassionate + } + modifier = { + factor = 2 + has_trait = lifestyle_physician + } + } + } + } + hidden_effect_new_object = { + scope:newly_created_artifact = { + flag_as_trash_artifact = yes + } + } + #find a local beauty who is into you + location = { + random_character_in_location = { + limit = { + #don't sleep with yourself + this != root + #make sure they're into you + possibly_interested_in_character_trigger = { + CHARACTER = scope:inspired_poet + } + #make sure you're into them as well + scope:inspired_poet = { + possibly_interested_in_character_trigger = { + CHARACTER = prev + } + } + might_cheat_on_every_partner_trigger = yes + is_adult = yes + is_available = yes + } + save_scope_as = rural_beauty + } + } + #or make a local poet if none are to be found + if = { + limit = { + NOT = { exists = scope:rural_beauty } + } + create_character = { + template = tgp_poet_lover_template + location = root.location + save_scope_as = rural_beauty + after_creation = { + add_character_flag = created + } + } + add_character_flag = { + flag = fake_rural_beauty + days = 1 + } + } + location = { + save_scope_as = rural_beauty_location + } + } + + #a) Let's celebrate our fleeting lives + option = { + name = tgp_japan_yearly_events.1263.a + flavor = tgp_japan_yearly_events.1263.a.flavor + #get rid of the artifact if you don't choose the artifact option + hidden_effect = { + destroy_artifact = scope:newly_created_artifact + } + had_sex_with_effect = { + CHARACTER = scope:rural_beauty + PREGNANCY_CHANCE = pregnancy_chance + } + scope:rural_beauty ?= { + add_opinion = { + target = scope:inspired_poet + modifier = charmed_opinion + opinion = 30 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = { 15 20 } + } + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = medium_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 10 + possibly_interested_in_character_trigger = { + CHARACTER = scope:rural_beauty + } + might_cheat_on_every_partner_trigger = yes + } + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + prowess <= high_skill_rating + } + modifier = { + factor = 0 + NOT = { + possibly_interested_in_character_trigger = { + CHARACTER = scope:rural_beauty + } + } + might_cheat_on_every_partner_trigger = no + } + } + } + # b) Artifact flower + option = { + name = tgp_japan_yearly_events.1263.b + flavor = tgp_japan_yearly_events.1263.b.flavor + show_as_tooltip = { + scope:newly_created_artifact = { set_owner = root } + } + add_prestige = medium_prestige_gain + scope:rural_beauty ?= { + add_opinion = { + target = scope:inspired_poet + modifier = angry_opinion + opinion = -20 + } + } + stress_impact = { + lustful = medium_stress_impact_gain + content = minor_stress_impact_gain + eccentric = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = lustful + has_trait = content + } + } + } + } + #c) Let's make a study of nature (become gardener or herbalist) + option = { + name = tgp_japan_yearly_events.1263.c + flavor = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:poisonous_herbs } + desc = tgp_japan_yearly_events.1263.c.poisonous + } + desc = tgp_japan_yearly_events.1263.c.medicinal + } + } + #get rid of the artifact if you don't choose the artifact option + hidden_effect = { + destroy_artifact = scope:newly_created_artifact + } + add_learning_lifestyle_xp = medium_lifestyle_xp + add_character_flag = { + flag = no_love + days = 1 + } + + if = { + limit = { exists = scope:poisonous_herbs } + add_character_modifier = { + modifier = tgp_japan_poet_poisonous_flowers_modifier + years = 5 + } + stress_impact = { + lustful = minor_stress_impact_gain + schemer = minor_stress_impact_loss + lifestyle_gardener = miniscule_stress_impact_loss + lifestyle_herbalist = minor_stress_impact_loss + } + } + else = { + add_character_modifier = { + modifier = tgp_japan_poet_medicinal_flowers_modifier + years = 5 + } + if = { + limit = { has_trait = lifestyle_physician } + add_trait_xp = { + trait = lifestyle_physician + value = 2 + } + } + stress_impact = { + lustful = minor_stress_impact_gain + lifestyle_physician = minor_stress_impact_loss + lifestyle_gardener = miniscule_stress_impact_loss + lifestyle_herbalist = minor_stress_impact_loss + } + } + stress_impact = { + lustful = minor_stress_impact_gain + gregarious = minor_stress_impact_gain + eccentric = minor_stress_impact_gain + chaste = minor_stress_impact_loss + shy = minor_stress_impact_loss + craven = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR ={ + has_trait = lustful + has_trait = gregarious + has_trait = eccentric + } + } + } + } + + after = { + if = { + limit = { + has_character_flag = fake_rural_beauty + has_character_flag = no_love + } + scope:rural_beauty ?= { + silent_disappearance_effect = yes + } + } + count_poet_inspiration_events = yes + scope:rural_beauty = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +scripted_effect create_poetic_life_artifact_effect = { + $OWNER$ = { save_scope_as = owner } + + hidden_effect_new_object = { + #set rarity based on how love related memories you have + save_scope_value_as = { + name = quality + value = { + value = 15 + multiply = list_size:love_memories + min = 40 + } + + } + save_scope_value_as = { + name = wealth + value = { + value = 10 + multiply = list_size:love_memories + min = 20 + } + } + + scope:owner = { + create_artifact = { + name = poetic_life_artifact_name + creator = scope:owner + description = poetic_life_artifact_description + visuals = scroll + type = miscellaneous + modifier = artifact_monthly_minor_prestige_1_modifier + modifier = artifact_attraction_opinion_1_modifier + save_scope_as = newly_created_artifact + wealth = scope:wealth + quality = scope:quality + } + } + + scope:newly_created_artifact = { + add_scaled_artifact_modifier_minor_prestige_effect = yes + add_scaled_artifact_modifier_majesty_effect = yes + if = { + limit = { + exists = scope:love_memory_1 + } + set_artifact_description = poetic_life_artifact_description.love_memory_1 + } + if = { + limit = { + exists = scope:love_memory_2 + } + set_artifact_description = poetic_life_artifact_description.love_memory_2 + } + if = { + limit = { + exists = scope:love_memory_3 + } + set_artifact_description = poetic_life_artifact_description.love_memory_3 + } + if = { + limit = { + exists = scope:death_memory_1 + } + set_artifact_description = poetic_life_artifact_description.death_memory_1 + } + if = { + limit = { + exists = scope:death_memory_2 + } + set_artifact_description = poetic_life_artifact_description.death_memory_2 + } + if = { + limit = { + exists = scope:death_memory_3 + } + set_artifact_description = poetic_life_artifact_description.death_memory_3 + } + set_artifact_description = poetic_life_artifact_description.end + } + } +} +scripted_effect create_poetic_life_memory_list_effect = { + + every_memory = { + limit = { + OR = { + has_memory_category = lover + has_memory_category = intimate + } + } + add_to_list = love_memories + } + every_memory = { + limit = { + OR = { + has_memory_category = death + has_memory_category = war + } + } + add_to_list = death_memories + } + ordered_in_list = { + list = love_memories + order_by = memory_creation_date + limit = { + OR = { + has_memory_category = lover + has_memory_category = intimate + } + } + max = 3 + check_range_bounds = no + if = { + limit = { exists = scope:love_memory_2 } + save_scope_as = love_memory_3 + } + else_if = { + limit = { exists = scope:love_memory_1 } + save_scope_as = love_memory_2 + } + else = { save_scope_as = love_memory_1 } + } + ordered_in_list = { + list = death_memories + order_by = memory_creation_date + limit = { + OR = { + has_memory_category = death + has_memory_category = war + } + } + max = 3 + check_range_bounds = no + if = { + limit = { exists = scope:death_memory_2 } + save_scope_as = death_memory_3 + } + else_if = { + limit = { exists = scope:death_memory_1 } + save_scope_as = death_memory_2 + } + else = { save_scope_as = death_memory_1 } + } +} +#1270 - A Poetic Life: A Thousand Immortal Leaves +#by Laurence Kennedy +tgp_japan_yearly_events.1270 = { + type = character_event + title = tgp_japan_yearly_events.1270.t + desc = { + desc = tgp_japan_yearly_events.1270.desc + triggered_desc = { + trigger = { + exists = scope:love_memory_1 + } + desc = tgp_japan_yearly_events.1270.desc.love_memory_1 + } + triggered_desc = { + trigger = { + exists = scope:love_memory_2 + } + desc = tgp_japan_yearly_events.1270.desc.love_memory_2 + } + triggered_desc = { + trigger = { + exists = scope:love_memory_3 + } + desc = tgp_japan_yearly_events.1270.desc.love_memory_3 + } + triggered_desc = { + trigger = { + exists = scope:death_memory_1 + } + desc = tgp_japan_yearly_events.1270.desc.death_memory_1 + } + triggered_desc = { + trigger = { + exists = scope:death_memory_2 + } + desc = tgp_japan_yearly_events.1270.desc.death_memory_2 + } + triggered_desc = { + trigger = { + exists = scope:death_memory_3 + } + desc = tgp_japan_yearly_events.1270.desc.death_memory_3 + } + } + override_effect_2d = { + reference = legend_glow + } + theme = romance_scheme + cooldown = { years = 100 } + #You, the poet + left_portrait = { + character = scope:inspired_poet + animation = happy_teacher + } + artifact = { + position = lower_right_portrait + target = scope:newly_created_artifact + } + + trigger = { + has_tgp_dlc_trigger = yes + has_trait = lifestyle_poet + is_adult = yes + is_available = yes + is_ai = no + } + #an insurance policy so the event chain doesn't close without you getting your book + on_trigger_fail = { + trigger_event = { + id = tgp_japan_yearly_events.1270 + days = { 14 29 } + } + } + + immediate = { + #This is you + save_scope_as = inspired_poet + #Get Memories + create_poetic_life_memory_list_effect = yes + #Make artifact + hidden_effect_new_object = { + create_poetic_life_artifact_effect = { OWNER = root } + scope:newly_created_artifact = { + save_scope_as = love_poetry_artifact + } + } + } + + #a) If you have court make it court artifact + option = { + name = tgp_japan_yearly_events.1270.a + trigger = { + has_royal_court = yes + } + hidden_effect_new_object = { + scope:newly_created_artifact = { + add_scaled_artifact_modifier_grandeur_small_effect = yes + + reforge_artifact = { + type = pedestal + } + } + } + add_character_modifier = { + modifier = tgp_japan_made_poetic_life_artifact_modifier + years = { 50 60 } + } + custom_tooltip = tgp_japan_yearly_events.1270.a_effect + remove_short_term_gold = minor_gold_value + stress_impact = { + chaste = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + gold < major_gold_value + } + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = shy + } + } + } + } + #b) Book option 2 + option = { + name = tgp_japan_yearly_events.1270.b + add_character_modifier = { + modifier = tgp_japan_made_poetic_life_artifact_modifier + years = { 50 60 } + } + custom_tooltip = tgp_japan_yearly_events.1270.b_effect + stress_impact = { + shy = minor_stress_impact_gain + humble = minor_stress_impact_gain + chaste = medium_stress_impact_gain + gregarious = medium_stress_impact_loss + eccentric = minor_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = shy + has_trait = humble + has_trait = chaste + } + } + modifier = { + factor = 0 + diplomacy <= high_skill_rating + prowess <= high_skill_rating + } + } + } +} diff --git a/events/dlc/tgp/tgp_japan_yearly_events_ariana.txt b/events/dlc/tgp/tgp_japan_yearly_events_ariana.txt new file mode 100644 index 00000000..33ef72f5 --- /dev/null +++ b/events/dlc/tgp/tgp_japan_yearly_events_ariana.txt @@ -0,0 +1,5722 @@ +namespace = tgp_japan_yearly_events + +########################################################## +# Japan Yearly Events +# tgp_japan_yearly_events - 1000-1999 +# by Ariana Tranumn +########################################################## + +########################################################## +# 1000 - You see some Onibi, follow them or no? +# 1010 - Two buddhist sects are fighting, and ask you to pick a side +# 1020 - Your senses are playing tricks on you, and you encounter a new Yokai +# 1030 - Praying at a shrine for future success +# 1040 - You come across a red bridge +# 1050 - You are accused of violating a dumb rule +# 1060 - A prisoner requests to be mercy killed +# 1070 - A temple in your realm has burned down +# 1080 - Someone is fishing in the tsuri-dono +# 1090 - Growing old with no heir +# 1100 - You become guilty after killing some people +# 1110 - An animal is seen near the shrine of a God +# 1120 - You meet a warrior monk +# 1130 - Your daughter expresses an interest in poetry +# 1140 - You are stopped in Soryo lands as a Ritsuryo ruler +# 1150 - The Emperor is passing through your realm, chance to gain favor or be mean +# 1160 - You are offered a concubine from a rival house +# 1170 - The prose that you're reading is of an unknown language +# 1180 - You've been gifted a Bonsai tree for your garden +# 1190 - You have a bad trait and you're making some decisions at night +# 1220 - You've witnessed a miracle made by a Buddhist monk +# 1230 - Fear of a low durability artifact coming to life (Yokai) +# 1240 - A traveler poet visits court and can't read from right to left +# 1250 - Being gifted a Kakejiku scroll (Wedding) +########################################################## + +# You see some Onibi, follow them or no? +tgp_japan_yearly_events.1000 = { + type = character_event + title = tgp_japan_yearly_events.1000.t + desc = tgp_japan_yearly_events.1000.desc + theme = travel + cooldown = { years = 10 } + override_effect_2d = { + reference = rain + } + override_background = { + reference = wilderness + } + left_portrait = { + character = root + animation = interested + } + right_portrait = { + trigger = { exists = scope:chaplain } + character = scope:chaplain + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + is_location_valid_for_travel_event_on_land = yes + is_valid_for_japan_events_trigger = yes + location = { + OR = { + terrain = forest + terrain = taiga + terrain = mountains + } + } + } + + immediate = { + current_travel_plan = { + random_entourage_character = { + limit = { + NOT = { + has_trait = cynical + } + OR = { + has_council_position = councillor_court_chaplain + has_court_position = travel_leader_court_position + } + } + save_scope_as = chaplain + } + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 20 + OR = { + current_season_spring = yes + current_season_summer = yes + } + } + modifier = { + add = 5 + short_term_gold <= minor_gold_value + } + } + + #Option A) Follow the Onibi! + option = { + name = tgp_japan_yearly_events.1000.a + + current_travel_plan = { + delay_travel_plan = { days = 7 } + } + + random_list = { + 50 = { + show_chance = no + desc = tgp_japan_yearly_events.1000.a.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1000.a.tt.success + left_icon = root + add_short_term_gold = minor_gold_value + } + } + 50 = { + show_chance = no + desc = tgp_japan_yearly_events.1000.a.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1000.a.tt.failure + left_icon = root + add_stress = minor_stress_impact_gain + random = { + chance = 20 + increase_wounds_no_death_effect = { REASON = lost_in_the_forest } + } + } + } + } + + stress_impact = { + paranoid = minor_stress_impact_gain + craven = minor_stress_impact_gain + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + } + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = paranoid + } + } + } + } + + #Option B) Talk about Onibi! + option = { + name = tgp_japan_yearly_events.1000.b + trigger = { + exists = scope:chaplain + } + current_travel_plan = { + delay_travel_plan = { days = 3 } + } + add_learning_lifestyle_xp = minor_lifestyle_xp + scope:chaplain = { + duel = { + skills = { diplomacy learning } + value = decent_skill_rating + 70 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1000.b.tt.success + root = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1000.b.tt.success + left_icon = root + right_icon = scope:chaplain + add_character_modifier = { + modifier = tgp_learned_from_onibi_modifier + years = 3 + } + } + } + } + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1000.b.tt.failure + min = 20 + max = 90 + root = { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1000.b.tt.failure + left_icon = root + right_icon = scope:chaplain + add_stress = minor_stress_gain + } + } + } + } + } + stress_impact = { + paranoid = minor_stress_impact_loss + craven = minor_stress_impact_loss + impatient = minor_stress_impact_loss + lazy = minor_stress_impact_gain + } + ai_chance = { + base = 150 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 0 + OR = { + has_trait = lazy + } + } + } + } + + # Leave them be + option = { + name = tgp_japan_yearly_events.1000.c + + stress_impact = { + paranoid = minor_stress_impact_loss + craven = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 0 + has_trait = brave + } + } + } +} + +# Two buddhist sects are fighting, and ask you to pick a side +tgp_japan_yearly_events.1010 = { + type = character_event + title = tgp_japan_yearly_events.1010.t + desc = tgp_japan_yearly_events.1010.desc + theme = faith + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = chaplain + } + right_portrait = { + character = scope:buddhist_councillor_1 + animation = debating + } + + lower_center_portrait = { + character = scope:buddhist_councillor_2 + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + exists = cp:councillor_court_chaplain + #find a councilor + any_councillor = { + faith = { + religion = religion:buddhism_religion + save_temporary_scope_as = buddhist_sect + } + } + #find a councilor of a different sect + any_councillor = { + faith = { + religion = religion:buddhism_religion + this != scope:buddhist_sect + } + } + } + #probably more interesting if you are Buddhist yourself + weight_multiplier = { + base = 10 + modifier = { + add = 10 + faith.religion = religion:buddhism_religion + } + } + + immediate = { + #find chaplain to get mad if you do nothing + cp:councillor_court_chaplain = { save_scope_as = chaplain } + #find a councilor + random_councillor = { + limit = { + faith = { + religion = religion:buddhism_religion + } + } + save_scope_as = buddhist_councillor_1 + } + + random_councillor = { + limit = { + faith = { + this != scope:buddhist_councillor_1.faith + religion = religion:buddhism_religion + } + } + save_scope_as = buddhist_councillor_2 + } + } + + # Option A) Sect A is correct + option = { + name = tgp_japan_yearly_events.1010.a + if = { + limit = { + faith = scope:buddhist_councillor_1.faith + } + add_piety = medium_piety_gain + } + else = { + custom_tooltip = tgp_japan_yearly_events.1010.a_discount + set_variable = { + name = japan_1010_discount + value = scope:buddhist_councillor_1.faith + } + } + + every_vassal = { + limit = { + faith = scope:buddhist_councillor_1.faith + } + custom = every_buddhist_sect_1_vassal + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 15 + } + } + + every_vassal = { + limit = { + faith = scope:buddhist_councillor_2.faith + } + custom = every_buddhist_sect_2_vassal + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + + scope:buddhist_councillor_2.faith = { + change_fervor = { + value = 1 + desc = fervor_gain_persecuted + } + } + + stress_impact = { + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + faith = scope:buddhist_councillor_2.faith + } + modifier = { + factor = 2 + AND = { + faith = scope:buddhist_councillor_1.faith + NOT = { has_trait = cynical } + } + } + } + } + + # Option B) Sect B is correct + option = { + name = tgp_japan_yearly_events.1010.b + if = { + limit = { + faith = scope:buddhist_councillor_2.faith + } + add_piety = medium_piety_gain + } + else = { + custom_tooltip = tgp_japan_yearly_events.1010.b_discount + set_variable = { + name = japan_1010_discount + value = scope:buddhist_councillor_2.faith + } + } + + every_vassal = { + limit = { + faith = scope:buddhist_councillor_2.faith + } + custom = every_buddhist_sect_2_vassal + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 15 + } + } + + every_vassal = { + limit = { + faith = scope:buddhist_councillor_1.faith + } + custom = every_buddhist_sect_1_vassal + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + + scope:buddhist_councillor_1.faith = { + change_fervor = { + value = 1 + desc = fervor_gain_persecuted + } + } + + stress_impact = { + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + faith = scope:buddhist_councillor_1.faith + } + modifier = { + factor = 2 + AND = { + faith = scope:buddhist_councillor_2.faith + NOT = { has_trait = cynical } + } + } + } + } + + # Option C) Let them fight, I don't care + option = { + name = tgp_japan_yearly_events.1010.c + + random = { + chance = 50 + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1010.c.tt + left_icon = root + right_icon = scope:chaplain + add_character_modifier = { + modifier = tgp_buddhist_fighting_modifier + years = 5 + } + } + } + + scope:chaplain = { + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + + stress_impact = { + zealous = minor_stress_impact_gain + cynical = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = cynical + } + modifier = { + factor = 0 + AND = { + OR = { + faith = scope:buddhist_councillor_2.faith + faith = scope:buddhist_councillor_1.faith + } + has_trait = zealous + } + } + modifier = { + factor = 1.5 + has_trait = lazy + } + } + } +} + +# Your senses are playing tricks on you, and you encounter a new Yokai +tgp_japan_yearly_events.1020 = { + type = character_event + title = { + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:yokai_legend = flag:siren + } + desc = tgp_japan_yearly_events.1020.t_siren + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:garden + } + desc = tgp_japan_yearly_events.1020.t_garden + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:shadow + } + desc = tgp_japan_yearly_events.1020.t_shadow + } + } + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:yokai_legend = flag:siren + } + desc = tgp_japan_yearly_events.1020.desc_siren + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:garden + } + desc = tgp_japan_yearly_events.1020.desc_garden + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:shadow + } + desc = tgp_japan_yearly_events.1020.desc_shadow + } + } + desc = tgp_japan_yearly_events.1020.desc_end + } + theme = unfriendly + cooldown = { years = 25 } + + override_background = { + trigger = { scope:yokai_legend = flag:garden } + reference = garden + } + + override_background = { + trigger = { scope:yokai_legend = flag:siren } + reference = bedchamber + } + + override_background = { + trigger = { scope:yokai_legend = flag:shadow } + reference = alley_night + } + + left_portrait = { + character = root + animation = disbelief + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + is_valid_for_japan_events_trigger = yes + } + + weight_multiplier = { + base = 10 + modifier = { + add = 10 + OR = { + has_trait = possessed + has_trait = lunatic + has_trait = witch + } + } + modifier = { + add = 5 + stress_level >= 1 + } + modifier = { + add = 10 + stress_level >= 3 + } + modifier = { + add = 5 + has_character_modifier = tgp_burned_yokai_modifier + } + } + + immediate = { + # Choose Yokai + random_list = { + 10 = { # Siren + modifier = { + add = 3 + OR = { + has_trait = lifestyle_poet + has_trait = lustful + } + } + modifier = { + add = 3 + has_focus_diplomacy = yes + } + save_scope_value_as = { + name = yokai_legend + value = flag:siren + } + } + 10 = { # Garden + modifier = { + add = 3 + OR = { + has_trait = lifestyle_gardener + has_trait = lifestyle_herbalist + has_trait = lifestyle_mystic + } + } + modifier = { + add = 3 + OR = { + has_focus_learning = yes + has_focus_stewardship = yes + } + } + save_scope_value_as = { + name = yokai_legend + value = flag:garden + } + } + 10 = { # Shadow + modifier = { + add = 3 + OR = { + has_trait = possessed + has_trait = depressed_1 + has_trait = lunatic + } + } + modifier = { + add = 3 + OR = { + has_focus_intrigue = yes + has_focus_martial = yes + } + } + save_scope_value_as = { + name = yokai_legend + value = flag:shadow + } + } + } + } + + # Option 1 + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:yokai_legend = flag:siren + } + desc = tgp_japan_yearly_events.1020.a_siren + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:garden + } + desc = tgp_japan_yearly_events.1020.a_garden + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:shadow + } + desc = tgp_japan_yearly_events.1020.a_shadow + } + } + } + } + + switch = { + trigger = scope:yokai_legend + flag:siren = { + add_character_modifier = { + modifier = tgp_siren_yokai_love_modifier + years = 5 + } + stress_impact = { + lustful = minor_stress_impact_loss + } + } + flag:garden = { + add_character_modifier = { + modifier = tgp_garden_yokai_bloom_modifier + years = 5 + } + + if = { + limit = { + NOT = { has_trait = lifestyle_gardener } + } + random = { + chance = 25 + add_trait = lifestyle_gardener + } + } + + + stress_impact = { + lifestyle_gardener = minor_stress_impact_loss + lifestyle_herbalist = minor_stress_impact_loss + lifestyle_mystic = minor_stress_impact_loss + } + } + flag:shadow = { + add_character_modifier = { + modifier = tgp_shadow_yokai_imitation_modifier + years = 5 + } + stress_impact = { + arrogant = minor_stress_impact_loss + callous = minor_stress_impact_loss + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + AND = { + scope:yokai_legend = flag:siren + has_trait = chaste + } + } + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:siren + has_trait = lustful + } + } + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:garden + OR = { + has_trait = lifestyle_gardener + has_focus_learning = yes + } + } + } + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:shadow + OR = { + has_trait = callous + has_trait = arrogant + has_focus_martial = yes + } + } + } + } + } + + # Option 2 + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:yokai_legend = flag:siren + } + desc = tgp_japan_yearly_events.1020.b_siren + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:garden + } + desc = tgp_japan_yearly_events.1020.b_garden + } + triggered_desc = { + trigger = { + scope:yokai_legend = flag:shadow + } + desc = tgp_japan_yearly_events.1020.b_shadow + } + } + } + } + + switch = { + trigger = scope:yokai_legend + flag:siren = { + add_character_modifier = { + modifier = tgp_siren_yokai_prose_modifier + years = 5 + } + if = { + limit = { + NOT = { has_trait = lifestyle_poet } + } + random = { + chance = 25 + add_trait = lifestyle_poet + } + } + else = { + add_trait_xp = { + trait = lifestyle_poet + value = 10 + } + } + } + flag:garden = { + add_character_modifier = { + modifier = tgp_garden_yokai_building_modifier + years = 5 + } + + stress_impact = { + architect = minor_stress_impact_loss + diligent = minor_stress_impact_loss + } + } + flag:shadow = { + add_character_modifier = { + modifier = tgp_shadow_yokai_torch_modifier + years = 5 + } + stress_impact = { + paranoid = minor_stress_impact_loss + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:siren + has_focus_diplomacy = yes + } + } + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:garden + OR = { + has_trait = architect + has_trait = diligent + has_focus_stewardship = yes + } + } + } + modifier = { + factor = 2 + AND = { + scope:yokai_legend = flag:shadow + OR = { + has_trait = paranoid + has_focus_intrigue = yes + } + } + } + } + } + + # Ignore it + option = { + name = tgp_japan_yearly_events.1020.c + + add_piety = major_piety_gain + + stress_impact = { + base = miniscule_stress_impact_gain + paranoid = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 0 + } + } +} + +# You pray at a shrine for future success +tgp_japan_yearly_events.1030 = { + type = character_event + title = tgp_japan_yearly_events.1030.t + desc = tgp_japan_yearly_events.1030.desc + theme = faith + cooldown = { years = 15 } + + left_portrait = { + character = root + triggered_animation = { + trigger = { + faith.religion ?= religion:christianity_religion + } + animation = prayer + } + triggered_animation = { + trigger = { + NOT = { faith.religion ?= religion:christianity_religion } + } + animation = personality_zealous + } + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + } + + # Pray for your health + option = { + name = tgp_japan_yearly_events.1030.a + + add_character_modifier = { + modifier = tgp_shrine_health_modifier + years = 5 + } + + if = { + limit = { + has_trait = wounded + } + random = { + chance = 25 + if = { + limit = { has_trait = wounded_1 } + remove_trait = wounded_1 + } + else_if = { + limit = { has_trait = wounded_2 } + remove_trait = wounded_2 + add_trait = wounded_1 + } + else_if = { + limit = { has_trait = wounded_3 } + remove_trait = wounded_3 + add_trait = wounded_2 + } + } + } + + stress_impact = { + base = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = wounded + } + } + } + + # Pray for your heirs/dynasty + option = { + name = tgp_japan_yearly_events.1030.b + + add_character_modifier = { + modifier = tgp_shrine_heir_modifier + years = 5 + } + + stress_impact = { + family_first = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = family_first + } + } + } + + # Pray for wealth + option = { + name = tgp_japan_yearly_events.1030.c + + add_character_modifier = { + modifier = tgp_shrine_wealth_modifier + years = 5 + } + + stress_impact = { + greedy = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + modifier = { + factor = 2 + short_term_gold <= minor_gold_value + } + } + } + + # Pray for X Gods favor + option = { + name = tgp_japan_yearly_events.1030.d + + add_character_modifier = { + modifier = tgp_shrine_piety_modifier + years = 5 + } + add_piety = minor_piety_gain + + + stress_impact = { + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + option = { + name = tgp_japan_yearly_events.1030.e + trigger = { has_trait = cynical } + + stress_impact = { + cynical = medium_stress_impact_loss + } + + add_prestige = minor_prestige_gain + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + } + } + } +} + +# You come across a red bridge +tgp_japan_yearly_events.1040 = { + type = character_event + title = tgp_japan_yearly_events.1040.t + desc = tgp_japan_yearly_events.1040.desc + theme = travel + cooldown = { years = 20 } + + left_portrait = { + character = root + animation = interested + } + + override_background = { reference = bp3_riverside } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + is_location_valid_for_travel_event_on_land = yes + location = { + geographical_region = world_asia_japan + is_riverside_province = yes + } + } + + # Treat it as a sacred place + option = { + name = tgp_japan_yearly_events.1040.a + + if = { + limit = { + OR = { + religion = religion:shintoism_religion + faith = { has_doctrine = special_doctrine_immaterial_harmony } + } + } + add_piety = minor_piety_gain + } + else = { + custom_tooltip = tgp_japan_yearly_events.1040.discount + add_character_flag = tgp_japan_1040_discount + } + + if = { + limit = { + has_trait = lifestyle_mystic + } + add_trait_xp = { + trait = lifestyle_mystic + value = 5 + } + } + + stress_impact = { + base = minor_stress_impact_loss + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + current_travel_plan = { + delay_travel_plan = { days = 7 } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + # Forbid anyone from crossing before you + option = { + name = tgp_japan_yearly_events.1040.b + + add_prestige = minor_prestige_gain + add_dread = minor_dread_gain + + current_travel_plan = { + delay_travel_plan = { days = 14 } + } + + stress_impact = { + arrogant = medium_stress_impact_loss + callous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = arrogant + } + } + } + + # Go around it + option = { + name = tgp_japan_yearly_events.1040.c + + current_travel_plan = { + delay_travel_plan = { days = 30 } + } + + add_character_modifier = { + modifier = tgp_traveling_safe_modifier + years = 3 + } + + stress_impact = { + paranoid = medium_stress_impact_loss + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + OR = { + has_trait = craven + has_trait = paranoid + } + } + } + } +} + +# You are accused of violating a dumb rule +tgp_japan_yearly_events.1050 = { + type = letter_event + opening = { desc = tgp_japan_yearly_events.1050.opening } + desc = { + desc = tgp_japan_yearly_events.1050.desc + random_valid = { + desc = tgp_japan_yearly_events.1050.desc.a + desc = tgp_japan_yearly_events.1050.desc.b + desc = tgp_japan_yearly_events.1050.desc.c + } + desc = tgp_japan_yearly_events.1050.desc.outro + } + sender = scope:messenger + + cooldown = { years = 25 } + + trigger = { + has_tgp_dlc_trigger = yes + location = { geographical_region = world_asia_japan } + is_independent_ruler = no + short_term_gold >= minor_gold_value + } + + immediate = { + if = { + limit = { + exists = liege.cp:councillor_chancellor + liege.cp:councillor_chancellor != root + } + liege.cp:councillor_chancellor = { save_scope_as = messenger } + } + else_if = { + limit = { + liege = { any_councillor = { count >=1 this != root } } + } + liege = { + ordered_councillor = { limit = { this != root } order_by = diplomacy save_scope_as = messenger } + } + } + else = { + liege = { + ordered_courtier = { order_by = diplomacy save_scope_as = messenger } + } + } + } + + # Okay I guess + option = { + name = tgp_japan_yearly_events.1050.a + + pay_short_term_gold = { + target = liege + gold = minor_gold_value + } + + add_character_modifier = { + modifier = tgp_rule_follower_modifier + years = 3 + } + + liege = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 15 + } + } + + stress_impact = { + generous = medium_stress_impact_loss + greedy = medium_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = -1 + ai_rationality = -0.5 + } + } + } + + # This rule doesn't even make sense + option = { + name = tgp_japan_yearly_events.1050.b + duel = { + skill = diplomacy + target = scope:messenger + desc = tgp_japan_yearly_events.1050.b.tt + 100 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1050.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1050.tt.success + left_icon = root + right_icon = scope:messenger + stress_impact = { + base = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + add_prestige = minor_prestige_gain + } + } + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1050.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1050.tt.failure + left_icon = root + right_icon = scope:messenger + pay_short_term_gold = { + target = liege + gold = minor_gold_value + } + stress_impact = { + greedy = minor_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 2 + highest_skill = diplomacy + } + } + } + + # Don't care not paying + option = { + name = tgp_japan_yearly_events.1050.c + + liege = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -15 + } + } + + random = { + chance = 50 + liege = { + add_hook = { + type = favor_hook + target = root + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + } + } + } +} + +# A prisoner requests to be mercy killed +tgp_japan_yearly_events.1060 = { + type = character_event + title = tgp_japan_yearly_events.1060.t + desc = { + desc = tgp_japan_yearly_events.1060.desc + random_valid = { + desc = tgp_japan_yearly_events.1060.desc_generic + triggered_desc = { + trigger = { scope:prisoner = { age >= 50 } } + desc = tgp_japan_yearly_events.1060.desc_old + } + triggered_desc = { + trigger = { scope:prisoner = { age <= 18 } } + desc = tgp_japan_yearly_events.1060.desc_young + } + triggered_desc = { + trigger = { scope:prisoner = { days_in_prison >= 400 } } + desc = tgp_japan_yearly_events.1060.desc_young + } + triggered_desc = { + trigger = { + scope:prisoner = { + OR = { + has_character_modifier = recently_tortured + has_trait = wounded + } + } + } + desc = tgp_japan_yearly_events.1060.desc_injured + } + } + desc = tgp_japan_yearly_events.1060.desc_outro + } + theme = prison + cooldown = { years = 30 } + override_background = { + trigger = { scope:prisoner = { is_in_prison_type = house_arrest } } + reference = sitting_room + } + override_background = { + trigger = { scope:prisoner = { is_in_prison_type = dungeon } } + reference = dungeon + } + left_portrait = { + character = scope:prisoner + triggered_animation = { + trigger = { scope:prisoner = { is_in_prison_type = house_arrest } } + animation = prisonhouse + } + triggered_outfit = { + trigger = { scope:prisoner = { is_in_prison_type = dungeon } } + outfit_tags = { beggar_rags } + } + } + right_portrait = { + character = root + animation = interested + } + + trigger = { + has_tgp_dlc_trigger = yes + location = { geographical_region = world_asia_japan } + any_prisoner = { + age >= 14 + is_ruler = no + } + } + + immediate = { + random_prisoner = { + limit = { + age >= 14 + is_ruler = no + } + weight = { + base = 10 + modifier = { + add = 15 + age >= 50 + } + modifier = { + add = 10 + has_character_modifier = recently_tortured + } + modifier = { + add = 5 + days_in_prison >= 400 + } + modifier = { + add = -5 + has_trait = patient + } + modifier = { + add = -15 + has_trait = brave + } + } + save_scope_as = prisoner + } + } + + # Just kill them + option = { + name = tgp_japan_yearly_events.1060.a + + add_piety = minor_piety_gain + + scope:prisoner = { death = { death_reason = death_execution killer = root } } + + stress_impact = { + base = minor_stress_impact_loss + callous = minor_stress_impact_gain + calm = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 0.5 + ai_zeal = 1 + } + } + } + + # Do something nice for them + option = { + name = tgp_japan_yearly_events.1060.b + + if = { + limit = { + scope:prisoner = { is_in_prison_type = dungeon } + } + scope:prisoner = { change_prison_type = house_arrest } + } + + add_prestige = minor_prestige_gain + + scope:prisoner = { + add_character_modifier = { + modifier = tgp_attentive_care_modifier + years = 5 + } + } + + stress_impact = { + compassionate = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + } + } + + # Do something mean to them + option = { + name = tgp_japan_yearly_events.1060.c + + if = { + limit = { + scope:prisoner = { is_in_prison_type = house_arrest } + } + scope:prisoner = { change_prison_type = dungeon } + } + + add_dread = minor_dread_gain + + scope:prisoner = { + add_character_modifier = { + modifier = tgp_neglected_modifier + years = 5 + } + } + + stress_impact = { + callous = minor_stress_impact_loss + sadistic = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + } + } + + # Simply ignore their request + option = { + name = tgp_japan_yearly_events.1060.d + + add_character_modifier = { + modifier = tgp_law_defender + years = 3 + } + + scope:prisoner = { + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + + stress_impact = { + just = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } +} + +# A temple in your realm has burned down +tgp_japan_yearly_events.1070 = { + type = character_event + title = tgp_japan_yearly_events.1070.t + desc = tgp_japan_yearly_events.1070.desc + theme = faith + override_background = { reference = burning_building } + cooldown = { years = 10 } + + left_portrait = { + character = root + } + right_portrait = { + character = scope:messenger + } + + trigger = { + has_tgp_dlc_trigger = yes + is_valid_for_japan_events_trigger = yes + any_sub_realm_county = { + any_county_province = { + has_building_or_higher = temple_01 + } + } + } + + immediate = { + if = { + limit = { + exists = cp:councillor_court_chaplain + } + cp:councillor_court_chaplain = { save_scope_as = messenger } + } + else_if = { + limit = { + exists = cp:councillor_chancellor + } + cp:councillor_chancellor = { save_scope_as = messenger } + } + else = { + random_courtier = { save_scope_as = messenger } + } + + random_sub_realm_county = { + limit = { + any_county_province = { has_building_or_higher = temple_01 } + } + random_county_province = { + limit = { has_building_or_higher = temple_01 } + save_scope_as = province + } + } + } + + option = { + name = tgp_japan_yearly_events.1070.a + + remove_short_term_gold = major_gold_value + scope:province = { add_next_temple_tier_effect = yes } + add_piety = minor_piety_gain + add_character_modifier = { modifier = tgp_temple_builder_modifier years = 3 } + + stress_impact = { + just = minor_stress_impact_loss + zealous = medium_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + } + } + + option = { + name = tgp_japan_yearly_events.1070.b + + scope:messenger = { + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + add_character_modifier = { modifier = tgp_rebuilder_modifier years = 3 } + + stress_impact = { + lazy = minor_stress_impact_loss + zealous = medium_stress_impact_gain + cynical = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = -1 + } + } + } + + option = { + name = tgp_japan_yearly_events.1070.c + trigger = { + OR = { + probably_superstitious = yes + has_trait = just + has_focus_intrigue = yes + intrigue >= high_skill_rating + } + } + custom_tooltip = tgp_japan_yearly_events.1070.c_tt + + trigger_event = { + id = tgp_japan_yearly_events.1071 + days = { 25 35 } + } + + stress_impact = { + paranoid = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } +} + +# Follow up event +tgp_japan_yearly_events.1071 = { + type = character_event + title = tgp_japan_yearly_events.1070.t + desc = { + desc = tgp_japan_yearly_events.1071.desc + first_valid = { + triggered_desc = { + trigger = { + scope:burn_reason = flag:yokai + } + desc = tgp_japan_yearly_events.1071.desc_yokai + } + triggered_desc = { + trigger = { + scope:burn_reason = flag:heretics + } + desc = tgp_japan_yearly_events.1071.desc_heretics + } + triggered_desc = { + trigger = { + scope:burn_reason = flag:rival + } + desc = tgp_japan_yearly_events.1071.desc_rival + } + triggered_desc = { + trigger = { + scope:burn_reason = flag:weather + } + desc = tgp_japan_yearly_events.1071.desc_weather + } + } + } + theme = realm + + left_portrait = { + character = root + animation = disbelief + } + + right_portrait = { + character = scope:messenger + animation = storyteller + } + + immediate = { + random_list = { + 10 = { + save_scope_value_as = { name = burn_reason value = flag:yokai } + } + 10 = { + save_scope_value_as = { name = burn_reason value = flag:heretics } + } + 10 = { + trigger = { + any_relation = { type = rival } + } + save_scope_value_as = { name = burn_reason value = flag:rival } + random_relation = { + type = rival + save_scope_as = rival + } + } + 10 = { + save_scope_value_as = { name = burn_reason value = flag:weather } + } + } + } + + # Do something + option = { + name = tgp_japan_yearly_events.1071.a + + remove_short_term_gold = minor_gold_value + + switch = { + trigger = scope:burn_reason + flag:yokai = { + add_character_modifier = { + modifier = tgp_burned_yokai_modifier + years = 5 + } + stress_impact = { + paranoid = minor_stress_impact_loss + } + } + flag:weather = { + add_character_modifier = { + modifier = tgp_burned_weather_modifier + years = 5 + } + stress_impact = { + diligent = minor_stress_impact_loss + } + } + flag:heretics = { + add_character_modifier = { + modifier = tgp_faith_defender_modifier + years = 5 + } + stress_impact = { + zealous = minor_stress_impact_loss + } + } + flag:rival = { + custom_tooltip = 1071_rival_tt + set_variable = { + name = tgp_1071_bonus + value = scope:rival + years = 2 + } + stress_impact = { + vengeful = minor_stress_impact_loss + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 2 + AND = { + has_trait = paranoid + scope:burn_reason = flag:yokai + } + } + modifier = { + factor = 2 + AND = { + has_trait = zealous + scope:burn_reason = flag:heretics + } + } + } + } + + # Do nothing + option = { + name = tgp_japan_yearly_events.1071.b + + stress_impact = { + lazy = minor_stress_impact_loss + calm = minor_stress_impact_loss + diligent = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + } + } +} + +# Someone is fishing in the tsuri-dono +tgp_japan_yearly_events.1080 = { + type = character_event + title = tgp_japan_yearly_events.1080.t + desc = tgp_japan_yearly_events.1080.desc + theme = court + cooldown = { years = 10 } + + override_background = { + reference = garden + } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:fisherman + animation = survey + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + is_landed = yes + any_courtier_or_guest = { + NOR = { + is_close_or_extended_family_of = root + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + is_available_adult = yes + } + } + + immediate = { + random_courtier_or_guest = { + limit = { + is_available_adult = yes + NOR = { + is_close_or_extended_family_of = root + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + } + } + weight = { + base = 10 + modifier = { + add = 15 + intrigue >= decent_skill_rating + } + } + save_scope_as = fisherman + } + } + + # Fish with them + option = { + name = tgp_japan_yearly_events.1080.a + + scope:fisherman = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 15 + } + } + + add_character_modifier = { + modifier = tgp_people_mingler_modifier + years = 3 + } + + stress_impact = { + compassionate = minor_stress_impact_loss + gregarious = medium_stress_impact_loss + calm = medium_stress_impact_loss + callous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_sociability = 1 + ai_compassion = 0.5 + } + } + } + + # Seems odd? + option = { + name = tgp_japan_yearly_events.1080.b + + duel = { + skill = intrigue + target = scope:fisherman + desc = tgp_japan_yearly_events.1080.b.tt + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1080.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1080.tt.success + left_icon = root + right_icon = scope:fisherman + stress_impact = { + paranoid = minor_stress_impact_loss + } + if = { + limit = { + any_courtier = { + any_secret = { + NOT = { is_known_by = root } + } + } + } + custom_tooltip = { + text = tgp_japan_yearly_events.1080.tt_secret + random_courtier = { + limit = { + any_secret = { + NOT = { is_known_by = root } + } + } + random_secret = { + limit = { NOT = { is_known_by = root } } + reveal_to = root + } + } + } + } + else = { + add_character_modifier = { + modifier = tgp_scheme_wary_modifier + years = 3 + } + custom_tooltip = { + text = tgp_japan_yearly_events.1080.tt_family + every_close_family_member = { + limit = { + is_courtier_of = root + } + add_character_modifier = { + modifier = tgp_scheme_wary_modifier + years = 3 + } + } + } + } + } + } + 59 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1080.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1080.tt.failure + left_icon = root + right_icon = scope:fisherman + add_prestige = minor_prestige_loss + scope:fisherman = { + add_opinion = { + modifier = insulted_opinion + target = root + opinion = -15 + } + } + stress_impact = { + paranoid = minor_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 2 + has_trait = paranoid + } + } + } + + # Go away! + option = { + name = tgp_japan_yearly_events.1080.c + + if = { + limit = { has_royal_court = yes } + change_current_court_grandeur = medium_court_grandeur_gain + } + else = { + add_dread = minor_dread_gain + } + + scope:fisherman = { + add_opinion = { + modifier = annoyed_opinion + target = root + opinion = -15 + } + } + + every_vassal_or_below = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 15 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 1 + ai_compassion = -0.5 + } + modifier = { + factor = 2 + has_trait = arrogant + } + } + } +} + +# Growing old with no heir +tgp_japan_yearly_events.1090 = { + type = character_event + title = tgp_japan_yearly_events.1090.t + desc = { + desc = tgp_japan_yearly_events.1090.desc_intro + first_valid = { + triggered_desc = { # Children are dead + trigger = { + any_child = { + even_if_dead = yes + is_alive = no + } + } + desc = tgp_japan_yearly_events.1090.desc_intro_dead + } + triggered_desc = { # No children + trigger = { + NOT = { + any_child = { even_if_dead = yes } + } + } + desc = tgp_japan_yearly_events.1090.desc_intro_none + } + } + desc = tgp_japan_yearly_events.1090.desc + } + theme = court + cooldown = { years = 25 } + + left_portrait = { + character = root + animation = disbelief + } + + right_portrait = { + character = scope:informer + animation = stress + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + is_ruler = yes + trigger_if = { + limit = { is_female = no } + age >= 55 + } + trigger_else = { age >= 45 } + any_held_title = { + is_noble_family_title = yes + NOT = { # No heirs are close family, or there are no heirs at all + any_title_heir = { is_close_family_of = root } + } + } + } + + immediate = { + random_held_title = { + limit = { + is_noble_family_title = yes + NOT = { # No heirs are close family, or there are no heirs at all + any_title_heir = { is_close_family_of = root } + } + } + save_scope_as = target_title + } + if = { + limit = { + exists = primary_spouse + } + primary_spouse = { save_scope_as = informer } + } + else_if = { + limit = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { save_scope_as = informer } + } + else = { + random_courtier = { save_scope_as = informer } + } + if = { + limit = { + allowed_more_concubines = yes + is_male = yes + } + create_character = { + template = tgp_concubine_template + location = root.location + save_scope_as = new_concubine + } + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 15 + is_female = yes + } + } + + # Try and make one? + option = { + name = tgp_japan_yearly_events.1090.a + trigger = { + is_male = yes + } + + add_character_modifier = { + modifier = tgp_fertility_boost_modifier + years = 5 + } + + if = { + limit = { + allowed_more_concubines = yes + } + random = { + chance = 50 + custom_tooltip = tgp_japan_yearly_events.1090.a_tt + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1090.a_tt + left_icon = root + right_icon = scope:new_concubine + hidden_effect = { make_concubine = scope:new_concubine } + } + } + } + + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 2 + fertility <= low_fertility + } + } + } + + # adopt an heir + option = { + name = tgp_japan_yearly_events.1090.b + + custom_tooltip = tgp_japan_yearly_events.1090.b_tt + trigger = { + NOT = { + culture = { + has_cultural_parameter = allows_adoption + } + } + } + if = { + limit = { + has_legitimacy = yes + } + add_legitimacy = medium_legitimacy_loss + } + else = { + add_prestige = medium_prestige_loss + } + + set_variable = { + name = seeks_an_heir + value = yes + } + + ai_chance = { + base = 0 + } + } + + # Rule as long as possible + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = lazy + has_trait = arrogant + has_trait = cynical + } + } + desc = tgp_japan_yearly_events.1090.c_uncaring + } + desc = tgp_japan_yearly_events.1090.c + } + } + } + + add_prestige = minor_prestige_loss + + add_character_modifier = { + modifier = tgp_longer_life_modifier + years = 10 + } + + stress_impact = { + base = minor_stress_impact_loss + lazy = minor_stress_impact_loss + cynical = minor_stress_impact_loss + } + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_energy = -0.5 + } + modifier = { + factor = 1.5 + has_trait = cynical + } + modifier = { + factor = 2 + health <= poor_health + } + } + } + + after = { + scope:new_concubine ?= { + silent_disappearance_ai_effect = yes + } + } +} + +# You become guilty after killing some people +tgp_japan_yearly_events.1100 = { + type = character_event + title = tgp_japan_yearly_events.1100.t + desc = { + desc = tgp_japan_yearly_events.1100.desc + triggered_desc = { + trigger = { + exists = scope:victim_2 + } + desc = tgp_japan_yearly_events.1100.desc_2 + } + triggered_desc = { + trigger = { + exists = scope:victim_2 + } + desc = tgp_japan_yearly_events.1100.desc_3 + } + desc = tgp_japan_yearly_events.1100.desc_outro + } + + theme = court + cooldown = { years = 25 } + + left_portrait = { + character = root + animation = stress + } + + right_portrait = { + character = scope:victim + } + + lower_center_portrait = { + trigger = { + exists = scope:victim_2 + NOT = { exists = scope:victim_3 } + } + character = scope:victim_2 + } + + lower_left_portrait = { + trigger = { + exists = scope:victim_2 + exists = scope:victim_3 + } + character = scope:victim_2 + } + + lower_right_portrait = { + trigger = { exists = scope:victim_3 } + character = scope:victim_3 + } + + weight_multiplier = { + base = 10 + modifier = { + add = 25 + any_secret = { + type = secret_murder + can_be_exposed_by = root + count > 1 + } + } + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + NOT = { has_trait = callous } + any_secret = { + type = secret_murder + can_be_exposed_by = root + } + } + + immediate = { + random_secret = { + type = secret_murder + limit = { can_be_exposed_by = root } + secret_target = { save_scope_as = victim } + } + random_secret = { + type = secret_murder + limit = { + can_be_exposed_by = root + NOT = { secret_target = scope:victim } + } + secret_target = { save_scope_as = victim_2 } + } + random_secret = { + type = secret_murder + limit = { + can_be_exposed_by = root + NOR = { + secret_target = scope:victim + secret_target = scope:victim_2 + } + } + secret_target = { save_scope_as = victim_3 } + } + } + + # Confess your sins + option = { + name = tgp_japan_yearly_events.1100.a + + custom_tooltip = { + text = tgp_japan_yearly_events.1100.a_tt + every_secret = { + type = secret_murder + expose_secret = root + } + } + + stress_impact = { + base = major_stress_impact_loss + just = minor_stress_impact_loss + honest = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + deceitful = minor_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = 1 + } + modifier = { + factor = 2 + has_trait = honest + } + } + } + + # I can't let anyone know this + option = { + name = tgp_japan_yearly_events.1100.b + custom_tooltip = tgp_japan_yearly_events.1100.b_tt + add_character_flag = { + flag = guilt_fever_murder_cd + years = 5 + } + + add_character_modifier = { + modifier = tgp_guilt_fever_modifier + years = 5 + } + + stress_impact = { + base = medium_stress_impact_gain + deceitful = minor_stress_impact_loss + paranoid = minor_stress_impact_loss + just = minor_stress_impact_gain + honest = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -0.5 + } + modifier = { + factor = 2 + has_trait = paranoid + } + } + } +} + +# An animal is seen near the shrine of a God +tgp_japan_yearly_events.1110 = { + type = character_event + title = tgp_japan_yearly_events.1110.t + desc = tgp_japan_yearly_events.1110.desc + theme = faith + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = admiration + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + religion = religion:shintoism_religion + location.religion = religion:shintoism_religion + } + + immediate = { + create_artifact_animal_hide_effect = { + OWNER = root + HUNTER = root + LEGENDARY = no + ANIMAL = flag:stag + } + } + + # This is a sign to reflect + option = { + name = tgp_japan_yearly_events.1110.a + + add_character_modifier = { + modifier = tgp_reflection_modifier + years = 5 + } + + stress_impact = { + base = minor_stress_impact_gain + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_zeal = 1 + } + modifier = { + factor = 2 + has_focus_learning = yes + } + } + } + + # This is a sign of good fortune + option = { + name = tgp_japan_yearly_events.1110.b + + stress_impact = { + base = miniscule_stress_impact_loss + zealous = minor_stress_impact_loss + cynical = minor_stress_impact_gain + } + + random = { + chance = 50 + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1110.b.tt + left_icon = root + add_short_term_gold = medium_gold_value + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + } + } + + # Capture it as a trophy + option = { + name = tgp_japan_yearly_events.1110.c + + duel = { + skill = prowess + value = decent_skill_rating + desc = tgp_japan_yearly_events.1110.c.tt + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1110.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1110.tt.success + left_icon = root + scope:newly_created_artifact = { set_owner = root } + add_piety = minor_piety_loss + } + } + 59 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1110.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1110.tt.failure + left_icon = root + add_prestige = minor_prestige_loss + } + } + } + + stress_impact = { + craven = minor_stress_impact_gain + zealous = minor_stress_impact_gain + compassionate = minor_stress_impact_gain + cynical = minor_stress_impact_loss + greedy = minor_stress_impact_loss + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_honor = -1 + } + } + } +} + +# You come across a warrior in your travels +tgp_japan_yearly_events.1120 = { + type = character_event + title = tgp_japan_yearly_events.1120.t + desc = { + first_valid = { + triggered_desc = { + trigger = { + location.county = { is_riverside_county = yes } + } + desc = tgp_japan_yearly_events.1120.desc_intro_river + } + desc = tgp_japan_yearly_events.1120.desc_intro + } + desc = tgp_japan_yearly_events.1120.desc + } + theme = travel + cooldown = { years = 100 } + + left_portrait = { + character = scope:strong_leader + animation = rage + } + + right_portrait = { + character = scope:warrior_monk + animation = aggressive_sword + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + is_location_valid_for_travel_event_on_land = yes + + location = { + OR = { + #anywhere with warrior monks, this is currently only Japan, but hopefully elsewhere going forward. + county.culture = { + has_cultural_tradition = tradition_tgp_warrior_monks + } + geographical_region = world_asia_japan + } + } + has_government = japan_feudal_government + } + + immediate = { + save_scope_as = strong_leader + create_character = { + template = tgp_warrior_monk_template + location = root.location + save_scope_as = warrior_monk + after_creation = { + random = { + chance = 50 + add_trait = giant + } + } + } + } + + # Accept their challenge + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + martial >= decent_skill_rating + } + desc = tgp_japan_yearly_events.1120.a_warrior + } + desc = tgp_japan_yearly_events.1120.a + } + } + } + + add_prestige = minor_prestige_gain + custom_tooltip = ep3_laamps.6001.b.two.tt + + configure_start_single_combat_effect = { + SC_INITIATOR = scope:warrior_monk + SC_ATTACKER = scope:warrior_monk + SC_DEFENDER = root + FATALITY = no + FIXED = no + LOCALE = terrain_scope + OUTPUT_EVENT = tgp_japan_yearly_events.1121 + INVALIDATION_EVENT = single_combat.1006 + } + + stress_impact = { + craven = medium_stress_impact_gain + arrogant = minor_stress_impact_loss + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + modifier = { + has_trait = craven + factor = 0 + } + } + } + + # Just join me, I'm super cool + option = { + name = tgp_japan_yearly_events.1120.b + + duel = { + skill = diplomacy + value = decent_skill_rating + desc = tgp_japan_yearly_events.1120.b.tt + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + min = 2 + desc = tgp_japan_yearly_events.1120.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1120.tt.success + left_icon = root + add_courtier = scope:warrior_monk + } + } + 65 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + min = 2 + desc = tgp_japan_yearly_events.1120.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1120.tt.failure + left_icon = root + add_prestige = minor_prestige_loss + } + } + } + + stress_impact = { + calm = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + } + } + + # Guards, deal with him! + option = { + name = tgp_japan_yearly_events.1120.c + trigger = { + current_travel_plan = { + has_travel_option = hire_experienced_mercenaries_option + } + } + custom_tooltip = tgp_japan_yearly_events.1120.c_tt + add_prestige = minor_prestige_loss + add_dread = minor_dread_gain + + random = { + chance = 50 + scope:warrior_monk = { + increase_wounds_no_death_effect = { REASON = fight } + } + } + + stress_impact = { + impatient = minor_stress_impact_loss + irritable = minor_stress_impact_loss + callous = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + compassionate = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + } + modifier = { + has_trait = compassionate + factor = 0 + } + } + } + + # No thx + option = { + name = tgp_japan_yearly_events.1120.d + + current_travel_plan = { + delay_travel_plan = { days = 60 } + } + + stress_impact = { + brave = minor_stress_impact_gain + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_energy = -1 + } + } + } + + after = { + scope:warrior_monk ?= { + silent_disappearance_ai_effect = yes + } + } +} + +# Outcome of the battle +tgp_japan_yearly_events.1121 = { + hidden = yes + immediate = { + if = { + limit = { + scope:sc_victor = scope:strong_leader + scope:warrior_monk = { is_alive = yes } + } + scope:strong_leader = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1120.tt.success + left_icon = scope:strong_leader + right_icon = scope:warrior_monk + scope:warrior_monk = { add_trait = loyal } + add_courtier = scope:warrior_monk + } + } + } + } +} + +scripted_trigger valid_child_1130 = { + any_spouse = { count = 0 } + OR = { + diplomacy >= decent_skill_rating + learning >= decent_skill_rating + has_trait = education_diplomacy_3 + has_trait = education_diplomacy_4 + has_trait = education_diplomacy_5 + has_trait = education_learning_3 + has_trait = education_learning_4 + has_trait = education_learning_5 + } + is_female = yes + NOT = { has_trait = lifestyle_poet } + age >= 13 + age <= 26 + is_available = yes +} + +# Your daughter expresses an interest in poetry +tgp_japan_yearly_events.1130 = { + type = character_event + title = tgp_japan_yearly_events.1130.t + desc = tgp_japan_yearly_events.1130.desc + theme = learning + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:poet_daughter + animation = storyteller + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + has_government = japan_administrative_government + any_child = { valid_child_1130 = yes } + } + + immediate = { + random_child = { + limit = { valid_child_1130 = yes } + weight = { + base = 10 + modifier = { + add = 15 + intrigue >= decent_skill_rating + } + modifier = { + add = 5 + OR = { + has_trait = shy + has_trait = chaste + has_trait = ambitious + } + } + } + save_scope_as = poet_daughter + } + scope:poet_daughter = { + add_trait = inappetetic + } + } + + + # Encourage her writing + option = { + name = tgp_japan_yearly_events.1130.a + + add_prestige = minor_prestige_gain + + scope:poet_daughter = { + add_stress = minor_stress_loss + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 15 + } + duel = { + skills = { diplomacy learning } + value = decent_skill_rating + desc = tgp_japan_yearly_events.1130.a.tt + 10 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2 + } + desc = tgp_japan_yearly_events.1130.poet_critical + root = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1130.poet_critical + left_icon = root + right_icon = scope:poet_daughter + scope:poet_daughter = { + add_trait = lifestyle_poet + remove_trait = inappetetic + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1130.poet + root = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1130.poet + left_icon = root + right_icon = scope:poet_daughter + scope:poet_daughter = { add_trait = lifestyle_poet } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1130.nice_try + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_japan_yearly_events.1130.nice_try + left_icon = root + right_icon = scope:poet_daughter + scope:poet_daughter = { add_learning_skill = 3 } + } + } + } + add_character_modifier = { + modifier = tgp_learning_poetry_modifier + years = 5 + } + } + + if = { + limit = { + has_trait = lifestyle_poet + } + add_trait_xp = { + trait = lifestyle_poet + value = 5 + } + } + + stress_impact = { + compassionate = minor_stress_impact_loss + lifestyle_poet = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + } + opinion_modifier = { + opinion_target = scope:poet_daughter + multiplier = 2 + } + modifier = { + has_trait = lifestyle_poet + factor = 2 + } + } + } + + # This is so dumb she needs to be doing court stuff instead + option = { + name = tgp_japan_yearly_events.1130.b + + if = { + limit = { + has_royal_court = yes + } + change_current_court_grandeur = minor_court_grandeur_gain + } + else = { + add_prestige = minor_prestige_gain + } + + every_vassal_or_below = { + vassal_stance = courtly + custom = every_courtly_vassal + add_opinion = { + modifier = approval_opinion + target = root + opinion = 15 + } + } + + scope:poet_daughter = { + add_stress = minor_stress_gain + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + remove_trait = inappetetic + add_diplomacy_skill = 1 + } + + stress_impact = { + diligent = minor_stress_impact_loss + callous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + opinion_modifier = { + opinion_target = scope:poet_daughter + multiplier = -2 + } + } + } +} + +# You are stopped in Soryo lands as a Ritsuryo ruler +tgp_japan_yearly_events.1140 = { + type = character_event + title = tgp_japan_yearly_events.1140.t + desc = tgp_japan_yearly_events.1140.desc + theme = travel + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = worry + } + + right_portrait = { + character = scope:toll_warrior + animation = war_defender + } + + lower_center_portrait = scope:local_ruler + + trigger = { + is_ai = no + has_tgp_dlc_trigger = yes + is_available_travelling_adult = yes + is_location_valid_for_travel_event_on_land = yes + location = { + geographical_region = world_asia_japan + county.holder = { + has_government = japan_feudal_government + any_knight = { is_available = yes count >= 1 } + } + } + has_government = japan_administrative_government + short_term_gold >= minor_gold_value + OR = { + house.house_head = root + prestige_level >= 2 + } + is_independent_ruler = no + tgp_is_ceremonial_liege_trigger = no + } + + immediate = { + location.county = { + save_scope_as = local_county + holder = { + save_scope_as = local_ruler + random_knight = { + limit = { is_available = yes } + save_scope_as = toll_warrior + } + } + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 20 + scope:local_ruler.house.house_head = scope:local_ruler + } + } + + # Pay the toll, but remember their names + option = { + name = tgp_japan_yearly_events.1140.a + + pay_short_term_gold = { + target = scope:local_ruler + gold = minor_gold_value + } + + house = { + change_house_relation_effect = { + HOUSE = scope:local_ruler.house + VALUE = house_relation_damage_minor_value + REASON = conflict + CHAR = root + TARGET_CHAR = scope:local_ruler + TITLE = scope:dummy_gender + } + } + + stress_impact = { + calm = minor_stress_impact_loss + honest = minor_stress_impact_loss + just = minor_stress_impact_loss + generous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + } + } + } + + # Gaslight the guard + option = { + name = tgp_japan_yearly_events.1140.b + + duel = { + skills = { diplomacy intrigue } + target = scope:toll_warrior + desc = tgp_japan_yearly_events.1140.b.tt + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1140.tt.success + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1140.tt.success + left_icon = root + add_prestige = medium_prestige_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1140.tt.failure + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1140.tt.failure + left_icon = root + add_prestige = minor_prestige_loss + current_travel_plan = { + delay_travel_plan = { days = 45 } + } + } + } + } + + stress_impact = { + greedy = minor_stress_impact_loss + humble = minor_stress_impact_gain + stubborn = minor_stress_impact_loss + } + + ai_chance = { + base = 75 + ai_value_modifier = { + ai_honor = -1 + } + modifier = { + factor = 2 + has_trait = deceitful + } + } + } + + # Refuse to pay + option = { + name = tgp_japan_yearly_events.1140.c + + current_travel_plan = { + delay_travel_plan = { days = 60 } + } + + scope:local_ruler = { + add_opinion = { + modifier = angry_opinion + target = root + opinion = -15 + } + } + + house = { + decrease_house_relation_level_effect = { + HOUSE = scope:local_ruler.house + REASON = conflict + } + } + + stress_impact = { + arrogant = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + } + opinion_modifier = { + opinion_target = scope:local_ruler + multiplier = -2 + } + } + } +} + +# The ruler of Japan is passing in your lands +tgp_japan_yearly_events.1150 = { + type = character_event + title = tgp_japan_yearly_events.1150.t + desc = tgp_japan_yearly_events.1150.desc + theme = court + cooldown = { years = 25 } + override_background = terrain + left_portrait = { + character = root + animation = survey + camera = camera_event_center_away + } + + lower_center_portrait = scope:emperor + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + + title:e_japan.holder = { + has_realm_law = japanese_bureaucracy_0 + this != root + } + + any_held_title = { + tier = tier_county + title:e_japan.holder.location.county = this + } + } + + immediate = { + title:e_japan.holder = { + save_scope_as = emperor + location.county = { save_scope_as = emperor_location } + } + save_scope_as = local_ruler + } + + # Option A) Send him some gold + option = { + name = tgp_japan_yearly_events.1150.a + save_scope_value_as = { name = ruler_choice value = flag:gift } + pay_short_term_gold = { + target = scope:emperor + gold = minor_gold_value + } + scope:emperor = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 20 + } + } + + stress_impact = { + generous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + } + ai_chance = { + base = 75 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -1 + } + opinion_modifier = { + opinion_target = scope:emperor + multiplier = 2 + } + modifier = { + short_term_gold <= minor_gold_value + factor = 0 + } + + } + } + + # Option B) Extend my hospitality + option = { + name = tgp_japan_yearly_events.1150.b + flavor = tgp_japan_yearly_events.1150.b.flavor + save_scope_value_as = { name = ruler_choice value = flag:hospitality } + pay_short_term_gold = { + target = scope:emperor + gold = medium_gold_value + } + change_influence = minor_influence_gain + add_prestige = minor_prestige_gain + + scope:emperor = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 35 + } + } + #Improve house relations + house = { + change_house_relation_effect = { + HOUSE = scope:emperor.house + VALUE = house_relation_improve_medium_value + REASON = friend + CHAR = root + TARGET_CHAR = scope:emperor + TITLE = scope:dummy_gender + } + } + + stress_impact = { + gregarious = minor_stress_impact_loss + generous = minor_stress_impact_loss + greedy = minor_stress_impact_gain + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_greed = -1 + } + opinion_modifier = { + opinion_target = scope:emperor + multiplier = 2 + } + modifier = { + short_term_gold <= medium_gold_value + factor = 0 + } + } + } + + #Option F) Slander him + option = { + name = tgp_japan_yearly_events.1150.f + flavor = tgp_japan_yearly_events.1150.f.flavor + add_intrigue_lifestyle_xp = medium_lifestyle_experience + add_prestige = minor_prestige_loss + #No need to see this if you're on good terms with the emperor + trigger = { + can_start_scheme = { + type = slander + target_character = scope:emperor + } + dislikes_character_trigger = { CHARACTER = scope:emperor } + } + save_scope_value_as = { name = ruler_choice value = flag:slander} + if = { + limit = { + NOT = { + any_scheme = { + scheme_type = slander + scheme_target_character = scope:emperor + } + } + } + #If we don't have a scheme, let's scheme with a boost + start_scheme = { + type = slander + target_character = scope:emperor + } + } + + custom_tooltip = { + text = tgp_japan_yearly_events.1150.f.tt + random_scheme = { + limit = { + scheme_type = slander + scheme_target_character = scope:emperor + } + add_scheme_modifier = { type = bided_my_time } + } + } + stress_impact = { + compassionate = minor_stress_impact_gain + generous = minor_stress_impact_gain + patient = minor_stress_impact_loss + vengeful = medium_stress_impact_loss + ambitious = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_greed = -1 + } + } + } + + # Option C) Write him a poem! + option = { + name = tgp_japan_yearly_events.1150.c + trigger = { has_trait = lifestyle_poet } + + save_scope_value_as = { name = ruler_choice value = flag:poem } + scope:emperor = { + add_opinion = { + modifier = pleased_opinion + target = root + opinion = 20 + } + } + add_trait_xp = { + trait = lifestyle_poet + value = 10 + } + add_character_modifier = { + modifier = tgp_japan_poetic_to_the_powerful_modifier + years = { 10 20 } + } + stress_impact = { + compassionate = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + lifestyle_poet = minor_stress_impact_loss + } + + ai_chance = { + base = 150 + ai_value_modifier = { + ai_compassion = 1 + } + opinion_modifier = { + opinion_target = scope:emperor + multiplier = 2 + } + } + } + + # Option D) Send some men to mug him + option = { + name = tgp_japan_yearly_events.1150.d + flavor = tgp_japan_yearly_events.1150.d.flavor + + save_scope_value_as = { name = ruler_choice value = flag:bandits } + + show_as_tooltip = { + duel = { + skill = martial + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 20 + max = 90 + } + desc = japan_yearly_1151_bandits_win + scope:local_ruler = { + send_interface_toast = { + title = japan_yearly_1151_success + left_icon = scope:emperor + right_icon = scope:local_ruler + scope:emperor = { + pay_short_term_gold = { + GOLD = medium_gold_value + TARGET = scope:local_ruler + } + } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 20 + max = 90 + } + desc = japan_yearly_1151_bandits_lose + scope:local_ruler = { + send_interface_toast = { + title = japan_yearly_1151_fails + left_icon = scope:emperor + right_icon = scope:local_ruler + add_prestige = medium_prestige_loss + } + } + } + } + #Emperor will maybe become rival + scope:emperor = { + #If possible it progresses rivalry + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:local_ruler } + } + progress_towards_rival_effect = { + REASON = rival_robbed_me + CHARACTER = scope:local_ruler + OPINION = default_rival_opinion + } + } + #otherwise it makes them like you less + else = { + add_opinion = { + target = scope:local_ruler + modifier = humbled_opinion + opinion = -40 + } + } + } + #This will cause strife with his house + scope:local_ruler.house = { + change_house_relation_effect = { + HOUSE = scope:emperor.house + VALUE = house_relation_damage_major_value + REASON = conflict + CHAR = scope:local_ruler + TARGET_CHAR = scope:emperor + TITLE = scope:dummy_gender + } + } + } + + stress_impact = { + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + greedy = minor_stress_impact_loss + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_honor = -1 + } + opinion_modifier = { + opinion_target = scope:emperor + multiplier = -2 + } + } + } + + after = { + scope:emperor = { + if = { + limit = { + scope:ruler_choice ?= { + this != flag:slander + } + } + trigger_event = { + id = tgp_japan_yearly_events.1151 + days = 1 + } + } + } + } +} + +# Response for the Emperor +tgp_japan_yearly_events.1151 = { + type = character_event + theme = travel + title = tgp_japan_yearly_events.1151.t + desc = { + desc = tgp_japan_yearly_events.1151.desc + first_valid = { + triggered_desc = { + trigger = { + scope:ruler_choice = flag:bandits + } + desc = tgp_japan_yearly_events.1151.desc_bandits + } + triggered_desc = { + trigger = { + scope:ruler_choice = flag:hospitality + } + desc = tgp_japan_yearly_events.1151.desc_hospitality + } + triggered_desc = { + trigger = { + scope:ruler_choice = flag:poem + } + desc = tgp_japan_yearly_events.1151.desc_poem + } + triggered_desc = { + trigger = { + scope:ruler_choice = flag:gift + } + desc = tgp_japan_yearly_events.1151.desc_gift + } + } + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + scope:ruler_choice = flag:bandits + } + animation = anger + } + animation = thinking + } + + right_portrait = { + character = scope:messenger + triggered_animation = { + trigger = { + scope:ruler_choice = flag:bandits + } + animation = aggressive_sword + } + animation = storyteller + } + + lower_center_portrait = scope:local_ruler + + immediate = { + scope:local_ruler = { + random_courtier = { + limit = { + is_available_adult = yes + } + save_scope_as = messenger + } + } + if = { + limit = { + scope:ruler_choice = flag:gift + } + show_as_tooltip = { + scope:local_ruler = { + pay_short_term_gold = { + target = scope:emperor + gold = minor_gold_value + } + } + } + } + } + + #Option A) Gesture is impressive! + option = { + name = tgp_japan_yearly_events.1151.a + trigger = { + OR = { + scope:ruler_choice ?= flag:poem + scope:ruler_choice ?= flag:hospitality + scope:ruler_choice ?= flag:gift + } + } + + add_prestige = minor_prestige_gain + add_stress = minor_stress_loss + #If you enjoy hospitality it takes time + if = { + limit = { + scope:ruler_choice ?= flag:hospitality + } + current_travel_plan = { + delay_travel_plan = { days = 14 } + } + } + + scope:local_ruler = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1151.tt_good.success + left_icon = scope:local_ruler + right_icon = scope:emperor + add_prestige = medium_prestige_gain + if = { + limit = { + OR = { + house.house_head = this + prestige_level >= 2 + } + house != scope:emperor.house + } + house = { + increase_house_relation_level_effect = { + HOUSE = scope:emperor.house + REASON = gift + } + } + } + + else = { + progress_towards_friend_effect = { + REASON = friend_nice_gesture + CHARACTER = scope:emperor + OPINION = 0 + } + } + } + } + stress_impact = { + arrogant = minor_stress_impact_gain + callous = minor_stress_impact_gain + fickle = minor_stress_impact_gain + generous = minor_stress_impact_loss + humble = minor_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + modifier = { + factor = 0 + has_trait = arrogant + has_trait = callous + has_trait = fickle + } + } + } + + #Option B) Poem / Gesture is not that good + option = { + name = tgp_japan_yearly_events.1151.b + trigger = { + OR = { + scope:ruler_choice ?= flag:poem + scope:ruler_choice ?= flag:hospitality + scope:ruler_choice ?= flag:gift + } + } + add_prestige = miniscule_prestige_gain + scope:local_ruler = { + send_interface_toast = { + type = event_toast_effect_neutral + title = tgp_japan_yearly_events.1151.tt_good.failure + left_icon = scope:local_ruler + right_icon = scope:emperor + add_prestige = miniscule_prestige_gain + } + } + stress_impact = { + arrogant = minor_stress_impact_loss + callous = minor_stress_impact_loss + fickle = minor_stress_impact_loss + generous = minor_stress_impact_gain + humble = minor_stress_impact_gain + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + modifier = { + factor = 0 + has_trait = generous + has_trait = humble + } + } + } + + #Option C) Fight off the bandits / don't fall for the intimidation + option = { + name = tgp_japan_yearly_events.1151.c_bandits + trigger = { + scope:ruler_choice = flag:bandits + } + duel = { + skill = martial + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = 20 + max = 90 + } + desc = japan_yearly_1151_bandits_win + scope:local_ruler = { + send_interface_toast = { + title = japan_yearly_1151_success + left_icon = scope:emperor + right_icon = scope:local_ruler + scope:emperor = { + pay_short_term_gold = { + GOLD = medium_gold_value + TARGET = scope:local_ruler + } + } + add_martial_lifestyle_xp = medium_lifestyle_xp + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 20 + max = 90 + } + desc = japan_yearly_1151_bandits_lose + scope:local_ruler = { + send_interface_toast = { + title = japan_yearly_1151_fails + left_icon = scope:emperor + right_icon = scope:local_ruler + add_prestige = medium_prestige_loss + } + } + } + } + stress_impact = { + brave = minor_stress_impact_loss + vengeful = minor_stress_impact_loss + craven = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = 1 + } + opinion_modifier = { + opinion_target = scope:local_ruler + multiplier = -2 + } + modifier = { + factor = 0 + has_trait = craven + } + } + } + + #Option C) Just give the bandits some gold / walk away to avoid conflict + option = { + name = tgp_japan_yearly_events.1151.d_bandits + + trigger = { + scope:ruler_choice = flag:bandits + } + add_prestige = minor_prestige_loss + if = { + limit = { + scope:ruler_choice = flag:bandits + } + scope:local_ruler = { + send_interface_toast = { + type = event_toast_effect_good + title = japan_yearly_1151_success + left_icon = scope:local_ruler + right_icon = scope:emperor + scope:emperor = { + pay_short_term_gold = { + target = scope:local_ruler + gold = minor_gold_value + } + } + } + } + } + else = { + scope:local_ruler = { + send_interface_toast = { + type = event_toast_effect_good + title = japan_yearly_1151_success + left_icon = scope:local_ruler + right_icon = scope:emperor + add_dread = miniscule_dread_gain + } + } + current_travel_plan = { + delay_travel_plan = { days = 14 } + } + } + + stress_impact = { + brave = minor_stress_impact_gain + calm = minor_stress_impact_loss + craven = minor_stress_impact_loss + lazy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_energy = -1 + } + modifier = { + factor = 2 + has_trait = craven + } + } + } + after = { + if = { + limit = { + scope:ruler_choice = flag:bandits + } + #Emperor will maybe become rival + scope:emperor = { + #If possible it progresses rivalry + if = { + limit = { + can_set_relation_rival_trigger = { CHARACTER = scope:local_ruler } + } + progress_towards_rival_effect = { + REASON = rival_robbed_me + CHARACTER = scope:local_ruler + OPINION = default_rival_opinion + } + } + #otherwise it makes them like you less + else = { + add_opinion = { + target = scope:local_ruler + modifier = humbled_opinion + opinion = -40 + } + } + } + if = { + limit = { + OR = { + scope:ruler_choice = flag:bandits + scope:ruler_choice = flag:slander + } + } + #This will cause strife with his house + scope:local_ruler.house = { + change_house_relation_effect = { + HOUSE = scope:emperor.house + VALUE = house_relation_damage_major_value + REASON = conflict + CHAR = scope:local_ruler + TARGET_CHAR = scope:emperor + TITLE = scope:dummy_gender + } + } + } + } + } +} + +scripted_trigger is_suitable_spouse_or_concubine_tgp_japan_1160 = { + liege ?= house.house_head + liege = { + is_ai = yes # sanity check so as to not yeet a player's courtier + } + is_available_ai_adult = yes + is_ruler = no # this would be weirder otherwise + OR = { + can_marry_character_trigger = { CHARACTER = root } + can_become_concubine_of_character_trigger = { CHARACTER = root } + } + root = { + is_attracted_to_gender_of = prev + } +} + +# You are offered a spouse/concubine to mend house relations +tgp_japan_yearly_events.1160 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = cannibal + any_secret = { type = secret_cannibal } + } + } + desc = tgp_japan_yearly_events.cannibal.1160.t + } + desc = tgp_japan_yearly_events.1160.t + } + } + + desc = tgp_japan_yearly_events.1160.desc + theme = court + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = personality_honorable + camera = camera_event_center_pointing_forward + } + + right_portrait = { + character = scope:new_concubine + animation = flirtation + } + + lower_center_portrait = scope:feuding_house.house_head + + trigger = { + is_at_war = no + has_tgp_dlc_trigger = yes + is_available_adult = yes + exists = house + house.house_head = root + house = { + any_house_relation = { + OR = { + has_house_relation_level = feud + has_house_relation_level = rivalry + has_house_relation_level = quarrel + } + any_relation_house = { + this != root.house + house_head = { + is_available_ai_adult = yes + is_at_war = no + opinion = { + target = root + value >= 0 # there should be at least some reason they want to improve relations + } + } + any_house_member = { + is_suitable_spouse_or_concubine_tgp_japan_1160 = yes + } + } + } + } + OR = { + allowed_more_spouses = yes + allowed_more_concubines = yes + } + } + + immediate = { + house = { + random_house_relation = { + limit = { + OR = { + has_house_relation_level = feud + has_house_relation_level = rivalry + has_house_relation_level = quarrel + } + any_relation_house = { + this != root.house + house_head = { + is_available_ai_adult = yes + is_at_war = no + opinion = { + target = root + value >= 0 # there should be at least some reason they want to improve relations + } + } + any_house_member = { + is_suitable_spouse_or_concubine_tgp_japan_1160 = yes + } + } + } + random_relation_house = { + limit = { + this != root.house + house_head = { + is_available_ai_adult = yes + is_at_war = no + opinion = { + target = root + value >= 0 + } + } + any_house_member = { + is_suitable_spouse_or_concubine_tgp_japan_1160 = yes + } + } + save_scope_as = feuding_house + } + } + } + scope:feuding_house = { + random_house_member = { + limit = { + is_suitable_spouse_or_concubine_tgp_japan_1160 = yes + } + save_scope_as = new_concubine + } + } + } + + # I'll take her + option = { + name = tgp_japan_yearly_events.1160.a + + if = { + limit = { + allowed_more_spouses = yes + } + marry = scope:new_concubine + } + else_if = { + limit = { + allowed_more_concubines = yes + } + make_concubine = scope:new_concubine + } + + scope:feuding_house = { + change_house_relation_effect = { + HOUSE = root.house + VALUE = house_relation_improve_medium_value + REASON = gift + CHAR = scope:feuding_house.house_head + TARGET_CHAR = root + TITLE = scope:dummy_gender + } + } + + stress_impact = { + paranoid = minor_stress_impact_gain + vengeful = minor_stress_impact_gain + calm = minor_stress_impact_loss + lustful = minor_stress_impact_loss + forgiving = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + modifier = { + factor = 2 + OR = { + has_trait = forgiving + has_trait = lustful + } + } + modifier = { + factor = 0 + has_trait = paranoid + } + } + } + + # send her back + option = { + name = tgp_japan_yearly_events.1160.b + + add_prestige = minor_prestige_gain + + scope:feuding_house.house_head = { + add_opinion = { + modifier = insulted_opinion + target = root + opinion = -15 + } + } + ai_chance = { + base = 100 + } + } + + # This is a spy, kill her! + option = { + name = tgp_japan_yearly_events.1160.c + trigger = { + has_trait_malicious_trigger = yes + NOR = { + has_trait = cannibal + any_secret = { type = secret_cannibal } + } + } + scope:new_concubine = { + death = { + death_reason = death_execution + killer = root + } + } + + house ?= { + change_house_relation_effect = { + HOUSE = scope:feuding_house + VALUE = house_relation_damage_medium_value + REASON = killed + CHAR = root + TARGET_CHAR = scope:new_concubine + TITLE = scope:dummy_gender + } + } + + scope:feuding_house.house_head = { + add_opinion = { + modifier = insulted_opinion + target = root + opinion = -30 + } + } + + stress_impact = { + paranoid = minor_stress_impact_loss + callous = medium_stress_impact_loss + vengeful = major_stress_impact_loss + just = minor_stress_impact_gain + calm = medium_stress_impact_gain + compassionate = major_stress_impact_gain + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_rationality = -1 + ai_compassion = -1 + } + } + } + + # This is a spy, eat her! (Cannibal option) + option = { + name = tgp_japan_yearly_events.1160.d + trigger = { + OR = { + has_trait = cannibal + any_secret = { type = secret_cannibal } + } + } + + add_character_modifier = { + modifier = feast_good_food_modifier + years = 10 + } + + unknown_cannibal_murder_effect = { + VICTIM = scope:new_concubine + MURDERER = root + } + + stress_impact = { + base = major_stress_impact_loss + paranoid = minor_stress_impact_loss + callous = medium_stress_impact_loss + vengeful = major_stress_impact_loss + just = minor_stress_impact_gain + calm = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + } + } + } +} + +# The poetry you're reading is in a language you're unfamiliar with +tgp_japan_yearly_events.1170 = { + type = character_event + title = tgp_japan_yearly_events.1170.t + desc = tgp_japan_yearly_events.1170.desc + theme = diplomacy + cooldown = { years = 15 } + override_background = { + reference = study + } + + left_portrait = { + character = root + animation = reading + } + + lower_center_portrait = scope:foreign_ruler + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + location = { + geographical_region = world_asia_japan + } + knows_language = language_japonic + #Find a country lead by a Chinese or Korean speaker and confirm you don't speak the language in question + any_neighboring_and_across_water_top_liege_realm_owner = { + OR = { + AND = { + knows_language = language_chinese + root = { + NOT = { + knows_language = language_chinese + } + } + } + AND = { + knows_language = language_korean + root = { + NOT = { + knows_language = language_korean + } + } + } + } + } + } + + immediate = { + #Find a country lead by a Chinese or Korean speaker and confirm you don't speak the language in question + random_neighboring_and_across_water_top_liege_realm_owner = { + limit = { + OR = { + AND = { + knows_language = language_chinese + root = { + NOT = { + knows_language = language_chinese + } + } + } + AND = { + knows_language = language_korean + root = { + NOT = { + knows_language = language_korean + } + } + } + } + } + save_scope_as = foreign_ruler + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 5 + has_trait = lifestyle_poet + } + modifier = { + add = 5 + has_trait = lifestyle_mystic + } + modifier = { + add = 10 + has_focus_learning = yes + } + } + + + # Option A) Learn the language + option = { + name = tgp_japan_yearly_events.1170.a + trigger = { + can_start_scheme = { + type = learn_language + target_character = scope:foreign_ruler + } + } + + start_scheme = { + target_character = scope:foreign_ruler + type = learn_language + } + custom_tooltip = diplomacy_family.2250.b.tt + + hidden_effect = { + random_scheme = { + type = learn_language + limit = { + scheme_target_character = scope:foreign_ruler + } + add_scheme_modifier = { + type = extra_success_chance_modifier + } + } + } + + stress_impact = { + calm = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 1 + } + } + } + + # Option B) Tell this guy his poets are bad + option = { + name = tgp_japan_yearly_events.1170.b + + add_prestige = minor_prestige_gain + + scope:foreign_ruler.culture = { + change_cultural_acceptance = { + target = root.culture + value = minor_cultural_acceptance_loss + desc = cultural_acceptance_loss_event + } + } + + stress_impact = { + impatient = minor_stress_impact_loss + irritable = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_boldness = 0.5 + } + opinion_modifier = { + opinion_target = scope:foreign_ruler + multiplier = -2 + } + } + } + + # Option C) This was a pleasant diversion! + option = { + name = tgp_japan_yearly_events.1170.c + + if = { + limit = { + has_trait = lifestyle_mystic + } + add_trait_xp = { + trait = lifestyle_mystic + value = 5 + } + } + + add_learning_lifestyle_xp = minor_lifestyle_xp + + stress_impact = { + lifestyle_poet = minor_stress_impact_loss + calm = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = -1 + } + } + } +} + +# You've been gifted a Bonsai tree for your garden +tgp_japan_yearly_events.1180 = { + type = character_event + title = tgp_japan_yearly_events.1180.t + desc = tgp_japan_yearly_events.1180.desc + theme = court + cooldown = { years = 15 } + override_background = { + reference = garden + } + + left_portrait = { + character = root + animation = schadenfreude + } + + right_portrait = { + character = scope:gardener + animation = schadenfreude + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + is_valid_for_japan_events_trigger = yes + any_courtier = { + has_court_position = court_gardener_court_position + } + } + + immediate = { + #Find your gardener + random_courtier = { + limit = { + has_court_position = court_gardener_court_position + } + save_scope_as = gardener + } + } + + # This tree represents stability! + option = { + name = tgp_japan_yearly_events.1180.a + + add_stress = minor_stress_loss + + add_character_modifier = { + modifier = tgp_stability_tree_modifier + years = 10 + } + + ai_chance = { + base = 100 + } + } + + # It has spiritual value + option = { + name = tgp_japan_yearly_events.1180.b + + add_piety = minor_piety_gain + pay_short_term_gold = { + target = scope:gardener + gold = miniscule_gold_value + } + add_character_flag = { + flag = had_bonsai_tree_event + years = 10 + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_zeal = 1 } + } + } + + # I want to shape it myself + option = { + name = tgp_japan_yearly_events.1180.c + + if = { + limit = { + has_trait = lifestyle_gardener + } + add_trait_xp = { + trait = lifestyle_gardener + value = 2 + } + } + else = { add_trait = lifestyle_gardener } + + ai_chance = { + base = 100 + } + } +} + +# You have a bad trait and you're making some decisions at night +tgp_japan_yearly_events.1190 = { + type = character_event + title = tgp_japan_yearly_events.1190.t + desc = { + random_valid = { + triggered_desc = { + trigger = { + OR = { + has_trait = irritable + has_trait = impatient + } + } + desc = tgp_japan_yearly_events.1190.desc_annoyed + } + triggered_desc = { + trigger = { + has_trait = drunkard + } + desc = tgp_japan_yearly_events.1020.desc_drunk + } + triggered_desc = { + trigger = { + learning <= low_skill_rating + } + desc = tgp_japan_yearly_events.1020.desc_dumb + } + } + desc = tgp_japan_yearly_events.1190.desc + } + theme = court + cooldown = { years = 15 } + override_background = { + reference = bedchamber + } + + left_portrait = { + character = root + animation = wedding_drunk + } + + trigger = { + has_tgp_dlc_trigger = yes + is_landed = yes + is_available_adult = yes + OR = { + has_trait = irritable + has_trait = impatient + has_trait = drunkard + learning <= low_skill_rating + } + NOR = { + has_trait = temperate + has_trait = diligent + learning >= high_skill_rating + } + any_held_title = { + title_tier = county + this != root.capital_county + } + } + + weight_multiplier = { + base = 10 + modifier = { + add = 5 + stress_level >= 1 + } + modifier = { + add = 10 + stress_level >= 2 + } + modifier = { + add = 15 + stress_level >= 3 + } + } + + # Ok i gotta stop this for real + option = { + name = tgp_japan_yearly_events.1190.a + + stress_impact = { + base = major_stress_impact_gain + lazy = minor_stress_impact_gain + } + + random = { + chance = 50 + add_prestige = minor_prestige_gain + if = { + limit = { has_trait = irritable } + remove_trait = irritable + } + else_if = { + limit = { has_trait = impatient } + remove_trait = impatient + } + else_if = { + limit = { has_trait = drunkard } + remove_trait = drunkard + } + else_if = { + limit = { learning <= low_skill_rating } + add_learning_skill = 5 + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_rationality = 1 } + } + } + + # I should probably offload my responsibilities + option = { + name = tgp_japan_yearly_events.1190.b + + stress_impact = { + base = medium_stress_impact_loss + arrogant = minor_stress_impact_gain + lazy = minor_stress_impact_loss + } + + random_list = { + 1 = { + trigger = { exists = cp:councillor_chancellor } + cp:councillor_chancellor = { add_diplomacy_skill = 2 } + } + 1 = { + trigger = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { add_learning_skill = 2 } + } + 1 = { + trigger = { exists = cp:councillor_marshal } + cp:councillor_marshal = { add_martial_skill = 2 } + } + 1 = { + trigger = { exists = cp:councillor_steward } + cp:councillor_steward = { add_stewardship_skill = 2 } + } + 1 = { + trigger = { exists = cp:councillor_spymaster } + cp:councillor_spymaster = { add_intrigue_skill = 2 } + } + } + + add_prestige = minor_prestige_loss + add_dread = medium_dread_loss + + ai_chance = { + base = 100 + ai_value_modifier = { ai_boldness = 1 } + } + } + + # I don't care about my vices + option = { + name = tgp_japan_yearly_events.1190.c + + stress_impact = { + base = major_stress_impact_loss + lazy = minor_stress_impact_loss + } + + random = { + chance = 50 + custom_tooltip = tgp_japan_yearly_events.1190.c_tt + hidden_effect = { + random_held_title = { + title_tier = county + limit = { this != root.capital_county } + change_county_control = { + value = medium_county_control_loss + } + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_honor = 1 } + } + } +} + +# A courtier has witnessed a miracle +tgp_japan_yearly_events.1220 = { + type = character_event + title = tgp_japan_yearly_events.1220.t + desc = { + desc = tgp_japan_yearly_events.1220.desc + first_valid = { + triggered_desc = { + trigger = { + scope:miracle = flag:wealth + } + desc = tgp_japan_yearly_events.1220.desc_wealth + } + triggered_desc = { + trigger = { + scope:miracle = flag:health + } + desc = tgp_japan_yearly_events.1220.desc_health + } + triggered_desc = { + trigger = { + scope:miracle = flag:knowledge + } + desc = tgp_japan_yearly_events.1220.desc_knowledge + } + } + } + theme = faith + cooldown = { years = 10 } + override_background = { + trigger = { scope:miracle = flag:knowledge } + reference = study + } + override_background = { + trigger = { scope:miracle = flag:health } + reference = bedchamber + } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:miracle_recipient + animation = admiration + } + + lower_center_portrait = scope:monk + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + faith = { religion = religion:buddhism_religion } + location = { + faith = { religion = religion:buddhism_religion } + } + learning_lifestyle_unlockable_perks >= 1 + any_courtier_or_guest = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + is_available_adult = yes + NOT = { + has_trait = cynical + } + } + } + + immediate = { + random_list = { # Fortified Health + 10 = { + trigger = { + any_courtier_or_guest = { + has_any_illness = yes + is_available_adult = yes + NOT = { + has_trait = cynical + } + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + } + } + save_scope_value_as = { name = miracle value = flag:health } + random_courtier_or_guest = { + limit = { + has_any_illness = yes + is_available_adult = yes + NOT = { + has_trait = cynical + } + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + } + save_scope_as = miracle_recipient + random_character_trait = { + limit = { + has_trait_flag = illness + } + save_scope_as = target_trait + } + remove_trait = scope:target_trait + } + } + 10 = { # Miracle of Wealth + trigger = { + any_courtier_or_guest = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + is_available_adult = yes + NOT = { + has_trait = cynical + } + } + } + save_scope_value_as = { name = miracle value = flag:wealth } + random_courtier_or_guest = { + limit = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + is_available_adult = yes + NOT = { + has_trait = cynical + } + } + + weight = { + base = 10 + modifier = { + add = 10 + short_term_gold > minor_gold_value + } + } + save_scope_as = miracle_recipient + add_short_term_gold = massive_gold_value + } + } + 10 = { # Miracle of Knowledge + trigger = { + any_courtier_or_guest = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + is_available_adult = yes + NOT = { + has_trait = cynical + } + } + } + save_scope_value_as = { name = miracle value = flag:knowledge } + random_courtier_or_guest = { + limit = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + is_available_adult = yes + NOT = { + has_trait = cynical + } + } + weight = { + base = 10 + modifier = { + add = 10 + learning > low_skill_rating + } + } + save_scope_as = miracle_recipient + add_learning_skill = 8 + } + } + } + create_character = { + template = monk_character_template + location = root.location + gender_female_chance = 0 + save_scope_as = monk + } + } + + # Option A) Seek out the monk + option = { + name = tgp_japan_yearly_events.1220.a + + if = { + limit = { + scope:miracle = flag:wealth + } + custom_tooltip = tgp_japan_yearly_events.1220.tt_wealth + } + + + switch = { + trigger = scope:miracle + flag:wealth = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1220.tt + left_icon = root + add_short_term_gold = minor_gold_value + } + } + flag:knowledge = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1220.tt + left_icon = root + add_learning_skill = 1 + } + } + flag:health = { + if = { + limit = { + has_any_illness = yes + } + random_character_trait = { + limit = { + has_trait_flag = illness + } + save_scope_as = target_trait + } + remove_trait = scope:target_trait + } + else = { + add_character_modifier = { + modifier = tgp_health_resistance_modifier + years = 3 + } + } + } + } + ai_chance = { + base = 100 + ai_value_modifier = { ai_zeal = 1 } + } + } + + # Option B) You seek out a logical explanation + option = { + name = tgp_japan_yearly_events.1220.b + + if = { + limit = { + has_trait = lifestyle_mystic + } + add_trait_xp = { + trait = lifestyle_mystic + value = 5 + } + } + else = { + random = { + chance = 50 + add_trait = lifestyle_mystic + } + } + + stress_impact = { + cynical = medium_stress_impact_loss + zealous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_zeal = -1 } + } + } + + # Option C) I must learn his ways + option = { + name = tgp_japan_yearly_events.1220.c + + stress_impact = { + cynical = minor_stress_impact_loss + zealous = minor_stress_impact_gain + } + + duel = { + skill = learning + value = decent_skill_rating + desc = tgp_japan_yearly_events.1220.c.tt + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_japan_yearly_events.1220.tt_win + send_interface_toast = { + type = event_toast_effect_good + title = tgp_japan_yearly_events.1220.tt_win + left_icon = root + right_icon = scope:monk + add_learning_lifestyle_perk_points = 1 + } + } + 59 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_japan_yearly_events.1220.tt_lose + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_japan_yearly_events.1220.tt_lose + left_icon = root + right_icon = scope:monk + add_learning_lifestyle_xp = 150 + } + } + } + + ai_chance = { + base = 50 + ai_value_modifier = { + ai_zeal = -1 + ai_rationality = 1 + } + } + } + + after = { + scope:monk = { + silent_disappearance_ai_effect = yes + } + } +} + +# Fear of a low durability artifact coming to life (Yokai) +# Chance to repair artifact for low price +tgp_japan_yearly_events.1230 = { + type = character_event + title = tgp_japan_yearly_events.1230.t + desc = tgp_japan_yearly_events.1230.desc + theme = court + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = fear + } + + artifact = { + target = scope:cursed_artifact + position = lower_right_portrait + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + is_valid_for_japan_events_trigger = yes + any_character_artifact = { + artifact_durability <= 20 + } + } + + immediate = { + random_character_artifact = { + limit = { + artifact_durability <= 20 + } + save_scope_as = cursed_artifact + } + } + + # Mend it, immediately. + option = { + name = tgp_japan_yearly_events.1230.a + trigger = { + short_term_gold >= minor_gold_value + } + show_as_unavailable = { always = yes } + + stress_impact = { + paranoid = minor_stress_impact_gain + zealous = minor_stress_impact_loss + } + + remove_short_term_gold = minor_gold_value + + scope:cursed_artifact = { + add_durability = { + value = { + add = artifact_max_durability + subtract = artifact_durability + } + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_zeal = 1 } + modifier = { + has_trait = paranoid + factor = 0 + } + } + } + + # Just burn it honestly + option = { + name = tgp_japan_yearly_events.1230.b + + add_dread = minor_dread_loss + add_prestige = medium_prestige_loss + + destroy_artifact = scope:cursed_artifact + + stress_impact = { + base = miniscule_stress_impact_loss + paranoid = minor_stress_impact_loss + lifestyle_mystic = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + has_trait = paranoid + factor = 2 + } + } + } + + # Ok? + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_trait = cynical } + desc = tgp_japan_yearly_events.1230.c_cynical + } + desc = tgp_japan_yearly_events.1230.c + } + } + } + + stress_impact = { + base = minor_stress_impact_gain + paranoid = medium_stress_impact_gain + cynical = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_rationality = 1 } + modifier = { + has_trait = cynical + factor = 2 + } + modifier = { + has_trait = paranoid + factor = 0 + } + } + } +} + +scripted_trigger is_valid_ruler_1220 = { + NOT = { this = root } + culture = { + save_temporary_scope_as = culture_temp + NOR = { # no languages that have vertical script + has_cultural_pillar = language_japonic + has_cultural_pillar = language_chinese + has_cultural_pillar = language_korean + has_cultural_pillar = language_mongolic + has_cultural_pillar = language_vietnamese + has_cultural_pillar = language_khitan + root = { knows_language_of_culture = scope:culture_temp } + } + } + in_diplomatic_range = root +} + +# 1240 - A traveler poet visits court and can't read from right to left +tgp_japan_yearly_events.1240 = { + type = character_event + title = tgp_japan_yearly_events.1240.t + desc = tgp_japan_yearly_events.1240.desc + theme = court + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = interested + } + + right_portrait = { + character = scope:traveler + animation = page_flipping + } + + trigger = { + has_tgp_dlc_trigger = yes + is_available_adult = yes + OR = { + knows_language = language_japonic + knows_language = language_chinese + } + any_independent_ruler = { is_valid_ruler_1220 = yes } + } + + immediate = { + # Get a random county that isn't of chinese/japanese/korean + random_independent_ruler = { + limit = { is_valid_ruler_1220 = yes } + save_scope_as = ref_ruler + } + create_character = { + template = travel_messenger + culture = scope:ref_ruler.culture + faith = scope:ref_ruler.faith + location = root.location + save_scope_as = traveler + after_creation = { add_trait = lifestyle_poet } + } + } + + # Teach him how to read properly please + option = { + name = tgp_japan_yearly_events.1240.a + + add_prestige = minor_prestige_gain + + scope:traveler = { + learn_language_of_culture = root.culture + } + + add_courtier = scope:traveler + + scope:traveler = { + add_opinion = { + modifier = grateful_opinion + target = root + opinion = 15 + } + } + + stress_impact = { + greedy = minor_stress_impact_gain + lifestyle_poet = minor_stress_impact_loss + compassionate = minor_stress_impact_loss + gregarious = minor_stress_impact_loss + } + + ai_chance = { + base = 75 + ai_value_modifier = { ai_compassion = 1 ai_greed = -1 } + } + } + + # Make fun of him + option = { + name = tgp_japan_yearly_events.1240.b + + scope:traveler = { + add_opinion = { + modifier = disappointed_opinion + target = root + opinion = -15 + } + } + + stress_impact = { + base = medium_stress_impact_loss + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { ai_compassion = -1 } + modifier = { + add = 15 + stress_level >= 1 + } + modifier = { + add = 25 + stress_level >= 2 + } + modifier = { + add = 50 + stress_level >= 3 + } + } + } + + # Try to learn his language + option = { + name = tgp_japan_yearly_events.1240.c + trigger = { + learning >= decent_skill_rating + } + show_as_unavailable = { always = yes } + + learn_language_of_culture = scope:traveler.culture + + scope:traveler.culture = { + change_cultural_acceptance = { + target = root.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_gain_event + } + } + + stress_impact = { + base = medium_stress_impact_gain + lifestyle_poet = minor_stress_impact_loss + patient = minor_stress_impact_loss + } + + add_character_modifier = { + modifier = tgp_cultural_appreciation_modifier + years = 10 + } + + ai_chance = { + base = 150 + modifier = { + add = -15 + stress_level >= 1 + } + modifier = { + add = -25 + stress_level >= 2 + } + modifier = { + add = -50 + stress_level >= 3 + } + } + } + + after = { + scope:traveler = { + silent_disappearance_ai_effect = yes + } + } +} + +# 1250 - Being gifted a Kakejiku scroll (Wedding) +tgp_japan_yearly_events.1250 = { + type = activity_event + title = tgp_japan_yearly_events.1250.t + desc = tgp_japan_yearly_events.1250.desc + theme = wedding_ceremony_activity + + cooldown = { years = 15 } + + trigger = { + is_valid_for_japan_events_trigger = yes + #DLC check. + has_ep2_dlc_trigger = yes + has_tgp_dlc_trigger = yes + location = involved_activity.activity_location + OR = { + involved_activity.special_guest:spouse_1 = root + involved_activity.special_guest:spouse_2 = root + } + } + + left_portrait = { + character = involved_activity.special_guest:spouse_1 + animation = love + } + + right_portrait = { + character = scope:scroll_gifter + animation = obsequious_bow + } + + center_portrait = { + character = involved_activity.special_guest:spouse_2 + animation = interested + } + + artifact = { + target = scope:artifact_scroll + position = lower_right_portrait + } + + weight_multiplier = { + base = 10 + modifier = { + add = 20 + has_trait = lifestyle_poet + } + } + + immediate = { + add_character_flag = busy_in_wgathering_event + + involved_activity = { + random_attending_character = { + weight = { + base = 5 + modifier = { + add = 25 + has_relation_friend = root + } + modifier = { + add = 25 + is_close_family_of = root + } + modifier = { + factor = 2 + OR = { + has_trait = compassionate + has_trait = generous + } + } + } + save_scope_as = scroll_gifter + add_character_flag = busy_in_wgathering_event + } + } + + progress_towards_friend_effect = { + CHARACTER = scope:scroll_gifter + OPINION = 15 + REASON = friend_supportive_at_wedding + } + + create_artifact = { + name = artifact_kakejiku_scroll_name + description = placeholder + modifier = artifact_placeholder_modifier + type = miscellaneous + visuals = scroll + wealth = 65 + quality = 65 + save_scope_as = artifact_scroll + history = { + type = created_before_history + } + } + + random_list = { + 50 = { # The Crane + modifier = { + add = 10 + OR = { + has_trait = calm + has_trait = content + has_trait = chaste + } + } + save_scope_value_as = { name = scroll_story value = flag:crane } + } + 50 = { # The Friends + modifier = { + add = 25 + OR = { + has_trait = gregarious + has_trait = zealous + } + } + save_scope_value_as = { name = scroll_story value = flag:friends } + } + 50 = { # The Sword + modifier = { + add = 25 + OR = { + has_trait = just + has_trait = vengeful + } + } + save_scope_value_as = { name = scroll_story value = flag:sword } + } + } + + scope:artifact_scroll = { + add_artifact_history = { + type = given + actor = scope:scroll_gifter + recipient = root + } + set_owner = root + hidden_effect = { remove_artifact_modifier = artifact_placeholder_modifier } + switch = { + trigger = scope:scroll_story + flag:sword = { + set_artifact_description = artifact_kakejiku_scroll_sword_desc + add_artifact_modifier = artifact_martial_2_modifier + add_artifact_modifier = artifact_monthly_tyranny_2_modifier + add_artifact_modifier = artifact_prowess_2_modifier + } + flag:friends = { + set_artifact_description = artifact_kakejiku_scroll_friends_desc + add_artifact_modifier = artifact_diplomacy_3_modifier + add_artifact_modifier = artifact_monthly_prestige_add_3_modifier + add_artifact_modifier = artifact_owned_personal_scheme_success_chance_add_1_modifier + } + flag:crane = { + set_artifact_description = artifact_kakejiku_scroll_crane_desc + add_artifact_modifier = artifact_learning_3_modifier + add_artifact_modifier = artifact_health_gain_2_modifier + add_artifact_modifier = artifact_stress_gain_4_modifier + } + } + } + } + + # Hang it in our chambers + option = { + name = tgp_japan_yearly_events.1250.a + scope:artifact_scroll = { add_artifact_modifier = artifact_fertility_gain_2_modifier } + ai_chance = { + base = 100 + ai_value_modifier = { ai_rationality = 1 } + modifier = { + factor = 1.5 + OR = { + has_trait = lustful + has_trait = shy + } + } + } + } + + # Place it where everyone can see + option = { + name = tgp_japan_yearly_events.1250.b + scope:artifact_scroll = { add_artifact_modifier = artifact_powerful_vassal_opinion_5_modifier } + ai_chance = { + base = 100 + ai_value_modifier = { ai_boldness = 1 } + modifier = { + factor = 1.5 + OR = { + has_trait = gregarious + has_trait = arrogant + } + } + } + } + + # Keep it safe in a box + option = { + name = tgp_japan_yearly_events.1250.c + scope:artifact_scroll = { add_artifact_modifier = artifact_monthly_prestige_add_3_modifier } + ai_chance = { + base = 100 + ai_value_modifier = { ai_honor = 1 } + } + } +} diff --git a/events/dlc/tgp/tgp_korea_decision_events.txt b/events/dlc/tgp/tgp_korea_decision_events.txt new file mode 100644 index 00000000..41f0270b --- /dev/null +++ b/events/dlc/tgp/tgp_korea_decision_events.txt @@ -0,0 +1,180 @@ +namespace = tgp_korea_decision + +# unify_goryeo_decision + +tgp_korea_decision.9101 = { # Ruler + type = character_event + title = tgp_korea_decision.9101.t + desc = { + desc = tgp_korea_decision.9101.intro + desc = tgp_korea_decision.9101.desc + } + theme = realm + override_effect_2d = { reference = legend_glow } + override_background = { reference = throne_room_scope } + left_portrait = { + character = scope:king_of_goryeo + animation = holding_hu + } + + immediate = { + play_music_cue = "mx_cue_epic_sacral_moment" + save_scope_as = background_throne_room_scope + korea_unify_goryeo_reward_effect = yes + } + + option = { # Samhan + name = tgp_korea_decision.9101.a + # Rename Goryeo culture + hidden_effect = { + culture:goryeo = { + set_culture_name = { + noun = samhan_hybrid_name + collective_noun = samhan_hybrid_collective_noun + prefix = samhan_hybrid_prefix + } + } + } + ai_chance = { + base = 10 + } + } + + option = { # Goryeo + name = tgp_korea_decision.9101.b + trigger = { culture = culture:goguryeo } + custom_tooltip = { + text = tgp_korea_decision.9101.b.reason + title:e_goryeo = { set_title_name = "cn_goryeo" } + } + ai_chance = { + base = 100 + } + } + + after = { + # Inform Vassals + every_player = { + limit = { is_vassal_or_below_of = root } + trigger_event = tgp_korea_decision.9102 + } + } +} + +tgp_korea_decision.9102 = { # Vassal + type = character_event + title = tgp_korea_decision.9102.t + desc = { + desc = tgp_korea_decision.9101.intro + desc = tgp_korea_decision.9102.desc + } + theme = realm + override_effect_2d = { reference = legend_glow } + override_background = { reference = throne_room_scope } + left_portrait = { + character = scope:king_of_goryeo + animation = war_over_tie + } + + immediate = { + show_as_tooltip = { + scope:king_of_goryeo = { korea_unify_goryeo_reward_effect = yes } + } + } + + option = { + name = tgp_korea_decision.9101.a + } +} + +# NEW CEREMONIAL REGENCY EVENT + +#tgp_korea_decision.9201 = { +# orphan = yes # DEPRECATED +# type = character_event +# title = tgp_korea_decision.9201.t +# desc = tgp_korea_decision.9201.desc +# theme = crown +# left_portrait = { +# character = root +# animation = holding_hu +# } +# override_background = { reference = throne_room_scope } +# +# trigger = { +# OR = { +# exists = primary_title.previous_holder +# NOT = { primary_title = title:e_viet } +# } +# } +# +# immediate = { +# show_as_tooltip = { +# scope:founder = { get_title = scope:new_title } +# scope:regent_title.holder = { add_realm_law_skip_effects = single_heir_succession_law } # Regency inherited separately +# scope:new_title = { add_title_law = single_heir_succession_law } +# } +# every_player = { +# limit = { +# top_liege = root +# NOT = { this = root } +# } +# trigger_event = { +# id = tgp_korea_decision.9202 +# delayed = yes +# } +# } +# } +# option = { +# name = tgp_korea_decision.9201.a +# ai_chance = { +# base = 100 +# } +# } +#} + +#tgp_korea_decision.9202 = { +# orphan = yes # DEPRECATED +# type = character_event +# title = tgp_korea_decision.9201.t +# desc = tgp_korea_decision.9202.desc +# theme = crown +# left_portrait = { +# character = root +# animation = throne_room_bow_1 +# } +# right_portrait = { +# character = scope:founder +# animation = holding_hu +# } +# override_background = { reference = throne_room_scope } +# immediate = { +# show_as_tooltip = { +# scope:founder = { get_title = scope:new_title } +# scope:regent_title.holder = { add_realm_law_skip_effects = single_heir_succession_law } # Regency inherited separately +# scope:new_title = { add_title_law = single_heir_succession_law } +# } +# } +# option = { name = tgp_korea_decision.9202.a } +#} + +#tgp_korea_decision.9203 = { +# orphan = yes # DEPRECATED +# hidden = yes +# type = character_event +# trigger = { +# government_has_flag = government_is_meritocratic +# is_independent_ruler = yes +# highest_held_title_tier >= tier_empire +# tgp_realm_has_ceremonial_liege_trigger = no +# } +# immediate = { +# save_scope_as = founder +# save_scope_as = background_throne_room_scope +# #tgp_create_ceremonial_regent_title_effect = { FOUNDER = root } +# trigger_event = { +# id = tgp_korea_decision.9201 +# delayed = yes +# } +# } +#} diff --git a/events/dlc/tgp/tgp_maintenance_events.txt b/events/dlc/tgp/tgp_maintenance_events.txt new file mode 100644 index 00000000..2856a87d --- /dev/null +++ b/events/dlc/tgp/tgp_maintenance_events.txt @@ -0,0 +1 @@ +# \ No newline at end of file diff --git a/events/dlc/tgp/tgp_mandala_capital_events.txt b/events/dlc/tgp/tgp_mandala_capital_events.txt new file mode 100644 index 00000000..0deafea4 --- /dev/null +++ b/events/dlc/tgp/tgp_mandala_capital_events.txt @@ -0,0 +1,278 @@ +#Mandala Capital Events + +namespace = tgp_east_asia_mandala_capital_events + +tgp_east_asia_mandala_capital_events.1000 = { + type = character_event + window = big_event_window + title = { + first_valid = { + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_05 } + } + desc = tgp_east_asia_mandala_capital_events.1000.t.final + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_04 } + } + desc = tgp_east_asia_mandala_capital_events.1000.t.fourth + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_03 } + } + desc = tgp_east_asia_mandala_capital_events.1000.t.third + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_02 } + } + desc = tgp_east_asia_mandala_capital_events.1000.t.second + } + desc = tgp_east_asia_mandala_capital_events.1000.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_05 } + } + desc = tgp_east_asia_mandala_capital_events.1000.desc.final + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_04 } + } + desc = tgp_east_asia_mandala_capital_events.1000.desc.fourth + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_03 } + } + desc = tgp_east_asia_mandala_capital_events.1000.desc.third + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_02 } + } + desc = tgp_east_asia_mandala_capital_events.1000.desc.second + } + desc = tgp_east_asia_mandala_capital_events.1000.desc + } + } + theme = mandala + left_portrait = { + character = scope:onlooker + animation = admiration + } + center_portrait = { + character = root + animation = personality_zealous + } + right_portrait = { + character = scope:onlooker_2 + camera = camera_event_scheme_vs_center_positioned_left + animation = ecstasy + } + override_effect_2d = { reference = legend_glow } + immediate = { + mandala_owner_reward_01_effect = yes + scope:province = { save_scope_as = project_location } + #Grab some characters who are celebrating and excited + random_courtier = { + limit = { + is_available_adult = yes + this != root + } + save_scope_as = onlooker + } + if = { + limit = { + NOT = { exists = scope:onlooker } + } + random_pool_character = { + province = root.capital_province + limit = { is_available_adult = yes } + save_scope_as = onlooker + } + } + random_courtier = { + limit = { + is_available_adult = yes + this != root + this != scope:onlooker + } + save_scope_as = onlooker_2 + } + if = { + limit = { + NOT = { exists = scope:onlooker_2 } + } + random_pool_character = { + province = root.capital_province + limit = { is_available_adult = yes } + save_scope_as = onlooker_2 + } + } + } + #Run effects + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_05 } + } + desc = tgp_east_asia_mandala_capital_events.1000.a.final + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_04 } + } + desc = tgp_east_asia_mandala_capital_events.1000.a.fourth + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_03 } + } + desc = tgp_east_asia_mandala_capital_events.1000.a.third + } + triggered_desc = { + trigger = { + scope:great_project = { great_project_type = mandala_capital_02 } + } + desc = tgp_east_asia_mandala_capital_events.1000.a.second + } + desc = tgp_east_asia_mandala_capital_events.1000.a + } + } + } + #Did you contribute something? + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_01 } + } + check_and_reward_contributions_01_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_02 } + } + check_and_reward_contributions_02_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_03 } + } + check_and_reward_contributions_03_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_04 } + } + check_and_reward_contributions_04_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_05 } + } + check_and_reward_contributions_05_effect = yes + } + } +} + +tgp_east_asia_mandala_capital_events.1010 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_capital_events.1010.t + desc = tgp_east_asia_mandala_capital_events.1010.desc + theme = mandala + left_portrait = { + character = root + triggered_animation = { + trigger = { ai_honor <= 0 } + animation = scheme + } + animation = personality_compassionate + } + right_portrait = { + character = scope:envoy + animation = obsequious_bow + } + lower_right_portrait = { + character = scope:overlord_scope + } + immediate = { + scope:owner = { + save_scope_as = overlord_scope + save_scope_as = value_target + } + scope:province = { save_scope_as = project_location } + create_character = { + template = travel_messenger + location = root.location + culture = scope:overlord_scope.location.culture + faith = scope:overlord_scope.location.faith + gender_female_chance = scope_value_target_soldier_female_chance + save_scope_as = envoy + } + } + #Run effects + option = { + name = tgp_east_asia_mandala_capital_events.1010.a + #Did you contribute something? + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_01 } + } + check_and_reward_contributions_01_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_02 } + } + check_and_reward_contributions_02_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_03 } + } + check_and_reward_contributions_03_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_04 } + } + check_and_reward_contributions_04_effect = yes + } + if = { + limit = { + scope:great_project = { great_project_type = mandala_capital_05 } + } + check_and_reward_contributions_05_effect = yes + } + #Get some opinion + if = { + limit = { + scope:overlord_scope = { is_ai = yes } + } + mandala_contributor_opinion_reward_effect = { OVERLORD = scope:overlord_scope } + } + } + #Sweep, sweep + after = { + scope:envoy = { + if = { # Cleanup + limit = { + root = { is_ai = yes } + is_courtier = no + } + silent_disappearance_effect = yes + } + } + } +} diff --git a/events/dlc/tgp/tgp_mandala_devaraja_events.txt b/events/dlc/tgp/tgp_mandala_devaraja_events.txt new file mode 100644 index 00000000..e609f0a4 --- /dev/null +++ b/events/dlc/tgp/tgp_mandala_devaraja_events.txt @@ -0,0 +1,1716 @@ +namespace = devaraja + +# Healthy Charity +devaraja.0001 = { + type = character_event + title = devaraja.0001.title + desc = devaraja.0001.desc + + theme = travel_tour + cooldown = { years = 2 } + left_portrait = { + character = root + animation = fear + } + right_portrait = { + character = scope:diseased_peasant + animation = beg + outfit_tags = { beggar_rags } + } + trigger = { + AND = { + primary_title.tier >= tier_duchy + is_independent_ruler = yes + } + is_location_valid_for_travel_event_on_land = yes + has_activity_intent = altruism_intent + government_has_flag = government_is_mandala + } + + weight_multiplier = { + base = 1 + modifier = { + factor = 2 + has_trait = compassionate + } + modifier = { + factor = 2 + has_trait = zealous + } + } + + immediate = { + location = { + county = { + save_scope_as = diseased_county_scope + save_scope_as = background_wilderness_scope # For theme + } + } + create_character = { + location = scope:diseased_county_scope.title_province + template = diseased_peasant_character + culture = scope:diseased_county_scope.culture + faith = scope:diseased_county_scope.faith + gender_female_chance = 50 + save_scope_as = diseased_peasant + } + if = { + limit = { + cp:councillor_steward ?= { + is_available_ai = yes + } + } + cp:councillor_steward = { + save_scope_as = steward + } + } + } + + # I must be among my people + option = { + name = devaraja.0001.a + + add_prestige = minor_prestige_gain + add_piety = medium_piety_gain + random = { + chance = 5 + show_as_tooltip = { add_trait = ill } + hidden_effect = { + trigger_event = { + id = health.1001 + days = { 3 10 } + } + } + } + scope:diseased_county_scope = { + change_county_control = 5 + add_county_modifier = { + modifier = healed_by_the_devaraja + years = 10 + } + } + stress_impact = { + base = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + callous = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + OR = { + has_trait = callous + has_trait = arrogant + } + } + } + } + + # I leave this work to my steward + option = { + name = devaraja.0001.b + trigger= { + exists = scope:steward + } + + stress_impact = { + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + arrogant = minor_stress_impact_loss + } + + scope:steward = { + add_piety = minor_piety_gain + random = { + chance = 10 + show_as_tooltip = { add_trait = ill } + hidden_effect = { + trigger_event = { + id = health.1001 + days = { 3 10 } + } + } + } + scope:diseased_county_scope = { + change_county_control = 2 + add_county_modifier = { + modifier = healed_by_the_devaraja + years = 2 + } + } + stress_impact = { + compassionate = minor_stress_impact_loss + callous = minor_stress_impact_gain + arrogant = minor_stress_impact_gain + } + } + ai_chance = { + base = 50 + modifier = { + factor = 2 + OR = { + has_trait = callous + has_trait = arrogant + } + } + modifier = { + factor = 0.5 + OR = { + has_trait = diligent + has_trait = compassionate + has_trait = zealous + } + } + } + } + + # This place is gross and icky + option = { + name = devaraja.0001.c + + add_piety = medium_piety_loss + stress_impact = { + forgiving = minor_stress_impact_gain + humble = minor_stress_impact_gain + compassionate = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 50 + modifier = { + factor = 0 + OR = { + has_trait = humble + has_trait = compassionate + has_trait = zealous + } + } + } + } + + after = { + if = { + limit = { + scope:diseased_peasant = { + is_alive = yes + employer != root + } + } + scope:diseased_peasant = { silent_disappearance_effect = yes } + } + } +} + +# Prayers for the God-King +devaraja.0002 = { + type = character_event + title = devaraja.0002.title + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:brahmin_or_chaplain = { + has_court_position = court_brahmin_court_position + } + } + desc = devaraja.0002.desc.brahmin + } + desc = devaraja.0002.desc.chaplain + } + } + + theme = mandala + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:brahmin_or_chaplain + animation = prayer + } + + trigger = { + is_available_for_activity_trigger = yes # is not currently rollicking around + primary_title.tier >= tier_duchy + top_liege = this + government_has_flag = government_is_mandala + + OR = { + any_court_position_holder = { + type = court_brahmin_court_position + is_available_ai = yes + } + cp:councillor_court_chaplain ?= { + is_available_ai = yes + } + } + } + + immediate = { + if = { + limit = { + any_court_position_holder = { + type = court_brahmin_court_position + } + } + random_court_position_holder = { + type = court_brahmin_court_position + save_scope_as = brahmin_or_chaplain + } + } + else = { + cp:councillor_court_chaplain = { + save_scope_as = brahmin_or_chaplain + } + } + } + + option = { + name = devaraja.0002.a + + duel = { + skill = diplomacy + value = high_skill_rating + + 50 = { + desc = devaraja.0002.a.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + # Always give _some_ chance. + min = -39 + } + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0002.a.tt.success + left_icon = root + right_icon = scope:brahmin_or_chaplain + + add_prestige = minor_prestige_gain + add_opinion = { + modifier = pleased_opinion + target = scope:brahmin_or_chaplain + opinion = 10 + } + reverse_add_opinion = { + modifier = respect_opinion + target = scope:brahmin_or_chaplain + opinion = 10 + } + } + } + # Everybody stares at you. "Dude, what?" someone in the audience murmurs. + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -19 + } + desc = devaraja.0002.a.tt.failure + + send_interface_toast = { + type = event_toast_effect_bad + title = devaraja.0002.a.tt.failure + left_icon = root + right_icon = scope:brahmin_or_chaplain + + add_prestige = minor_prestige_loss + add_opinion = { + modifier = insult_opinion + target = scope:brahmin_or_chaplain + opinion = -10 + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:brahmin_or_chaplain + opinion = -10 + } + } + } + } + + stress_impact = { + arrogant = miniscule_stress_impact_loss + eccentric = minor_stress_impact_loss + shy = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = patient + } + modifier = { + factor = 2 + OR = { + has_trait = eccentric + has_trait = brave + has_trait = gregarious + } + } + } + } + + option = { + name = devaraja.0002.b + + add_prestige = miniscule_prestige_gain + + custom_tooltip = devaraja.0002.b.tt + scope:brahmin_or_chaplain = { + add_stress = minor_stress_loss + } + + stress_impact = { + arbitrary = minor_stress_impact_gain + eccentric = medium_stress_impact_gain + } + + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = eccentric + } + modifier = { + factor = 2 + OR = { + has_trait = patient + has_trait = shy + } + } + } + } + + option = { + name = devaraja.0002.c + + duel = { + skill = learning + value = very_high_skill_rating + + 50 = { + desc = devaraja.0002.c.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + # Always give _some_ chance. + min = -39 + } + + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0002.c.quote.success + left_icon = root + right_icon = scope:brahmin_or_chaplain + + add_prestige = minor_prestige_gain + add_piety = minor_piety_gain + add_opinion = { + modifier = pleased_opinion + target = scope:brahmin_or_chaplain + opinion = 25 + } + reverse_add_opinion = { + modifier = impressed_opinion + target = scope:brahmin_or_chaplain + opinion = 25 + } + } + } + # You fumble it + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -19 + } + desc = devaraja.0002.b.tt.failure + + send_interface_toast = { + type = event_toast_effect_bad + title = devaraja.0002.b.tt.failure + left_icon = root + right_icon = scope:brahmin_or_chaplain + + add_prestige = minor_prestige_loss + add_piety = minor_piety_loss + add_opinion = { + modifier = upset_opinion + target = scope:brahmin_or_chaplain + opinion = -25 + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:brahmin_or_chaplain + opinion = -25 + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = cynical + } + modifier = { + factor = 2 + OR = { + has_lifestyle = learning_lifestyle + has_trait = zealous + } + } + } + } +} + +# A Special Dharma Talk +devaraja.0003 = { + type = character_event + title = devaraja.0003.title + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:guru_or_chaplain = { + has_court_position = court_guru_court_position + } + } + desc = devaraja.0003.desc.guru + } + desc = devaraja.0003.desc.chaplain + } + } + theme = mandala + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = admiration + } + right_portrait = { + character = scope:guru_or_chaplain + animation = debating + } + + trigger = { + government_has_flag = government_is_mandala + is_available_for_activity_trigger = yes + OR = { + any_court_position_holder = { + type = court_guru_court_position + is_available_ai = yes + } + cp:councillor_court_chaplain ?= { + is_available_ai = yes + } + } + } + + immediate = { + if = { + limit = { + any_court_position_holder = { + type = court_guru_court_position + } + } + random_court_position_holder = { + type = court_guru_court_position + save_scope_as = guru_or_chaplain + } + } + else = { + cp:councillor_court_chaplain = { + save_scope_as = guru_or_chaplain + } + } + } + + + option = { + name = devaraja.0003.a + + add_prestige = minor_piety_gain + + pay_short_term_gold = { + target = scope:guru_or_chaplain + gold = minor_gold_value + } + + add_opinion = { + modifier = impressed_opinion + target = scope:guru_or_chaplain + opinion = 15 + } + reverse_add_opinion = { + modifier = pleased_opinion + target = scope:guru_or_chaplain + opinion = 15 + } + + stress_impact = { + greedy = minor_stress_impact_gain + generous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = greedy + has_trait = wrathful + } + } + } + } + + option = { + name = devaraja.0003.b + + add_piety = miniscule_piety_gain + + add_opinion = { + modifier = disappointed_opinion + target = scope:guru_or_chaplain + opinion = -5 + } + reverse_add_opinion = { + modifier = disappointed_opinion + target = scope:guru_or_chaplain + opinion = -5 + } + + stress_impact = { + greedy = minor_stress_impact_loss + diligent = minor_stress_impact_loss + generous = minor_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = gregarious + } + } + } + } + + option = { + name = devaraja.0003.c + + rightfully_imprison_character_effect = { + TARGET = scope:guru_or_chaplain + IMPRISONER = root + } + + stress_impact = { + arbitrary = medium_stress_impact_loss + wrathful = medium_stress_impact_loss + compassionate = medium_stress_impact_gain + forgiving = massive_stress_impact_gain + generous = major_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = generous + has_trait = compassionate + has_trait = forgiving + } + } + } + } + + + option = { + name = devaraja.0003.d + trigger = { + has_lifestyle = learning_lifestyle + } + + duel = { + skill = learning + target = scope:guru_or_chaplain + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 2.5 + } + send_interface_toast = { + title = devaraja.0003.d.tt.success + left_icon = root + right_icon = scope:guru_or_chaplain + + add_piety = major_piety_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -2.5 + } + send_interface_toast = { + title = devaraja.0003.d.tt.failure + left_icon = root + right_icon = scope:guru_or_chaplain + + add_piety = major_piety_loss + } + } + } + ai_chance = { + base = 100 + modifier = { + factor = 0 + OR = { + has_trait = craven + has_trait = shy + } + } + modifier = { + factor = 2 + OR = { + has_trait = zealous + has_trait = ambitious + } + } + } + } +} + +# I Love A Parade +# Actual tale about a King of Siam, combined with a little Music Man +devaraja.0004 = { + type = character_event + title = devaraja.0004.title + desc = devaraja.0004.desc + theme = mandala + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = ecstasy + } + + trigger = { + government_has_flag = government_is_mandala + is_available_for_activity_trigger = yes + capital_county.county_control < full_county_control + cp:councillor_court_chaplain ?= { + is_available_ai = yes + } + } + + immediate = { + cp:councillor_court_chaplain = { + save_scope_as = chaplain + } + capital_county = { + save_scope_as = capital_county + } + } + + option = { + name = devaraja.0004.a + + add_prestige = minor_prestige_gain + capital_county = { + change_county_control = major_county_control_gain + add_county_modifier = { + modifier = devaraja_hosts_parade + years = 5 + } + } + + scope:chaplain = { + add_opinion = { + modifier = requested_money_opinion + target = root + opinion = -25 + } + remove_short_term_gold = minor_gold_value + } + every_powerful_vassal = { + limit = { + faith = root.faith + OR = { + government_has_flag = government_is_theocracy + has_trait = zealous + } + } + add_opinion = { + modifier = disrespect_opinion + target = root + opinion = -15 + } + } + + stress_impact = { + zealous = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + + modifier = { + factor = 0 + has_trait = zealous + } + } + } + + option = { + name = devaraja.0004.b + + custom_tooltip = devaraja.0004.b.tt + add_piety = miniscule_piety_gain + + stress_impact = { + humble = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = humble + } + } + } +} + +# The Wall With Two Faces +# triggered by on_building_completed on_action +devaraja.0005 = { + type = character_event + title = devaraja.0005.title + desc = devaraja.0005.desc + theme = mandala + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = thinking + } + + # triggered by on_building_completed on_action + + trigger = { + government_has_flag = government_is_mandala + has_mandala_aspect_trigger = yes + } + + option = { + name = devaraja.0005.a + + add_piety = medium_piety_gain + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + OR = { + has_trait = zealous + has_trait = humble + } + } + } + } + + option = { + name = devaraja.0005.b + + add_prestige = medium_prestige_gain + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = arrogant + } + } + } +} + +# Wisdom of the Paddle +devaraja.0006 = { + type = character_event + title = devaraja.0006.title + desc = { + first_valid = { + triggered_desc = { + trigger = { + scope:guru_or_chaplain = { + has_court_position = court_guru_court_position + } + } + desc = devaraja.0006.desc.guru + } + desc = devaraja.0006.desc.chaplain + } + } + theme = mandala + cooldown = { years = 10 } + + left_portrait = { + character = root + animation = shame + } + right_portrait = { + character = scope:guru_or_chaplain + animation = chaplain + } + + trigger = { + government_has_flag = government_is_mandala + is_available_for_activity_trigger = yes + OR = { + any_court_position_holder = { + type = court_guru_court_position + is_available_ai = yes + } + cp:councillor_court_chaplain ?= { + is_available_ai = yes + } + } + } + + immediate = { + if = { + limit = { + any_court_position_holder = { + type = court_guru_court_position + } + } + random_court_position_holder = { + type = court_guru_court_position + save_scope_as = guru_or_chaplain + } + } + else = { + cp:councillor_court_chaplain = { + save_scope_as = guru_or_chaplain + } + } + } + + option = { + name = devaraja.0006.a + if = { + limit = { + has_trait = lifestyle_reveler + } + add_trait_xp = { + trait = lifestyle_reveler + value = -15 + } + + add_piety = medium_piety_gain + add_stress = medium_stress_gain + } + else = { + add_piety = medium_piety_gain + + stress_impact = { + base = miniscule_stress_impact_gain + gluttonous = medium_stress_impact_gain + drunkard = major_stress_impact_gain + temperate = minor_stress_impact_loss + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = temperate + } + modifier = { + factor = 2 + OR = { + has_trait = lifestyle_reveler + has_trait = gluttonous + } + } + } + } + option = { + name = devaraja.0006.b + if = { + limit = { + has_trait = lifestyle_reveler + } + add_trait_xp = { + trait = lifestyle_reveler + value = 15 + } + + add_piety = minor_piety_loss + add_stress = minor_stress_loss + } + else = { + random = { + chance = 40 + add_trait = lifestyle_reveler + } + + add_piety = minor_piety_loss + + stress_impact = { + base = miniscule_stress_impact_loss + gluttonous = minor_stress_impact_loss + drunkard = medium_stress_impact_loss + temperate = major_stress_impact_gain + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = temperate + } + modifier = { + factor = 2 + OR = { + has_trait = lifestyle_reveler + has_trait = gluttonous + } + } + } + } + option = { + name = devaraja.0006.c + add_piety = medium_piety_loss + + if = { + limit = { + scope:guru_or_chaplain = { + has_court_position = court_guru_court_position + } + } + revoke_court_position = { + court_position = court_guru_court_position + recipient = scope:guru_or_chaplain + } + } + else = { + fire_councillor = scope:guru_or_chaplain + } + + stress_impact = { + zealous = minor_stress_impact_gain + temperate = medium_stress_impact_gain + compassionate = minor_stress_impact_gain + wrathful = minor_stress_impact_loss + arbitrary = minor_stress_impact_loss + forgiving = minor_stress_impact_gain + } + } + option = { + name = devaraja.0006.d + trigger = { + has_trait = drunkard + } + + # 1 in 3 chance of getting rid of drunkard + random_list = { + 1 = { + remove_trait = drunkard + add_stress = minor_stress_gain + add_piety = medium_piety_gain + } + 2 = { + add_stress = medium_stress_gain + add_piety = minor_piety_gain # hey, at least you took it seriously + } + } + + ai_chance = { + base = 50 + modifier = { + factor = 0 + NOR = { + has_trait = diligent + has_trait = temperate + has_trait = zealous + } + } + } + } +} + +# Unambiguous Ambiguity +devaraja.0007 = { + type = character_event + title = devaraja.0007.title + desc = devaraja.0007.desc + theme = mandala + cooldown = { years = 15 } + + left_portrait = { + character = root + animation = debating + } + + trigger = { + government_has_flag = government_is_mandala + is_available_for_activity_trigger = yes + has_mandala_aspect_trigger = yes + } + + option = { + name = devaraja.0007.a + add_prestige = minor_piety_gain + + add_character_modifier = { + modifier = devaraja_as_god + years = 10 + } + + ai_chance = { + base = 100 + + modifier = { + factor = 2 + OR = { + has_trait = zealous + has_trait = humble + } + } + } + } + + option = { + name = devaraja.0007.b + add_prestige = minor_prestige_gain + + add_character_modifier = { + modifier = devaraja_as_king + years = 10 + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = cynical + has_trait = arrogant + } + } + } + + option = { + name = devaraja.0007.c + trigger = { + has_lifestyle = learning_lifestyle + } + + duel = { + skill = learning + value = high_skill_rating + + 50 = { + desc = devaraja.0007.c.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + # Always give _some_ chance. + min = -39 + } + + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0007.c.tt.success + left_icon = root + + add_piety = medium_piety_gain + add_learning_lifestyle_xp = major_lifestyle_experience + add_character_modifier = { + modifier = devaraja_as_hypostatic_union + years = 10 + } + + every_courtier_or_guest = { + add_opinion = { + modifier = impressed_opinion + target = root + opinion = 20 + } + } + } + } + + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -19 + } + desc = devaraja.0007.c.tt.failure + + send_interface_toast = { + type = event_toast_effect_bad + title = devaraja.0007.c.tt.failure + left_icon = root + + add_prestige = minor_prestige_loss + add_piety = minor_piety_loss + + every_courtier_or_guest = { + add_opinion = { + modifier = confusion_opinion + target = root + opinion = -10 + } + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_lifestyle = learning_lifestyle + } + } + } +} + +# Alleged deathbed conversion +devaraja.0008 = { + type = character_event + title = devaraja.0008.title + desc = devaraja.0008.desc + + theme = mandala + cooldown = { years = 5 } + + left_portrait = { + character = root + animation = personality_cynical + } + right_portrait = { + character = scope:suzerains_missionary + animation = admiration + } + lower_center_portrait = { + character = scope:deathbed_conversion_ancestor + animation = dead + } + + trigger = { + any_ancestor = { + even_if_dead = yes + highest_held_title_tier >= tier_county + is_alive = no + faith != root.suzerain.faith + } + is_available_for_activity_trigger = yes + is_tributary = yes + suzerain = { + faith != root.faith + } + any_courtier = { + has_character_flag = suzerains_missionary + faith = root.suzerain.faith + } + } + + immediate = { + random_courtier = { + limit = { + has_character_flag = suzerains_missionary + faith = root.suzerain.faith + } + save_scope_as = suzerains_missionary + } + + random_ancestor = { + even_if_dead = yes + limit = { + highest_held_title_tier >= tier_county + is_alive = no + faith != root.suzerain.faith + } + save_scope_as = deathbed_conversion_ancestor + } + + suzerain = { + save_scope_as = suzerain + } + } + + option = { + name = devaraja.0008.a + + scope:deathbed_conversion_ancestor = { + set_character_faith_history = scope:suzerain.faith + } + + add_prestige = minor_prestige_gain + + add_opinion = { + modifier = respect_opinion + target = scope:suzerain + opinion = 10 + } + reverse_add_opinion = { + modifier = pious_opinion + target = scope:suzerain + opinion = 10 + } + reverse_add_opinion = { + modifier = pious_opinion + target = scope:suzerains_missionary + opinion = 10 + } + + scope:suzerain = { + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0008.a.tt.conversion + left_icon = root + right_icon = scope:deathbed_conversion_ancestor + + add_piety = minor_piety_gain + + # Deceased character converts in ROOT's effects, but we want to show it happening to the suzerain + show_as_tooltip = { + scope:deathbed_conversion_ancestor = { + set_character_faith_history = scope:suzerain.faith + } + } + faith = { + change_fervor = { + value = 5 + desc = fervor_gain_deathbed_conversion_discovered + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + has_trait = zealous + } + modifier = { + factor = 2 + has_lifestyle = diplomacy_lifestyle + } + } + } + + option = { + name = devaraja.0008.b + + faith = { + change_fervor = { + value = 1 + desc = fervor_gain_faith_reaffirmed + } + } + + reverse_add_opinion = { + modifier = impious_opinion + target = scope:suzerains_missionary + opinion = -10 + } + + ai_chance = { + base = 100 + modifier = { + factor = 0.5 + has_trait = cynical + } + modifier = { + factor = 2 + OR = { + has_lifestyle = learning_lifestyle + has_trait = zealous + } + } + } + } +} + +# Has converted to the same faith as the missionary +devaraja.0009 = { + type = character_event + title = devaraja.0009.title + desc = devaraja.0009.desc + + theme = mandala + + left_portrait = { + character = root + animation = personality_compassionate + } + right_portrait = { + character = scope:suzerains_missionary + animation = boredom + } + + trigger = { + is_available_for_activity_trigger = yes + is_tributary = yes + suzerain = { + faith = root.faith + } + any_courtier = { + has_character_flag = suzerains_missionary + has_faith = suzerain.faith + NOT = { + has_council_position = councillor_court_chaplain + } + } + } + + immediate = { + random_courtier = { + limit = { + has_character_flag = suzerains_missionary + has_faith = suzerain.faith + } + save_scope_as = suzerains_missionary + } + + suzerain = { + save_scope_as = suzerain + } + } + + # Invite the missionary to become your chaplain + option = { + name = devaraja.0009.a + + assign_councillor_type = { + type = councillor_court_chaplain + target = scope:suzerains_missionary + remove_existing_councillor = yes + } + + reverse_add_opinion = { + modifier = pleased_opinion + target = scope:suzerain + opinion = 10 + } + reverse_add_opinion = { + modifier = respect_opinion + target = scope:suzerains_missionary + opinion = 25 + } + + scope:suzerain = { + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0009.a.tt.missionary_now_chaplain + left_icon = root + right_icon = scope:suzerains_missionary + + add_piety = minor_piety_gain + } + } + + scope:suzerains_missionary = { + remove_character_flag = suzerains_missionary + remove_character_flag = blocked_from_leaving + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = compassionate + } + modifier = { + factor = 2 + has_trait = zealous + } + } + } + + # PLEASE LEAVE + option = { + name = devaraja.0009.b + + remove_courtier_or_guest = scope:suzerains_missionary + + add_opinion = { + modifier = dismissive_opinion + target = scope:suzerains_missionary + opinion = -20 + } + reverse_add_opinion = { + modifier = disrespect_opinion + target = scope:suzerains_missionary + opinion = -20 + } + + + scope:suzerains_missionary = { + remove_character_flag = suzerains_missionary + remove_character_flag = blocked_from_leaving + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = shy + } + modifier = { + factor = 2 + has_trait = arbitrary + } + } + } +} + +# Suzerain no longer has the same faith as the missionary +devaraja.0010 = { + type = character_event + title = devaraja.0010.title + desc = devaraja.0010.desc + + theme = mandala + + left_portrait = { + character = scope:suzerains_missionary + animation = disappointed + } + right_portrait = { + character = scope:suzerain + animation = personality_zealous + } + + trigger = { + is_available_for_activity_trigger = yes + is_tributary = yes + suzerain = { + faith != root.faith + } + any_courtier = { + has_character_flag = suzerains_missionary + NOT = { has_faith = suzerain.faith } + } + } + + immediate = { + random_courtier = { + limit = { + has_character_flag = suzerains_missionary + has_faith = suzerain.faith + } + save_scope_as = suzerains_missionary + } + + suzerain = { + save_scope_as = suzerain + } + } + + # Let the missionary figure things out on their own + option = { + name = devaraja.0010.a + + random_list = { + + # The missionary just becomes a sad lonely lump, abandoned by his suzerain and his community + 50 = { + # more likely to stay their own faith if the missionary doesn't really like the suzerain + modifier = { + factor = 25 + scope:suzerains_missionary = { + opinion = { + target = scope:suzerain + value < low_positive_opinion + } + } + } + modifier = { + factor = -25 + scope:suzerains_missionary = { + has_trait = zealous + } + } + modifier = { + factor = -10 + scope:suzerains_missionary = { + has_trait = depressed # either gained depression or genetic depression + } + } + + send_interface_toast = { + type = event_toast_effect_neutral + title = devaraja.0010.a.tt.unconverted + left_icon = root + right_icon = scope:suzerains_missionary + + scope:suzerains_missionary = { + if = { + limit = { + NOT = { has_trait = depressed } + } + add_trait = depressed_1 + } + else = { + add_stress = major_stress_impact_gain + } + remove_character_flag = suzerains_missionary + remove_character_flag = blocked_from_leaving + } + } + } + + # The missionary converts to the suzerain's new faith and remains a proselytizer, missionary events can continue + 50 = { + # more likely to convert to the suzerain's new faith if the missionary actually likes the suzerain + modifier = { + factor = 25 + scope:suzerains_missionary = { + opinion = { + target = scope:suzerain + value >= low_positive_opinion + } + } + } + + send_interface_toast = { + type = event_toast_effect_neutral + title = devaraja.0010.a.tt.converts + left_icon = root + right_icon = scope:suzerains_missionary + + scope:suzerains_missionary = { + set_character_faith = scope:suzerain.faith + } + + scope:suzerain = { + add_piety = minor_piety_gain + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = shy + } + modifier = { + factor = 2 + has_trait = cynical + } + modifier = { + factor = 2 + has_trait = lazy + } + } + } + + # The missionary converts to your faith and no longer can be a proselytizer because you both share the same faith now + option = { + name = devaraja.0010.b + + duel = { + skill = learning + target = scope:suzerains_missionary + + 50 = { + desc = devaraja.0010.b.tt.success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + # Always give _some_ chance. + min = -39 + } + send_interface_toast = { + type = event_toast_effect_good + title = devaraja.0010.b.tt.success + left_icon = root + right_icon = scope:suzerains_missionary + + add_piety = minor_piety_gain + + scope:suzerains_missionary = { + set_character_faith = root.faith + remove_character_flag = suzerains_missionary + remove_character_flag = blocked_from_leaving + } + + stress_impact = { + zealous = minor_stress_impact_loss + } + } + } + # + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + # Limit how low the off-chance can go. + min = -19 + } + desc = devaraja.0010.b.tt.failure + + send_interface_toast = { + type = event_toast_effect_bad + title = devaraja.0010.b.tt.failure + left_icon = root + right_icon = scope:suzerains_missionary + + add_piety = minor_piety_loss + + scope:suzerains_missionary = { + remove_character_flag = suzerains_missionary + remove_character_flag = blocked_from_leaving + } + + stress_impact = { + base = minor_stress_impact_gain + zealous = medium_stress_impact_gain + } + } + } + } + + ai_chance = { + base = 100 + modifier = { + factor = 2 + has_trait = zealous + } + modifier = { + factor = 2 + has_trait = diligent + } + modifier = { + factor = 2 + has_lifestyle = learning_lifestyle + } + } + } +} diff --git a/events/dlc/tgp/tgp_mandala_events.txt b/events/dlc/tgp/tgp_mandala_events.txt new file mode 100644 index 00000000..44004156 --- /dev/null +++ b/events/dlc/tgp/tgp_mandala_events.txt @@ -0,0 +1,2724 @@ + +namespace = tgp_east_asia_mandala_events + +tgp_east_asia_mandala_events.0010 = { + hidden = yes + + trigger = { + house = { has_house_head_parameter = aspect_of_creation } + NOT = { + has_variable = mandala_house_power_accumulated_creator + } + } + + immediate = { + #We set this here to not bug out the modifier + set_variable = { + name = mandala_house_power_accumulated_creator + value = 1 + } + #Notify the player + send_interface_message = { + type = event_tribute_bad_with_text + title = mandala_creator_streak_broken + desc = mandala_creator_streak_broken_desc + left_icon = root + if = { + limit = { + house = { has_house_head_parameter = creator_30_year_modifier } + } + show_as_tooltip = { + add_character_modifier = { + modifier = mandala_creator_modifier + years = 30 + } + } + #Re-check again in 30 years (the trigger at the top should stop recursive shenanigans) + trigger_event = { + id = tgp_east_asia_mandala_events.0010 + days = 10951 # 30 years and 1 day + } + } + else_if = { + limit = { + house = { house_has_creator_20_years_trigger = yes } + } + show_as_tooltip = { + add_character_modifier = { + modifier = mandala_creator_modifier + years = 20 + } + } + #Re-check again in 20 years + trigger_event = { + id = tgp_east_asia_mandala_events.0010 + days = 7301 # 20 years and 1 day + } + } + else = { + show_as_tooltip = { + add_character_modifier = { + modifier = mandala_creator_modifier + years = 10 + } + } + #Re-check again in 10 years + trigger_event = { + id = tgp_east_asia_mandala_events.0010 + days = 3651 # 10 years and 1 day + } + } + } + #Then remove it again because you didn't earn it by constructing + remove_variable = mandala_house_power_accumulated_creator + } +} + +scripted_trigger natural_causes_death_reason_trigger = { + OR = { + death_reason = death_peaceful + death_reason = death_natural_causes + death_reason = death_old_age + death_reason = death_laughter + death_reason = death_heart_attack + death_reason = death_giant + death_reason = death_spindly + death_reason = death_wheezing + death_reason = death_bleeder + death_reason = death_depressed + death_reason = death_lunatic + death_reason = death_possessed + death_reason = death_incapable + death_reason = death_physique_bad_1 + death_reason = death_physique_bad_2 + death_reason = death_physique_bad_3 + death_reason = death_weak + death_reason = death_malnourishment + death_reason = death_obesity + death_reason = blind + death_reason = death_inbred + death_reason = death_apoplexy + death_reason = death_euthanasia + death_reason = death_euthanasia_killer + death_reason = death_choked + death_reason = death_roof_tile + death_reason = death_stress + death_reason = death_childbirth + death_reason = death_thirst + death_reason = death_feast_accident + death_reason = death_hypothermia + death_reason = death_heatstroke + death_reason = death_struck_by_lightning + } +} + +scripted_trigger religious_death_reasons_trigger = { + OR = { + death_reason = death_martyrdom + death_reason = death_martyrdom_killer + death_reason = death_sacrificed_to_gods + death_reason = death_crucified + death_reason = death_crucified_by_mob + death_reason = death_by_buddhists + death_reason = death_ritual_suicide + } +} + +#Notify the heir that their Piety game may level up +tgp_east_asia_mandala_events.0100 = { + hidden = yes + + trigger = { + government_has_flag = government_is_mandala + exists = house + has_mandala_aspect_trigger = yes + } + + immediate = { + #Acceptable deaths for each Aspect type + if = { + limit = { + #They were due for a level-up + OR = { + exists = scope:apply_godlike + exists = scope:apply_budding_deity + exists = scope:apply_budding_divinity + } + #And died an appropriate death + OR = { + AND = { + house = { has_house_aspiration_parameter = aspect_of_creation } + scope:deceased_mandala_ruler = { + OR = { + natural_causes_death_reason_trigger = yes + religious_death_reasons_trigger = yes + } + } + } + AND = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + scope:deceased_mandala_ruler = { + OR = { + natural_causes_death_reason_trigger = yes + religious_death_reasons_trigger = yes + } + } + } + AND = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + scope:deceased_mandala_ruler = { + OR = { + natural_causes_death_reason_trigger = yes + religious_death_reasons_trigger = yes + death_reason = death_contest_melee_accident + death_reason = death_contest_joust_accident + death_reason = death_contest_wrestling_accident + death_reason = death_contest_duel_accident + death_reason = death_contest_horse_sport_accident + death_reason = death_tournament_pas_darmes_defend + death_reason = death_tournament_pas_darmes_challenge + death_reason = death_tournament_piledriver + death_reason = death_tournament_melee_throat + death_reason = death_tournament_roundhouse + death_reason = death_duel + death_reason = death_wounds + death_reason = death_fight + death_reason = death_fight_killer + death_reason = death_battle + death_reason = death_sun_trial + death_reason = death_martyrdom + } + } + } + AND = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + scope:deceased_mandala_ruler = { + OR = { + natural_causes_death_reason_trigger = yes + religious_death_reasons_trigger = yes + death_reason = death_murder + death_reason = death_plotting + death_reason = death_poison + death_reason = death_snake + death_reason = death_mysterious + death_reason = death_snakes + } + } + } + } + } + send_interface_message = { + type = msg_mandala_good_with_text + title = budding_divinity_msg + desc = budding_divinity_msg_desc + left_icon = root + #If we're not already capped + if = { + limit = { exists = scope:apply_godlike } + add_character_modifier = budding_godhood_modifier + } + else_if = { + limit = { exists = scope:apply_budding_deity } + add_character_modifier = budding_deity_modifier + } + else = { add_character_modifier = budding_divinity_modifier } + #Piety level/piety inheritance + if = { + limit = { exists = scope:deceased_mandala_ruler_piety } + add_piety = scope:deceased_mandala_ruler_piety + } + else = { + add_piety_level = { + value = { + add = scope:deceased_mandala_ruler_piety_level + subtract = piety_level + min = 1 + } + } + } + } + } + else_if = { + limit = { + #They were due for a level-up + OR = { + exists = scope:apply_godlike + exists = scope:apply_budding_deity + exists = scope:apply_budding_divinity + } + #But died incorrectly + } + send_interface_message = { + type = msg_mandala_neutral_with_text + title = not_budding_divinity_msg + desc = not_budding_divinity_msg_desc + left_icon = root + #Piety level/piety inheritance + if = { + limit = { exists = scope:deceased_mandala_ruler_piety } + add_piety = scope:deceased_mandala_ruler_piety + } + else = { + add_piety_level = { + value = { + add = scope:deceased_mandala_ruler_piety_level + subtract = piety_level + min = 1 + } + } + } + } + } + else = { + send_interface_message = { + type = msg_mandala_good_with_text + title = piety_inherited_msg + desc = piety_inherited_msg_desc + left_icon = root + #Piety level/piety inheritance + if = { + limit = { exists = scope:deceased_mandala_ruler_piety } + add_piety = scope:deceased_mandala_ruler_piety + } + else = { + add_piety_level = { + value = { + add = scope:deceased_mandala_ruler_piety_level + subtract = piety_level + min = 1 + } + } + } + } + } + if = { + limit = { is_adult = yes } + trigger_event = { + id = tgp_east_asia_mandala_events.0101 + delayed = yes + } + } + #Get marked for your 16th birthday + else = { + set_variable = { + name = mandala_succession_waiting_on_adulthood + value = scope:deceased_mandala_ruler + } + send_interface_message = { + type = msg_mandala_neutral_text + title = mandala_succession_awaiting_adulthood_msg + desc = mandala_succession_awaiting_adulthood_msg_desc + left_icon = root + } + } + #SEA LEgacy + if = { + limit = { + dynasty ?= { has_dynasty_perk = tgp_sea_legacy_4 } + } + add_character_modifier = { + modifier = tgp_sea_legacy_heir_modifier + years = 10 + } + } + } +} + +#The lead up to the initiation event. Are you Traveling? +tgp_east_asia_mandala_events.0101 = { + hidden = yes + + trigger = { + government_has_flag = government_is_mandala + exists = house + has_mandala_aspect_trigger = yes + is_adult = yes + } + + #You dun' messed up, kid. Lose some devotion. + on_trigger_fail = { + if = { + limit = { government_has_flag = government_is_mandala } + trigger_event = { + id = tgp_east_asia_mandala_events.8497 + delayed = yes + } + } + } + + immediate = { + #Travel gets a delayed Succession + if = { + limit = { exists = current_travel_plan } + set_variable = { + name = mandala_succession_waiting_on_travel_finish + value = scope:deceased_mandala_ruler + } + send_interface_message = { + type = msg_mandala_neutral_text + title = pending_mandala_succession_msg + desc = pending_mandala_succession_msg_desc + left_icon = root + } + } + #Otherwise we kick it off + else = { + trigger_event = { + id = tgp_east_asia_mandala_events.8499 + delayed = yes + } + } + } +} + +#You're a kid Mandala who inherited a kid Mandala who inherited an adult but didn't manage to turn 16 +tgp_east_asia_mandala_events.0102 = { + hidden = yes + + trigger = { + government_has_flag = government_is_mandala + exists = house + has_mandala_aspect_trigger = yes + } + + immediate = { + send_interface_message = { + type = msg_mandala_neutral_with_text + title = kid_piety_inherited_msg + desc = kid_piety_inherited_msg_desc + left_icon = root + add_piety = scope:deceased_kid_mandala_ruler_piety + if = { + limit = { scope:deceased_kid_mandala_ruler_piety_level > 0 } + add_piety_level = { + value = { + add = scope:deceased_kid_mandala_ruler_piety_level + subtract = piety_level + min = 1 + } + } + } + } + set_variable = { + name = mandala_succession_waiting_on_adulthood + value = scope:deceased_mandala_ruler + } + send_interface_message = { + type = msg_mandala_neutral_text + title = mandala_succession_awaiting_adulthood_msg + desc = mandala_succession_awaiting_adulthood_msg_desc + left_icon = root + } + } +} + +#Keep track of the Aspect modifiers +tgp_east_asia_mandala_events.0200 = { + hidden = yes + + trigger = { + government_has_flag = government_is_mandala + has_variable = mandala_house_power_accumulated_increments_of_peace + } + + immediate = { + #No more boon for you + if = { + limit = { + OR = { + is_house_head = no + NOT = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + } + } + mandala_remove_increment_of_peace_effect = yes + } + #Otherwise proceed as per usual + else = { + if = { + limit = { + any_character_war = { + primary_attacker = prev #The character in question + } + } + mandala_reset_increment_of_peace_effect = yes + } + else = { + mandala_upgrade_increment_of_peace_effect = yes + } + #Then set up the next one + if = { + limit = { + house = { has_house_head_parameter = peaceful_rule_yearly_modifier } + } + trigger_event = { + id = tgp_east_asia_mandala_events.0200 + years = 1 + } + } + else_if = { + limit = { + house = { house_has_peaceful_rule_3_year_trigger = yes } + } + trigger_event = { + id = tgp_east_asia_mandala_events.0200 + years = 3 + } + } + else = { + trigger_event = { + id = tgp_east_asia_mandala_events.0200 + years = 5 + } + } + } + + } +} + +#Track years of peace for Serenity +tgp_east_asia_mandala_events.0205 = { + hidden = yes + + trigger = { + government_has_flag = government_is_mandala + house ?= { has_house_aspiration_parameter = aspect_of_serenity } + is_house_head = yes + has_variable = serenity_mandala_years_of_non_aggression_war + } + + immediate = { + if = { + limit = { + any_character_war = { + primary_attacker = prev #The character in question + } + } + remove_variable = serenity_mandala_years_of_non_aggression_war + set_variable = { + name = serenity_mandala_years_of_non_aggression_war + value = 0 + } + } + else = { + increment_variable_effect = { + VAR = serenity_mandala_years_of_non_aggression_war + VAL = 1 + } + } + trigger_event = { + id = tgp_east_asia_mandala_events.0205 + years = 1 + } + } +} + + +scripted_effect mandala_events_1000_random_onlooker_effect = { + random_courtier = { + limit = { + is_available_adult = yes + this != root + } + save_scope_as = onlooker + } + if = { + limit = { + NOT = { exists = scope:onlooker } + } + random_pool_character = { + province = root.capital_province + limit = { is_available_adult = yes } + save_scope_as = onlooker + } + } + random_courtier = { + limit = { + is_available_adult = yes + this != root + this != scope:onlooker + } + save_scope_as = onlooker_2 + } + if = { + limit = { + NOT = { exists = scope:onlooker_2 } + } + random_pool_character = { + province = root.capital_province + limit = { is_available_adult = yes } + save_scope_as = onlooker_2 + } + } +} + +##ASPECT LEVEL UP +tgp_east_asia_mandala_events.1000 = { + type = character_event + window = big_event_window + title = { + first_valid = { + triggered_desc = { + trigger = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_05 + has_house_aspiration_parameter = aspect_of_serenity_05 + has_house_aspiration_parameter = aspect_of_destruction_05 + has_house_aspiration_parameter = aspect_of_trickery_05 + } + } + } + desc = tgp_east_asia_mandala_events.1000.t.final + } + desc = tgp_east_asia_mandala_events.1000.t + } + } + desc = { + first_valid = { + #Level 02 + triggered_desc = { + trigger = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_02 + has_house_aspiration_parameter = aspect_of_serenity_02 + has_house_aspiration_parameter = aspect_of_destruction_02 + has_house_aspiration_parameter = aspect_of_trickery_02 + } + } + } + desc = tgp_east_asia_mandala_events.1000.desc.02 + } + #Creation + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation_03 } + } + desc = tgp_east_asia_mandala_events.1000.desc.creation_03 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation_04 } + } + desc = tgp_east_asia_mandala_events.1000.desc.creation_04 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation_05 } + } + desc = tgp_east_asia_mandala_events.1000.desc.creation_05 + } + #Serenity + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity_03 } + } + desc = tgp_east_asia_mandala_events.1000.desc.serenity_03 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity_04 } + } + desc = tgp_east_asia_mandala_events.1000.desc.serenity_04 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity_05 } + } + desc = tgp_east_asia_mandala_events.1000.desc.serenity_05 + } + #Destruction + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction_03 } + } + desc = tgp_east_asia_mandala_events.1000.desc.destruction_03 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction_04 } + } + desc = tgp_east_asia_mandala_events.1000.desc.destruction_04 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction_05 } + } + desc = tgp_east_asia_mandala_events.1000.desc.destruction_05 + } + #Trickery + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery_03 } + } + desc = tgp_east_asia_mandala_events.1000.desc.trickery_03 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery_04 } + } + desc = tgp_east_asia_mandala_events.1000.desc.trickery_04 + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery_05 } + } + desc = tgp_east_asia_mandala_events.1000.desc.trickery_05 + } + } + } + theme = mandala + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + reference = courtyard + } + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + reference = ep2_wedding_ceremony + } + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + reference = ep2_tournament + } + override_background = { reference = feast } + left_portrait = { + character = scope:onlooker + camera = camera_event_scheme_center_look_semi_right + triggered_animation = { + trigger = { + root = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + animation = random_weapon_celebrate + } + animation = toast + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + animation = flirtation + } + triggered_animation = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + animation = personality_zealous + } + triggered_animation = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + animation = war_over_win + } + camera = camera_event_scheme_center + animation = scheme + } + right_portrait = { + character = scope:onlooker_2 + camera = camera_event_scheme_vs_extra_right_look_left + triggered_animation = { + trigger = { + root = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + animation = random_weapon_coup_degrace + } + animation = ecstasy + } + override_effect_2d = { + trigger = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_05 + has_house_aspiration_parameter = aspect_of_serenity_05 + has_house_aspiration_parameter = aspect_of_destruction_05 + has_house_aspiration_parameter = aspect_of_trickery_05 + } + } + } + reference = legend_glow + } + immediate = { + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + random_courtier = { + limit = { + is_available_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + this != root + } + save_scope_as = onlooker + } + if = { + limit = { + NOT = { exists = scope:onlooker } + } + random_pool_character = { + province = root.capital_province + limit = { + is_available_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = onlooker + } + } + scope:onlooker = { add_character_flag = need_military_outfit } + random_courtier = { + limit = { + is_available_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + this != root + this != scope:onlooker + } + save_scope_as = onlooker_2 + } + if = { + limit = { + NOT = { exists = scope:onlooker_2 } + } + random_pool_character = { + province = root.capital_province + limit = { + is_available_adult = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = onlooker_2 + } + } + scope:onlooker_2 = { add_character_flag = need_military_outfit } + } + else = { + mandala_events_1000_random_onlooker_effect = yes + } + #Spice up the tooltip. What just happened? + show_as_tooltip = { + house = { + #Creation + if = { + limit = { has_house_aspiration_parameter = aspect_of_creation_02 } + set_house_aspiration = { + type = aspect_of_creation + level = 2 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_creation_03 } + set_house_aspiration = { + type = aspect_of_creation + level = 3 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_creation_04 } + set_house_aspiration = { + type = aspect_of_creation + level = 4 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_creation_05 } + set_house_aspiration = { + type = aspect_of_creation + level = 5 + } + } + #Serenity + if = { + limit = { has_house_aspiration_parameter = aspect_of_serenity_02 } + set_house_aspiration = { + type = aspect_of_serenity + level = 2 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_serenity_03 } + set_house_aspiration = { + type = aspect_of_serenity + level = 3 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_serenity_04 } + set_house_aspiration = { + type = aspect_of_serenity + level = 4 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_serenity_05 } + set_house_aspiration = { + type = aspect_of_serenity + level = 5 + } + } + #Destruction + if = { + limit = { has_house_aspiration_parameter = aspect_of_destruction_02 } + set_house_aspiration = { + type = aspect_of_destruction + level = 2 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_destruction_03 } + set_house_aspiration = { + type = aspect_of_destruction + level = 3 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_destruction_04 } + set_house_aspiration = { + type = aspect_of_destruction + level = 4 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_destruction_05 } + set_house_aspiration = { + type = aspect_of_destruction + level = 5 + } + } + #Trickery + if = { + limit = { has_house_aspiration_parameter = aspect_of_trickery_02 } + set_house_aspiration = { + type = aspect_of_trickery + level = 2 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_trickery_03 } + set_house_aspiration = { + type = aspect_of_trickery + level = 3 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_trickery_04 } + set_house_aspiration = { + type = aspect_of_trickery + level = 4 + } + } + if = { + limit = { has_house_aspiration_parameter = aspect_of_trickery_05 } + set_house_aspiration = { + type = aspect_of_trickery + level = 5 + } + } + } + } + } + #Cool! + option = { + name = tgp_east_asia_mandala_events.1000.a + #Some boons for your hard work + if = { + limit = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_05 + has_house_aspiration_parameter = aspect_of_serenity_05 + has_house_aspiration_parameter = aspect_of_destruction_05 + has_house_aspiration_parameter = aspect_of_trickery_05 + } + } + } + add_piety_experience = major_piety_gain + dynasty = { + add_dynasty_prestige = major_piety_gain + } + } + else_if = { + limit = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_04 + has_house_aspiration_parameter = aspect_of_serenity_04 + has_house_aspiration_parameter = aspect_of_destruction_04 + has_house_aspiration_parameter = aspect_of_trickery_04 + } + } + } + add_piety_experience = { + value = { + add = major_piety_gain + multiply = 0.6 + } + } + dynasty = { + add_dynasty_prestige = { + value = { + add = major_piety_gain + multiply = 0.6 + } + } + } + } + else_if = { + limit = { + house = { + OR = { + has_house_aspiration_parameter = aspect_of_creation_03 + has_house_aspiration_parameter = aspect_of_serenity_03 + has_house_aspiration_parameter = aspect_of_destruction_03 + has_house_aspiration_parameter = aspect_of_trickery_03 + } + } + } + add_piety_experience = { + value = { + add = minor_piety_gain + multiply = 2 + } + } + dynasty = { + add_dynasty_prestige = { + value = { + add = minor_dynasty_prestige_value + multiply = 2 + } + } + } + } + else = { + add_piety_experience = { + value = { + add = miniscule_piety_gain + multiply = 2 + } + } + dynasty = { + add_dynasty_prestige = { + value = { + add = miniscule_dynasty_prestige_value + multiply = 2 + } + } + } + } + #Creation boon + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + every_child = { + custom = mandala_descendant_from_aspect_of_creation.tt + limit = { + NOT = { has_character_modifier = mandala_descendant_from_aspect_of_creation_modifier } + } + add_character_modifier = { modifier = mandala_descendant_from_aspect_of_creation_modifier } + } + } + #Serenity boon + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + custom_tooltip = { + text = mandala_aspect_of_serenity_devotion.tt + add_piety_experience = num_years_of_peace_devotion_payout + } + } + #Destruction boon + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + every_knight = { + custom = mandala_forged_from_aspect_of_destruction.tt + limit = { + NOT = { has_character_modifier = mandala_forged_from_aspect_of_destruction_modifier } + } + add_character_modifier = { modifier = mandala_forged_from_aspect_of_destruction_modifier } + } + } + #Trickery boon + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + if = { + limit = { + NOT = { has_character_modifier = mandala_ascended_in_aspect_of_trickery_modifier } + } + add_character_modifier = { modifier = mandala_ascended_in_aspect_of_trickery_modifier } + } + else = { + custom_tooltip = { + text = mandala_aspect_of_trickery_devotion.tt + add_piety_experience = num_successful_schemes_devotion_payout + } + } + } + + ai_chance = { + base = 100 + } + } + after = { + scope:onlooker = { remove_character_flag = need_military_outfit } + scope:onlooker_2 = { remove_character_flag = need_military_outfit } + } +} + + +##SKILL CHALLENGES +#Maintenance +tgp_east_asia_mandala_events.8495 = { + hidden = yes + + immediate = { + if = { + limit = { var:mandala_skill_challenges = 3 } + trigger_event = { + id = tgp_east_asia_mandala_events.8550 + delayed = yes + } + } + else = { + random_list = { + 3 = { + trigger = { + NOT = { has_variable = had_creation_skill_challenge } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8500 + delayed = yes + } + } + 3 = { + trigger = { + NOT = { has_variable = had_serenity_skill_challenge } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8510 + delayed = yes + } + } + 3 = { + trigger = { + NOT = { has_variable = had_destruction_skill_challenge } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8520 + delayed = yes + } + } + 3 = { + trigger = { + NOT = { has_variable = had_trickery_skill_challenge } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8530 + delayed = yes + } + } + } + } + } +} + +#Finished travel, do you have a succession queued? +tgp_east_asia_mandala_events.8496 = { + hidden = yes + trigger = { + location = capital_province + has_variable = mandala_succession_waiting_on_travel_finish + is_landed = yes + government_has_flag = government_is_mandala + } + on_trigger_fail = { + trigger_event = { + id = tgp_east_asia_mandala_events.8497 + delayed = yes + } + } + immediate = { + if = { + limit = { has_variable = mandala_succession_waiting_on_travel_finish } + var:mandala_succession_waiting_on_travel_finish = { save_scope_as = deceased_mandala_ruler } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8499 + delayed = yes + } + } +} + +#INVALID: Something's gone awry. Lose some Devotion. +tgp_east_asia_mandala_events.8497 = { + hidden = yes + trigger = { + has_variable = mandala_succession_waiting_on_travel_finish + } + immediate = { + send_interface_message = { + type = msg_mandala_bad_with_text + title = tgp_east_asia_mandala_events.8497.t.lose_by_default + desc = tgp_east_asia_mandala_events.8497.tt.lose_by_default + left_icon = root + right_icon = scope:deceased_mandala_ruler + add_piety_level = -3 + } + #And _remember_ it + create_character_memory = { + type = invalid_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + remove_variable = mandala_succession_waiting_on_travel_finish + remove_variable = mandala_succession_waiting_on_adulthood + } +} + +#Initiating event +tgp_east_asia_mandala_events.8499 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_events.8499.t + desc = { + first_valid = { + #We inherited while being a child, but were imprisoned before our 16th birthday + triggered_desc = { + trigger = { + is_imprisoned = yes + has_variable = mandala_succession_waiting_on_adulthood + } + desc = tgp_east_asia_mandala_events.8499.intro.recent_adult.imprisoned + } + #We inherited while being imprisoned + triggered_desc = { + trigger = { is_imprisoned = yes } + desc = tgp_east_asia_mandala_events.8499.intro.imprisoned + } + } + first_valid = { + #Both imprisonment intros work with this text body + triggered_desc = { + trigger = { is_imprisoned = yes } + desc = tgp_east_asia_mandala_events.8499.desc.imprisoned + } + #We inherited while being a child and waited for our 16th birthday + triggered_desc = { + trigger = { + is_imprisoned = no + has_variable = mandala_succession_waiting_on_adulthood + } + desc = tgp_east_asia_mandala_events.8499.desc.recent_adult + } + #We inherited, or came of age, while out traveling + triggered_desc = { + trigger = { has_variable = mandala_succession_waiting_on_travel_finish } + desc = tgp_east_asia_mandala_events.8499.desc.was_traveling + } + #Default + desc = tgp_east_asia_mandala_events.8499.desc + } + } + theme = mandala + override_background = { + trigger = { is_imprisoned = yes } + reference = dungeon + } + override_background = { reference = study } + center_portrait = { + character = root + triggered_animation = { + trigger = { is_imprisoned = yes } + animation = prisondungeon + } + override_imprisonment_visuals = yes + animation = personality_bold + } + immediate = { + } + #Let's go + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { is_imprisoned = yes } + desc = tgp_east_asia_mandala_events.8499.a.imprisoned + } + desc = tgp_east_asia_mandala_events.8499.a + } + } + } + flavor = { + first_valid = { + triggered_desc = { + trigger = { is_imprisoned = yes } + desc = tgp_east_asia_mandala_events.8499.a.flavor.imprisoned + } + } + } + #If we're imprisoned, insta-lose + if = { + limit = { is_imprisoned = yes } + custom_tooltip = tgp_east_asia_mandala_events.8499.a.tt.imprisoned + add_piety_level = -3 + if = { + limit = { + NOT = { has_character_modifier = mandala_divine_retribution_modifier } + } + add_character_modifier = mandala_divine_retribution_modifier + } + #And _remember_ it + create_character_memory = { + type = imprisoned_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + } + else = { + custom_tooltip = tgp_east_asia_mandala_events.8499.a.tt.trials + set_variable = busy_in_mandala_succession + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8500 + delayed = yes + } + } + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8510 + delayed = yes + } + } + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8520 + delayed = yes + } + } + if = { + limit = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + trigger_event = { + id = tgp_east_asia_mandala_events.8530 + delayed = yes + } + } + } + } + after = { + #Clean up peripheral variables + remove_variable = mandala_succession_waiting_on_travel_finish + remove_variable = mandala_succession_waiting_on_adulthood + } +} + + +scripted_effect mandala_events_8500_instawin_trial_effect = { + if = { + limit = { $SKILL$ = 01 } + custom_tooltip = tgp_east_asia_mandala_events.8500.success.tt + } + if = { + limit = { $SKILL$ = 02 } + custom_tooltip = tgp_east_asia_mandala_events.8510.success.tt + } + if = { + limit = { $SKILL$ = 03 } + custom_tooltip = tgp_east_asia_mandala_events.8520.success.tt + } + if = { + limit = { $SKILL$ = 04 } + custom_tooltip = tgp_east_asia_mandala_events.8530.success.tt + } + increment_variable_effect = { + VAR = mandala_skill_challenge_success + VAL = 1 + } +} + +scripted_effect mandala_events_8500_succeeded_trial_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = tgp_east_asia_mandala_events.8500.b.t.success + left_icon = root + right_icon = scope:deceased_mandala_ruler + increment_variable_effect = { + VAR = mandala_skill_challenge_success + VAL = 1 + } + if = { + limit = { $SKILL$ = 01 } + custom_tooltip = tgp_east_asia_mandala_events.8500.success.tt + add_stewardship_skill = 1 + } + else_if = { + limit = { $SKILL$ = 02 } + custom_tooltip = tgp_east_asia_mandala_events.8510.success.tt + add_diplomacy_skill = 1 + } + else_if = { + limit = { $SKILL$ = 03 } + custom_tooltip = tgp_east_asia_mandala_events.8520.success.tt + add_martial_skill = 1 + } + else_if = { + limit = { $SKILL$ = 04 } + custom_tooltip = tgp_east_asia_mandala_events.8530.success.tt + add_intrigue_skill = 1 + } + } +} + +scripted_effect mandala_events_8500_failed_trial_effect = { + send_interface_toast = { + type = event_toast_effect_bad + title = tgp_east_asia_mandala_events.8500.b.t.failure + left_icon = root + right_icon = scope:deceased_mandala_ruler + add_piety_level = -1 + } +} + +scripted_effect mandala_events_8500_next_trial_effect = { + increment_variable_effect = { + VAR = mandala_skill_challenges + VAL = 1 + } + trigger_event = tgp_east_asia_mandala_events.8495 +} + +#Creation / Stewardship +tgp_east_asia_mandala_events.8500 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_events.8500.t + desc = tgp_east_asia_mandala_events.8500.desc + theme = mandala + override_background = { reference = throne_room } + left_portrait = { + trigger = { exists = scope:onlooker } + character = scope:onlooker + animation = fear + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + house = { has_house_head_parameter = may_override_stewardship_succession_trial } + } + animation = personality_zealous + } + animation = storyteller + } + right_portrait = { + trigger = { exists = scope:onlooker_2 } + character = scope:onlooker_2 + triggered_animation = { + trigger = { + root.house = { has_house_head_parameter = may_override_stewardship_succession_trial } + } + animation = admiration + } + animation = interested_left + } + override_effect_2d = { + trigger = { + house = { has_house_head_parameter = may_override_stewardship_succession_trial } + } + reference = legend_glow + } + immediate = { + mandala_events_1000_random_onlooker_effect = yes + random_dummy_gender_effect = yes + } + #Dynasty Override? + option = { + name = tgp_east_asia_mandala_events.8500.dynasty.override + trigger = { + dynasty ?= { has_dynasty_perk = tgp_sea_legacy_5 } + NOT = { has_character_flag = spent_sea_legacy_succession_bypass } + } + reason = mandala_legacy_unlock + mandala_events_8500_instawin_trial_effect = { SKILL = 01 } + custom_description_no_bullet = { text = sea_succession_legacy_spent } + add_character_flag = spent_sea_legacy_succession_bypass + ai_chance = { + base = 100 + } + } + #Override? + option = { + name = tgp_east_asia_mandala_events.8500.a + trigger = { + custom_tooltip = { + text = tgp_east_asia_mandala_events.8500.a.final_aspect + house = { has_house_head_parameter = may_override_stewardship_succession_trial } + } + } + show_as_unavailable = { + house = { + has_house_aspiration_parameter = aspect_of_creation + NOT = { has_house_head_parameter = may_override_stewardship_succession_trial } + } + } + reason = creation_aspect + mandala_events_8500_instawin_trial_effect = { SKILL = 01 } + ai_chance = { + base = 100 + } + } + #DUEL! + option = { + name = tgp_east_asia_mandala_events.8500.b + flavor = tgp_east_asia_mandala_events.8500.b.flavor + duel = { + skill = stewardship + target = scope:deceased_mandala_ruler + #Success! + 90 = { + trigger = { highest_held_title_tier < tier_empire } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 01 } + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 01 } + } + #Failure + 5 = { + trigger = { highest_held_title_tier = tier_county } + max = 5 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 10 = { + trigger = { highest_held_title_tier = tier_duchy } + max = 10 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 40 = { + trigger = { highest_held_title_tier = tier_kingdom } + max = 40 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + is_ai = yes + add = -45 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + } + ai_chance = { + base = 100 + modifier = { + house = { has_house_head_parameter = may_override_stewardship_succession_trial } + factor = 0 + } + } + } + after = { + set_variable = had_creation_skill_challenge + mandala_events_8500_next_trial_effect = yes + } +} + +#Serenity / Diplomacy +tgp_east_asia_mandala_events.8510 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_events.8510.t + desc = tgp_east_asia_mandala_events.8510.desc + theme = mandala + override_background = { reference = corridor_day } + left_portrait = { + character = root + triggered_animation = { + trigger = { + house = { has_house_head_parameter = may_override_diplomacy_succession_trial } + } + animation = personality_zealous + } + camera = camera_event_scheme_center_look_semi_right + animation = stress + } + center_portrait = { + character = scope:arguer + camera = camera_event_scheme_vs_extra_right_look_right + animation = dismissal + hide_info = yes + } + right_portrait = { + character = scope:arguer_2 + camera = camera_event_scheme_vs_extra_right_look_left + animation = disapproval + hide_info = yes + } + override_effect_2d = { + trigger = { + house = { has_house_head_parameter = may_override_diplomacy_succession_trial } + } + reference = legend_glow + } + immediate = { + hidden_effect = { + random_list = { + 1 = { + dummy_female = { save_scope_as = dummy_gender } + save_scope_value_as = { + name = female_gender + value = flag:yes + } + } + 1 = { + dummy_male = { save_scope_as = dummy_gender } + save_scope_value_as = { + name = male_gender + value = flag:yes + } + } + } + } + random_pool_character = { + province = root.capital_province + limit = { + is_available_healthy_adult = yes + trigger_if = { + limit = { exists = scope:female_gender } + is_female = yes + } + } + save_scope_as = arguer + } + random_pool_character = { + province = root.capital_province + limit = { + is_available_healthy_adult = yes + trigger_if = { + limit = { exists = scope:female_gender } + is_female = yes + } + NOT = { this = scope:arguer } + } + save_scope_as = arguer_2 + } + if = { + limit = { + NOT = { exists = scope:arguer } + } + create_character = { + location = root.capital_province + template = pool_repopulate_local_flavor + save_scope_as = arguer + after_creation = { save_scope_as = created_character } + } + } + if = { + limit = { + NOT = { exists = scope:arguer_2 } + } + create_character = { + location = root.capital_province + template = pool_repopulate_local_flavor + save_scope_as = arguer_2 + after_creation = { save_scope_as = created_character } + } + } + } + #Dynasty Override? + option = { + name = tgp_east_asia_mandala_events.8510.dynasty.override + trigger = { + dynasty ?= { has_dynasty_perk = tgp_sea_legacy_5 } + NOT = { has_character_flag = spent_sea_legacy_succession_bypass } + } + reason = mandala_legacy_unlock + mandala_events_8500_instawin_trial_effect = { SKILL = 02 } + custom_description_no_bullet = { text = sea_succession_legacy_spent } + add_character_flag = spent_sea_legacy_succession_bypass + ai_chance = { + base = 100 + } + } + #Override? + option = { + name = tgp_east_asia_mandala_events.8510.a + trigger = { + custom_tooltip = { + text = tgp_east_asia_mandala_events.8510.a.final_aspect + house = { has_house_head_parameter = may_override_diplomacy_succession_trial } + } + } + show_as_unavailable = { + house = { + has_house_aspiration_parameter = aspect_of_serenity + NOT = { has_house_head_parameter = may_override_diplomacy_succession_trial } + } + } + reason = serenity_aspect + mandala_events_8500_instawin_trial_effect = { SKILL = 02 } + ai_chance = { + base = 100 + } + } + #DUEL! + option = { + name = tgp_east_asia_mandala_events.8510.b + flavor = tgp_east_asia_mandala_events.8510.b.flavor + duel = { + skill = diplomacy + target = scope:deceased_mandala_ruler + #Success! + 90 = { + trigger = { highest_held_title_tier < tier_empire } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 02 } + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 02 } + } + #Failure + 5 = { + trigger = { highest_held_title_tier = tier_county } + max = 5 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 10 = { + trigger = { highest_held_title_tier = tier_duchy } + max = 10 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 40 = { + trigger = { highest_held_title_tier = tier_kingdom } + max = 40 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + is_ai = yes + add = -45 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + } + ai_chance = { + base = 100 + modifier = { + house = { has_house_head_parameter = may_override_diplomacy_succession_trial } + factor = 0 + } + } + } + after = { + set_variable = had_serenity_skill_challenge + mandala_events_8500_next_trial_effect = yes + scope:arguer = { + if = { + limit = { has_variable = created_character } + silent_disappearance_effect = yes + } + } + scope:arguer_2 = { + if = { + limit = { has_variable = created_character } + silent_disappearance_effect = yes + } + } + } +} + +#Destruction / Martial +tgp_east_asia_mandala_events.8520 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_events.8520.t + desc = tgp_east_asia_mandala_events.8520.desc + theme = mandala + left_portrait = { + trigger = { exists = scope:onlooker } + character = scope:onlooker + triggered_animation = { + trigger = { + root.house = { has_house_head_parameter = may_override_martial_succession_trial } + } + animation = wrestling_victory + } + animation = interested + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + house = { has_house_head_parameter = may_override_martial_succession_trial } + } + camera = camera_body_right + animation = relaxed_spear + } + camera = camera_event_scheme_center_forward + animation = aggressive_spear + } + right_portrait = { + trigger = { exists = scope:onlooker_2 } + character = scope:onlooker_2 + triggered_animation = { + trigger = { + root.house = { has_house_head_parameter = may_override_martial_succession_trial } + } + animation = admiration + } + camera = camera_event_scheme_far_right + animation = interested_left + } + override_effect_2d = { + trigger = { + house = { has_house_head_parameter = may_override_martial_succession_trial } + } + reference = legend_glow + } + immediate = { + mandala_events_1000_random_onlooker_effect = yes + } + #Dynasty Override? + option = { + name = tgp_east_asia_mandala_events.8520.dynasty.override + trigger = { + dynasty ?= { has_dynasty_perk = tgp_sea_legacy_5 } + NOT = { has_character_flag = spent_sea_legacy_succession_bypass } + } + reason = mandala_legacy_unlock + mandala_events_8500_instawin_trial_effect = { SKILL = 03 } + custom_description_no_bullet = { text = sea_succession_legacy_spent } + add_character_flag = spent_sea_legacy_succession_bypass + ai_chance = { + base = 100 + } + } + #Override? + option = { + name = tgp_east_asia_mandala_events.8520.a + trigger = { + custom_tooltip = { + text = tgp_east_asia_mandala_events.8520.a.final_aspect + house = { has_house_head_parameter = may_override_martial_succession_trial } + } + } + show_as_unavailable = { + house = { + has_house_aspiration_parameter = aspect_of_destruction + NOT = { has_house_head_parameter = may_override_martial_succession_trial } + } + } + reason = destruction_aspect + mandala_events_8500_instawin_trial_effect = { SKILL = 03 } + ai_chance = { + base = 100 + } + } + #DUEL! + option = { + name = tgp_east_asia_mandala_events.8520.b + flavor = tgp_east_asia_mandala_events.8520.b.flavor + duel = { + skill = martial + target = scope:deceased_mandala_ruler + #Success! + 90 = { + trigger = { highest_held_title_tier < tier_empire } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 03 } + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 03 } + } + #Failure + 5 = { + trigger = { highest_held_title_tier = tier_county } + max = 5 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 10 = { + trigger = { highest_held_title_tier = tier_duchy } + max = 10 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 40 = { + trigger = { highest_held_title_tier = tier_kingdom } + max = 40 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + is_ai = yes + add = -45 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + } + ai_chance = { + base = 100 + modifier = { + house = { has_house_head_parameter = may_override_martial_succession_trial } + factor = 0 + } + } + } + after = { + set_variable = had_destruction_skill_challenge + mandala_events_8500_next_trial_effect = yes + } +} + +#Trickery / Intrigue +tgp_east_asia_mandala_events.8530 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_events.8530.t + desc = tgp_east_asia_mandala_events.8530.desc + theme = mandala + left_portrait = { + trigger = { exists = scope:onlooker } + character = scope:onlooker + triggered_animation = { + trigger = { + root.house = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + animation = admiration + } + animation = interested + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + house = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + animation = scheme + } + animation = storyteller + } + right_portrait = { + trigger = { exists = scope:onlooker_2 } + character = scope:onlooker_2 + triggered_animation = { + trigger = { + root.house = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + animation = happiness + } + camera = camera_event_scheme_far_right + animation = interested_left + } + override_effect_2d = { + trigger = { + house = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + reference = legend_glow + } + immediate = { + mandala_events_1000_random_onlooker_effect = yes + } + #Dynasty Override? + option = { + name = tgp_east_asia_mandala_events.8530.dynasty.override + trigger = { + dynasty ?= { has_dynasty_perk = tgp_sea_legacy_5 } + NOT = { has_character_flag = spent_sea_legacy_succession_bypass } + } + reason = mandala_legacy_unlock + mandala_events_8500_instawin_trial_effect = { SKILL = 04 } + custom_description_no_bullet = { text = sea_succession_legacy_spent } + add_character_flag = spent_sea_legacy_succession_bypass + ai_chance = { + base = 100 + } + } + #Override? + option = { + name = tgp_east_asia_mandala_events.8530.a + trigger = { + custom_tooltip = { + text = tgp_east_asia_mandala_events.8530.a.final_aspect + house = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + } + show_as_unavailable = { + house = { + has_house_aspiration_parameter = aspect_of_trickery + NOT = { has_house_head_parameter = may_override_intrigue_succession_trial } + } + } + reason = trickery_aspect + mandala_events_8500_instawin_trial_effect = { SKILL = 04 } + ai_chance = { + base = 100 + } + } + #DUEL! + option = { + name = tgp_east_asia_mandala_events.8530.b + flavor = tgp_east_asia_mandala_events.8530.b.flavor + duel = { + skill = intrigue + target = scope:deceased_mandala_ruler + #Success! + 90 = { + trigger = { highest_held_title_tier < tier_empire } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 04 } + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.success + mandala_events_8500_succeeded_trial_effect = { SKILL = 04 } + } + #Failure + 5 = { + trigger = { highest_held_title_tier = tier_county } + max = 5 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 10 = { + trigger = { highest_held_title_tier = tier_duchy } + max = 10 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 40 = { + trigger = { highest_held_title_tier = tier_kingdom } + max = 40 + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + 50 = { + trigger = { highest_held_title_tier >= tier_empire } + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + modifier = { + is_ai = yes + add = -45 + } + desc = tgp_east_asia_mandala_events.8500.b.tt.failure + mandala_events_8500_failed_trial_effect = yes + } + } + ai_chance = { + base = 100 + modifier = { + house = { has_house_head_parameter = may_override_intrigue_succession_trial } + factor = 0 + } + } + } + after = { + set_variable = had_trickery_skill_challenge + mandala_events_8500_next_trial_effect = yes + } +} + + +#Conclusion +tgp_east_asia_mandala_events.8550 = { + type = character_event + window = big_event_window + title = { + first_valid = { + triggered_desc = { + trigger = { exists = var:mandala_skill_challenge_success } + desc = tgp_east_asia_mandala_events.8550.t + } + desc = tgp_east_asia_mandala_events.8550.t.failed + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { var:mandala_skill_challenge_success ?= 3 } + desc = tgp_east_asia_mandala_events.8550.desc.critical_success + } + triggered_desc = { + trigger = { var:mandala_skill_challenge_success ?= 2 } + desc = tgp_east_asia_mandala_events.8550.desc.success + } + triggered_desc = { + trigger = { var:mandala_skill_challenge_success ?= 1 } + desc = tgp_east_asia_mandala_events.8550.desc + } + desc = tgp_east_asia_mandala_events.8550.desc.failed + } + } + theme = mandala + left_portrait = { + trigger = { + exists = scope:onlooker + root = { has_variable = mandala_skill_challenge_success } + } + character = scope:onlooker + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 3 } + animation = happiness + } + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 2 } + animation = wrestling_victory + } + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 1 } + animation = dismissal + } + animation = dismissal + } + center_portrait = { + character = root + triggered_animation = { + trigger = { + NOT = { has_variable = mandala_skill_challenge_success } + } + camera = shop_camera_baby_closeup_angle_45 + animation = prostration + } + triggered_animation = { + trigger = { var:mandala_skill_challenge_success ?= 3 } + animation = wrestling_victory + } + triggered_animation = { + trigger = { var:mandala_skill_challenge_success ?= 2 } + animation = happiness + } + animation = stress + } + right_portrait = { + trigger = { + exists = scope:onlooker_2 + root = { has_variable = mandala_skill_challenge_success } + } + character = scope:onlooker_2 + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 3 } + animation = ecstasy + } + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 2 } + animation = happiness + } + triggered_animation = { + trigger = { root.var:mandala_skill_challenge_success ?= 1 } + animation = disgust + } + camera = camera_event_scheme_vs_center_positioned_left + animation = disgust + } + override_effect_2d = { + trigger = { var:mandala_skill_challenge_success ?= 3 } + reference = legend_glow + } + override_effect_2d = { + trigger = { + NOT = { has_variable = mandala_skill_challenge_success } + } + reference = rain + } + immediate = { + mandala_events_1000_random_onlooker_effect = yes + show_as_tooltip = { + if = { + limit = { + NOT = { has_variable = mandala_skill_challenge_success } + } + add_piety_level = -3 + } + else_if = { + limit = { var:mandala_skill_challenge_success ?= 1 } + add_piety_level = -2 + if = { + limit = { + any_tributary = { + is_physically_able_ai_adult = yes + NOR = { + has_relation_friend = root + has_relation_lover = root + } + } + } + #Max 3 + every_tributary = { + limit = { + is_physically_able_ai_adult = yes + NOR = { + has_relation_friend = root + has_relation_lover = root + } + } + add_to_list = potential_departing_tributaries + } + ordered_in_list = { + list = potential_departing_tributaries + order_by = { + value = "opinion(root)" + multiply = -1 + } + check_range_bounds = no + save_scope_as = first_leaving_tributary + } + if = { + limit = { + list_size = { + name = potential_departing_tributaries + value > 1 + } + } + ordered_in_list = { + list = potential_departing_tributaries + order_by = { + value = "opinion(root)" + multiply = -1 + } + limit = { + this != scope:first_leaving_tributary + } + save_scope_as = second_leaving_tributary + } + } + if = { + limit = { + list_size = { + name = potential_departing_tributaries + value > 2 + } + } + ordered_in_list = { + list = potential_departing_tributaries + order_by = { + value = "opinion(root)" + multiply = -1 + } + limit = { + NOR = { + this = scope:first_leaving_tributary + this = scope:second_leaving_tributary + } + } + save_scope_as = third_leaving_tributary + } + } + } + } + else_if = { + limit = { var:mandala_skill_challenge_success ?= 2 } + add_piety_level = -1 + } + } + set_variable = { + name = not_subject_to_succession_trials + value = flag:completed_trials + } + if = { + limit = { var:not_subject_to_succession_trials ?= flag:completed_trials } + #To prevent 'unused except in loc' errors :catto: + } + } + #Roger, roger + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + NOT = { has_variable = mandala_skill_challenge_success } + } + desc = tgp_east_asia_mandala_events.8550.a.failed + } + desc = tgp_east_asia_mandala_events.8550.a + } + } + } + if = { + limit = { var:mandala_skill_challenge_success ?= 3 } + dynasty ?= { add_dynasty_prestige = minor_dynasty_prestige_value } + } + if = { + limit = { var:mandala_skill_challenge_success ?= 2 } + dynasty = { + add_dynasty_prestige = { + value = minor_dynasty_prestige_value + divide = 2 + } + } + } + ai_chance = { + base = 100 + } + } + after = { + #Levels of Success + if = { + limit = { var:mandala_skill_challenge_success ?= 3 } + create_character_memory = { + type = flawless_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + if = { + limit = { + NOT = { has_character_flag = devaraja_flag } + } + add_character_flag = devaraja_flag + } + } + else_if = { + limit = { has_variable = mandala_skill_challenge_success } + if = { + limit = { var:mandala_skill_challenge_success ?= 2 } + if = { + limit = { exists = scope:first_leaving_tributary } + custom_tooltip = { + text = tgp_east_asia_mandala_events.lose_3_tributaries.tt + scope:first_leaving_tributary = { end_tributary = yes } + scope:second_leaving_tributary ?= { end_tributary = yes } + scope:third_leaving_tributary ?= { end_tributary = yes } + } + } + else = { + if = { + limit = { + has_legitimacy = yes + legitimacy > 0 + } + add_legitimacy = -100 + } + } + #And remember it + create_character_memory = { + type = successful_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + if = { + limit = { + NOT = { has_character_flag = devaraja_flag } + } + add_character_flag = devaraja_flag + } + } + else_if = { + limit = { var:mandala_skill_challenge_success ?= 1 } + if = { + limit = { number_of_tributaries > 0 } + custom_tooltip = { + text = tgp_east_asia_mandala_events.lose_all_tributaries.tt + every_tributary = { end_tributary = yes } + } + } + else = { + if = { + limit = { + has_legitimacy = yes + legitimacy > 0 + } + add_legitimacy = -200 + } + } + #And remember it + create_character_memory = { + type = adequate_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + if = { + limit = { + NOT = { has_character_flag = devaraja_flag } + } + add_character_flag = devaraja_flag + } + } + } + #Failure + else = { + stress_impact = { base = medium_stress_impact_gain } + if = { + limit = { + has_legitimacy = yes + legitimacy > 0 + } + add_legitimacy = -500 + } + custom_tooltip = tgp_east_asia_mandala_events.8550.a.failed.tt + hidden_effect = { + create_title_and_vassal_change = { + type = independency + save_scope_as = change + add_claim_on_loss = no + } + every_vassal = { + change_liege_or_become_independent = { + CHANGE = scope:change + VASSAL = this + } + } + every_vassal = { + limit = { is_ai = no } + send_interface_toast = { + type = event_faction_neutral_text + title = mandala_liege_primary_title_succession_dissolution + desc = mandala_liege_primary_title_succession_dissolution_desc + left_icon = root + } + } + resolve_title_and_vassal_change = scope:change + every_held_title = { + limit = { tier >= tier_kingdom } + add_to_temporary_list = titles_to_destroy + } + } + #MAKE IT CLEAR in the text :evilblob: + every_in_list = { + list = titles_to_destroy + holder = { destroy_title = prev } + } + #And remember it + create_character_memory = { + type = failed_mandala_trials_memory + participants = { previous_mandala_ruler = scope:deceased_mandala_ruler } + } + } + remove_variable = had_creation_skill_challenge + remove_variable = had_serenity_skill_challenge + remove_variable = had_destruction_skill_challenge + remove_variable = had_trickery_skill_challenge + remove_variable = mandala_skill_challenges + remove_variable = mandala_skill_challenge_success + remove_variable = busy_in_mandala_succession + } +} + +#Find our close relationship character +scripted_trigger mandala_events_9000_appropriate_relationship_character_trigger = { + is_available_ai_adult = yes + location = root.location + OR = { + faith = faith:vaishnavism + faith = faith:shaivism + } +} + +#Find our bystander +scripted_effect mandala_events_9000_find_local_bystander_effect = { + random_pool_character = { + province = root.location + limit = { + is_lowborn = yes + age > 10 + is_available = yes + OR = { + faith = faith:vaishnavism + faith = faith:shaivism + } + has_mandala_faith_trigger = yes + NOT = { + is_of_major_or_minor_interest_trigger = { CHARACTER = root } + } + } + save_scope_as = bystander + } + if = { + limit = { + NOT = { exists = scope:bystander } + } + create_character = { + location = root.location + template = generic_peasant_character + random_culture = { + culture:khmer = { trigger = { always = yes } } + culture:cham = { trigger = { always = yes } } + culture:mon = { trigger = { always = yes } } + culture:tai = { trigger = { always = yes } } + culture:malay = { trigger = { always = yes } } + culture:burmese = { trigger = { always = yes } } + culture:dayak = { trigger = { always = yes } } + culture:bai = { trigger = { always = yes } } + } + faith = faith:shaivism + after_creation = { + random_list = { + 10 = { + set_character_faith = faith:vaishnavism + } + 10 = { + set_character_faith = faith:shaivism + } + } + remove_character_flag = peasant_outfit + add_character_flag = created + } + save_scope_as = bystander + } + } +} + +#Guess you're a divine now, Harry! +tgp_east_asia_mandala_events.9000 = { + type = character_event + title = tgp_east_asia_mandala_events.9000.t + desc = { + first_valid = { + triggered_desc = { + trigger = { scope:divine_circumstance = flag:scar } + desc = tgp_east_asia_mandala_events.9000.desc.scar + } + desc = tgp_east_asia_mandala_events.9000.desc.lightning_strike + } + first_valid = { + triggered_desc = { + trigger = { + scope:divine_circumstance = flag:lightning_strike + has_mandala_faith_trigger = no + } + desc = tgp_east_asia_mandala_events.9000.outro.diff_faith.lightning_strike + } + triggered_desc = { + trigger = { scope:divine_circumstance = flag:lightning_strike } + desc = tgp_east_asia_mandala_events.9000.outro.lightning_strike + } + } + } + theme = faith + override_background = { + trigger = { scope:divine_circumstance = flag:lightning_strike } + reference = market + } + left_portrait = { + character = root + triggered_animation = { + trigger = { scope:divine_circumstance = flag:lightning_strike } + animation = delirium + } + animation = disbelief + } + right_portrait = { + character = scope:bystander + triggered_animation = { + trigger = { scope:divine_circumstance = flag:lightning_strike } + animation = thinking + } + animation = shock + } + trigger = { + government_has_flag = government_is_wanua + is_independent_ruler = yes + is_available_adult = yes + location = { is_sea_province = no } + NOT = { has_character_modifier = divine_happenstance_modifier } + has_mandala_culture_trigger = yes + #We have a special decision for Mandala subjects... + trigger_if = { + limit = { is_tributary = yes } + NOT = { + overlord = { government_has_flag = government_is_mandala } + } + } + } + weight_multiplier = { + base = 1 + modifier = { + add = 1 + is_ai = no + } + modifier = { + add = 1 + has_realm_law = tribal_authority_2 + } + modifier = { + add = 1 + has_trait = scarred + } + } + immediate = { + #What was the random happenstance? + random_list = { + 10 = { + save_scope_value_as = { + name = divine_circumstance + value = flag:lightning_strike + } + #Find our bystander + mandala_events_9000_find_local_bystander_effect = yes + } + 20 = { + trigger = { + has_trait = scarred + OR = { + any_relation = { + type = friend + mandala_events_9000_appropriate_relationship_character_trigger = yes + } + any_relation = { + type = lover + mandala_events_9000_appropriate_relationship_character_trigger = yes + } + } + } + save_scope_value_as = { + name = divine_circumstance + value = flag:scar + } + #Find our bystander + random_list = { + 10 = { + random_relation = { + type = friend + limit = { mandala_events_9000_appropriate_relationship_character_trigger = yes } + save_scope_as = bystander + } + } + 10 = { + random_relation = { + type = lover + limit = { mandala_events_9000_appropriate_relationship_character_trigger = yes } + save_scope_as = bystander + } + } + } + } + } + #To make the tooltip look neat + custom_tooltip = cheaper_mandala_government_conversion_tt + add_character_modifier = { + modifier = divine_happenstance_modifier + years = cheaper_mandala_government_conversion_years + } + } + #Yes please! + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { has_mandala_faith_trigger = no } + desc = tgp_east_asia_mandala_events.9000.a.diff_faith + } + desc = tgp_east_asia_mandala_events.9000.a + } + } + } + if = { + limit = { has_mandala_faith_trigger = no } + set_character_faith = scope:bystander.faith + } + custom_description_no_bullet = { text = divine_happenstance_tt } + #The boons + show_as_tooltip = { divine_happenstance_adopt_mandala_effect = yes } + set_variable = { + name = vying_for_mandala_divinity + years = cheaper_mandala_government_conversion_years + } + ai_chance = { + base = 100 + } + } + #Eh... naah, maybe later + option = { + name = tgp_east_asia_mandala_events.9000.b + #Some lesser boons + add_prestige = { + value = major_prestige_value + multiply = 1.5 + } + scope:bystander = { + if = { + limit = { this = root.cp:councillor_court_chaplain } + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -5 + } + } + } + + ai_chance = { + base = 100 + } + } + after = { + scope:bystander = { + silent_disappearance_ai_if_created_effect = yes + } + } +} diff --git a/events/dlc/tgp/tgp_mandala_task_contract_events.txt b/events/dlc/tgp/tgp_mandala_task_contract_events.txt new file mode 100644 index 00000000..e89d3836 --- /dev/null +++ b/events/dlc/tgp/tgp_mandala_task_contract_events.txt @@ -0,0 +1,8919 @@ +#Mandala Task Contract Events + +namespace = tgp_east_asia_mandala_task_contract_events + + +#Cancel travel plan confirmation +tgp_east_asia_mandala_task_contract_events.0990 = { + type = character_event + title = tgp_east_asia_mandala_task_contract_events.0990.t + desc = tgp_east_asia_mandala_task_contract_events.0990.desc + theme = mandala + left_portrait = { + character = root + animation = pondering + } + immediate = { + # Save the contract + random_character_active_contract = { + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + + # Save the employer + task_contract_employer ?= { + save_scope_as = contract_employer + } + # Save your character + task_contract_taker = { + save_scope_as = contract_taker + } + } + } + # On second thought, let's go! + option = { + name = tgp_east_asia_mandala_task_contract_events.0990.a + custom_tooltip = tgp_east_asia_mandala_task_contract_events.0990.a_tt + if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0001 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1000 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0002 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1100 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0003 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1200 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0004 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1300 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0005 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1400 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0006 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1500 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0007 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1600 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0008 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1700 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0009 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1800 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0010 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.1900 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0011 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2000 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0012 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2100 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0013 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2200 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0014 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2300 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0015 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2400 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0016 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2500 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0017 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2600 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0018 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2700 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0019 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2800 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0020 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.2900 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0021 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3000 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0022 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3100 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0023 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3200 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0024 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3300 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0025 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3400 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0026 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3500 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0027 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3600 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0028 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3700 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0029 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3800 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0030 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.3900 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0031 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4000 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0032 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4100 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0033 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4200 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0034 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4300 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0035 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4400 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0036 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4500 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0037 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4600 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0038 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4700 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0039 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4800 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0040 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.4900 + } + } + else_if = { + limit = { + scope:ongoing_contract = { has_task_contract_type = mandala_realm_contract_0041 } + } + mandala_travel_to_contract_location_effect = { + DESTINATION = scope:ongoing_destination + ARRIVAL_EVENT = tgp_east_asia_mandala_task_contract_events.5000 + } + } + } + # I have more important matters to deal with. + option = { + name = tgp_east_asia_mandala_task_contract_events.0990.b + scope:ongoing_contract = { complete_task_contract = failure_standard } + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + custom_tooltip = tgp_east_asia_mandala_task_contract_events.0990.b_tt + } +} + + +scripted_trigger default_local_character_1000_trigger = { + is_available_adult = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + NOR = { + has_any_bad_relationship_with_character_trigger = { CHARACTER = root } + has_any_good_relationship_with_character_trigger = { CHARACTER = root } + } + trigger_if = { + limit = { + faith = { has_doctrine_parameter = clergy_must_be_female } + } + is_female = yes + } + trigger_if = { + limit = { + faith = { has_doctrine_parameter = clergy_must_be_male } + } + is_male = yes + } +} + +tgp_east_asia_mandala_task_contract_events.1000 = { + type = character_event + window = big_event_window + title = { + first_valid = { + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.t.creation + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.t.serenity + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.t.destruction + } + desc = tgp_east_asia_mandala_task_contract_events.1000.t.trickery + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.desc.creation + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.desc.serenity + } + triggered_desc = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + desc = tgp_east_asia_mandala_task_contract_events.1000.desc.destruction + } + desc = tgp_east_asia_mandala_task_contract_events.1000.desc.trickery + } + } + theme = mandala + #Indenting background overrides for easier overview + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + reference = holy_site_generic + } + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + reference = garden + } + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + reference = ep2_tournament + } + override_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + reference = temple + } + override_header_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + reference = "gfx/interface/window_event/event_header_green.dds" + } + override_header_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + reference = "gfx/interface/window_event/event_header_red.dds" + } + override_header_background = { + trigger = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + reference = "gfx/interface/window_event/event_header_purple.dds" + } + left_portrait = { + character = root + animation = personality_compassionate + } + right_portrait = { + character = scope:local_character + triggered_animation = { + trigger = { + root.house = { has_house_aspiration_parameter = aspect_of_destruction } + } + animation = marshal_random_weapon + } + animation = obsequious_bow + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { save_scope_as = ritual_location } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + default_local_character_1000_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { default_local_character_1000_trigger = yes } + save_scope_as = local_character + } + } + else = { + hidden_effect_new_object = { + random_list = { + 90 = { + create_character = { + template = pool_repopulate_learning + faith = scope:ritual_location.faith + culture = scope:ritual_location.culture + location = scope:ritual_location + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + 5 = { + create_character = { + template = default_mystic_character + faith = scope:ritual_location.faith + culture = scope:ritual_location.culture + location = scope:ritual_location + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + 5 = { + trigger = { + OR = { + AND = { + is_attracted_to_women = yes + scope:ritual_location.faith = { + OR = { + has_doctrine_parameter = clergy_must_be_female + has_doctrine_parameter = clergy_can_be_either_gender + } + } + } + AND = { + is_attracted_to_men = yes + scope:ritual_location.faith = { + OR = { + has_doctrine_parameter = clergy_must_be_male + has_doctrine_parameter = clergy_can_be_either_gender + } + } + } + } + } + if = { + limit = { + scope:ritual_location.faith = { has_doctrine_parameter = clergy_must_be_female } + } + dummy_female = { save_scope_as = dummy_clergy_gender } + } + else_if = { + limit = { + scope:ritual_location.faith = { has_doctrine_parameter = clergy_must_be_male } + } + dummy_male = { save_scope_as = dummy_clergy_gender } + } + else = { + random_list = { + 50 = { + dummy_female = { save_scope_as = dummy_clergy_gender } + } + 50 = { + dummy_male = { save_scope_as = dummy_clergy_gender } + } + } + } + create_character = { + template = beautiful_peasant_character + age = { age_compared_to_root_minus_ten_always_adult age_compared_to_root_plus_ten_always_adult } + gender = scope:dummy_clergy_gender + faith = scope:ritual_location.faith + culture = scope:ritual_location.culture + location = scope:ritual_location + after_creation = { + #Sometimes adjust sexuality to create compatibility with root + if = { + limit = { + root = { is_attracted_to_gender_of = prev } + NOT = { is_attracted_to_gender_of = root } + } + set_sexuality = bisexual + } + add_character_flag = created + } + save_scope_as = local_character + save_scope_as = tempting_character + } + } + } + } + } + } + #Piety, please + option = { + name = tgp_east_asia_mandala_task_contract_events.1000.a + + mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + #Legitimacy! + option = { + name = tgp_east_asia_mandala_task_contract_events.1000.b + + small_mandala_legitimacy_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Barren Cattle +tgp_east_asia_mandala_task_contract_events.1100 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1100.t + desc = tgp_east_asia_mandala_task_contract_events.1100.desc + theme = mandala + override_background = mpo_rural_village_asian + + #left_portrait = { + # character = scope:entourage_character + # animation = instrument_active + #} + center_portrait = { + character = root + animation = physician + } + right_portrait = { + character = scope:local_character + animation = shepherd_with_sheep + camera = camera_herder_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1100.a + + big_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { change_development_progress_with_overflow = 25 } + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 30 } + } + + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_loss + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1100.b + + mandala_piety_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 7 } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1100.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { change_development_progress_with_overflow = -25 } + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# The First Seed +tgp_east_asia_mandala_task_contract_events.1200 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1200.t + desc = tgp_east_asia_mandala_task_contract_events.1200.desc + theme = mandala + override_background = wilderness + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = obsequious_bow + camera = camera_event_scheme_far_right + } + right_portrait = { + character = scope:local_character_2 + animation = fanning_coyly + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + } + fertility > 30 + age <= 30 + NOT = { + has_trait = chaste + } + trigger_if = { + limit = { + root = { is_male = yes } + } + is_female = yes + } + trigger_else = { + is_male = yes + } + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + OR = { + has_sexuality = heterosexual + has_sexuality = bisexual + } + fertility > 30 + age <= 30 + NOT = { + has_trait = chaste + } + trigger_if = { + limit = { + root = { is_male = yes } + } + is_female = yes + } + trigger_else = { + is_male = yes + } + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = opposite_gender_peasant_template + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1200.a + + big_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = 100 + } + + if = { + limit ={ + can_contract_disease_trigger = { DISEASE = ill } + } + random = { + chance = 30 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + + scope:ritual_location = { + if = { + limit = { + province_has_no_holding_trigger = yes + } + begin_create_holding = { + type = temple_citadel_holding + } + } + } + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 30 } + } + + stress_impact = { + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1200.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + + scope:ritual_location = { + if = { + limit = { + province_has_no_holding_trigger = yes + } + random = { + chance = 50 + begin_create_holding = { + type = temple_citadel_holding + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1200.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Sacred Heifer +tgp_east_asia_mandala_task_contract_events.1300 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1300.t + desc = tgp_east_asia_mandala_task_contract_events.1300.desc + theme = mandala + override_background = tgp_farm_asia + override_effect_2d = { reference = flies } + + left_portrait = { + character = root + animation = pondering + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = stress + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1300.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + add_prestige = major_prestige_loss + + add_character_modifier = { + modifier = diplomacy_majesty_4090_no_raiment_modifier + days = 7 + } + + hidden_effect = { + change_current_weight = -25 + } + + if = { + limit ={ + can_contract_disease_trigger = { DISEASE = ill } + } + random = { + chance = 30 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 7 } + } + + stress_impact = { + arrogant = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1300.b + + small_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + add_prestige = minor_prestige_loss + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 7 } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1300.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Divine Witness +tgp_east_asia_mandala_task_contract_events.1400 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1400.t + desc = tgp_east_asia_mandala_task_contract_events.1400.desc + theme = mandala + override_background = garden + + left_portrait = { + character = root + animation = chaplain + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = flirtation_left + camera = camera_event_scheme_far_right + } + right_portrait = { + character = scope:local_character_2 + animation = fanning_coyly + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + scope:ritual_location.barony.holder = { + is_ai = yes + is_married = yes + primary_spouse = { is_ai = yes } + NOR = { + any_child = { is_alive = yes } + any_spouse = { + is_female = yes + has_trait = pregnant + } + } + } + } + scope:ritual_location.barony.holder = { save_scope_as = local_character } + scope:ritual_location.barony.holder.primary_spouse = { save_scope_as = local_character_2 } + } + else = { + create_character = { + template = local_noble_character + dynasty = none + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + gender_female_chance = 0 + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + create_character = { + template = local_noble_character + age = { 25 35 } + dynasty = none + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + gender_female_chance = 100 + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + hidden_effect_new_object = { + scope:local_character = { + if = { + limit = { + is_lowborn = yes + root = { is_ai = no } + } + create_dynasty = { + spread_to_descendants = yes + } + } + marry = scope:local_character_2 + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1400.a + + mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character + PREGNANCY_CHANCE = 100 + } + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = 100 + } + + scope:local_character = { + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + } + + create_character_memory = { + type = had_a_threesome_memory + participants = { + partner_1 = scope:local_character + partner_2 = scope:local_character_2 + } + } + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + stress_impact = { + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1400.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 14 } + } + + scope:local_character = { + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = 100 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1400.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Midwives' Dream +tgp_east_asia_mandala_task_contract_events.1500 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1500.t + desc = { + desc = tgp_east_asia_mandala_task_contract_events.1500.desc + first_valid = { + triggered_desc = { + trigger = { + is_female = yes + scope:1500_stand_in_character ?= { has_character_flag = created } + } + desc = tgp_east_asia_mandala_task_contract_events.1500.desc.stand_in.acolyte + } + desc = tgp_east_asia_mandala_task_contract_events.1500.desc.stand_in + } + } + theme = mandala + override_background = bp1_crossroads_inn + + left_portrait = { + character = root + animation = worry + } + center_portrait = { + character = scope:local_character + animation = storyteller + camera = camera_event_scheme_far_right + } + right_portrait = { + character = scope:local_character_2 + animation = fanning_coyly + } + lower_left_portrait = { + character = scope:1500_stand_in_character + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { exists = scope:ritual_location } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + is_female = yes + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + is_female = yes + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + age = { 45 65 } + location = scope:ritual_location + gender_female_chance = 100 + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + create_character = { + template = opposite_gender_peasant_template + location = scope:ritual_location + gender_female_chance = 100 + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + hidden_effect_new_object = { + scope:local_character_2 = { + random_list = { + 30 = { + add_trait = albino + } + 20 = { + add_trait = scaly + } + 10 = { + add_trait = beauty_bad_3 + } + } + random_list = { + 30 = { + add_trait = scarred + } + 20 = { + add_trait = clubfooted + } + 10 = { + add_trait = hunchbacked + } + } + } + } + #Hmm, find a stand-in + if = { + limit = { is_female = yes } + current_travel_plan = { + if = { + limit = { + any_entourage_character = { + this != root + is_healthy = yes + is_ai = yes + is_adult = yes + is_married = no + is_male = yes + NOR = { + has_trait = devoted + has_trait = chaste + has_trait = celibate + has_sexuality = homosexual + } + } + } + random_entourage_character = { + limit = { + this != root + is_healthy = yes + is_ai = yes + is_adult = yes + is_married = no + is_male = yes + NOR = { + has_trait = devoted + has_trait = chaste + has_trait = celibate + has_sexuality = homosexual + } + } + weight = { + base = 1 + modifier = { + is_child_of = root + add = 200 + } + modifier = { + any_spouse = { this = root } + add = 300 + } + modifier = { + is_close_family_of = root + add = 100 + } + } + save_scope_as = 1500_stand_in_character + } + } + } + if = { + limit = { + NOT = { exists = scope:1500_stand_in_character } + } + hidden_effect_new_object = { + create_character = { + template = tgp_aspect_acolyte_template + location = scope:ritual_location + save_scope_as = 1500_stand_in_character + after_creation = { add_character_flag = created } + } + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:1500_stand_in_character + NEW_COURT_OWNER = root + } + } + } + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { + is_female = yes + scope:1500_stand_in_character ?= { has_character_flag = created } + } + desc = tgp_east_asia_mandala_task_contract_events.1500.a.stand_in.acolyte + } + triggered_desc = { + trigger = { is_female = yes } + desc = tgp_east_asia_mandala_task_contract_events.1500.a.stand_in + } + desc = tgp_east_asia_mandala_task_contract_events.1500.a + } + } + } + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + #We do the deed + if = { + limit = { is_female = no } + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + #This relation should be a blank slate + if = { + limit = { + can_set_relation_potential_lover_trigger = { CHARACTER = scope:local_character_2 } + } + set_relation_potential_lover = scope:local_character_2 + } + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character_2 + NEW_COURT_OWNER = root + } + stress_impact = { + base = minor_stress_impact_gain + chaste = medium_stress_impact_gain + } + } + #We need a proxy + else = { + #Ehm, no incest please + if = { + limit = { + scope:1500_stand_in_character = { + NOT = { is_close_family_of = root } + } + } + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + had_sex_with_effect = { + CHARACTER = scope:1500_stand_in_character + PREGNANCY_CHANCE = pregnancy_chance + } + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + #This relation should be a blank slate + if = { + limit = { + can_set_relation_potential_lover_trigger = { CHARACTER = scope:local_character_2 } + } + set_relation_potential_lover = scope:local_character_2 + } + create_character_memory = { + type = had_a_threesome_memory + participants = { + partner_1 = scope:1500_stand_in_character + partner_2 = scope:local_character_2 + } + } + } + #They do the deed + scope:1500_stand_in_character = { + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character_2 + NEW_COURT_OWNER = root + } + stress_impact = { + base = minor_stress_impact_gain + } + } + stress_impact = { + base = minor_stress_impact_gain + chaste = medium_stress_impact_gain + lustful = major_stress_impact_loss + } + } + #*shock* + every_consort = { + add_opinion = { + target = root + modifier = outraged_opinion + opinion = -50 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:1500_stand_in_character } + desc = tgp_east_asia_mandala_task_contract_events.1500.b.stand_in + } + desc = tgp_east_asia_mandala_task_contract_events.1500.b + } + } + } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + #We do the deed + if = { + limit = { is_female = no } + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + stress_impact = { + base = minor_stress_impact_gain + chaste = medium_stress_impact_gain + lustful = minor_stress_impact_loss + } + } + #We need a proxy + else = { + scope:1500_stand_in_character = { + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + stress_impact = { + base = minor_stress_impact_gain + } + } + stress_impact = { + lustful = minor_stress_impact_loss + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1500.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + scope:1500_stand_in_character ?= { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Weeping Statue +tgp_east_asia_mandala_task_contract_events.1600 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1600.t + desc = tgp_east_asia_mandala_task_contract_events.1600.desc + theme = mandala + override_background = tgp_farm_asia + + left_portrait = { + character = root + animation = newborn + } + center_portrait = { + character = scope:local_character + animation = obsequious_bow + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:statue_head + animation = dead + camera = camera_event_right_massive_head + hide_info = yes + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + create_character = { + template = generic_peasant_character + location = scope:background_terrain_scope + culture = scope:background_terrain_scope.culture + faith = scope:background_terrain_scope.faith + save_scope_as = statue_head + after_creation = { + add_character_flag = created + } + } + hidden_effect = { + scope:statue_head = { + add_trait = disfigured + add_trait = albino + add_character_flag = no_headgear + death = { death_reason = death_vanished } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1600.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + remove_short_term_gold = medium_gold_value + + scope:ritual_location.county = { + add_county_modifier = { + modifier = stone_head_shrine_modifier + years = 25 + } + } + + ai_chance = { + base = 50 + modifier = { + gold <= major_gold_value + factor = 0 + } + modifier = { + scope:ritual_location.county.holder.top_liege != root.top_liege + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1600.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + remove_short_term_gold = tiny_gold_value + + ai_chance = { + base = 100 + modifier = { + gold <= minor_gold_value + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1600.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Sprouting Flowers +tgp_east_asia_mandala_task_contract_events.1700 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1700.t + desc = tgp_east_asia_mandala_task_contract_events.1700.desc + theme = mandala + override_background = tgp_rice_fields + override_effect_2d = { reference = rain } + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = grief + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1700.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + capital_county = { change_development_progress_with_overflow = -75 } + scope:ritual_location.county = { change_development_progress_with_overflow = 75 } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = fertile_ground_modifier + years = 15 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1700.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + if = { + limit ={ + can_contract_disease_trigger = { DISEASE = ill } + } + random = { + chance = 30 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1700.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# River Ritual +tgp_east_asia_mandala_task_contract_events.1800 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1800.t + desc = tgp_east_asia_mandala_task_contract_events.1800.desc + theme = mandala + override_background = bp3_riverside + + left_portrait = { + character = root + animation = frontend_left_idle + } + center_portrait = { + character = scope:local_character_2 + animation = flirtation_left + camera = camera_event_scheme_far_right + } + right_portrait = { + character = scope:local_character + animation = relaxed_spear + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + create_character = { + template = opposite_gender_peasant_template + location = scope:ritual_location + gender_female_chance = 100 + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1800.a + + mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character_2 + PREGNANCY_CHANCE = pregnancy_chance + } + + if = { + limit ={ + can_contract_disease_trigger = { DISEASE = ill } + } + random = { + chance = 30 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + + stress_impact = { + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1800.b + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1800.c + + small_mandala_piety_reward_effect = yes + add_gold = minor_gold_value + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 10 + } + } + + stress_impact = { + generous = medium_stress_impact_gain + } + ai_chance = { + base = 10 + modifier = { + has_trait = generous + factor = 0 + } + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Cursed Fields +tgp_east_asia_mandala_task_contract_events.1900 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.1900.t + desc = tgp_east_asia_mandala_task_contract_events.1900.desc + theme = mandala + override_background = tgp_farm_asia + + left_portrait = { + character = scope:entourage_character + animation = holding_staff + camera = camera_event_scheme_far_right + } + center_portrait = { + character = root + animation = survey + camera = camera_event_scheme_left + } + right_portrait = { + character = scope:local_character + animation = rage + camera = camera_event_scheme_left + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + if = { + limit = { + any_entourage_character = { + age >= 13 + is_healthy = yes + } + } + } + random_entourage_character = { + limit = { + age >= 13 + is_healthy = yes + } + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1900.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + add_character_modifier = { + modifier = stress_smelling_of_sweat + years = 3 + } + + stress_impact = { + base = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.1900.b + trigger = { exists = scope:entourage_character } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + scope:entourage_character = { + add_character_modifier = { + modifier = stress_smelling_of_sweat + years = 3 + } + } + + reverse_add_opinion = { + modifier = cruelty_opinion + target = scope:entourage_character + opinion = -30 + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + humble = medium_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = humble + has_trait = just + } + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.1900.c + + small_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 3 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Withered Grove +tgp_east_asia_mandala_task_contract_events.2000 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2000.t + desc = tgp_east_asia_mandala_task_contract_events.2000.desc + theme = mandala + override_background = wilderness + override_effect_2d = { reference = smoke } + + left_portrait = { + character = root + animation = personality_zealous + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = stunned + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age <= 40 + trigger_if = { + limit = { + root = { is_male = yes } + } + is_female = yes + } + trigger_else = { + is_female = yes + } + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age <= 40 + trigger_if = { + limit = { + root = { is_male = yes } + } + is_female = yes + } + trigger_else = { + is_female = yes + } + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = opposite_gender_peasant_template + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { is_female = yes } + desc = tgp_east_asia_mandala_task_contract_events.2000.a.female + } + desc = tgp_east_asia_mandala_task_contract_events.2000.a + } + } + } + + big_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + remove_short_term_gold = minor_gold_value + + add_prestige = minor_prestige_loss + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character + PREGNANCY_CHANCE = pregnancy_chance + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = lush_grove_modifier + years = 25 + } + } + + stress_impact = { + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + gold <= medium_gold_value + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2000.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + add_prestige = minor_prestige_loss + + save_scope_value_as = { + name = ignore_cheating_error_check + value = yes + } + + had_sex_with_effect = { + CHARACTER = scope:local_character + PREGNANCY_CHANCE = pregnancy_chance + } + + stress_impact = { + chaste = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2000.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Pig Slaughter Oath +tgp_east_asia_mandala_task_contract_events.2100 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2100.t + desc = tgp_east_asia_mandala_task_contract_events.2100.desc + theme = mandala + override_background = mpo_rural_village_asian + + left_portrait = { + character = root + animation = spymaster + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = throne_room_two_handed_passive_1 + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = vengeance_target + } + } + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = vengeance_target + } + } + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + gender_female_chance = root_soldier_female_chance + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2100.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + remove_short_term_gold = medium_gold_value + + scope:vengeance_target = { + title_province = { + add_province_modifier = { + modifier = recently_looted_modifier + years = 5 + } + } + change_county_control = -50 + change_development_progress_with_overflow = -50 + } + + ai_chance = { + base = 0 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2100.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:vengeance_target = { + change_county_control = -15 + change_development_progress_with_overflow = -15 + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2100.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 5 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Ritual Wrath +tgp_east_asia_mandala_task_contract_events.2200 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2200.t + desc = tgp_east_asia_mandala_task_contract_events.2200.desc + theme = mandala + override_background = tgp_farm_asia + override_effect_2d = { reference = flies } + + left_portrait = { + character = scope:entourage_character + animation = throne_room_two_handed_passive_1 + camera = camera_event_scheme_center_look_semi_right + } + center_portrait = { + character = root + animation = marshal + camera = camera_event_scheme_center_look_semi_right + } + right_portrait = { + character = scope:local_character + animation = throne_room_bow_1 + camera = camera_event_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2200.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + increase_wounds_effect = { REASON = whipping } + + scope:ritual_location.county = { + change_development_progress_with_overflow = 10 + } + + stress_impact = { + base = medium_stress_impact_gain + craven = medium_stress_impact_gain + flagellant = massive_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2200.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:local_character = { + death = { + death_reason = death_punishment + killer = root + } + } + + scope:ritual_location.county = { + change_county_control = -10 + change_development_progress_with_overflow = 10 + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2200.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Collective Punishment +tgp_east_asia_mandala_task_contract_events.2300 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2300.t + desc = tgp_east_asia_mandala_task_contract_events.2300.desc + theme = mandala + override_background = tgp_farm_asia + + left_portrait = { + character = root + animation = throne_room_two_handed_passive_shield + camera = camera_event_scheme_center_look_right + } + center_portrait = { + character = scope:local_character_2 + animation = nervous + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:local_character + animation = threatening + } + lower_left_portrait = { + character = scope:local_character_3 + animation = manic + } + lower_center_portrait = { + character = scope:local_character_4 + animation = crying + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_female = yes + NOR = { + has_trait = celibate + has_trait = devoted + } + age <= 35 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_female = yes + NOR = { + has_trait = celibate + has_trait = devoted + } + age <= 35 + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + gender_female_chance = 100 + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + create_character = { + template = generic_peasant_character + location = scope:ritual_location + gender_female_chance = 0 + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_3 + after_creation = { + add_character_flag = created + } + } + create_character = { + template = peasant_young_child_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_4 + after_creation = { + add_character_flag = created + } + } + hidden_effect_new_object = { + scope:local_character_3 = { + add_gold = 25 + marry = scope:local_character_2 + } + scope:local_character_4 = { + set_father = scope:local_character_3 + set_mother = scope:local_character_2 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2300.a + + duel = { + skill = martial + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + desc = tgp_east_asia_mandala_task_contract_events.2300.a.success + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.2300.a.success + left_icon = root + right_icon = scope:local_character_3 + scope:local_character_3 = { + death = { death_reason = death_punishment killer = root } + } + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + scope:ritual_location.county = { + if = { + limit = { + county_control < 100 + } + change_county_control = 15 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + desc = tgp_east_asia_mandala_task_contract_events.2300.a.failure + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.2300.a.failure + left_icon = root + right_icon = scope:local_character_3 + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 5 + } + change_county_control = -15 + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2300.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:local_character_2 = { + death = { death_reason = death_punishment killer = root } + } + + scope:local_character_4 = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = collective_punishments_modifier + years = 15 + } + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = just + } + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2300.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 3 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_3 = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_4 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Diseased Spirits +tgp_east_asia_mandala_task_contract_events.2400 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2400.t + desc = tgp_east_asia_mandala_task_contract_events.2400.desc + theme = mandala + override_background = mpo_rural_village_asian + override_effect_2d = { reference = smoke } + + left_portrait = { + character = root + animation = frontend_left_idle + } + center_portrait = { + character = scope:local_character + animation = cough + camera = camera_event_scheme_right + } + right_portrait = { + character = scope:local_character_2 + animation = physician + camera = camera_event_scheme_center_look_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + create_character = { + template = bp1_yearly_2021_learning_witch_template + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + hidden_effect_new_object = { + scope:local_character = { + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = no } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2400.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:local_character_2 = { + death = { death_reason = death_burned killer = root } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = no_healers_modifier + years = 20 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2400.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:local_character_2 = { + death = { death_reason = death_burned killer = root } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = no_healers_modifier + years = 5 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2400.c + + small_mandala_piety_reward_effect = yes + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character_2 + NEW_COURT_OWNER = root + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 3 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Dull Spears +tgp_east_asia_mandala_task_contract_events.2500 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2500.t + desc = tgp_east_asia_mandala_task_contract_events.2500.desc + theme = mandala + override_background = bp1_crossroads_inn + + left_portrait = { + character = root + animation = inspect_weapon + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = beg + camera = camera_event_scheme_right + } + right_portrait = { + character = scope:local_character_2 + animation = drink_goblet + camera = camera_event_scheme_center_look_semi_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + age = { 45 65 } + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_clergy = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_clergy = no + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + hidden_effect_new_object = { + scope:local_character_2 = { + add_character_flag = need_military_outfit + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2500.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:local_character_2 = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = motivated_men_at_arms_modifier + years = 15 + } + county = { + if = { + limit = { + county_control < 100 + } + change_county_control = 15 + } + } + } + + random = { + chance = 50 + increase_wounds_effect = { REASON = fight } + } + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2500.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 30 } + } + + scope:local_character_2 = { + increase_wounds_effect = { REASON = whipping } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = safer_roads_modifier + years = 15 + } + county = { + if = { + limit = { + county_control < 100 + } + change_county_control = 15 + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2500.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + random = { + chance = 10 + scope:ritual_location.county = { + add_county_modifier = county_corruption_bandits_rampant_modifier + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Defiant Village +tgp_east_asia_mandala_task_contract_events.2600 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2600.t + desc = tgp_east_asia_mandala_task_contract_events.2600.desc + theme = mandala + override_background = mpo_rural_village_asian + + left_portrait = { + character = root + animation = throne_room_one_handed_passive_1 + camera = camera_event_scheme_center_look_semi_right + } + center_portrait = { + character = scope:local_character + animation = dancing_plague + camera = camera_event_scheme_center_look_right + } + right_portrait = { + character = scope:local_character_2 + animation = dancing + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2600.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:local_character = { + death = { death_reason = death_punishment killer = root } + } + + scope:local_character_2 = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = slaughtered_village_modifier + years = 15 + } + change_development_progress_with_overflow = -25 + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = forgiving + } + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2600.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { + change_development_progress_with_overflow = -25 + } + + stress_impact = { + compassionate = medium_stress_impact_gain + forgiving = medium_stress_impact_gain + just = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = just + } + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2600.c + + small_mandala_piety_reward_effect = yes + + stress_impact = { + wrathful = medium_stress_impact_gain + sadistic = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = wrathful + has_trait = sadistic + } + factor = 0 + } + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Blood Tax +tgp_east_asia_mandala_task_contract_events.2700 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2700.t + desc = tgp_east_asia_mandala_task_contract_events.2700.desc + theme = mandala + override_background = mpo_rural_village_asian + + left_portrait = { + character = root + animation = throne_room_two_handed_passive_shield + camera = camera_event_scheme_center_look_right + } + center_portrait = { + character = scope:local_character + animation = holding_scrolls + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2700.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { + change_development_progress_with_overflow = -50 + add_county_modifier = { + modifier = enforced_levy_modifier + years = 15 + } + if = { + limit = { + county_control < 100 + } + change_county_control = 15 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2700.b + + mandala_piety_reward_effect = yes + add_gold = { + value = scope:ritual_location.available_loot + min = 25 + } + scope:ritual_location.county = { + change_county_control = -15 + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2700.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Bamboo Rebels +tgp_east_asia_mandala_task_contract_events.2800 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2800.t + desc = tgp_east_asia_mandala_task_contract_events.2800.desc + theme = mandala + override_background = tgp_market_asia + + left_portrait = { + character = root + animation = marshal_shield + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:local_character + animation = relaxed_spear + camera = camera_event_scheme_left + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = root } + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + gender_female_chance = root_soldier_female_chance + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2800.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:local_character = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location.county = { + change_development_progress_with_overflow = -50 + if = { + limit = { + county_control < 100 + } + change_county_control = 15 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2800.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2800.c + + small_mandala_piety_reward_effect = yes + scope:ritual_location.county = { + add_county_modifier = { + modifier = well_armed_peasants_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Road Sacrifice +tgp_east_asia_mandala_task_contract_events.2900 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.2900.t + desc = tgp_east_asia_mandala_task_contract_events.2900.desc + theme = mandala + override_background = tgp_farm_asia + override_effect_2d = { reference = rain } + + left_portrait = { + character = scope:entourage_character + animation = survey + camera = camera_event_scheme_far_right + } + center_portrait = { + character = root + animation = spymaster + camera = camera_event_scheme_center_look_semi_right + } + right_portrait = { + character = scope:local_character + animation = hunting_knife_start + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2900.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:ritual_location = { + add_province_modifier = { + modifier = safer_roads_modifier + years = 15 + } + } + + increase_wounds_effect = { REASON = whipping } + + stress_impact = { + base = medium_stress_impact_gain + craven = medium_stress_impact_gain + flagellant = massive_stress_impact_loss + } + + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.2900.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + remove_short_term_gold = tiny_gold_value + scope:ritual_location = { + add_province_modifier = { + modifier = safer_roads_modifier + years = 15 + } + } + + ai_chance = { + base = 100 + modifier = { + gold <= minor_gold_value + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.2900.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# War God Festival +tgp_east_asia_mandala_task_contract_events.3000 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3000.t + desc = tgp_east_asia_mandala_task_contract_events.3000.desc + theme = mandala + override_background = temple + override_effect_2d = { reference = smoke } + + left_portrait = { + character = root + animation = threatening + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = dancing + camera = camera_event_scheme_center_look_right + } + right_portrait = { + character = scope:local_character_2 + animation = instrument_active + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3000.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:local_character = { + death = { death_reason = death_punishment killer = root } + } + + scope:local_character_2 = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location.county = { + change_development_progress_with_overflow = -50 + add_county_modifier = { + modifier = fearful_population_modifier + years = 10 + } + change_county_control = -15 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3000.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:local_character = { + death = { death_reason = death_punishment killer = root } + } + + scope:local_character_2 = { + death = { death_reason = death_punishment killer = root } + } + + scope:ritual_location.county = { + change_development_progress_with_overflow = -25 + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3000.c + + small_mandala_piety_reward_effect = yes + add_prestige = minor_prestige_loss + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Quarreling Monks +tgp_east_asia_mandala_task_contract_events.3100 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3100.t + desc = tgp_east_asia_mandala_task_contract_events.3100.desc + theme = mandala + override_background = temple + + left_portrait = { + character = root + animation = stunned + } + center_portrait = { + character = scope:local_character + animation = debating + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:local_character_2 + animation = rage + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + hidden_effect = { + scope:local_character = { + add_trait = devoted + set_character_faith = scope:ritual_location.faith + } + scope:local_character_2 = { + add_trait = devoted + set_character_faith = scope:ritual_location.faith + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3100.a + + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + desc = tgp_east_asia_mandala_task_contract_events.3100.a.success + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.3100.a.success + left_icon = root + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + desc = tgp_east_asia_mandala_task_contract_events.3100.a.failure + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.3100.a.failure + left_icon = root + add_stress = medium_stress_impact_gain + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_monks_modifier + years = 5 + } + change_county_control = -25 + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3100.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + remove_short_term_gold = minor_gold_value + + scope:ritual_location = { + add_province_modifier = { + modifier = new_shrines_modifier + years = 20 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3100.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_monks_modifier + years = 3 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Purify Battlefield +tgp_east_asia_mandala_task_contract_events.3200 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3200.t + desc = tgp_east_asia_mandala_task_contract_events.3200.desc + theme = mandala + override_background = tgp_farm_asia + + left_portrait = { + character = root + animation = stress + camera = camera_event_left_away_3_4 + } + center_portrait = { + character = scope:local_character + animation = survey_staff + camera = camera_event_center_away + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + age = { 45 65 } + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3200.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + custom_tooltip = unable_to_declare_war_tt + add_character_flag = { + flag = sworn_peace + years = 5 + } + + add_character_modifier = { + modifier = ritually_disarmed_modifier + years = 5 + } + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 15 } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3200.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + add_character_modifier = { + modifier = ritually_disarmed_modifier + years = 5 + } + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 15 } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3200.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = plagued_by_nightmares_modifier + years = 3 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Bless the Weavers +tgp_east_asia_mandala_task_contract_events.3300 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3300.t + desc = tgp_east_asia_mandala_task_contract_events.3300.desc + theme = mandala + override_background = tgp_market_asia + + left_portrait = { + character = root + animation = pondering + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = obsequious_bow + camera = camera_event_scheme_right + } + right_portrait = { + character = scope:local_character_2 + animation = steward + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3300.a + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location = { + add_province_modifier = { + modifier = wealthgod_symbol_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3300.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location = { + add_province_modifier = { + modifier = healthgod_symbol_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3300.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Breaking of Spears +tgp_east_asia_mandala_task_contract_events.3400 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3400.t + desc = tgp_east_asia_mandala_task_contract_events.3400.desc + theme = mandala + override_background = bp1_bonfire + + left_portrait = { + character = root + animation = relaxed_spear + camera = camera_event_left_away_3_4 + } + center_portrait = { + character = scope:local_character + animation = throne_room_two_handed_passive_1 + camera = camera_event_center_away + } + right_portrait = { + character = scope:local_character_2 + animation = celebrate_spear + camera = camera_event_left_away + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3400.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + custom_tooltip = unable_to_declare_war_tt + add_character_flag = { + flag = sworn_peace + years = 5 + } + + scope:ritual_location = { + add_province_modifier = { + modifier = feudless_village_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3400.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location = { + add_province_modifier = { + modifier = feudless_village_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3400.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Guru's Peace +tgp_east_asia_mandala_task_contract_events.3500 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3500.t + desc = tgp_east_asia_mandala_task_contract_events.3500.desc + theme = mandala + override_background = holy_site_scope + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = wedding_priest + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + create_character = { + template = court_guru_court_position_template + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + hidden_effect = { + scope:local_character = { + add_diplomacy_skill = 10 + force_character_skill_recalculation = yes + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3500.a + + if = { + limit = { + NOT = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + } + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character + NEW_COURT_OWNER = root + } + + if = { + limit = { + can_employ_court_position_type = court_guru_court_position + } + appoint_court_position = { + recipient = scope:local_character + court_position = court_guru_court_position + } + } + + reverse_add_opinion = { + modifier = pious_opinion + target = scope:local_character + opinion = 50 + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = generation_of_peace_modifier + years = 25 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3500.b + + if = { + limit = { + NOT = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + small_mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + } + + pay_short_term_gold = { + target = scope:local_character + gold = tiny_gold_value + } + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character + NEW_COURT_OWNER = root + } + + if = { + limit = { + can_employ_court_position_type = court_guru_court_position + } + appoint_court_position = { + recipient = scope:local_character + court_position = court_guru_court_position + } + } + + ai_chance = { + base = 100 + modifier = { + gold <= minor_gold_value + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3500.c + + if = { + limit = { + NOT = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + small_mandala_piety_reward_effect = yes + } + else = { + mandala_piety_reward_effect = yes + } + + reverse_add_opinion = { + modifier = impious_opinion + target = scope:local_character + opinion = -75 + } + + ai_chance = { + base = 100 + modifier = { + factor = 0 + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappear_ai_if_not_hired_with_flag = yes + } + } +} + +# Reconciliation Edict +tgp_east_asia_mandala_task_contract_events.3600 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3600.t + desc = tgp_east_asia_mandala_task_contract_events.3600.desc + theme = mandala + override_background = tgp_farm_asia + + left_portrait = { + character = root + animation = writing + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = holding_scrolls + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + age = { 45 65 } + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3600.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = weapon_ban_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3600.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = arbitration_edict_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3600.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Eightfold Path +tgp_east_asia_mandala_task_contract_events.3700 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3700.t + desc = tgp_east_asia_mandala_task_contract_events.3700.desc + theme = mandala + override_background = terrain_travel + + left_portrait = { + character = root + animation = personality_zealous + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = storyteller + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + age = { 45 65 } + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3700.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 8 } + } + + if = { + limit ={ + can_contract_disease_trigger = { DISEASE = ill } + } + random = { + chance = 30 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = eightfold_path_modifier + years = 8 + } + } + + hidden_effect = { + change_current_weight = -25 + } + + stress_impact = { + base = medium_stress_impact_gain + lazy = massive_stress_impact_gain + diligent = medium_stress_impact_loss + } + + add_character_modifier = { + modifier = walked_the_eightfold_path_modifier + years = 8 + } + + ai_chance = { + base = 10 + modifier = { + has_trait = lazy + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3700.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 8 } + } + + stress_impact = { + base = minor_stress_impact_gain + lazy = major_stress_impact_gain + diligent = minor_stress_impact_loss + } + + ai_chance = { + base = 10 + modifier = { + has_trait = lazy + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3700.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Grove Guardians +tgp_east_asia_mandala_task_contract_events.3800 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3800.t + desc = tgp_east_asia_mandala_task_contract_events.3800.desc + theme = mandala + override_background = tgp_wedding_ceremony_asia + + left_portrait = { + character = root + animation = frontend_center_idle + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = holding_staff + camera = camera_event_scheme_right + } + right_portrait = { + character = scope:local_character_2 + animation = bow_idle + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { save_scope_as = county_scope } + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3800.a + + trigger = { + any_maa_regiment = {} + } + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + every_maa_regiment = { + limit = { + NOT = { + is_unit_type = siege_weapon + } + } + change_maa_troops_count = { + value = { + value = this.maa_current_troops_count + multiply = -0.25 + } + } + } + + scope:county_scope = { + add_county_modifier = { + modifier = well_protected_groves_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3800.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + scope:county_scope = { + add_county_modifier = { + modifier = garrisoned_groves_modifier + years = 10 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3800.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Vow of Stillness +tgp_east_asia_mandala_task_contract_events.3900 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.3900.t + desc = tgp_east_asia_mandala_task_contract_events.3900.desc + theme = mandala + override_background = mpo_rural_village_asian + + left_portrait = { + character = root + animation = worry + } + center_portrait = { + character = scope:local_character + animation = debating + camera = camera_event_scheme_center_look_right + } + right_portrait = { + character = scope:local_character_2 + animation = rage + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3900.a + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 90 } + } + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + stress_impact = { + base = medium_stress_impact_gain + gregarious = massive_stress_impact_gain + shy = medium_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + has_trait = gregarious + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.3900.b + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 7 } + } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + stress_impact = { + base = minor_stress_impact_gain + gregarious = medium_stress_impact_gain + shy = medium_stress_impact_loss + } + ai_chance = { + base = 10 + modifier = { + has_trait = gregarious + factor = 0 + } + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.3900.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = discordant_town_modifier + years = 3 + } + } + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 100 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Stone-laying +tgp_east_asia_mandala_task_contract_events.4000 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4000.t + desc = tgp_east_asia_mandala_task_contract_events.4000.desc + theme = mandala + override_background = garden + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = throne_room_one_handed_passive_3 + camera = camera_event_scheme_center_forward + } + right_portrait = { + character = scope:local_character_2 + animation = aggressive_hammer + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + random_maa_regiment = { + limit = { + NOT = { + is_unit_type = siege_weapon + } + } + save_scope_as = sacrificial_regiment + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4000.a + + scope:ritual_location = { + generate_building = yes + } + + every_maa_regiment = { + limit = { + NOT = { + is_unit_type = siege_weapon + } + } + change_maa_troops_count = { + value = { + value = this.maa_current_troops_count + multiply = -0.25 + } + } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = pious_silpakaras_modifier + years = 15 + } + } + + add_character_modifier = { + modifier = ritually_disarmed_modifier + years = 10 + } + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4000.b + + trigger = { + exists = scope:sacrificial_regiment + } + + scope:sacrificial_regiment = { + change_maa_troops_count = { + value = { + value = this.maa_current_troops_count + multiply = -0.5 + } + } + } + + add_character_modifier = { + modifier = ritually_disarmed_modifier + years = 5 + } + + scope:ritual_location = { + add_province_modifier = { + modifier = pious_silpakaras_modifier + years = 5 + } + } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4000.c + + small_mandala_piety_reward_effect = yes + + add_character_modifier = { + modifier = ritually_disarmed_modifier + years = 2 + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Laughing Ascetic +tgp_east_asia_mandala_task_contract_events.4100 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4100.t + desc = tgp_east_asia_mandala_task_contract_events.4100.desc + theme = mandala + override_background = mpo_rural_village_asian + + left_portrait = { + character = root + animation = map_disbelief + } + center_portrait = { + character = scope:local_character + animation = laugh + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:local_character_2 + animation = ecstasy + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + random_list = { + 50 = { + religion:buddhism_religion = { + random_faith = { + limit = { + NOR = { + this = faith:dhyana + this = faith:pundarika + this = faith:vinaya + this = faith:avatamsaka + this = faith:sukhavati + this = faith:acharya + this = faith:mantrayana + this = faith:maitreya + this = faith:yogacara + } + } + save_scope_as = character_faith + } + } + } + 50 = { + religion:hinduism_religion = { + random_faith = { + save_scope_as = character_faith + } + } + } + } + # Local character + create_character = { + template = court_guru_court_position_template + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:character_faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_clergy = no + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + is_clergy = no + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + hidden_effect = { + scope:local_character = { + change_current_weight = 500 + add_intrigue_skill = 16 + force_character_skill_recalculation = yes + save_scope_as = second + } + scope:local_character_2 = { + remove_trait = humble + add_trait = arrogant + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4100.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + duel = { + skill = intrigue + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4100.t + left_icon = root + right_icon = scope:local_character_2 + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character + NEW_COURT_OWNER = root + } + + if = { + limit = { + can_employ_court_position_type = court_guru_court_position + } + appoint_court_position = { + recipient = scope:local_character + court_position = court_guru_court_position + } + } + + add_hook = { + target = scope:local_character + type = loyalty_hook + } + + reverse_add_opinion = { + modifier = respect_opinion + target = scope:local_character + opinion = 50 + } + + if = { + limit = { + culture != scope:ritual_location.culture + } + culture = { + change_cultural_acceptance = { + target = scope:ritual_location.culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_gain_event + } + } + } + } + } + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4100.t + left_icon = root + right_icon = scope:local_character_2 + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 5 + } + } + } + } + 5 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4100.t + left_icon = root + right_icon = scope:local_character_2 + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 5 + } + } + scope:ritual_location = { + if = { + limit = { + county.faith != scope:local_character.faith + } + county = { set_county_faith = scope:local_character.faith } + } + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4100.b + + small_mandala_piety_reward_effect = yes + add_prestige = medium_prestige_loss + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character + NEW_COURT_OWNER = root + } + + if = { + limit = { + can_employ_court_position_type = court_guru_court_position + } + appoint_court_position = { + recipient = scope:local_character + court_position = court_guru_court_position + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4100.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappear_ai_if_not_hired_with_flag = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Spirit Decoy +tgp_east_asia_mandala_task_contract_events.4200 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4200.t + desc = tgp_east_asia_mandala_task_contract_events.4200.desc + theme = mandala + override_background = tgp_farm_asia + override_effect_2d = { reference = flies } + + left_portrait = { + character = root + animation = throne_room_one_handed_passive_3 + camera = camera_event_scheme_center_look_right + } + center_portrait = { + character = scope:local_character + animation = storyteller + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4200.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + random_list = { + 75 = { + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4200.t + left_icon = root + right_icon = scope:ritual_location.county + scope:ritual_location.county = { + add_county_modifier = { + modifier = vegetable_idol_modifier + years = 25 + } + } + } + } + 25 = { + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4200.t + left_icon = root + right_icon = scope:ritual_location.county + add_prestige = medium_prestige_loss + scope:ritual_location.county = { + add_county_modifier = { + modifier = mocked_idol_modifier + years = 15 + } + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4200.b + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + random_list = { + 75 = { + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4200.t + left_icon = root + right_icon = scope:ritual_location.county + scope:ritual_location.county = { + add_county_modifier = { + modifier = ruler_idol_modifier + years = 25 + } + } + } + } + 25 = { + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4200.t + left_icon = root + right_icon = scope:ritual_location.county + add_prestige = medium_prestige_loss + scope:ritual_location.county = { + add_county_modifier = { + modifier = mocked_idol_modifier + years = 15 + } + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4200.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Game of Wit +tgp_east_asia_mandala_task_contract_events.4300 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4300.t + desc = tgp_east_asia_mandala_task_contract_events.4300.desc + theme = mandala + override_background = tgp_feast_asia + + center_portrait = { + character = root + animation = chess_cocky + camera = camera_event_scheme_center_look_right + } + right_portrait = { + character = scope:local_character + animation = chess_certain_win + camera = camera_event_scheme_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { exists = scope:ritual_location } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { save_scope_as = entourage_character } + } + # Local character + if = { + limit = { + OR = { + scope:ritual_location.barony.holder = root + scope:ritual_location.barony.holder = { is_available_adult = no } + } + } + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + has_any_good_relationship_with_root_trigger = no + intrigue > high_skill_rating + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + has_any_good_relationship_with_root_trigger = no + intrigue > high_skill_rating + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = intrigue_court_position_holder_template + location = scope:ritual_location + faith = scope:ritual_location.faith + culture = scope:ritual_location.culture + gender_female_chance = 50 + save_scope_as = local_character + } + } + } + else = { + scope:ritual_location.barony.holder = { + add_character_flag = local_ruler + save_scope_as = local_character + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4300.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + duel = { + target = scope:local_character + skill = intrigue + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4300.t + left_icon = root + right_icon = scope:local_character + + scope:local_character = { + if = { + limit = { has_character_flag = local_ruler } + if = { + limit = { has_trait = disloyal } + remove_trait = disloyal + } + if = { + limit = { + NOT = { has_trait = loyal } + } + add_trait = loyal + } + } + else = { + root = { add_courtier = scope:local_character } + } + } + if = { + limit = { + can_add_hook = { + type = loyalty_hook + target = scope:local_character + } + } + add_hook = { + type = loyalty_hook + target = scope:local_character + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4300.t + left_icon = root + right_icon = scope:local_character + + scope:local_character = { + if = { + limit = { has_character_flag = local_ruler } + if = { + limit = { has_trait = loyal } + remove_trait = loyal + } + if = { + limit = { + NOT = { has_trait = disloyal } + } + add_trait = disloyal + } + } + } + reverse_add_opinion = { + modifier = respect_opinion + target = scope:local_character + opinion = -30 + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4300.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + duel = { + skill = diplomacy + value = low_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4300.t + left_icon = root + right_icon = scope:local_character + + reverse_add_opinion = { + modifier = respect_opinion + target = scope:local_character + opinion = 30 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4300.t + left_icon = root + right_icon = scope:local_character + + reverse_add_opinion = { + modifier = respect_opinion + target = scope:local_character + opinion = -30 + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4300.c + + small_mandala_piety_reward_effect = yes + + reverse_add_opinion = { + modifier = respect_opinion + target = scope:local_character + opinion = -10 + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + remove_character_flag = local_ruler + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Divine Thief +tgp_east_asia_mandala_task_contract_events.4400 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4400.t + desc = tgp_east_asia_mandala_task_contract_events.4400.desc + theme = mandala + override_background = market + + left_portrait = { + character = root + animation = disapproval + camera = camera_event_scheme_center_look_right + } + center_portrait = { + character = scope:local_character + animation = anger + camera = camera_event_scheme_center + } + right_portrait = { + character = scope:local_character_2 + animation = beg + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + create_character = { + template = criminal_fingers_character + location = scope:ritual_location + culture = scope:ritual_location.culture + age = root.age + faith = scope:ritual_location.faith + gender_female_chance = { + if = { + limit = { + root = { is_male = yes } + } + value = 0 + } + else = { + value = 100 + } + } + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + hidden_effect = { + scope:local_character = { + add_character_flag = created + copy_inheritable_appearance_from = root + add_intrigue_skill = 14 + force_character_skill_recalculation = yes + remove_trait = scaly + remove_trait = dwarf + remove_trait = giant + remove_trait = albino + if = { + limit = { + root = { + has_trait = scaly + } + } + add_trait = scaly + } + if = { + limit = { + root = { + has_trait = dwarf + } + } + add_trait = dwarf + } + if = { + limit = { + root = { + has_trait = giant + } + } + add_trait = giant + } + if = { + limit = { + root = { + has_trait = albino + } + } + add_trait = albino + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4400.a + + big_mandala_piety_reward_effect = yes + big_mandala_legitimacy_reward_effect = yes + + duel = { + skill = intrigue + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4400.t + left_icon = scope:local_character + right_icon = scope:ritual_location.county + scope:ritual_location.county = { + add_county_modifier = { + modifier = omnipresent_authority_modifier + years = 20 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4400.t + left_icon = scope:local_character + right_icon = scope:ritual_location.county + + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 10 + } + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4400.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character + NEW_COURT_OWNER = root + } + + duel = { + skill = intrigue + value = low_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4400.t + left_icon = root + right_icon = scope:local_character + if = { + limit = { + can_add_hook = { + type = loyalty_hook + target = scope:local_character + } + } + add_hook = { + type = loyalty_hook + target = scope:local_character + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4400.t + left_icon = root + right_icon = scope:local_character + + scope:local_character = { + add_pressed_claim = root.primary_title + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4400.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Trickster's Trial +tgp_east_asia_mandala_task_contract_events.4500 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4500.t + desc = tgp_east_asia_mandala_task_contract_events.4500.desc + theme = mandala + override_background = market + override_effect_2d = { reference = rain } + + left_portrait = { + character = root + animation = wedding_priest + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = stress + camera = camera_event_scheme_vs_center_positioned_left + } + right_portrait = { + character = scope:local_character_2 + animation = paranoia + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + age >= 45 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + age >= 45 + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + age <= 12 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + age <= 12 + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = peasant_young_child_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4500.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + random = { + chance = { + value = 50 + subtract = root.intrigue + min = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4500.t + left_icon = root + right_icon = scope:ritual_location.county + scope:local_character_2 = { + increase_wounds_effect = { REASON = accident } + } + add_prestige = medium_prestige_loss + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 10 + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4500.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + random = { + chance = { + value = 30 + subtract = root.intrigue + min = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4500.t + left_icon = root + right_icon = scope:ritual_location.county + add_prestige = minor_prestige_loss + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 5 + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4500.c + + small_mandala_piety_reward_effect = yes + random = { + chance = { + value = 15 + subtract = root.intrigue + min = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4500.t + left_icon = root + right_icon = scope:ritual_location.county + scope:ritual_location.county = { + add_county_modifier = { + modifier = upset_peasants_modifier + years = 3 + } + } + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Festival of Reversal +tgp_east_asia_mandala_task_contract_events.4600 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4600.t + desc = tgp_east_asia_mandala_task_contract_events.4600.desc + theme = mandala + override_background = tgp_wedding_ceremony_asia + + left_portrait = { + character = root + animation = pondering + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character_2 + animation = dancing + camera = camera_event_center_pointing_left + } + right_portrait = { + character = scope:local_character + animation = instrument_active + camera = camera_event_scheme_center + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + age <= 12 + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + age <= 12 + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = peasant_young_child_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + scope:local_character = { + add_character_flag = high_noble_clothing + remove_character_flag = peasant_outfit + } + scope:local_character_2 = { + add_character_flag = high_noble_clothing + remove_character_flag = peasant_outfit + add_character_flag = wear_makuta + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4600.a + + add_character_flag = { + flag = peasant_outfit + days = 14 + } + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 14 } + } + + random = { + chance = { + value = 50 + subtract = root.intrigue + min = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4600.t + left_icon = root + add_prestige = major_prestige_loss + add_stress = medium_stress_impact_gain + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4600.b + + add_character_flag = { + flag = need_military_outfit + days = 14 + } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + current_travel_plan = { + hidden_effect = { + resume_travel_plan = yes + } + delay_travel_plan = { days = 14 } + } + + random = { + chance = { + value = 30 + subtract = root.intrigue + min = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4600.t + left_icon = root + add_prestige = minor_prestige_loss + add_stress = minor_stress_impact_gain + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4600.c + + small_mandala_piety_reward_effect = yes + + hidden_effect = { + current_travel_plan ?= { + resume_travel_plan = yes + } + } + + ai_chance = { + base = 40 + } + } + + after = { + hidden_effect = { + scope:task_contract = { complete_task_contract = common_mandala } + } + add_character_flag = recently_completed_mandala_contract + scope:local_character = { + remove_character_flag = high_noble_clothing + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + remove_character_flag = high_noble_clothing + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Goat Oracle +tgp_east_asia_mandala_task_contract_events.4700 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4700.t + desc = tgp_east_asia_mandala_task_contract_events.4700.desc + theme = mandala + override_background = market + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = shepherd_with_sheep + camera = camera_event_scheme_left + } + right_portrait = { + character = scope:local_character_2 + animation = betting + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = criminal_brains_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + hidden_effect = { + scope:local_character = { + add_character_flag = created + add_intrigue_skill = 12 + force_character_skill_recalculation = yes + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4700.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + scope:ritual_location = { + add_province_modifier = { + modifier = goat_oracle_modifier + years = 12 + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4700.b + + small_mandala_piety_reward_effect = yes + + add_to_entourage_court_and_activity_effect = { + CHAR_TO_ADD = scope:local_character_2 + NEW_COURT_OWNER = root + } + + capital_province = { + add_province_modifier = { + modifier = goat_oracle_modifier + years = 12 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4700.c + + small_mandala_piety_reward_effect = yes + + scope:local_character = { + add_stress = major_stress_impact_gain + } + + scope:ritual_location.county = { + add_county_modifier = { + modifier = punished_charlatan_modifier + years = 12 + } + } + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Beasts in the Jungle +tgp_east_asia_mandala_task_contract_events.4800 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4800.t + desc = tgp_east_asia_mandala_task_contract_events.4800.desc + theme = mandala + override_background = wilderness + override_effect_2d = { reference = fog } + + left_portrait = { + character = root + animation = eavesdrop + camera = camera_event_scheme_center + } + center_portrait = { + character = scope:local_character + animation = paranoia + camera = camera_event_scheme_center_forward + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = neighboring_county + } + } + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = neighboring_county + } + } + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4800.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + duel = { + skill = intrigue + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + hidden_effect = { + random_list = { + 50 = { + create_artifact_animal_hide_effect = { + OWNER = root + HUNTER = root + LEGENDARY = no + ANIMAL = flag:none + } + } + 50 = { + create_artifact_animal_trinket_effect = { + OWNER = root + HUNTER = root + LEGENDARY = no + ANIMAL = flag:none + } + } + } + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = root + right_icon = scope:newly_created_artifact + + custom_tooltip = gain_hunt_artifact_tt + show_as_tooltip = { + scope:newly_created_artifact ?= { + set_owner = root + } + } + scope:ritual_location.county = { + add_county_modifier = { + modifier = beast_free_modifier + years = 15 + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = root + right_icon = scope:local_character_2 + + increase_wounds_effect = { REASON = accident } + add_stress = medium_stress_impact_gain + scope:local_character = { + death = { death_reason = death_maimed_by_wild_beast } + } + } + } + } + + stress_impact = { + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + has_trait = craven + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4800.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + if = { + limit = { + scope:neighboring_county.holder != root + } + reverse_add_opinion = { + modifier = annoyed_opinion + target = scope:neighboring_county.holder + opinion = -50 + } + } + + scope:neighboring_county = { + add_county_modifier = { + modifier = brimming_with_beasts_modifier + years = 15 + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4800.c + + small_mandala_piety_reward_effect = yes + + scope:ritual_location.county = { + add_county_modifier = { + modifier = brimming_with_beasts_modifier + years = 15 + } + } + + stress_impact = { + brave = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + has_trait = brave + factor = 0 + } + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# River Naga +tgp_east_asia_mandala_task_contract_events.4900 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.4900.t + desc = tgp_east_asia_mandala_task_contract_events.4900.desc + theme = mandala + override_background = bp3_riverside + override_effect_2d = { reference = fog } + + left_portrait = { + character = scope:local_character + animation = horse_exhausted + camera = camera_event_horse_very_left + } + center_portrait = { + character = scope:entourage_character + animation = jockey_walk + camera = camera_event_horse_very_left + } + right_portrait = { + character = root + animation = horse_surveying + camera = camera_event_horse_very_left + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = neighboring_county + } + } + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + county = { + random_neighboring_county = { + limit = { + holder = { + is_ai = yes + } + } + weight = { + base = 1 + modifier = { + add = 100 + holder = { + NOR = { + top_liege ?= root + top_suzerain ?= root + } + } + } + } + save_scope_as = neighboring_county + } + } + } + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + limit = { + is_physically_able_adult = yes + } + save_scope_as = entourage_character + } + } + if = { + limit = { + NOT = { + exists = scope:entourage_character + } + } + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = entourage_character + after_creation = { + add_character_flag = created + } + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:ritual_location.faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4900.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + duel = { + skill = intrigue + value = high_skill_rating + 5 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4900.t + left_icon = root + right_icon = scope:entourage_character + + add_character_modifier = { + modifier = 6140_pet_modifier + years = 30 + } + } + } + 45 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4900.t + left_icon = root + right_icon = scope:entourage_character + + add_gold = minor_gold_value + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.4900.t + left_icon = scope:local_character + right_icon = scope:entourage_character + + increase_wounds_effect = { REASON = hunting_accident } + + scope:entourage_character = { + death = { death_reason = death_maimed_by_wild_beast } + } + + scope:local_character = { + death = { death_reason = death_maimed_by_wild_beast } + } + + scope:ritual_location = { + add_province_modifier = { + modifier = river_crocodile_god_modifier + years = 25 + } + } + } + } + } + + stress_impact = { + craven = medium_stress_impact_gain + } + + ai_chance = { + base = 40 + modifier = { + has_trait = craven + factor = 0 + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.4900.b + + trigger = { + exists = scope:neighboring_county + } + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.4900.c + + small_mandala_piety_reward_effect = yes + scope:ritual_location = { + add_province_modifier = { + modifier = river_crocodile_god_modifier + years = 25 + } + } + + stress_impact = { + brave = medium_stress_impact_gain + } + + ai_chance = { + base = 100 + modifier = { + has_trait = brave + factor = 0 + } + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:entourage_character = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Promised Land +tgp_east_asia_mandala_task_contract_events.5000 = { + type = character_event + window = big_event_window + title = tgp_east_asia_mandala_task_contract_events.5000.t + desc = tgp_east_asia_mandala_task_contract_events.5000.desc + theme = mandala + override_background = wilderness + override_effect_2d = { reference = fog } + + left_portrait = { + character = root + animation = interested + } + center_portrait = { + character = scope:local_character + animation = survey_staff + camera = camera_event_scheme_right + } + right_portrait = { + character = scope:local_character_2 + animation = stress + camera = camera_event_scheme_far_right + } + immediate = { + # Plus, stop us whilst we're here. + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + capital_county = { save_scope_as = ruler_capital_county } + scope:task_contract.task_contract_location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + if = { + limit = { + NOT = { + exists = scope:ritual_location + } + } + root.location = { + save_scope_as = ritual_location + save_scope_as = background_terrain_scope + } + } + current_travel_plan = { + random_entourage_character = { + save_scope_as = entourage_character + } + } + + + random_list = { + 50 = { + religion:buddhism_religion = { + random_faith = { + limit = { + NOR = { + this = root.faith + this = faith:dhyana + this = faith:pundarika + this = faith:vinaya + this = faith:avatamsaka + this = faith:sukhavati + this = faith:acharya + this = faith:mantrayana + this = faith:maitreya + this = faith:yogacara + } + } + save_scope_as = character_faith + } + } + } + 50 = { + religion:hinduism_religion = { + random_faith = { + limit = { + this != root.faith + this != faith:lamaism + } + save_scope_as = character_faith + } + } + } + } + # Local character + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + faith = scope:character_faith + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + faith = scope:character_faith + } + save_scope_as = local_character + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:character_faith + save_scope_as = local_character + after_creation = { + add_character_flag = created + } + } + } + # Local character 2 + if = { + limit = { + any_pool_character = { + province = scope:ritual_location + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + faith = scope:character_faith + this != scope:local_character + } + } + random_pool_character = { + province = scope:ritual_location + limit = { + is_available_healthy_ai_adult = yes + has_no_particular_noble_roots_trigger = yes + faith = scope:character_faith + this != scope:local_character + } + save_scope_as = local_character_2 + } + } + else = { + create_character = { + template = generic_peasant_character + location = scope:ritual_location + culture = scope:ritual_location.culture + faith = scope:character_faith + save_scope_as = local_character_2 + after_creation = { + add_character_flag = created + } + } + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.5000.a + + big_mandala_piety_reward_effect = yes + mandala_legitimacy_reward_effect = yes + + hidden_effect = { + scope:local_character = { + move_to_pool_at = root.capital_province + } + + scope:local_character_2 = { + move_to_pool_at = root.capital_province + } + } + + duel = { + skill = intrigue + value = high_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = scope:local_character + right_icon = scope:local_character_2 + + root.capital_county = { + change_development_level = 2 + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = scope:local_character + right_icon = scope:local_character_2 + + root.capital_county = { + change_development_level = 2 + set_county_faith = scope:local_character.faith + } + } + } + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_east_asia_mandala_task_contract_events.5000.b + + mandala_piety_reward_effect = yes + small_mandala_legitimacy_reward_effect = yes + + duel = { + skill = intrigue + value = medium_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = scope:local_character + right_icon = scope:local_character_2 + + scope:ritual_location = { + if = { + limit = { + province_has_no_holding_trigger = yes + } + begin_create_holding = { + type = temple_citadel_holding + } + } + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -1 + } + send_interface_toast = { + title = tgp_east_asia_mandala_task_contract_events.5000.t + left_icon = scope:local_character + right_icon = scope:local_character_2 + + scope:ritual_location = { + if = { + limit = { + province_has_no_holding_trigger = yes + } + begin_create_holding = { + type = temple_citadel_holding + } + } + } + scope:ritual_location.county = { + set_county_faith = scope:local_character.faith + } + } + } + } + + ai_chance = { + base = 100 + } + } + option = { + name = tgp_east_asia_mandala_task_contract_events.5000.c + + small_mandala_piety_reward_effect = yes + + ai_chance = { + base = 100 + } + } + + after = { + mandala_contract_complete_contract_effect = yes + scope:local_character = { + silent_disappearance_ai_if_created_effect = yes + } + scope:local_character_2 = { + silent_disappearance_ai_if_created_effect = yes + } + } +} diff --git a/events/dlc/tgp/tgp_mentoring_scheme_events.txt b/events/dlc/tgp/tgp_mentoring_scheme_events.txt new file mode 100644 index 00000000..b8e41efb --- /dev/null +++ b/events/dlc/tgp/tgp_mentoring_scheme_events.txt @@ -0,0 +1,372 @@ +######################### +# MENTORING SCHEME EVENTS +######################### +namespace = mentoring_scheme_event + +# Outcome event - Become better at whatever you studied +mentoring_scheme_event.0001 = { + hidden = yes + + immediate = { + send_interface_message = { + type = mentoring_scheme_good_message + title = mentoring_success_message + left_icon = scope:target + + ## Base + # Merit + if = { + limit = { + scope:scheme = { has_variable = mentoring_merit } + } + change_merit = { + value = 10 + multiply = { + value = scope:target.merit_level + subtract = merit_level + } + } + } + # Confucian Education + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_confucian_education } + } + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = 2 + } + } + else = { + add_trait = confucian_education + } + } + ## Commander Traits + # Logistician + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_logistician } + } + if = { + limit = { + has_trait = logistician + } + add_trait_xp = { + trait = logistician + value = 5 + } + } + else = { + add_trait = logistician + } + } + # Military Engineer + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_military_engineer } + } + if = { + limit = { + has_trait = military_engineer + } + add_trait_xp = { + trait = military_engineer + value = 5 + } + } + else = { + add_trait = military_engineer + } + } + # Aggressive Attacker + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_aggressive_attacker } + } + if = { + limit = { + has_trait = aggressive_attacker + } + add_trait_xp = { + trait = aggressive_attacker + value = 5 + } + } + else = { + add_trait = aggressive_attacker + } + } + # Unyielding Defender + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_unyielding_defender } + } + if = { + limit = { + has_trait = unyielding_defender + } + add_trait_xp = { + trait = unyielding_defender + value = 5 + } + } + else = { + add_trait = unyielding_defender + } + } + # Forder + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_forder } + } + if = { + limit = { + has_trait = forder + } + add_trait_xp = { + trait = forder + value = 5 + } + } + else = { + add_trait = forder + } + } + # Flexible Leader + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_flexible_leader } + } + if = { + limit = { + has_trait = flexible_leader + } + add_trait_xp = { + trait = flexible_leader + value = 5 + } + } + else = { + add_trait = flexible_leader + } + } + # Desert Warrior + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_desert_warrior } + } + if = { + limit = { + has_trait = desert_warrior + } + add_trait_xp = { + trait = desert_warrior + value = 5 + } + } + else = { + add_trait = desert_warrior + } + } + # Jungle Stalker + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_jungle_stalker } + } + if = { + limit = { + has_trait = jungle_stalker + } + add_trait_xp = { + trait = jungle_stalker + value = 5 + } + } + else = { + add_trait = jungle_stalker + } + } + # Reaver + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_reaver } + } + if = { + limit = { + has_trait = reaver + } + add_trait_xp = { + trait = reaver + value = 5 + } + } + else = { + add_trait = reaver + } + } + # Reckless + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_reckless } + } + if = { + limit = { + has_trait = reckless + } + add_trait_xp = { + trait = reckless + value = 5 + } + } + else = { + add_trait = reckless + } + } + # Holy Warrior + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_holy_warrior } + } + if = { + limit = { + has_trait = holy_warrior + } + add_trait_xp = { + trait = holy_warrior + value = 5 + } + } + else = { + add_trait = holy_warrior + } + } + # Open Terrain Expert + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_open_terrain_expert } + } + if = { + limit = { + has_trait = open_terrain_expert + } + add_trait_xp = { + trait = open_terrain_expert + value = 5 + } + } + else = { + add_trait = open_terrain_expert + } + } + # Rough Terrain Expert + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_rough_terrain_expert } + } + if = { + limit = { + has_trait = rough_terrain_expert + } + add_trait_xp = { + trait = rough_terrain_expert + value = 5 + } + } + else = { + add_trait = rough_terrain_expert + } + } + # Forest Fighter + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_forest_fighter } + } + if = { + limit = { + has_trait = forest_fighter + } + add_trait_xp = { + trait = forest_fighter + value = 5 + } + } + else = { + add_trait = forest_fighter + } + } + # Cautious Leader + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_cautious_leader } + } + if = { + limit = { + has_trait = cautious_leader + } + add_trait_xp = { + trait = cautious_leader + value = 5 + } + } + else = { + add_trait = cautious_leader + } + } + # Organizer + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_organizer } + } + if = { + limit = { + has_trait = organizer + } + add_trait_xp = { + trait = organizer + value = 5 + } + } + else = { + add_trait = organizer + } + } + # Winter Soldier + else_if = { + limit = { + scope:scheme = { has_variable = mentoring_winter_soldier } + } + if = { + limit = { + has_trait = winter_soldier + } + add_trait_xp = { + trait = winter_soldier + value = 5 + } + } + else = { + add_trait = winter_soldier + } + } + } + } +} + +# Outcome event - You did not make progress +mentoring_scheme_event.0002 = { + hidden = yes + + immediate = { + send_interface_message = { + type = mentoring_scheme_bad_message + title = mentoring_failure_message + left_icon = scope:target + + custom_tooltip = mentoring_failure_message_desc + } + } +} diff --git a/events/dlc/tgp/tgp_movement_events.txt b/events/dlc/tgp/tgp_movement_events.txt new file mode 100644 index 00000000..ec748291 --- /dev/null +++ b/events/dlc/tgp/tgp_movement_events.txt @@ -0,0 +1,3699 @@ +namespace = tgp_movement_events + +################################################################################### +## By Veronica Pazos +## tgp_movement_events.0001 - Marshal urges you to prepare for Expansion +## tgp_movement_events.0010 - Try to convince an undecided ruler to join your movement +## tgp_movement_events.0020 - Another Advancement member wants to focus on innovations +## tgp_movement_events.0030 - Movement member sends you a letter asking for support +## tgp_movement_events.0040 - Hegemon sends envoy thanking you for being Pro-Song +## tgp_movement_events.0050 - Elder takes interest in you +## tgp_movement_events.0060 - Antagonize another movement +## tgp_movement_events.0070 - Councillor of your highest skill helps you study +## tgp_movement_events.0080 - Family member asks you to focus on your family +## tgp_movement_events.0090 - Movement member wants to make amends +## tgp_movement_events.0100 - Ask a Movement Leader to abandon their Movement +## tgp_movement_events.0110 - Movement member sends you some books +## tgp_movement_events.0120 - Movement member teaches you Confucianism +## tgp_movement_events.0130 - Movement member teaches you the language of the capital +## tgp_movement_events.0140 - Disciple brings you a gift +## tgp_movement_events.0150 - Shinto visitor at court +## tgp_movement_events.0160 - Promise Movement leader to not scheme against each other +################################################################################### + +# Marshal urges you to prepare for Expansion +tgp_movement_events.0001 = { + type = character_event + title = tgp_movement_events.0001.t + desc = tgp_movement_events.0001.desc + left_portrait = { + character = root + animation = interested + } + right_portrait = { + character = scope:marshal + animation = relaxed_spear + } + theme = dynastic_cycle + override_background = { reference = courtyard } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + participant_group_type = expansion_movement + } + NOT = { + situation:dynastic_cycle ?= { + situation_current_phase = situation_dynastic_cycle_phase_stability_expansion + } + } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + if = { + limit = { + exists = cp:councillor_marshal + cp:councillor_marshal = { + is_available_healthy_ai_adult = yes + is_ruler = no + } + } + cp:councillor_marshal = { save_scope_as = marshal } + } + else_if = { + limit = { + any_knight = { + is_available_healthy_ai_adult = yes + is_ruler = no + } + } + ordered_knight = { + limit = { + is_available_healthy_ai_adult = yes + is_ruler = no + } + order_by = martial + save_scope_as = marshal + } + } + else = { + hidden_effect_new_object = { + create_character = { + template = knight + dynasty = none + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = marshal + } + } + } + scope:marshal = { + assign_quirk_effect = yes + add_character_flag = need_military_outfit + hidden_effect = { + if = { + limit = { NOT = { is_courtier_of = root } } + root = { add_courtier = prev } + } + } + } + } + + option = { # Get a military trait + name = tgp_movement_events.0001.aa + trigger = { + vassal_contract_has_flag = celestial_military_appointment + number_of_commander_traits < 3 + } + add_internal_flag = special + reason = celestial_military_appointment + custom_tooltip = { + text = tgp_movement_events.0001.c.tt + give_random_commander_trait_effect = yes + } + stress_impact = { + diligent = medium_stress_impact_loss + brave = medium_stress_impact_loss + lazy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = diligent + has_trait = brave + } + factor = 2 + } + modifier = { + OR = { + has_trait = ambitious + has_trait = lazy + } + factor = 0 + } + } + } + + option = { # Get movement power + name = tgp_movement_events.0001.a + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } + + option = { # Get influence + name = tgp_movement_events.0001.b + change_influence = medium_influence_gain + stress_impact = { + deceitful = medium_stress_impact_loss + honest = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 2 + } + modifier = { + has_trait = honest + factor = 0 + } + } + } + + option = { # Just some martial XP + name = tgp_movement_events.0001.c + trigger = { + NOT = { vassal_contract_has_flag = celestial_military_appointment } + } + add_martial_lifestyle_xp = medium_lifestyle_xp + stress_impact = { + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_lifestyle = martial_lifestyle + factor = 3 + } + modifier = { + has_trait = ambitious + factor = 0 + } + } + } +} + +# Try to convince an undecided ruler to join your movement +scripted_trigger tpg_movement_events_0010_valid_ruler = { + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + participant_group_type = undecided_movement + } + opinion = { + target = root + value >= 0 + } +} + +scripted_trigger tgp_movement_events_0010_valid_courtier = { + is_available_healthy_ai_adult = yes + is_councillor = no + NOT = { is_close_family_or_spouse_trigger = { CHARACTER = scope:other_ruler } } +} + +tgp_movement_events.0010 = { + type = character_event + title = tgp_movement_events.0010.t + desc = tgp_movement_events.0010.desc + left_portrait = { + character = root + animation = debating + } + right_portrait = { + character = scope:courtier + animation = interested + } + lower_right_portrait = scope:other_ruler + theme = dynastic_cycle + override_background = { reference = courtyard } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + OR = { + participant_group_type = expansion_movement + participant_group_type = advancement_movement + participant_group_type = pro_hegemon_movement + participant_group_type = conservative_movement + } + } + any_ruler = { + tpg_movement_events_0010_valid_ruler = yes + } + } + + immediate = { + assign_quirk_effect = yes + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0010_valid_ruler = yes } + weight = { + base = 1 + modifier = { + is_close_family_of = root + add = 10 + } + modifier = { + is_extended_family_of = root + add = 5 + } + modifier = { + OR = { + has_relation_friend = root + has_relation_lover = root + } + add = 5 + } + } + save_scope_as = other_ruler + if = { + limit = { + any_courtier = { tgp_movement_events_0010_valid_courtier = yes } + } + ordered_courtier = { + limit = { + tgp_movement_events_0010_valid_courtier = yes + } + order_by = diplomacy + set_location = root.location + save_scope_as = courtier + } + } + else = { + hidden_effect_new_object = { + create_character = { + location = root.location + template = diplomacy_court_position_holder_template + gender_female_chance = root_soldier_female_chance + faith = scope:other_ruler.capital_county.faith + culture = scope:other_ruler.capital_county.culture + save_scope_as = courtier + } + } + hidden_effect = { + add_courtier = scope:courtier + } + } + } + } + + option = { # They switch movements + name = tgp_movement_events.0010.a + change_influence = medium_influence_gain + duel = { + skill = diplomacy + value = average_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_movement_events.0010.a.success + send_interface_toast = { + title = tgp_movement_events.0010.a.success + left_icon = scope:other_ruler + tgp_dynastic_cycle_add_to_movement_effect = { CHAR = scope:other_ruler } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_movement_events.0010.a.failure + send_interface_toast = { + title = tgp_movement_events.0010.a.failure + left_icon = scope:other_ruler + scope:other_ruler = { + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -5 + } + } + } + } + } + stress_impact = { + arrogant = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = arrogant + factor = 2 + } + } + } + + option = { # You get Movement Power + name = tgp_movement_events.0010.b + custom_tooltip = event_increased_personal_movement_power_tt + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_major_value + } + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } + + option = { # Get Merit + name = tgp_movement_events.0010.c + change_merit = medium_merit_gain + scope:other_ruler = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } +} + +# Another Advancement member wants to focus on innovations +scripted_trigger tpg_movement_events_0020_valid_ruler = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + culture = root.culture +} + +tgp_movement_events.0020 = { + type = character_event + title = tgp_movement_events.0020.t + desc = tgp_movement_events.0020.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arbitrary + has_trait = arrogant + has_trait = ambitious + } + } + animation = dismissal + } + animation = interested + camera = camera_event_crowd + } + right_portrait = { + character = scope:courtier + animation = gongshou + } + lower_right_portrait = scope:other_ruler + theme = dynastic_cycle + override_background = { reference = throne_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + participant_group_type = advancement_movement + } + any_ruler = { + tpg_movement_events_0020_valid_ruler = yes + } + } + + immediate = { + culture = { save_scope_as = my_culture } + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0020_valid_ruler = yes } + save_scope_as = other_ruler + if = { + limit = { + any_courtier = { tgp_movement_events_0010_valid_courtier = yes } + } + ordered_courtier = { + limit = { + tgp_movement_events_0010_valid_courtier = yes + } + order_by = diplomacy + set_location = root.location + save_scope_as = courtier + } + } + else = { + hidden_effect_new_object = { + create_character = { + location = root.location + template = diplomacy_court_position_holder_template + gender_female_chance = root_soldier_female_chance + faith = scope:other_ruler.capital_county.faith + culture = scope:other_ruler.capital_county.culture + save_scope_as = courtier + } + } + hidden_effect = { + add_courtier = scope:courtier + } + } + } + scope:courtier = { assign_quirk_effect = yes } + } + + option = { # Get extra bonuses + name = tgp_movement_events.0020.aa + trigger = { + has_trait = architect + NOT = { has_character_modifier = tgp_advancement_innovations_modifier } + } + add_character_modifier = tgp_advancement_innovations_modifier # Forever + scope:my_culture = { + add_fascination_progress = 5 + } + if = { + limit = { + is_ai = no + has_any_nickname = no + } + random = { + chance = 25 + give_nickname = nick_the_wise + } + } + stress_impact = { + diligent = medium_stress_impact_loss + brave = medium_stress_impact_loss + ambitious = medium_stress_impact_gain + lazy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = diligent + has_trait = brave + } + factor = 2 + } + modifier = { + OR = { + has_trait = ambitious + has_trait = lazy + } + factor = 0 + } + } + } + + option = { # Get Innovation Progress + name = tgp_movement_events.0020.a + trigger = { + NOT = { has_trait = architect } + } + scope:my_culture = { + add_fascination_progress = 5 + } + custom_tooltip = event_decrease_movement_power_minor_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_decrease_movement_power_minor_value + } + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + diligent = medium_stress_impact_loss + humble = medium_stress_impact_loss + } + ai_chance = { + base = 50 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 2 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 0 + } + } + } + + option = { # Focus on movement + name = tgp_movement_events.0020.b + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + diligent = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 0 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 2 + } + } + } + + option = { # Get Merit + name = tgp_movement_events.0020.c + change_merit = medium_merit_gain + stress_impact = { + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_lifestyle = learning_lifestyle + factor = 2 + } + modifier = { + has_trait = diligent + factor = 2 + } + } + } +} + +# Movement member sends you a letter asking for support +scripted_trigger tpg_movement_events_0030_valid_ruler = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + opinion = { + target = root + value >= 0 + } +} + +tgp_movement_events.0030 = { + type = letter_event + opening = tgp_movement_events.0030.opening + desc = tgp_movement_events.0030.desc + sender = scope:other_ruler + + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = top_participant_group:dynastic_cycle + any_ruler = { tpg_movement_events_0030_valid_ruler = yes } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0030_valid_ruler = yes } + weight = { + base = 1 + modifier = { + has_relation_potential_friend = root + add = 25 + } + modifier = { + is_close_family_of = root + add = 10 + } + modifier = { + is_extended_family_of = root + add = 5 + } + modifier = { + OR = { + has_relation_friend = root + has_relation_lover = root + has_relation_disciple = root + } + add = 5 + } + } + save_scope_as = other_ruler + } + } + + option = { # Sure + name = tgp_movement_events.0030.a + change_merit = medium_merit_gain + scope:other_ruler = { change_merit = medium_merit_gain } + progress_towards_friend_effect = { + REASON = friend_same_movement_reason + CHARACTER = scope:other_ruler + OPINION = default_friend_opinion + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = gregarious + has_trait = generous + } + factor = 2 + } + } + } + + option = { # Nah + name = tgp_movement_events.0030.b + change_influence = major_influence_gain + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = deceitful + has_trait = callous + has_trait = arrogant + } + factor = 2 + } + } + } +} + +# Hegemon sends envoy thanking you for being Pro-Song +scripted_trigger tgp_movement_events_0040_valid_courtier = { + is_available_healthy_ai_adult = yes + is_councillor = no + NOT = { is_close_family_or_spouse_trigger = { CHARACTER = scope:hegemon } } + can_be_combatant_based_on_gender_trigger = { ARMY_OWNER = scope:hegemon } +} + +tgp_movement_events.0040 = { + type = character_event + title = tgp_movement_events.0040.t + desc = tgp_movement_events.0040.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arbitrary + has_trait = arrogant + has_trait = ambitious + } + } + animation = dismissal + } + animation = interested + camera = camera_event_left_crowning_observation + } + right_portrait = { + character = scope:courtier + animation = gongshou_with_hu + } + lower_right_portrait = scope:hegemon + theme = dynastic_cycle + override_background = { reference = throne_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + participant_group_type = pro_hegemon_movement + } + exists = title:h_china.holder # There's an Hegemon + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + title:h_china.holder = { + save_scope_as = hegemon + if = { + limit = { + any_courtier = { tgp_movement_events_0040_valid_courtier = yes } + } + ordered_courtier = { + limit = { + tgp_movement_events_0040_valid_courtier = yes + } + order_by = diplomacy + set_location = root.location + save_scope_as = courtier + } + } + else = { + hidden_effect_new_object = { + create_character = { + location = root.location + template = diplomacy_court_position_holder_template + gender_female_chance = root_soldier_female_chance + faith = scope:hegemon.capital_county.faith + culture = scope:hegemon.capital_county.culture + save_scope_as = courtier + } + } + hidden_effect = { + add_courtier = scope:courtier + } + } + } + } + + option = { # Yippieeee + name = tgp_movement_events.0040.a + custom_tooltip = event_increase_movement_power_major_effect_tooltip + change_influence = minor_influence_gain + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_major_value + } + } + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + diligent = medium_stress_impact_loss + humble = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 2 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 0 + } + } + } + + option = { # I will always be loyal! + name = tgp_movement_events.0040.b + custom_tooltip = { + text = dynastic_cycle_cannot_leave_movement_tt + set_variable = { + name = dynastic_cycle_cannot_leave_movement_var + years = 15 + } + } + add_character_modifier = { + modifier = tgp_loyal_subject_modifier + years = 15 + } + stress_impact = { + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + diligent = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 0 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 2 + } + } + } + + option = { # Please please please tell everyone + name = tgp_movement_events.0040.c + add_prestige = medium_prestige_gain + every_vassal = { + limit = { has_vassal_stance = courtly } + custom = every_courtly_vassal + add_opinion = { + target = root + modifier = admiration_opinion + opinion = 15 + } + } + stress_impact = { + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_lifestyle = learning_lifestyle + factor = 2 + } + modifier = { + has_trait = diligent + factor = 2 + } + } + } +} + +# Elder takes interest in you +scripted_trigger tgp_movement_events_0050_valid_elder = { + is_available_healthy_ai_adult = yes + government_allows = merit + merit_level >= root.merit_level + OR = { + merit_level >= merit_level_expected_empire_value + has_trait = confucian_education + } + top_liege = root.top_liege # Someone that makes sense + NOR = { + this = root.liege + this = root.top_liege + } +} + +tgp_movement_events.0050 = { + type = character_event + title = tgp_movement_events.0050.t + desc = { + desc = tgp_movement_events.0050.desc.intro + first_valid = { + triggered_desc = { + trigger = { highest_skill = diplomacy } + desc = tgp_movement_events.0050.desc.diplomacy + } + triggered_desc = { + trigger = { highest_skill = stewardship } + desc = tgp_movement_events.0050.desc.stewardship + } + triggered_desc = { + trigger = { highest_skill = intrigue } + desc = tgp_movement_events.0050.desc.intrigue + } + triggered_desc = { + trigger = { highest_skill = learning } + desc = tgp_movement_events.0050.desc.learning + } + triggered_desc = { + trigger = { highest_skill = martial } + desc = tgp_movement_events.0050.desc.martial + } + } + desc = tgp_movement_events.0050.desc.outro + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = content + has_trait = craven + stress_level >= 1 + } + } + animation = worry + } + animation = interested + } + right_portrait = { + character = scope:new_elder + animation = debating + } + lower_left_portrait = { + trigger = { exists = scope:old_elder } + character = scope:old_elder + } + theme = merit + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_allows = merit # Not Celestial specific + OR = { # You're good or a player + AND = { + is_ai = no + has_any_decent_skill_rating = yes + } + has_any_high_skill_rating = yes + } + NOT = { any_relation = { type = disciple } } # You're not an elder yourself + OR = { # You don't have an elder or they're pretty bad + NOT = { any_relation = { type = elder } } + any_relation = { + type = elder + OR = { + merit_level <= root.merit_level + merit_level <= merit_level_expected_empire_value + } + } + } + any_ruler = { + tgp_movement_events_0050_valid_elder = yes + } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + if = { + limit = { + any_relation = { type = elder } + } + random_relation = { + type = elder + save_scope_as = old_elder + } + } + random_ruler = { + limit = { tgp_movement_events_0050_valid_elder = yes } + weight = { + base = 1 + modifier = { + has_same_highest_skill = { CHARACTER = root } + add = 100 + } + } + save_scope_as = new_elder + } + } + + option = { # Get a new Elder + name = tgp_movement_events.0050.a + if = { + limit = { exists = scope:old_elder } + remove_relation_disciple = scope:old_elder + scope:old_elder = { + add_opinion = { + target = root + modifier = disappointed_opinion + opinion = -10 + } + } + } + scope:new_elder = { set_relation_disciple = root } + change_merit = medium_merit_gain + stress_impact = { + ambitious = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + diligent = medium_stress_impact_loss + humble = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 2 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 0 + } + } + } + + option = { # I will ALWAYS be loyal to old_elder + name = tgp_movement_events.0050.b + trigger = { exists = scope:old_elder } + add_prestige = minor_prestige_gain + scope:old_elder = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 20 + } + } + if = { + limit = { NOT = { has_trait = loyal } } + add_trait = loyal + } + stress_impact = { + ambitious = medium_stress_impact_loss + arrogant = medium_stress_impact_loss + diligent = medium_stress_impact_gain + humble = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = arrogant + } + factor = 0 + } + modifier = { + OR = { + has_trait = diligent + has_trait = humble + } + factor = 2 + } + } + } + + option = { # I need to focus on STUDYING + name = tgp_movement_events.0050.c + gain_appropriate_lifestyle_major_xp_effect = yes + stress_impact = { + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_lifestyle = learning_lifestyle + factor = 2 + } + modifier = { + has_trait = diligent + factor = 2 + } + } + } +} + +# Antagonize another movement +scripted_trigger tgp_movement_events_0060_valid_rival = { + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { + participant_group_type = undecided_movement + } + trigger_if = { + limit = { + exists = root.top_participant_group:dynastic_cycle + } + this != root.top_participant_group:dynastic_cycle + } + } + opinion = { + target = root + value <= -10 + } +} + +tgp_movement_events.0060 = { + type = character_event + title = tgp_movement_events.0060.t + desc = tgp_movement_events.0060.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = calm + } + } + animation = stress + } + animation = scheme + } + lower_right_portrait = { + character = scope:rival + } + theme = dynastic_cycle + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + any_ruler = { + tgp_movement_events_0060_valid_rival = yes + } + } + + immediate = { + assign_quirk_effect = yes + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tgp_movement_events_0060_valid_rival = yes } + weight = { + base = 1 + modifier = { + OR = { + has_relation_potential_rival = root + has_relation_rival = root + } + add = 25 + } + modifier = { + is_any_movement_leader = yes + add = 15 + } + } + top_participant_group:dynastic_cycle ?= { + save_scope_as = rival_movement + } + save_scope_as = rival + } + } + + option = { # You convince everyone + name = tpg_movement_events.0060.aa + trigger = { + has_focus_or_focus_trait_trigger = { FOCUS = intrigue_skulduggery_focus } + } + reason = lifestyle_focus + add_internal_flag = special + custom_tooltip = tgp_movement_events.0060.a.rival_tt + scope:rival_movement = { + event_change_movement_power_effect = { + VALUE = event_decrease_movement_power_medium_value + } + } + custom_tooltip = event_increase_movement_power_major_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_major_value + } + } + add_intrigue_lifestyle_xp = medium_lifestyle_xp + stress_impact = { + deceitful = major_stress_impact_loss + honest = major_stress_impact_gain + forgiving = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 2 + } + modifier = { + OR = { + has_trait = honest + has_trait = forgiving + } + factor = 0 + } + } + } + + option = { # Scheme against them + name = tgp_movement_events.0060.a + if = { + limit = { + NOT = { + any_scheme = { + is_hostile = yes + scheme_target_character = scope:rival + } + } + } + start_scheme = { + type = challenge_status + target_character = scope:rival + } + custom_tooltip = { + text = tgp_movement_events.0060.a.tt + random_scheme = { + limit = { + scheme_type = challenge_status + scheme_target_character = scope:rival + } + add_scheme_modifier = { type = extra_success_chance_modifier } + } + } + } + else = { + random_scheme = { + limit = { + is_hostile = yes + scheme_target_character = scope:guest + } + add_scheme_modifier = { + type = massive_extra_success_chance_modifier + } + } + } + custom_tooltip = tgp_movement_events.0060.a.rival_tt + scope:rival_movement = { + event_change_movement_power_effect = { + VALUE = event_decrease_movement_power_medium_value + } + } + stress_impact = { + deceitful = medium_stress_impact_loss + vengeful = medium_stress_impact_loss + honest = medium_stress_impact_gain + compassionate = medium_stress_impact_gain + forgiving = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = deceitful + has_trait = vengeful + } + factor = 2 + } + modifier = { + OR = { + has_trait = honest + has_trait = compassionate + has_trait = forgiving + } + factor = 0 + } + } + } + + option = { # Focus on getting Movement Power + name = tgp_movement_events.0060.b + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + deceitful = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + modifier = { + has_trait = deceitful + factor = 0 + } + } + } + + option = { # Forgive and forget + name = tgp_movement_events.0060.c + if = { + limit = { + faith = { + OR = { + trait_is_virtue = calm + trait_is_virtue = compassionate + } + } + } + add_piety = medium_piety_gain + if = { + limit = { exists = cp:councillor_court_chaplain } + cp:councillor_court_chaplain = { + add_opinion = { + target = root + modifier = pious_opinion + opinion = 15 + } + } + } + } + else = { + add_prestige = minor_prestige_gain + } + stress_impact = { + forgiving = major_stress_impact_loss + callous = major_stress_impact_gain + vengeful = major_stress_impact_gain + deceitful = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = forgiving + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = vengeful + has_trait = deceitful + } + factor = 2 + } + } + } +} + +# Councillor of your highest skill helps you study +scripted_trigger tgp_movement_events_0070_valid_councillor = { + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + has_same_highest_skill = { CHARACTER = root } + opinion = { + target = root + value >= 10 + } +} + +tgp_movement_events.0070 = { + type = character_event + title = tgp_movement_events.0070.t + desc = tgp_movement_events.0070.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = lazy + has_trait = intellect_bad + } + } + animation = stress + } + animation = interested + } + right_portrait = { + character = scope:councillor + animation = happy_teacher + } + theme = merit + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + any_councillor = { tgp_movement_events_0070_valid_councillor = yes } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_councillor = { + limit = { tgp_movement_events_0070_valid_councillor = yes } + weight = { + base = 1 + modifier = { + has_relation_potential_friend = root + add = 5 + } + } + assign_quirk_effect = yes + save_scope_as = councillor + } + } + + option = { # Become friends + name = tgp_movement_events.0070.a + progress_towards_friend_effect = { + REASON = friend_studied_together + CHARACTER = scope:councillor + OPINION = default_friend_opinion + } + stress_impact = { + base = medium_stress_impact_loss + gregarious = medium_stress_impact_loss + lazy = medium_stress_impact_loss + diligent = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = gregarious + has_trait = lazy + } + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { # Encourage _them_ to focus on their job + name = { + trigger = { + scope:councillor = { is_spouse_of = root } + } + text = tgp_movement_events.0070.b.spouse + } + name = { + trigger = { + NOT = { scope:councillor = { is_spouse_of = root } } + } + text = tgp_movement_events.0070.b.councillor + } + if = { + limit = { scope:councillor = { is_spouse_of = root } } + scope:councillor = { add_highest_skill_two_points_effect = yes } + } + else = { + scope:councillor = { + councillor_increase_relevant_skill_two_points_effect = yes + } + } + stress_impact = { + callous = medium_stress_impact_loss + lazy = medium_stress_impact_loss + diligent = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = callous + has_trait = lazy + } + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { # Study + name = tgp_movement_events.0070.c + add_highest_skill_point_effect = yes + scope:councillor = { add_highest_skill_point_effect = yes } + stress_impact = { + base = medium_stress_impact_gain + diligent = medium_stress_impact_loss + lazy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_lifestyle = learning_lifestyle + has_trait = diligent + } + factor = 2 + } + modifier = { + has_trait = lazy + factor = 0 + } + } + } +} + +# Family member asks you to focus on your family +scripted_trigger tgp_movement_events_0080_valid_family_member = { + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + house = root.house # Just in case + opinion = { + target = root + value >= 10 + } + gold >= major_gold_value + NOT = { has_trait = greedy } + OR = { # Someone that'd want you to focus on Family + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + influence_level >= 2 + prestige_level >= 2 + has_trait = ambitious + has_trait = arrogant + has_trait = generous + has_relation_friend = root + has_relation_lover = root + } +} + +tgp_movement_events.0080 = { + type = character_event + title = tgp_movement_events.0080.t + desc = tgp_movement_events.0080.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = humble + has_trait = content + has_trait = lazy + } + } + animation = dismissal + } + animation = interested + } + right_portrait = { + character = scope:family_member + animation = fanning + } + theme = administrative + override_background = { reference = relaxing_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + any_close_or_extended_family_member = { + tgp_movement_events_0080_valid_family_member = yes + } + } + + weight_multiplier = { + base = 1 + modifier = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + add = 1 + } + } + + immediate = { + save_scope_as = root_scope + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_close_or_extended_family_member = { + limit = { tgp_movement_events_0080_valid_family_member = yes } + weight = { + base = 1 + modifier = { + OR = { + has_relation_potential_friend = root + has_relation_friend = root + } + add = 5 + } + } + assign_quirk_effect = yes + save_scope_as = family_member + } + domicile ?= { + set_variable = { + name = subsidised_estate_var + value = 3 + } + } + } + + option = { # Get extra stuff if you are a Conservative + name = tgp_movement_events.0080.aa + trigger = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + add_internal_flag = special + reason = movement + add_character_modifier = tgp_subsidised_estate_buildings_modifier + scope:family_member = { + remove_short_term_gold = medium_gold_value + } + add_prestige = medium_prestige_gain + stress_impact = { + generous = medium_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + factor = 2 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + + option = { # Thank you mate + name = tgp_movement_events.0080.a + trigger = { + NOT = { + top_participant_group:dynastic_cycle ?= { + participant_group_type = conservative_movement + } + } + } + add_character_modifier = tgp_subsidised_estate_buildings_modifier + scope:family_member = { + remove_short_term_gold = medium_gold_value + } + + stress_impact = { + generous = medium_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = gregarious + has_trait = lazy + } + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { # This is not the way, focus on our movement + name = tpg_movement_events.0080.b + change_influence = medium_influence_gain + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + scope:family_member = { + remove_short_term_gold = medium_gold_value + add_opinion = { + target = root + modifier = annoyed_opinion + opinion = -10 + } + } + + stress_impact = { + generous = medium_stress_impact_gain + humble = medium_stress_impact_gain + content = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = callous + has_trait = lazy + } + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } + + option = { # Keep the money, bestie + name = tgp_movement_events.0080.c + progress_towards_friend_effect = { + REASON = friend_rejected_funds + CHARACTER = scope:family_member + OPINION = default_friend_opinion + } + if = { + limit = { + faith = { + OR = { + trait_is_virtue = generous + trait_is_virtue = humble + } + } + } + add_piety = medium_piety_gain + every_vassal = { + limit = { has_vassal_stance = zealot } + custom = every_zealot_vassal + add_opinion = { + target = root + modifier = pious_opinion + opinion = 5 + } + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + generous = medium_stress_impact_loss + content = medium_stress_impact_loss + humble = medium_stress_impact_loss + arrogant = major_stress_impact_gain + greedy = major_stress_impact_gain + avaricious = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_lifestyle = learning_lifestyle + has_trait = diligent + } + factor = 2 + } + modifier = { + has_trait = lazy + factor = 0 + } + } + } +} + +# Movement member wants to make ammnds +scripted_trigger tpg_movement_events_0090_valid_ruler = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + opinion = { + target = root + value <= -10 + } + NOT = { has_trait = vengeful } # They would NEVER +} + +tgp_movement_events.0090 = { + type = character_event + title = tgp_movement_events.0090.t + desc = tgp_movement_events.0090.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = callous + has_trait = vengeful + has_trait = wrathful + } + } + animation = dismissal + } + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = brave + } + } + animation = laugh + } + animation = japanese_war_fan + camera = camera_event_left_pointing_right + } + right_portrait = { + character = scope:courtier + animation = gongshou + } + lower_right_portrait = scope:other_ruler + theme = dynastic_cycle + override_background = { reference = garden } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + situation:dynastic_cycle ?= { + NOT = { situation_current_phase = situation_dynastic_cycle_phase_chaos } + } + any_ruler = { tpg_movement_events_0090_valid_ruler = yes } + } + + weight_multiplier = { + base = 1 + modifier = { + any_relation = { type = rival } + add = 1 + } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0090_valid_ruler = yes } + weight = { + base = 1 + modifier = { + has_relation_nemesis = root + add = 100 + } + modifier = { + has_relation_rival = root + add = 100 + } + modifier = { + any_memory = { + has_memory_category = negative + any_memory_participant = { this = root } + } + add = 50 + } + modifier = { + has_trait = forgiving + add = 10 + } + modifier = { + opinion = { + target = root + value < -25 + } + add = 5 + } + modifier = { + opinion = { + target = root + value < -50 + } + add = 5 + } + } + assign_quirk_effect = yes + save_scope_as = other_ruler + if = { + limit = { + any_courtier = { tgp_movement_events_0010_valid_courtier = yes } + } + ordered_courtier = { + limit = { + tgp_movement_events_0010_valid_courtier = yes + } + order_by = diplomacy + set_location = root.location + save_scope_as = courtier + } + } + else = { + hidden_effect_new_object = { + create_character = { + location = root.location + template = diplomacy_court_position_holder_template + gender_female_chance = root_soldier_female_chance + faith = scope:other_ruler.capital_county.faith + culture = scope:other_ruler.capital_county.culture + save_scope_as = courtier + } + } + hidden_effect = { + add_courtier = scope:courtier + } + } + } + } + + option = { # They should KNEEL + name = tgp_movement_events.0090.aa + trigger = { + OR = { + has_trait = callous + has_trait = vengeful + has_trait = wrathful + } + } + add_dread = medium_dread_gain + scope:other_ruler = { + add_opinion = { + target = root + modifier = humiliated_opinion + opinion = -15 + } + } + every_vassal = { + limit = { has_vassal_stance = belligerent } + custom = every_belligerent_vassal + add_opinion = { + target = root + modifier = respect_opinion + opinion = 10 + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } + + option = { # Nah + name = tgp_movement_events.0090.a + change_influence = major_influence_gain + stress_impact = { + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + } + } + + option = { # I do this ONLY for our party + name = tgp_movement_events.0090.b + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + deceitful = medium_stress_impact_loss + honest = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 2 + } + modifier = { + has_trait = honest + factor = 0 + } + } + } + + option = { # Apology accepted + name = tgp_movement_events.0090.c + if = { + limit = { has_relation_nemesis = scope:other_ruler } + remove_relation_nemesis = scope:other_ruler + } + else_if = { + limit = { has_relation_rival = scope:other_ruler } + remove_relation_rival = scope:other_ruler + } + progress_towards_friend_effect = { + REASON = friend_same_movement_reason + CHARACTER = scope:other_ruler + OPINION = default_friend_opinion + } + stress_impact = { + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_lifestyle = martial_lifestyle + factor = 3 + } + modifier = { + has_trait = ambitious + factor = 0 + } + } + } +} + +# Ask a Movement Leader to abandon their Movement +scripted_trigger tgp_movement_events_0100_valid_rival = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + is_any_movement_leader = yes + NOR = { + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + top_participant_group:dynastic_cycle ?= { participant_group_type = undecided_movement } + } +} + +scripted_trigger tgp_movement_events_0100_valid_spymaster = { + is_available_healthy_ai_adult = yes + intrigue >= decent_skill_rating +} + +scripted_effect tgp_movement_events_0100_remove_from_movement_effect = { + custom_tooltip = tgp_movement_events_0100_remove_from_movement_effect_tt + set_variable = { + name = movement_member + value = flag:undecided + } + scope:rival_movement = { + set_variable = { + name = movement_power + value = movement_power_value + } + } +} + +tgp_movement_events.0100 = { + type = character_event + title = tgp_movement_events.0100.t + desc = tgp_movement_events.0100.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = compassionate + has_trait = forgiving + has_trait = content + } + } + animation = worry + } + animation = spymaster + camera = camera_event_very_left + } + right_portrait = { + character = scope:spymaster + animation = scheme + camera = camera_event_very_right + } + lower_right_portrait = scope:rival + theme = dynastic_cycle + override_background = { reference = corridor_night } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + situation:dynastic_cycle = { + any_situation_participant = { tgp_movement_events_0100_valid_rival = yes } + } + OR = { # You are important enough + is_any_movement_leader = yes + influence_level >= 4 + merit_level >= 4 + } + OR = { # You have someone that can do the job + exists = cp:councillor_spymaster + any_courtier = { tgp_movement_events_0100_valid_spymaster = yes } + } + } + + weight_multiplier = { + base = 1 + modifier = { + any_relation = { type = rival } + add = 1 + } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + if = { + limit = { + exists = cp:councillor_spymaster + } + cp:councillor_spymaster = { save_scope_as = spymaster } + } + else = { + ordered_courtier = { + limit = { tgp_movement_events_0100_valid_spymaster = yes } + order_by = intrigue + save_scope_as = spymaster + } + } + scope:spymaster = { assign_quirk_effect = yes } + situation:dynastic_cycle = { + random_situation_participant = { + limit = { tgp_movement_events_0100_valid_rival = yes } + weight = { + base = 1 + modifier = { + has_relation_nemesis = root + add = 100 + } + modifier = { + has_relation_rival = root + add = 100 + } + modifier = { + any_memory = { + has_memory_category = negative + any_memory_participant = { this = root } + } + add = 50 + } + modifier = { + has_trait = forgiving + add = 10 + } + modifier = { + opinion = { + target = root + value < -25 + } + add = 5 + } + modifier = { + opinion = { + target = root + value < -50 + } + add = 5 + } + } + assign_quirk_effect = yes + save_scope_as = rival + top_participant_group:dynastic_cycle = { save_scope_as = rival_movement } + } + } + } + + option = { # If you have a hook/secret on them, insta win + name = tgp_movement_events.0100.aa + trigger = { + OR = { + has_hook = scope:rival + scope:rival = { + any_secret = { + is_known_by = root + } + } + } + } + add_internal_flag = special + reason = hook + remove_hook = { target = scope:rival } + scope:rival = { + tgp_movement_events_0100_remove_from_movement_effect = yes + } + } + + option = { # Ask them to leave + name = tgp_movement_events.0100.a + change_influence = major_influence_loss + scope:spymaster = { + duel = { + skill = intrigue + target = scope:rival + 25 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_movement_events.0100.a.success + root = { + send_interface_toast = { + title = tgp_movement_events.0100.a.success + left_icon = scope:rival + scope:rival = { + tgp_movement_events_0100_remove_from_movement_effect = yes + } + } + } + } + 75 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_movement_events.0100.a.failure + root = { + send_interface_toast = { + title = tgp_movement_events.0100.a.failure + left_icon = root + add_prestige = medium_prestige_loss + } + } + } + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + deceitful = medium_stress_impact_loss + honest = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = deceitful + } + factor = 2 + } + modifier = { + has_trait = honest + factor = 0 + } + } + } + + option = { # Pay them to leave + name = tgp_movement_events.0100.b + pay_short_term_gold = { + target = scope:rival + gold = major_gold_value + } + duel = { + skills = { diplomacy intrigue } + target = scope:rival + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + scope:rival = { has_trait = greedy } + add = 25 + } + modifier = { + scope:rival = { gold <= medium_gold_value } + add = 10 + } + desc = tgp_movement_events.0100.a.success + send_interface_toast = { + title = tgp_movement_events.0100.a.success + left_icon = scope:rival + scope:rival = { + tgp_movement_events_0100_remove_from_movement_effect = yes + } + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_movement_events.0100.a.failure + send_interface_toast = { + title = tgp_movement_events.0100.a.failure + left_icon = root + root = { add_prestige = medium_prestige_loss } + } + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + honest = major_stress_impact_gain + greedy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = deceitful + factor = 2 + } + modifier = { + OR = { + gold <= massive_gold_value + has_trait = greedy + has_trait = honest + } + factor = 0 + } + } + } + + option = { # Just undermine them + name = tgp_movement_events.0100.c + custom_tooltip = tgp_movement_events.0060.a.rival_tt + scope:rival_movement = { + event_change_movement_power_effect = { + VALUE = event_decrease_movement_power_medium_value + } + } + stress_impact = { + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 0 + } + } + } +} + +# Movement member sends you some books +scripted_trigger tpg_movement_events_0110_valid_ruler = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + trigger_if = { + limit = { + exists = top_participant_group:dynastic_cycle + } + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + } + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + learning >= decent_skill_rating + opinion = { + target = root + value >= 0 + } +} + +tgp_movement_events.0110 = { + type = letter_event + opening = tgp_movement_events.0110.opening + desc = tgp_movement_events.0110.desc + sender = scope:other_ruler + + cooldown = { years = 5 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = top_participant_group:dynastic_cycle + any_ruler = { tpg_movement_events_0110_valid_ruler = yes } + } + + immediate = { + save_scope_as = root_scope + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0110_valid_ruler = yes } + weight = { + base = 1 + modifier = { + has_relation_potential_friend = root + add = 25 + } + modifier = { + is_close_family_of = root + add = 10 + } + modifier = { + is_extended_family_of = root + add = 5 + } + modifier = { + OR = { + has_relation_friend = root + has_relation_lover = root + has_relation_disciple = root + } + add = 5 + } + } + save_scope_as = other_ruler + hidden_effect_new_object = { + create_artifact_book_effect = { + OWNER = scope:other_ruler + CREATOR = scope:other_ruler + SET_SUBJECT = flag:no + SET_TOPIC = flag:no + } + } + } + hidden_effect = { + scope:newly_created_artifact = { + set_artifact_description = artifact_movement_gift_desc + set_artifact_rarity = masterwork + } + } + } + + option = { # So nice of you! + name = tgp_movement_events.0110.a + gain_appropriate_lifestyle_medium_xp_effect = yes + progress_towards_friend_effect = { + REASON = friend_sent_books_reason + CHARACTER = scope:other_ruler + OPINION = default_friend_opinion + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = gregarious + has_trait = diligent + } + factor = 2 + } + } + } + + option = { # I'll put it in my library + name = tgp_movement_events.0110.b + add_prestige = medium_prestige_gain + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = arrogant + has_trait = lazy + } + factor = 2 + } + } + } + + after = { + scope:newly_created_artifact = { set_owner = root } + } +} + +# Movement member teaches you Confucianism +scripted_trigger tpg_movement_events_0120_valid_ruler = { + this != root + is_ai = yes + is_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + has_trait = confucian_education + opinion = { + target = root + value >= 0 + } +} + +scripted_effect tpg_movement_events_0120_confucian_education_effect = { + if = { + limit = { + NOT = { has_trait = confucian_education } + } + add_trait_force_tooltip = confucian_education + } + else = { + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_medium_value + } + } +} + +scripted_effect tpg_movement_events_0120_lifestyle_reveler_effect = { + if = { + limit = { + NOT = { has_trait = lifestyle_reveler } + } + random = { + chance = 25 + add_trait_force_tooltip = lifestyle_reveler + } + } + else = { + add_trait_xp = { + trait = lifestyle_reveler + value = lifestyle_confucian_education_xp_gain_medium_value + } + } +} + +tgp_movement_events.0120 = { + type = activity_event + title = tgp_movement_events.0120.t + desc = tgp_movement_events.0120.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = callous + } + } + animation = eyeroll + } + triggered_animation = { + trigger = { + OR = { + has_trait = lazy + learning <= decent_skill_rating + } + NOT = { has_trait = diligent } + } + animation = boredom + } + animation = drink + } + right_portrait = { + character = scope:other_ruler + animation = debating + } + theme = feast_activity + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = top_participant_group:dynastic_cycle + OR = { # You don't have the trait or you don't have the trait maxed out + NOT = { has_trait = confucian_education } + has_trait_xp = { trait = confucian_education value <= 75 } + } + involved_activity = { + any_attending_character = { tpg_movement_events_0120_valid_ruler = yes } + } + } + + immediate = { + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + involved_activity = { + save_scope_as = activity + activity_host = { save_scope_as = host } + random_attending_character = { + limit = { tpg_movement_events_0120_valid_ruler = yes } + weight = { + base = 1 + modifier = { + has_relation_potential_friend = root + add = 25 + } + modifier = { + is_close_family_of = root + add = 10 + } + modifier = { + is_extended_family_of = root + add = 5 + } + modifier = { + OR = { + has_relation_friend = root + has_relation_lover = root + has_relation_disciple = root + } + add = 5 + } + } + save_scope_as = other_ruler + assign_quirk_effect = yes + } + } + } + + option = { # Teach me! + name = tgp_movement_events.0120.a + tpg_movement_events_0120_confucian_education_effect = yes + stress_impact = { + diligent = major_stress_impact_loss + arrogant = major_stress_impact_gain + lazy = major_stress_impact_gain + lifestyle_reveler = major_stress_impact_gain + drunkard = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = arrogant + has_trait = lifestyle_reveler + has_trait = lazy + has_trait = drunkard + } + factor = 0 + } + modifier = { + has_trait = diligent + factor = 2 + } + } + } + + option = { # We are here to spread the word of my_movement + name = tgp_movement_events.0120.b + custom_tooltip = event_increase_movement_power_minor_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_minor_value + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + diligent = medium_stress_impact_gain + lifestyle_reveler = major_stress_impact_gain + drunkard = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + modifier = { + OR = { + has_trait = diligent + has_trait = lifestyle_reveler + has_trait = drunkard + } + factor = 0 + } + } + } + + option = { # This is a FEAST + name = tgp_movement_events.0120.c + tpg_movement_events_0120_lifestyle_reveler_effect = yes + scope:activity = { + every_attending_character = { + limit = { NOT = { this = root } } + custom = custom.every_attending_character + add_opinion = { + target = root + modifier = amused_opinion + opinion = 5 + } + } + } + stress_impact = { + base = medium_stress_impact_loss + lifestyle_reveler = medium_stress_impact_loss + drunkard = medium_stress_impact_loss + diligent = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = lifestyle_reveler + has_trait = drunkard + } + factor = 2 + } + modifier = { + has_trait = diligent + factor = 0 + } + } + } +} + +# Movement member teaches you the language of the capital +scripted_trigger tpg_movement_events_0130_valid_ruler = { + this != root + is_ai = yes + is_adult = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + opinion = { + target = root + value >= 0 + } + knows_language_of_culture = top_liege.capital_county.culture # They are of the same culture +} + +scripted_trigger tgp_movement_events_0130_valid_courtier = { + is_available_healthy_ai_adult = yes + is_councillor = no + NOT = { is_close_family_or_spouse_trigger = { CHARACTER = scope:other_ruler } } + knows_language_of_culture = scope:capital_culture +} + +tgp_movement_events.0130 = { + type = character_event + title = tgp_movement_events.0130.t + desc = tgp_movement_events.0130.desc + left_portrait = { + character = root + triggered_animation = { + trigger = { + OR = { + has_trait = arrogant + has_trait = callous + } + } + animation = eyeroll + } + triggered_animation = { + trigger = { + OR = { + has_trait = lazy + learning <= decent_skill_rating + } + NOT = { has_trait = diligent } + } + animation = worry + } + animation = interested + camera = camera_event_crowd + } + right_portrait = { + character = scope:courtier + animation = obsequious_bow + } + lower_right_portrait = scope:other_ruler + theme = dynastic_cycle + override_background = { reference = throne_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = top_participant_group:dynastic_cycle + NOT = { knows_language_of_culture = top_liege.capital_county.culture } + any_ruler = { tpg_movement_events_0130_valid_ruler = yes } + } + + immediate = { + top_liege.capital_county.culture = { save_scope_as = capital_culture } + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tpg_movement_events_0130_valid_ruler = yes } + weight = { + base = 1 + modifier = { + has_relation_potential_friend = root + add = 25 + } + modifier = { + is_close_family_of = root + add = 10 + } + modifier = { + is_extended_family_of = root + add = 5 + } + modifier = { + OR = { + has_relation_friend = root + has_relation_lover = root + has_relation_disciple = root + } + add = 5 + } + } + save_scope_as = other_ruler + if = { + limit = { + any_courtier = { tgp_movement_events_0130_valid_courtier = yes } + } + ordered_courtier = { + limit = { + tgp_movement_events_0130_valid_courtier = yes + } + order_by = diplomacy + set_location = root.location + save_scope_as = courtier + } + } + else = { + hidden_effect_new_object = { + create_character = { + location = root.location + template = diplomacy_court_position_holder_template + gender_female_chance = root_soldier_female_chance + faith = scope:other_ruler.faith + culture = scope:capital_culture + save_scope_as = courtier + } + } + hidden_effect = { + add_courtier = scope:courtier + } + } + scope:courtier = { assign_quirk_effect = yes } + } + } + + option = { # Learn the language! + name = tgp_movement_events.0130.a + start_scheme = { + type = learn_language + target_character = scope:other_ruler + } + custom_tooltip = diplomacy_family.2250.b.tt + hidden_effect = { + random_scheme = { + limit = { + scheme_type = learn_language + scheme_target_character = scope:other_ruler + } + add_scheme_modifier = { + type = extra_success_chance_modifier + } + } + } + + stress_impact = { + diligent = medium_stress_impact_loss + humble = medium_stress_impact_loss + lazy = medium_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = humble + has_trait = diligent + } + factor = 0 + } + modifier = { + OR = { + has_trait = arrogant + has_trait = lazy + } + factor = 0 + } + } + } + + option = { # Convert + name = tgp_movement_events.0130.b + add_prestige = major_prestige_loss + set_culture = scope:capital_culture + stress_impact = { + base = massive_stress_impact_gain + arrogant = medium_stress_impact_gain + } + ai_chance = { + base = 25 + modifier = { + has_trait = humble + add = 75 + } + modifier = { + has_trait = arrogant + factor = 0 + } + } + } + + option = { # I'm good tyyyy + name = tgp_movement_events.0130.c + culture = { + change_cultural_acceptance = { + target = scope:capital_culture + value = minor_cultural_acceptance_gain + desc = cultural_acceptance_gain_event + } + } + add_character_modifier = { + modifier = tgp_cultural_harmony_modifier + years = 15 + } + stress_impact = { + arrogant = medium_stress_impact_loss + lazy = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = arrogant + has_trait = lazy + } + factor = 2 + } + } + } +} + +# Disciple brings you a gift +scripted_trigger tgp_movement_events_0140_valid_disciple = { + is_available_healthy_ai_adult = yes + opinion = { + target = root + value >= 10 + } +} + +scripted_trigger tgp_movement_events_0140_valid_artifact = { + is_equipped = no + NOT = { rarity = common } + artifact_can_be_gift_to_trigger = { RECIPIENT = root } +} + +scripted_effect tgp_movement_events_0140_create_artifact_effect = { + random_list = { + 10 = { + create_artifact_weapon_effect = { + OWNER = scope:disciple + CREATOR = scope:disciple + SET_WEAPON_TYPE = flag:no + } + } + 10 = { + create_artifact_armor_effect = { + OWNER = scope:disciple + CREATOR = scope:disciple + SET_ARMOR_TYPE = flag:no + } + } + 10 = { + create_artifact_book_effect = { + OWNER = scope:disciple + CREATOR = scope:disciple + SET_SUBJECT = flag:no + SET_TOPIC = flag:no + } + } + } + hidden_effect = { + scope:newly_created_artifact = { + save_scope_as = disciple_gift + set_artifact_description = disciple_gift_desc + set_artifact_rarity = masterwork + } + } +} + +tgp_movement_events.0140 = { + type = character_event + title = tgp_movement_events.0140.t + desc = tgp_movement_events.0140.desc + left_portrait = { + character = root + animation = happiness + camera = camera_event_crowd + } + right_portrait = { + character = scope:disciple + animation = gongshou + } + artifact = { + position = lower_right_portrait + target = scope:disciple_gift + } + theme = dynastic_cycle + override_background = { reference = garden } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + any_relation = { + type = disciple + tgp_movement_events_0140_valid_disciple = yes + } + } + + immediate = { + save_scope_as = root_scope + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + ordered_relation = { + type = disciple + limit = { tgp_movement_events_0140_valid_disciple = yes } + order_by = "opinion(root)" + assign_quirk_effect = yes + save_scope_as = disciple + if = { + limit = { + any_character_artifact = { tgp_movement_events_0140_valid_artifact = yes } + } + ordered_character_artifact = { + limit = { tgp_movement_events_0140_valid_artifact = yes } + order_by = artifact_rarity + save_scope_as = disciple_gift + } + } + else = { + tgp_movement_events_0140_create_artifact_effect = yes + } + } + } + + option = { # Thank you for the gift! + name = tgp_movement_events.0140.a + scope:disciple_gift = { set_owner = root } + scope:disciple = { + add_opinion = { + target = root + modifier = grateful_opinion + opinion = 15 + } + } + stress_impact = { + humble = medium_stress_impact_loss + greedy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = humble + has_trait = greedy + } + factor = 2 + } + modifier = { + OR = { + has_trait = diligent + has_trait = ambitious + } + factor = 0 + } + } + } + + option = { # Remember we do this for the MOVEMENT + name = tgp_movement_events.0140.b + custom_tooltip = event_increase_movement_power_medium_effect_tooltip + scope:my_movement = { + event_change_movement_power_effect = { + VALUE = event_increase_movement_power_medium_value + } + } + stress_impact = { + greedy = medium_stress_impact_gain + ambitious = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 2 + } + modifier = { + has_trait = greedy + factor = 0 + } + } + } + + option = { # No time to waste, we must study!!!! + name = tgp_movement_events.0140.c + change_merit = medium_merit_gain + scope:disciple = { change_merit = medium_merit_gain } + if = { + limit = { + has_trait = confucian_education + } + add_trait_xp = { + trait = confucian_education + value = lifestyle_confucian_education_xp_gain_medium_value + } + } + stress_impact = { + ambitious = medium_stress_impact_gain + greedy = medium_stress_impact_gain + diligent = medium_stress_impact_loss + } + ai_chance = { + base = 100 + modifier = { + has_trait = diligent + factor = 2 + } + modifier = { + OR = { + has_trait = greedy + has_trait = ambitious + } + factor = 0 + } + } + } +} + +# Shinto visitor at court +scripted_trigger tgp_movement_events_0150_valid_monk = { + is_available_healthy_ai_adult = yes + has_trait = devoted + religion = religion:shintoism_religion + is_councillor = no # Don't steal someone important +} + +scripted_trigger tgp_movement_events_0150_valid_ruler = { + is_available_healthy_ai_adult = yes + is_landed = yes + primary_title.tier >= tier_county + religion = religion:shintoism_religion +} + +tgp_movement_events.0150 = { + type = character_event + title = tgp_movement_events.0150.t + desc = { + desc = tgp_movement_events.0150.desc.intro + first_valid = { + triggered_desc = { + trigger = { exists = scope:other_ruler } + desc = tgp_movement_events.0150.desc.other_ruler + } + triggered_desc = { + trigger = { NOT = { exists = scope:other_ruler } } + desc = tgp_movement_events.0150.desc.alone + } + } + desc = tgp_movement_events.0150.desc.outro + } + left_portrait = { + character = root + triggered_animation = { + trigger = { has_trait = cynical } + animation = dismissal + } + triggered_animation = { + trigger = { has_trait = zealous } + animation = anger + } + animation = interested + camera = camera_event_crowd + } + right_portrait = { + character = scope:monk + animation = prayer + } + lower_right_portrait = { + trigger = { exists = scope:other_ruler } + character = scope:other_ruler + } + theme = faith + override_background = { reference = throne_room } + cooldown = { years = 10 } + + trigger = { + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + exists = top_participant_group:dynastic_cycle + NOT = { religion = religion:shintoism_religion } + highest_held_title_tier >= tier_duchy # You need to be somewhat important + } + + weight_multiplier = { + base = 0.5 + modifier = { + highest_held_title_tier >= tier_duchy + add = root.primary_title.tier + } + } + + immediate = { + if = { # If there's a valid ruler they're an envoy from them + limit = { + faith:shinto = { + any_faith_ruler = { tgp_movement_events_0150_valid_ruler = yes } + } + } + faith:shinto = { + random_faith_ruler = { + limit = { tgp_movement_events_0150_valid_ruler = yes } + weight = { + base = 1 + modifier = { + highest_held_title_tier >= tier_kingdom + add = 50 + } + modifier = { + any_courtier = { tgp_movement_events_0150_valid_monk = yes } + add = 20 + } + } + save_scope_as = other_ruler + if = { + limit = { + any_courtier = { + tgp_movement_events_0150_valid_monk = yes + } + } + random_courtier = { + limit = { tgp_movement_events_0150_valid_monk = yes } + save_scope_as = monk + } + } + else = { + create_character = { + location = root.capital_province + template = monk_character_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = scope:other_ruler.faith + culture = scope:other_ruler.capital_county.culture + save_scope_as = monk + after_creation = { + add_character_flag = created + } + } + hidden_effect = { add_courtier = scope:monk } + } + } + } + } + else = { # Otherwise they're a random monk + create_character = { + location = root.capital_province + template = monk_character_template + gender_female_chance = root_faith_dominant_gender_adjusted_female_chance + faith = faith:shinto + culture = culture:japanese + save_scope_as = monk + after_creation = { + add_character_flag = created + } + } + } + scope:monk = { assign_quirk_effect = yes } + } + + option = { # Get an alliance out of this + name = tgp_movement_events.0150.aa + trigger = { + has_trait = diplomat + exists = scope:other_ruler + } + add_opinion = { + target = scope:other_ruler + modifier = event_negotiated_alliance_opinion + } + custom_tooltip = tgp_movement_events.0150.aa.alliance + create_alliance = { + target = scope:other_ruler + allied_through_owner = root + allied_through_target = scope:other_ruler + } + stress_impact = { + humble = medium_stress_impact_loss + greedy = medium_stress_impact_loss + diligent = medium_stress_impact_gain + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + } + } + + option = { # Get Faith discount + name = tgp_movement_events.0150.a + custom_tooltip = cheaper_to_convert_to_monk_faith_tt + set_variable = { + name = discounted_faith_to_convert_to_var + value = scope:monk.faith + } + add_courtier = scope:monk + every_vassal = { + limit = { has_vassal_stance = zealot } + custom = every_zealot_vassal + add_opinion = { + target = root + modifier = impious_opinion + opinion = -20 + } + } + stress_impact = { + humble = medium_stress_impact_loss + zealous = major_stress_impact_gain + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = humble + factor = 2 + } + modifier = { + OR = { + has_trait = zealous + has_trait = cynical + } + factor = 0 + } + } + } + + option = { # Try to convert them + name = tgp_movement_events.0150.b + duel = { + skill = diplomacy + target = scope:monk + 35 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tgp_movement_events.0150.b.success + send_interface_toast = { + title = tgp_movement_events.0150.b.success + left_icon = scope:monk + scope:monk = { set_character_faith = root.faith } + add_courtier = scope:monk + } + } + 65 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_movement_events.0150.b.failure + send_interface_toast = { + title = tgp_movement_events.0150.b.failure + left_icon = scope:monk + scope:monk = { + add_opinion = { + target = root + modifier = disrespect_opinion + opinion = -25 + } + } + } + } + } + add_piety = medium_piety_gain + stress_impact = { + zealous = major_stress_impact_loss + cynical = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = zealous + factor = 2 + } + modifier = { + has_trait = cynical + factor = 0 + } + } + } + + option = { # You're welcome here + name = tgp_movement_events.0150.c + add_courtier = scope:monk + if = { + limit = { has_lifestyle = diplomacy_lifestyle } + add_diplomacy_lifestyle_xp = medium_lifestyle_xp + } + else = { add_prestige = medium_prestige_gain } + if = { + limit = { exists = scope:other_ruler } + scope:other_ruler = { + add_opinion = { + target = root + modifier = respect_opinion + opinion = 15 + } + } + } + stress_impact = { + gregarious = medium_stress_impact_loss + callous = medium_stress_impact_gain + zealous = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = gregarious + factor = 2 + } + modifier = { + OR = { + has_trait = callous + has_trait = zealous + } + factor = 0 + } + } + } + + after = { + scope:monk = { + silent_disappearance_ai_if_created_effect = yes + } + } +} + +# Ask a Movement Leader to abandon their Movement +scripted_trigger tgp_movement_events_0160_valid_rival = { + this != root + is_available_healthy_ai_adult = yes + government_has_flag = government_is_celestial + is_any_movement_leader = yes + NOR = { + top_participant_group:dynastic_cycle ?= root.top_participant_group:dynastic_cycle + top_participant_group:dynastic_cycle ?= { participant_group_type = undecided_movement } + } + NOT = { has_trait = deceitful } +} + +scripted_effect tgp_movement_events_0160_scheme_blocking_effect = { + custom_tooltip = tgp_movement_events_0160_scheme_blocking_effect_tt + set_variable = { + name = no_scheming_allowed_var + value = scope:rival + years = 15 + } + scope:rival = { + set_variable = { + name = no_scheming_allowed_var + value = root + years = 15 + } + } +} + +tgp_movement_events.0160 = { + type = character_event + title = tgp_movement_events.0160.t + desc = tgp_movement_events.0160.desc + left_portrait = { + character = root + animation = writing + } + lower_right_portrait = scope:rival + theme = dynastic_cycle + override_background = { reference = study } + cooldown = { years = 10 } + + trigger = { + NOT = { has_variable = no_scheming_allowed_var } + is_available_adult = yes + has_tgp_dlc_trigger = yes + government_has_flag = government_is_celestial + top_participant_group:dynastic_cycle ?= { + NOT = { participant_group_type = undecided_movement } + } + any_ruler = { tgp_movement_events_0160_valid_rival = yes } + OR = { # You are important enough + is_any_movement_leader = yes + influence_level >= 3 + merit_level >= 3 + } + } + + weight_multiplier = { + base = 1 + modifier = { + any_relation = { type = rival } + add = 1 + } + } + + immediate = { + assign_quirk_effect = yes + top_participant_group:dynastic_cycle ?= { + save_scope_as = my_movement + } + random_ruler = { + limit = { tgp_movement_events_0160_valid_rival = yes } + weight = { + base = 1 + modifier = { + has_relation_nemesis = root + add = 100 + } + modifier = { + has_relation_rival = root + add = 100 + } + modifier = { + any_memory = { + has_memory_category = negative + any_memory_participant = { this = root } + } + add = 50 + } + modifier = { + has_trait = greedy + add = 5 + } + } + save_scope_as = rival + top_participant_group:dynastic_cycle = { save_scope_as = rival_movement } + } + } + + option = { # Try to convince them + name = tgp_movement_events.0160.a + duel = { + skill = diplomacy + target = scope:rival + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + scope:rival = { has_trait = greedy } + add = 25 + } + modifier = { + scope:rival = { gold <= medium_gold_value } + add = 10 + } + desc = tgp_movement_events.0100.a.success + send_interface_toast = { + title = tgp_movement_events.0100.a.success + left_icon = scope:rival + tgp_movement_events_0160_scheme_blocking_effect = yes + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tgp_movement_events.0100.a.failure + send_interface_toast = { + title = tgp_movement_events.0100.a.failure + left_icon = scope:rival + + } + } + } + stress_impact = { + ambitious = medium_stress_impact_loss + deceitful = major_stress_impact_gain + honest = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + OR = { + has_trait = ambitious + has_trait = deceitful + } + factor = 2 + } + modifier = { + has_trait = honest + factor = 0 + } + } + } + + option = { # Pay them money lol + name = tgp_movement_events.0160.b + pay_short_term_gold = { + target = scope:rival + gold = medium_gold_value + } + tgp_movement_events_0160_scheme_blocking_effect = yes + stress_impact = { + honest = medium_stress_impact_loss + deceitful = major_stress_impact_gain + greedy = major_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = honest + factor = 2 + } + modifier = { + OR = { + gold <= major_gold_value + has_trait = greedy + has_trait = deceitful + } + factor = 0 + } + } + } + + option = { # I'm good + name = tgp_movement_events.0160.c + add_intrigue_lifestyle_xp = minor_lifestyle_xp + stress_impact = { + ambitious = medium_stress_impact_gain + } + ai_chance = { + base = 100 + modifier = { + has_trait = ambitious + factor = 0 + } + } + } +} diff --git a/events/dlc/tgp/tgp_natural_disaster_contract_events.txt b/events/dlc/tgp/tgp_natural_disaster_contract_events.txt new file mode 100644 index 00000000..6109dbd7 --- /dev/null +++ b/events/dlc/tgp/tgp_natural_disaster_contract_events.txt @@ -0,0 +1,603 @@ +########################## +# NATURAL DISASTER CONTRACT EVENTS +########################## +namespace = tgp_natural_disaster_contract_event + +### Food Shortage +tgp_natural_disaster_contract_event.0001 = { + type = character_event + title = tgp_natural_disaster_contract_event.0001.t + desc = tgp_natural_disaster_contract_event.0001.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_food_shortage + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = natural_disaster_contract_destination + } + } + } + + option = { + name = tgp_natural_disaster_contract_event.0001.a + + custom_tooltip = tgp_natural_disaster_travel_to_contract_destination + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:natural_disaster_contract_destination + ARRIVAL_EVENT = tgp_natural_disaster_contract_event.0002 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_natural_disaster_contract_event.0001.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + } + } +} + +tgp_natural_disaster_contract_event.0002 = { + type = character_event + title = tgp_natural_disaster_contract_event.0002.t + desc = tgp_natural_disaster_contract_event.0002.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + override_background = { + reference = ruined_holding + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_food_shortage + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 4 } + } + + option = { # Special governor trait option + name = tgp_natural_disaster_contract_event.0002.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = distribution_of_food + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_natural_disaster_contract_event.0002.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = pay_from_own_pocket + } + ai_chance = { + base = 100 + } + } + option = { + name = tgp_natural_disaster_contract_event.0002.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = haggle_with_merchants + } + duel = { + skill = stewardship + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0002.c.tt.success + scope:ongoing_contract ?= { + complete_task_contract = haggle_with_merchants + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0002.c.tt.failure + scope:ongoing_contract ?= { + complete_task_contract = haggle_with_merchants_failure + } + } + } + ai_chance = { + base = 50 + } + } + option = { + name = tgp_natural_disaster_contract_event.0002.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = demand_food_from_nobles + } + ai_chance = { + base = 80 + } + } +} + +### Destroyed by Nature +tgp_natural_disaster_contract_event.0005 = { + type = character_event + title = tgp_natural_disaster_contract_event.0005.t + desc = tgp_natural_disaster_contract_event.0005.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_ravaged_buildings + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = natural_disaster_contract_destination + } + } + } + + option = { + name = tgp_natural_disaster_contract_event.0005.a + + custom_tooltip = tgp_natural_disaster_travel_to_contract_destination + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:natural_disaster_contract_destination + ARRIVAL_EVENT = tgp_natural_disaster_contract_event.0006 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_natural_disaster_contract_event.0005.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + } + } +} + +tgp_natural_disaster_contract_event.0006 = { + type = character_event + title = tgp_natural_disaster_contract_event.0006.t + desc = tgp_natural_disaster_contract_event.0006.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + override_background = { + reference = ruined_holding + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_ravaged_buildings + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 4 } + } + + option = { # Special governor trait option + name = tgp_natural_disaster_contract_event.0006.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = rebuild_settlement + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_natural_disaster_contract_event.0006.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = temporary_shelters + } + ai_chance = { + base = 100 + } + } + option = { + name = tgp_natural_disaster_contract_event.0006.c + trigger = { exists = scope:governance_option_c } + duel = { + skills = { martial stewardship } + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0006.c.tt.desc.success + scope:ongoing_contract = { + complete_task_contract = remove_debris + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0006.c.tt.desc.failure + scope:ongoing_contract = { + complete_task_contract = remove_debris_failure + } + } + } + ai_chance = { + base = 80 + } + } + option = { + name = tgp_natural_disaster_contract_event.0006.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = labor_exchange + } + ai_chance = { + base = 50 + } + } +} + +### Treating the Innocents +tgp_natural_disaster_contract_event.0010 = { + type = character_event + title = tgp_natural_disaster_contract_event.0010.t + desc = tgp_natural_disaster_contract_event.0010.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_medieval_medicine + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = natural_disaster_contract_destination + } + } + } + + option = { + name = tgp_natural_disaster_contract_event.0010.a + + custom_tooltip = tgp_natural_disaster_travel_to_contract_destination + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:natural_disaster_contract_destination + ARRIVAL_EVENT = tgp_natural_disaster_contract_event.0011 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_natural_disaster_contract_event.0010.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + } + } +} + +tgp_natural_disaster_contract_event.0011 = { + type = character_event + title = tgp_natural_disaster_contract_event.0011.t + desc = tgp_natural_disaster_contract_event.0011.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + override_background = { + reference = ruined_holding + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_medieval_medicine + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 4 } + } + + option = { # Special governor trait option + name = tgp_natural_disaster_contract_event.0011.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + scope:ongoing_contract = { + complete_task_contract = assisting_physician + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_natural_disaster_contract_event.0011.b + trigger = { exists = scope:governance_option_b } + duel = { + skill = learning + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0011.b.tt.success + scope:ongoing_contract = { + complete_task_contract = medical_assistance + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0011.b.tt.failure + scope:ongoing_contract = { + complete_task_contract = medical_assistance_failure + } + } + } + ai_chance = { + base = 50 + } + } + option = { + name = tgp_natural_disaster_contract_event.0011.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = prayers_to_the_people + } + ai_chance = { + base = 100 + } + } + option = { + name = tgp_natural_disaster_contract_event.0011.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = better_pay_up + } + ai_chance = { + base = 100 + } + } +} + +### Provisional Relocation +tgp_natural_disaster_contract_event.0015 = { + type = character_event + title = tgp_natural_disaster_contract_event.0015.t + desc = tgp_natural_disaster_contract_event.0015.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_disaster_displacement + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = natural_disaster_contract_destination + } + } + } + + option = { + name = tgp_natural_disaster_contract_event.0015.a + + custom_tooltip = tgp_natural_disaster_travel_to_contract_destination + governor_contract_travel_or_progress_effect = { + DESTINATION = scope:natural_disaster_contract_destination + ARRIVAL_EVENT = tgp_natural_disaster_contract_event.0016 + } + + ai_chance = { + base = 100 + } + } + + option = { + name = tgp_natural_disaster_contract_event.0015.b + scope:ongoing_contract = { + complete_task_contract = failure_standard + } + + ai_chance = { + base = 0 + } + } +} + +tgp_natural_disaster_contract_event.0016 = { + type = character_event + title = tgp_natural_disaster_contract_event.0016.t + desc = tgp_natural_disaster_contract_event.0016.desc + theme = disaster + left_portrait = { + character = root + animation = stress + } + override_background = { + reference = ruined_holding + } + + immediate = { + # Save the contract + random_character_active_contract = { + limit = { + has_task_contract_type = tgp_disaster_displacement + } + save_scope_as = ongoing_contract + + # Save the location + task_contract_location = { + save_scope_as = ongoing_destination + } + } + generate_governance_outcome_effect = { OPTIONS = 4 } + } + + option = { # Special governor trait option + name = tgp_natural_disaster_contract_event.0016.a + trigger = { + has_trait = governor # To show that the trait unlocks the option + exists = scope:governance_option_a + } + duel = { + skill = martial + value = decent_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0016.a.tt.desc.success + scope:ongoing_contract = { + complete_task_contract = deployed_troops + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = tgp_natural_disaster_contract_event.0016.a.tt.desc.failure + scope:ongoing_contract = { + complete_task_contract = deployed_troops_failure + } + } + } + ai_chance = { + base = 200 + } + } + option = { + name = tgp_natural_disaster_contract_event.0016.b + trigger = { exists = scope:governance_option_b } + scope:ongoing_contract = { + complete_task_contract = setting_an_example + } + ai_chance = { + base = 80 + } + } + option = { + name = tgp_natural_disaster_contract_event.0016.c + trigger = { exists = scope:governance_option_c } + scope:ongoing_contract = { + complete_task_contract = confiscate_for_personal_inspection + } + ai_chance = { + base = 50 + } + } + option = { + name = tgp_natural_disaster_contract_event.0016.d + trigger = { exists = scope:governance_option_d } + scope:ongoing_contract = { + complete_task_contract = paying_off_the_looters + } + ai_chance = { + base = 100 + } + } +} diff --git a/events/dlc/tgp/tgp_natural_disaster_flavor_events.txt b/events/dlc/tgp/tgp_natural_disaster_flavor_events.txt new file mode 100644 index 00000000..3d0a0692 --- /dev/null +++ b/events/dlc/tgp/tgp_natural_disaster_flavor_events.txt @@ -0,0 +1,905 @@ +namespace = natural_disaster_flavor_events + +scripted_trigger is_location_affected_by_disaster_in_recovery_trigger = { + location.county = { + any_county_situation = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + situation_current_phase = recovery + } + } +} + +scripted_effect create_random_misc_artifact_effect = { + create_artifact = { + name = random_misc_artifact + description = random_misc_artifact_desc + type = miscellaneous + visuals = ring + rarity = common + modifier = artifact_prowess_1_modifier + max_durability = 15 + save_scope_as = random_misc_artifact + } + hidden_effect = { + random_list = { + 50 = { + scope:random_misc_artifact = { + add_artifact_modifier = character_travel_speed_1 + } + } + 50 = { + scope:random_misc_artifact = { + add_artifact_modifier = artifact_travel_safety_1 + } + } + } + } +} + +# As Scavengers Gather +natural_disaster_flavor_events.0001 = { + type = character_event + title = natural_disaster_flavor_events.0001.t + desc = natural_disaster_flavor_events.0001.desc + theme = disaster + left_portrait = { + character = root + animation = survey + } + cooldown = { years = 20 } + + trigger = { + has_tgp_dlc_trigger = yes + is_location_valid_for_travel_event_on_land = yes + is_location_affected_by_disaster_in_recovery_trigger = yes + is_available_travelling_adult = yes + is_landed = no + } + + widgets = { + widget = { + is_shown = { + scope:random_weather = flag:fog + } + gui = event_window_widget_vfx_rainy_fog container = foreground_shader_vfx_container + } + } + + immediate = { + location.county = { + random_county_situation = { + limit = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + } + save_scope_as = disaster_situation + } + } + + create_character = { + template = generic_peasant_character + location = root.location + culture = root.location.culture + faith = root.location.faith + gender_female_chance = root_soldier_female_chance + save_scope_as = person_in_need + } + + random_list = { + 20 = { + save_scope_value_as = { + name = random_weather + value = flag:fog + } + } + 80 = { } + } + } + + option = { # Valuables + name = natural_disaster_flavor_events.0001.a + add_piety = minor_piety_loss + random_list = { + 33 = { # Gold + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0001.a.gold.toast + left_icon = root + add_gold = { + add = miniscule_gold_value + multiply = 3 + } + } + modifier = { + add = 15 + has_trait = greedy + } + } + 33 = { # Provisions + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0001.a.provisions.toast + left_icon = root + domicile = { + change_provisions = miniscule_provisions_gain + } + } + modifier = { + add = 15 + has_trait = gluttonous + } + } + 33 = { # Artifact + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0001.a.artifact.toast + left_icon = root + create_random_misc_artifact_effect = yes + } + modifier = { + add = 15 + has_trait = brave + } + } + } + current_travel_plan = { + delay_travel_plan = { + days = 10 + } + } + random = { + chance = 20 + contract_disease_effect = { DISEASE = ill TREATMENT_EVENT = yes } + } + + stress_impact = { + just = minor_stress_impact_gain + greedy = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_greed = 1 + ai_compassion = -1 + } + } + } + + option = { # Survivors + name = natural_disaster_flavor_events.0001.b + + duel = { + skill = prowess + value = medium_skill_rating + 50 = { # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + min = 20 + max = 90 + reverse_add_opinion = { + target = scope:person_in_need + modifier = grateful_opinion + opinion = 25 + } + } + 50 = { # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0001.b.failure.toast # fix this + left_icon = root + right_icon = scope:person_in_need + scope:person_in_need = { + increase_wounds_effect = { REASON = wounds } + } + } + } + } + + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0001.b.success.toast + left_icon = root + right_icon = scope:person_in_need + current_travel_plan = { + add_companion = scope:person_in_need + } + } + current_travel_plan = { + delay_travel_plan = { + days = 10 + } + } + + stress_impact = { + lazy = minor_stress_impact_gain + compassionate = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_rationality = -1 + } + } + } + + option = { # Opt out + name = natural_disaster_flavor_events.0001.c + + custom_tooltip = RESUME_TRAVEL_PLAN_EFFECT + + stress_impact = { + compassionate = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_rationality = 1 + } + } + } +} + +# Waking Nightmare +natural_disaster_flavor_events.0005 = { + type = character_event + title = natural_disaster_flavor_events.0005.t + desc = natural_disaster_flavor_events.0005.desc + theme = disaster + left_portrait = { + character = root + animation = shock + } + cooldown = { years = 20 } + + trigger = { + has_tgp_dlc_trigger = yes + is_location_valid_for_travel_event_on_land = yes + is_landed = no + } + + widget = { gui = event_window_widget_vfx_earthquake container = foreground_shader_vfx_container } + + immediate = { + location.county = { + random_county_situation = { + limit = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + } + save_scope_as = disaster_situation + } + } + } + + option = { # Run for your life + name = natural_disaster_flavor_events.0005.a + duel = { + skill = prowess + value = medium_skill_rating + 50 = { # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0005.a.success.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0005.a.success.toast + left_icon = root + add_character_modifier = { + modifier = tgp_selfish_actions_character_modifier + years = 10 + } + } + } + 50 = { # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0005.a.failure.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0005.a.failure.toast + left_icon = root + increase_wounds_effect = { REASON = wounds } + } + } + } + + stress_impact = { + compassionate = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = 1 + ai_rationality = 1 + } + } + } + + option = { # Find a safe location + name = natural_disaster_flavor_events.0005.b + duel = { + skill = learning + value = medium_skill_rating + 50 = { # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0005.b.success.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0005.b.success.toast + left_icon = root + add_character_modifier = { + modifier = tgp_finding_safe_spot_character_modifier + years = 10 + } + } + } + 50 = { # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0005.b.failure.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0005.b.failure.toast + left_icon = root + increase_wounds_effect = { REASON = wounds } + } + } + } + + stress_impact = { + fickle = minor_stress_impact_gain + diligent = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_rationality = 2 + ai_energy = -1 + } + } + } +} + +# Desperate Souls +natural_disaster_flavor_events.0010 = { + type = character_event + title = natural_disaster_flavor_events.0010.t + desc = natural_disaster_flavor_events.0010.desc + theme = disaster + left_portrait = { + character = root + animation = worry + } + cooldown = { years = 20 } + + trigger = { + has_tgp_dlc_trigger = yes + is_location_valid_for_travel_event_on_land = yes + is_location_affected_by_disaster_in_recovery_trigger = yes + is_available_travelling_adult = yes + } + + immediate = { + location.county = { + random_county_situation = { + limit = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + } + save_scope_as = disaster_situation + } + } + } + + option = { # Reassure them that help is coming + name = natural_disaster_flavor_events.0010.a + duel = { + skill = diplomacy + value = medium_skill_rating + 50 = { # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0010.a.success.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0010.a.success.toast + left_icon = root + add_diplomacy_lifestyle_xp = medium_lifestyle_experience + } + } + 50 = { # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0010.a.failure.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0010.a.failure.toast + left_icon = root + add_character_modifier = { + modifier = tgp_deceitful_overconfidence_character_modifier + years = 10 + } + } + } + } + + stress_impact = { + honest = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -1 + ai_sociability = 1 + } + } + } + + option = { # Lie your way out of the situation + name = natural_disaster_flavor_events.0010.b + duel = { + skill = intrigue + value = medium_skill_rating + 50 = { # Success + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0010.b.success.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0010.b.success.toast + left_icon = root + add_intrigue_lifestyle_xp = medium_lifestyle_experience + } + } + 50 = { # Failure + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = natural_disaster_flavor_events.0010.b.failure.toast + min = 20 + max = 90 + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0010.b.failure.toast + left_icon = root + add_character_modifier = { + modifier = tgp_deceitful_overconfidence_character_modifier + years = 10 + } + } + } + } + + stress_impact = { + honest = minor_stress_impact_gain + deceitful = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -2 + ai_rationality = 1 + } + } + } + + option = { # Ignore their pleas + name = natural_disaster_flavor_events.0010.c + flavor = natural_disaster_flavor_events.0010.c.tt + current_travel_plan.current_location.county = { + if = { + limit = { + holder = { save_temporary_scope_as = county_holder } + OR = { + scope:county_holder = root + root = { is_vassal_or_below_of = scope:county_holder } + } + } + add_county_modifier = { + modifier = tgp_abandoned_population_modifier + years = 10 + } + } + else = { + root = { add_prestige = minor_prestige_loss } + } + } + + stress_impact = { + compassionate = minor_stress_impact_gain + callous = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -2 + ai_rationality = 2 + } + } + } +} + +# Selfless Acts +natural_disaster_flavor_events.0015 = { + type = character_event + title = natural_disaster_flavor_events.0015.t + desc = natural_disaster_flavor_events.0015.desc + theme = disaster + left_portrait = { + character = root + animation = shock + } + right_portrait = { + character = scope:spouse + animation = fear + } + lower_center_portrait = { + trigger = { exists = scope:heir } + character = scope:heir + } + lower_right_portrait = { + trigger = { exists = scope:courtier } + character = scope:courtier + } + cooldown = { years = 20 } + + trigger = { + has_tgp_dlc_trigger = yes + is_location_valid_for_travel_event_on_land = yes + is_location_affected_by_disaster_in_recovery_trigger = yes + is_landed = yes + primary_spouse ?= { + is_at_same_location = root + } + } + + immediate = { + location.county = { + random_county_situation = { + limit = { tgp_natural_disaster_situation_is_disaster_trigger = yes } + save_scope_as = disaster_situation + } + } + primary_spouse = { + save_scope_as = spouse + } + primary_heir ?= { + if = { + limit = { + this != scope:spouse + is_at_same_location = root + } + save_scope_as = heir + } + } + random_courtier = { + limit = { + this != scope:spouse + this != scope:heir + has_any_court_position = yes + is_at_same_location = root + } + save_scope_as = courtier + } + } + + option = { # Save your spouse + name = natural_disaster_flavor_events.0015.a + random = { + chance = { + value = 25 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.a.failure + left_icon = root + increase_wounds_effect = { REASON = wounds } + } + save_scope_as = damage_done + } + if = { + limit = { + OR = { + exists = scope:heir + exists = scope:courtier + } + } + random = { + chance = { + value = 35 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.a.failure + left_icon = scope:heir + right_icon = scope:courtier + primary_heir ?= { + increase_wounds_effect = { REASON = wounds } + } + scope:courtier ?= { + increase_wounds_effect = { REASON = wounds } + } + } + save_scope_as = damage_done + } + } + + if = { + limit = { NOT = { exists = scope:damage_done } } + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0015.a.success + left_icon = root + } + } + + add_prowess_skill = 1 + reverse_add_opinion = { + target = primary_spouse + modifier = grateful_opinion + opinion = 25 + } + + stress_impact = { + craven = minor_stress_impact_gain + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { # Save your heir + name = natural_disaster_flavor_events.0015.b + trigger = { exists = scope:heir } + + random = { + chance = { + value = 25 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.b.failure + left_icon = root + increase_wounds_effect = { REASON = wounds } + } + save_scope_as = damage_done + } + random = { + chance = { + value = 35 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.b.failure + left_icon = scope:spouse + right_icon = scope:courtier + primary_spouse = { + increase_wounds_effect = { REASON = wounds } + } + scope:courtier ?= { + increase_wounds_effect = { REASON = wounds } + } + } + save_scope_as = damage_done + } + + if = { + limit = { NOT = { exists = scope:damage_done } } + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0015.b.success + left_icon = root + } + } + + add_prowess_skill = 1 + reverse_add_opinion = { + target = primary_heir + modifier = grateful_opinion + opinion = 25 + } + + stress_impact = { + craven = minor_stress_impact_gain + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { # Save your courtier + name = natural_disaster_flavor_events.0015.c + trigger = { exists = scope:courtier } + + random = { + chance = { + value = 25 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.c.failure + left_icon = root + increase_wounds_effect = { REASON = wounds } + } + save_scope_as = damage_done + } + random = { + chance = { + value = 35 + subtract = prowess + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.c.failure + left_icon = scope:spouse + right_icon = scope:heir + primary_spouse = { + increase_wounds_effect = { REASON = wounds } + } + primary_heir ?= { + increase_wounds_effect = { REASON = wounds } + } + } + save_scope_as = damage_done + } + + if = { + limit = { NOT = { exists = scope:damage_done } } + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0015.c.success + left_icon = root + } + } + + add_prowess_skill = 1 + reverse_add_opinion = { + target = scope:courtier + modifier = grateful_opinion + opinion = 25 + } + + stress_impact = { + craven = minor_stress_impact_gain + brave = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = 1 + ai_boldness = 1 + ai_energy = 1 + } + } + } + + option = { # Save yourself + name = natural_disaster_flavor_events.0015.d + random = { + chance = { + value = 45 + } + send_interface_toast = { + type = event_toast_effect_bad + title = natural_disaster_flavor_events.0015.a.failure + left_icon = scope:spouse + right_icon = scope:heir + primary_spouse = { + increase_wounds_effect = { REASON = wounds } + } + primary_heir ?= { + increase_wounds_effect = { REASON = wounds } + } + scope:courtier ?= { + increase_wounds_effect = { REASON = wounds } + } + } + save_scope_as = damage_done + } + + if = { + limit = { NOT = { exists = scope:damage_done } } + send_interface_toast = { + type = event_toast_effect_good + title = natural_disaster_flavor_events.0015.a.success + left_icon = root + } + } + + stress_impact = { + brave = minor_stress_impact_gain + craven = minor_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_honor = -1 + ai_compassion = -1 + ai_boldness = -1 + ai_rationality = 1 + } + } + } +} diff --git a/events/dlc/tgp/tgp_silk_road_events.txt b/events/dlc/tgp/tgp_silk_road_events.txt new file mode 100644 index 00000000..626ba858 --- /dev/null +++ b/events/dlc/tgp/tgp_silk_road_events.txt @@ -0,0 +1,289 @@ +namespace = tgp_silk_road_events + +# visit_silk_road_market_decision + +tgp_silk_road_events.0010 = { + type = character_event + title = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + scope:market_temp = title:c_jingzhao # Chang'an + scope:market_temp = title:c_shazhou # Dunhuang + } + } + desc = tgp_silk_road_events.0010.t.market + } + triggered_desc = { + trigger = { scope:market_temp = title:c_lhasa } # Lhasa + desc = tgp_silk_road_events.0010.t.khrom + } + triggered_desc = { + trigger = { scope:market_temp = title:c_dvin } # Dvin + desc = tgp_silk_road_events.0010.t.shuka + } + desc = tgp_silk_road_events.0010.t + } + } + desc = tgp_silk_road_events.0010.desc + theme = silk_road + override_background = { reference = market } + + left_portrait = { + character = root + animation = steward + } + + immediate = { + culture = { save_scope_as = culture_temp } + save_scope_as = new_trinket # Purely for error suppression + } + + option = { + name = tgp_silk_road_events.0010.a + duel = { + skills = { learning stewardship } + value = average_skill_rating + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + culture = { + add_to_variable_list = { + name = silk_road_unlocked_innovations + target = scope:innovation_temp + } + } + every_player = { + limit = { culture = root.culture } + send_interface_toast = { + type = msg_silk_road_innovation_spread + title = msg_silk_road_innovation_spread_title + desc = msg_silk_road_innovation_visit_desc + left_icon = root + right_icon = scope:market_temp + custom_tooltip = msg_silk_road_innovation_spread_tt + } + } + } + # + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + desc = SILK_ROAD_MARKET_EMPTY_HANDED + send_interface_toast = { + title = tgp_silk_road_events.0010.a_nada + type = event_toast_effect_bad + left_icon = root + } + } + } + + ai_chance = { + base = 50 + + ai_value_modifier = { + ai_rationality = 1 + } + } + } + + + option = { + name = tgp_silk_road_events.0010.b + + random_list = { + desc = tgp_silk_road_events.0010.b_tt + # get a famed-quality or masterwork-quality item + 10 = { + desc = tgp_silk_road_events.0010.b_trinket + + hidden_effect = { + root = { + add_character_flag = { flag = used_in_feast_default.1016 } # uncommon, famed, masterwork items + generate_trinket_effect = { + TRINKET_RECEIVER = root + TRINKET_GIVER = root + GRAB_ALL_TRINKETS = yes + HISTORY_TYPE = given_unknown + } + remove_character_flag = used_in_feast_default.1016 + } + } + send_interface_toast = { + title = tgp_silk_road_events.0010.b_trinket + type = event_toast_effect_good + left_icon = root + right_icon = scope:new_trinket + scope:new_trinket = { + set_owner = root + } + } + custom_tooltip = purchase_artifact_famed_tt + } + # make a profit + 25 = { + desc = tgp_silk_road_events.0010.b_big_gold + send_interface_toast = { + title = tgp_silk_road_events.0010.b_big_gold + type = event_toast_effect_good + left_icon = root + add_short_term_gold = massive_gold_value + } + } + # break even + 40 = { + desc = tgp_silk_road_events.0010.b_small_gold + send_interface_toast = { + title = tgp_silk_road_events.0010.b_small_gold + type = event_toast_effect_good + left_icon = root + add_short_term_gold = major_gold_value # should be the same as the cost of the decision to visit a market + } + } + # get nothing, and if you're greedy, get stressed because you got nothing + 25 = { + desc = tgp_silk_road_events.0010.a_nada + send_interface_toast = { + title = tgp_silk_road_events.0010.a_nada + type = event_toast_effect_bad + left_icon = root + } + stress_impact = { + greedy = minor_stress_impact_gain + } + } + } + + ai_chance = { + base = 10 + + ai_value_modifier = { + ai_boldness = 1 + ai_greed = 1 + } + } + } +} + +# yearly event for spreading innovations from markets to holder's culture + +scripted_effect silk_road_market_spread_innovation_effect = { + # Find relevant innovation + scope:market_temp ?= { + random_county_situation_sub_region = { + limit = { + situation_sub_region_has_county = scope:market_temp + OR = { + sub_region_current_phase = phase_exceptional_bounty + sub_region_current_phase = phase_steady_trading + sub_region_current_phase = phase_hardship + } + } + save_temporary_scope_as = sub_region_temp + var:innovation ?= { save_temporary_scope_as = innovation_temp } + } + } + # Unlock for culture if relevant + if = { + limit = { + NOR = { + scope:culture_temp = { + any_in_list = { + variable = silk_road_unlocked_innovations + this = scope:innovation_temp + } + } + scope:innovation_temp = { is_known_by_culture = scope:culture_temp } + } + } + every_player = { + limit = { culture = scope:culture_temp } + send_interface_message = { + type = msg_silk_road_innovation_spread + title = msg_silk_road_innovation_spread_title + desc = msg_silk_road_innovation_spread_desc + left_icon = scope:market_temp.holder + right_icon = scope:market_temp + custom_tooltip = msg_silk_road_innovation_spread_tt + } + } + scope:culture_temp = { + add_to_variable_list = { + name = silk_road_unlocked_innovations + target = scope:innovation_temp + } + } + } +} + +tgp_silk_road_events.0100 = { + hidden = yes + type = character_event + + trigger = { + OR = { + has_title = title:c_jingzhao # Chang'an + has_title = title:c_lhasa # Lhasa + has_title = title:c_lahur # Lahur + has_title = title:c_shazhou # Dunhuang + has_title = title:c_khiva # Khiva + has_title = title:c_dvin # Dvin + } + } + + immediate = { + culture = { save_temporary_scope_as = culture_temp } + # Find market for yearly if relevant + if = { + limit = { NOT = { exists = scope:title } } + title:c_jingzhao = { add_to_list = potential_markets } # Chang'an + title:c_lhasa = { add_to_list = potential_markets } # Lhasa + title:c_lahur = { add_to_list = potential_markets } # Lahur + title:c_shazhou = { add_to_list = potential_markets } # Dunhuang + title:c_khiva = { add_to_list = potential_markets } # Khiva + title:c_dvin = { add_to_list = potential_markets } # Dvin + every_in_list = { + list = potential_markets + limit = { + save_temporary_scope_as = county_temp + holder = root + any_county_situation_sub_region = { + situation_sub_region_has_county = scope:county_temp + OR = { + sub_region_current_phase = phase_exceptional_bounty + sub_region_current_phase = phase_steady_trading + sub_region_current_phase = phase_hardship + } + # Has not spread to this culture before or is known by this culture + var:innovation ?= { + save_temporary_scope_as = innovation_temp + NOR = { + scope:culture_temp = { + any_in_list = { + variable = silk_road_unlocked_innovations + this = scope:innovation_temp + } + } + is_known_by_culture = scope:culture_temp + } + } + } + } + save_temporary_scope_as = market_temp + silk_road_market_spread_innovation_effect = yes + } + } + # Use gained market otherwise + else = { + scope:title = { save_temporary_scope_as = market_temp } + silk_road_market_spread_innovation_effect = yes + } + } +} diff --git a/events/dlc/tgp/tgp_tai_migration_events.txt b/events/dlc/tgp/tgp_tai_migration_events.txt new file mode 100644 index 00000000..c9107760 --- /dev/null +++ b/events/dlc/tgp/tgp_tai_migration_events.txt @@ -0,0 +1,1149 @@ +################################### +# TAI MIGRATION EVENTS +################################### + +namespace = tgp_tai_migration_event + +# Tai settlers are migrating to your province +tgp_tai_migration_event.1000 = { + type = character_event + title = tgp_tai_migration_event.1000.t + desc = tgp_tai_migration_event.1000.desc + window = big_event_window + theme = realm + right_portrait = { + character = root + camera = camera_event_right_crowner_crowning + animation = personality_rational + } + left_portrait = { + character = scope:migration_leader + camera = camera_event_group_talking_left_left + animation = admiration + } + cooldown = { years = 10 } + + immediate = { + random_county_in_region = { + region = custom_tai_migration_origin + limit = { + culture = { + has_cultural_pillar = heritage_tai + } + } + save_scope_as = migration_origin + holder = { + save_scope_as = migration_origin_holder + } + culture = { + save_scope_as = migration_origin_culture + } + faith = { + save_scope_as = migration_origin_faith + } + } + random_realm_county = { + limit = { + title_province = { + geographical_region = custom_tai_migration_target + } + culture = { + NOT = { + has_cultural_pillar = heritage_tai + } + } + } + save_scope_as = migration_target + } + hidden_effect = { + create_character = { + template = settlement_elder_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = male + after_creation = { + set_to_lowborn = yes + } + save_scope_as = migration_leader + } + add_visiting_courtier = scope:migration_leader + } + } + + option = { # accept them + name = tgp_tai_migration_event.1000.a + scope:migration_target = { + set_county_culture = culture:tai + add_county_modifier = { + modifier = tgp_tai_migration_migration_happened_county_modifier + years = 20 + } + } + culture = { + change_cultural_acceptance = { + target = culture:tai + value = 10 + desc = cultural_acceptance_gain_event + } + } + add_character_modifier = { + modifier = tgp_tai_migration_migration_happened_character_modifier + years = 10 + } + + } + option = { # accept only the skilled, not enough to change culture, but development + trigger = { + is_ai = no + } + name = tgp_tai_migration_event.1000.b + scope:migration_target = { + add_county_modifier = { + modifier = tgp_tai_migration_skilled_development_county_modifier + years = 10 + } + } + add_prestige = medium_prestige_gain + } + option = { # shoo them away + trigger = { + is_ai = no + } + name = tgp_tai_migration_event.1000.c + add_character_modifier = { + modifier = tgp_tai_migration_migration_rejected_character_modifier + years = 10 + } + custom_tooltip = { + text = tgp_tai_migration_event_1000.c_shooed_immigrants_tt + random_list = { + 80 = { + random_ruler = { # send them to another eligible migration reciever; since this is a non-ai option, it won't happen again twice for the ai, and they'll settle there + limit = { + any_owned_story = { + type = story_tai_migrations + } + is_ai = yes + } + trigger_event = { + id = tgp_tai_migration_event.1000 + months = 1 + } + } + } + 20 = {} + } + } + } + + after = { + hidden_effect = { + if = { # make option a's elder disappear only if he's not recruited with character interaction + limit = { + scope:migration_leader = { + NOT = { + is_courtier_of = root + } + } + } + scope:migration_leader = { + silent_disappearance_effect = yes + } + } + } + } +} + +scripted_effect courtier_replacement_scripted_effect = { + #Replace current character if any + if = { + limit = { + employs_court_position = $POSITION$ + } + add_courtier = $CHARACTER$ + every_court_position_holder = { + type = $POSITION$ + save_temporary_scope_as = current_court_position_holder + employer = { + replace_court_position = { + recipient = $CHARACTER$ + holder = scope:current_court_position_holder + court_position = $POSITION$ + } + } + } + } + #Or simply appoint new character + else = { + add_courtier = $CHARACTER$ + appoint_court_position = { + recipient = $CHARACTER$ + court_position = $POSITION$ + } + } + custom_tooltip = will_have_excellent_aptitude +} + +# Skilled Tai character offers services +tgp_tai_migration_event.2000 = { + type = character_event + title = tgp_tai_migration_event.2000.t + desc = { + desc = tgp_tai_migration_event.2000.desc + first_valid = { + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_wet_nurse + } + } + desc = tgp_tai_migration_event.2000.wet_nurse.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_champion + } + } + desc = tgp_tai_migration_event.2000.champion.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_travel_leader + } + } + desc = tgp_tai_migration_event.2000.travel_leader.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_master_of_hunt + } + } + desc = tgp_tai_migration_event.2000.master_of_hunt.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_court_physician + } + } + desc = tgp_tai_migration_event.2000.court_physician.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_antiquarian + } + } + desc = tgp_tai_migration_event.2000.antiquarian.desc + } + triggered_desc = { + trigger = { + scope:migrant_skilled_character = { + has_character_flag = migrant_court_tutor + } + } + desc = tgp_tai_migration_event.2000.court_tutor.desc + } + } + desc = tgp_tai_migration_event.2000.end.desc + } + theme = realm + right_portrait = { + character = root + camera = camera_event_right_crowner_crowning + animation = personality_rational + } + left_portrait = { + character = scope:migrant_skilled_character + camera = camera_event_group_talking_left_left + animation = admiration + } + cooldown = { years = 20 } + trigger = { + OR = { # checks if any of the following court posiitons are present at the court + OR = { + can_employ_court_position_type = wet_nurse_court_position + employs_court_position = wet_nurse_court_position + } + OR = { + can_employ_court_position_type = champion_court_position + employs_court_position = champion_court_position + } + OR = { + can_employ_court_position_type = travel_leader_court_position + employs_court_position = travel_leader_court_position + } + OR = { + can_employ_court_position_type = master_of_hunt_court_position + employs_court_position = master_of_hunt_court_position + } + OR = { + can_employ_court_position_type = court_physician_court_position + employs_court_position = court_physician_court_position + } + OR = { + can_employ_court_position_type = antiquarian_court_position + employs_court_position = antiquarian_court_position + } + OR = { + can_employ_court_position_type = court_tutor_court_position + employs_court_position = court_tutor_court_position + } + } + } + immediate = { + random_county_in_region = { # locate a Tai county where the character supposedly migrated from + region = custom_tai_migration_origin + limit = { + culture = { + has_cultural_pillar = heritage_tai + } + } + save_scope_as = migration_origin + holder = { + save_scope_as = migration_origin_holder + } + culture = { + save_scope_as = migration_origin_culture + } + faith = { + save_scope_as = migration_origin_faith + } + } + hidden_effect = { # Pick one of six court positions and create a character randomly + random_list = { + 1 = { + trigger = { + OR = { + can_employ_court_position_type = wet_nurse_court_position + employs_court_position = wet_nurse_court_position + } + } + create_character = { + template = wet_nurse_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_wet_nurse + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 1 = { + trigger = { + OR = { + can_employ_court_position_type = champion_court_position + employs_court_position = champion_court_position + } + } + create_character = { + template = champion_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_champion + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 1 = { + trigger = { + OR = { + can_employ_court_position_type = travel_leader_court_position + employs_court_position = travel_leader_court_position + } + } + create_character = { + template = travel_leader_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_travel_leader + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 1 = { + trigger = { + OR = { + can_employ_court_position_type = master_of_hunt_court_position + employs_court_position = master_of_hunt_court_position + } + } + create_character = { + template = master_of_hunt_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_master_of_hunt + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 1 = { + trigger = { + OR = { + can_employ_court_position_type = court_physician_court_position + employs_court_position = court_physician_court_position + } + } + create_character = { + template = court_physician_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_court_physician + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 1 = { + trigger = { + OR = { + can_employ_court_position_type = antiquarian_court_position + employs_court_position = antiquarian_court_position + } + } + create_character = { + template = antiquarian_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_antiquarian + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + 3 = { + trigger = { + OR = { + can_employ_court_position_type = court_tutor_court_position + employs_court_position = court_tutor_court_position + } + } + create_character = { + template = court_tutor_court_position_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + add_character_flag = migrant_court_tutor + } + save_scope_as = migrant_skilled_character + } + add_visiting_courtier = scope:migrant_skilled_character + } + } + } + + } + + option = { + name = tgp_tai_migration_event.2000.a # employ the character + culture = { + change_cultural_acceptance = { + target = culture:tai + value = 6 + desc = cultural_acceptance_gain_event + } + } + if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_wet_nurse + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = wet_nurse_court_position + } + } + else_if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_champion + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = champion_court_position + } + } + else_if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_travel_leader + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = travel_leader_court_position + } + } + else_if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_master_of_hunt + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = master_of_hunt_court_position + } + } + else_if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_antiquarian + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = antiquarian_court_position + } + } + else_if = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_court_tutor + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = court_tutor_court_position + } + } + else = { + limit = { + scope:migrant_skilled_character = { + has_character_flag = migrant_court_physician + } + } + courtier_replacement_scripted_effect = { + CHARACTER = scope:migrant_skilled_character + POSITION = court_physician_court_position + } + } + pay_treasury_or_gold = { + target = scope:migrant_skilled_character + value = medium_treasury_or_gold_value + } + ai_chance = { + base = 100 + } + } + option = { + name = tgp_tai_migration_event.2000.b # invite to court, but not as an employer + duel = { + skill = diplomacy + value = medium_skill_rating + 300 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + min = -49 + } + add_courtier = scope:migrant_skilled_character + send_interface_toast = { + title = tgp_tai_migration_event.2000.b.success + left_icon = root + right_icon = scope:migrant_skilled_character + add_prestige = minor_prestige_gain + } + } + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = -49 + } + show_as_tooltip = { + remove_courtier_or_guest = scope:migrant_skilled_character + } + hidden_effect = { + if = { # make option a's elder disappear only if he's not recruited with character interaction + limit = { + scope:migrant_skilled_character = { + NOT = { + is_courtier_of = root + } + } + } + scope:migrant_skilled_character = { + silent_disappearance_effect = yes + } + } + } + send_interface_toast = { + title = tgp_tai_migration_event.2000.b.failure + left_icon = root + right_icon = scope:migrant_skilled_character + add_prestige = minor_prestige_loss + } + } + } + } + option = { + name = tgp_tai_migration_event.2000.c # do not employ the character + show_as_tooltip = { + remove_courtier_or_guest = scope:migrant_skilled_character + } + hidden_effect = { + if = { # make option a's elder disappear only if he's not recruited with character interaction + limit = { + scope:migrant_skilled_character = { + NOT = { + is_courtier_of = root + } + } + } + scope:migrant_skilled_character = { + silent_disappearance_effect = yes + } + } + } + } + + after = { + + } +} + +# Noble Tai character and his family are asking for a county or a barony title +tgp_tai_migration_event.3000 = { + type = character_event + title = tgp_tai_migration_event.3000.t + desc = tgp_tai_migration_event.3000.desc + theme = realm + right_portrait = { + character = root + camera = camera_event_right_crowner_crowning + animation = personality_rational + } + left_portrait = { + character = scope:title_asking_noble_husband + camera = camera_event_group_talking_left_left + animation = admiration + } + cooldown = { years = 5 } + trigger = { + highest_held_title_tier >= tier_duchy + any_held_title = { + count > 2 + tier = tier_county + } + } + immediate = { + random_county_in_region = { # locate a Tai county where the character supposedly migrated from + region = custom_tai_migration_origin + limit = { + culture = { + has_cultural_pillar = heritage_tai + } + } + save_scope_as = migration_origin + holder = { + save_scope_as = migration_origin_holder + } + culture = { + save_scope_as = migration_origin_culture + } + faith = { + save_scope_as = migration_origin_faith + } + } + random_held_title = { + limit = { + tier = tier_county + NOT = { + this.county = root.capital_county + } + } + save_scope_as = target_asked_title + } + hidden_effect = { + create_character = { + template = local_noble_character + location = root.capital_province + gender = male + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + save_scope_as = title_asking_noble_husband + } + add_visiting_courtier = scope:title_asking_noble_husband + create_character = { + template = local_noble_character + location = root.capital_province + gender = female + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + marry = scope:title_asking_noble_husband + } + save_scope_as = title_asking_noble_wife + } + create_character = { + template = peasant_child_character + location = root.capital_province + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = male + after_creation = { + set_mother = scope:title_asking_noble_wife + set_father = scope:title_asking_noble_husband + } + save_scope_as = title_asking_noble_son + } + add_visiting_courtier = scope:title_asking_noble_husband + add_visiting_courtier = scope:title_asking_noble_wife + add_visiting_courtier = scope:title_asking_noble_son + } + } + + option = { + name = tgp_tai_migration_event.3000.a # accept + create_title_and_vassal_change = { + type = granted + save_scope_as = title_change + add_claim_on_loss = no + } + scope:target_asked_title = { + change_title_holder = { + holder = scope:title_asking_noble_husband + change = scope:title_change + } + } + resolve_title_and_vassal_change = scope:title_change + culture = { + change_cultural_acceptance = { + target = culture:tai + value = 8 + desc = cultural_acceptance_gain_event + } + } + house = { + change_house_relation_effect = { + HOUSE = scope:title_asking_noble_husband.house + VALUE = house_relation_improve_major_value + REASON = title_grant + CHAR = root + TARGET_CHAR = scope:title_asking_noble_husband + TITLE = scope:dummy_gender + } + } + reverse_add_opinion = { + modifier = received_title_county + target = scope:title_asking_noble_husband + } + reverse_add_opinion = { + modifier = loyalty_opinion + target = scope:title_asking_noble_son + } + add_hook = { + type = loyalty_hook + target = scope:title_asking_noble_husband + } + add_hook = { + type = loyalty_hook + target = scope:title_asking_noble_son + } + add_prestige = major_prestige_gain + stress_impact = { + greedy = medium_stress_impact_gain + generous = medium_stress_impact_loss + } + } + option = { + name = tgp_tai_migration_event.3000.b # reject + remove_courtier_or_guest = scope:title_asking_noble_husband + remove_courtier_or_guest = scope:title_asking_noble_wife + remove_courtier_or_guest = scope:title_asking_noble_son + stress_impact = { + generous = medium_stress_impact_gain + greedy = medium_stress_impact_loss + } + } + + after = { + + } +} + +# A family of peasants are asking to move into your court +tgp_tai_migration_event.4000 = { + type = character_event + title = tgp_tai_migration_event.4000.t + desc = tgp_tai_migration_event.4000.desc + window = big_event_window + theme = realm + right_portrait = { + character = root + camera = camera_event_center_pointing_very_left + animation = personality_rational + } + center_portrait = { + character = scope:lowborn_tai_family_husband + camera = camera_event_horse_right_facing_left_close + animation = admiration + } + left_portrait = { + character = scope:lowborn_tai_family_wife + camera = camera_event_group_talking_left_left + animation = personality_coward + } + lower_right_portrait = { + character = scope:lowborn_tai_family_son + } + lower_center_portrait = { + character = scope:lowborn_tai_family_daughter + } + cooldown = { years = 5 } + + immediate = { + random_county_in_region = { + region = custom_tai_migration_origin + limit = { + culture = { + has_cultural_pillar = heritage_tai + } + } + save_scope_as = migration_origin + holder = { + save_scope_as = migration_origin_holder + } + culture = { + save_scope_as = migration_origin_culture + } + faith = { + save_scope_as = migration_origin_faith + } + } + hidden_effect = { + create_character = { + template = generic_peasant_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = male + after_creation = { + set_to_lowborn = yes + } + save_scope_as = lowborn_tai_family_husband + } + create_character = { + template = generic_peasant_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = female + after_creation = { + set_to_lowborn = yes + marry = scope:lowborn_tai_family_husband + } + save_scope_as = lowborn_tai_family_wife + } + create_character = { + template = peasant_child_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = male + after_creation = { + set_to_lowborn = yes + set_mother = scope:lowborn_tai_family_wife + set_father = scope:lowborn_tai_family_husband + } + save_scope_as = lowborn_tai_family_son + } + create_character = { + template = peasant_child_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = female + after_creation = { + set_to_lowborn = yes + set_mother = scope:lowborn_tai_family_wife + set_father = scope:lowborn_tai_family_husband + } + save_scope_as = lowborn_tai_family_daughter + } + add_visiting_courtier = scope:lowborn_tai_family_husband + add_visiting_courtier = scope:lowborn_tai_family_wife + add_visiting_courtier = scope:lowborn_tai_family_son + add_visiting_courtier = scope:lowborn_tai_family_daughter + } + } + + option = { + name = tgp_tai_migration_event.4000.a # accept + add_courtier = scope:lowborn_tai_family_husband + add_courtier = scope:lowborn_tai_family_wife + add_courtier = scope:lowborn_tai_family_son + add_courtier = scope:lowborn_tai_family_daughter + culture = { + change_cultural_acceptance = { + target = culture:tai + value = 4 + desc = cultural_acceptance_gain_event + } + } + reverse_add_opinion = { + modifier = loyalty_opinion + target = scope:lowborn_tai_family_husband + } + add_hook = { + type = loyalty_hook + target = scope:lowborn_tai_family_husband + } + add_piety = medium_piety_gain + stress_impact = { + cynical = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + generous = medium_stress_impact_loss + } + } + option = { + name = tgp_tai_migration_event.4000.b # reject + show_as_tooltip = { + remove_courtier_or_guest = scope:lowborn_tai_family_husband + remove_courtier_or_guest = scope:lowborn_tai_family_wife + remove_courtier_or_guest = scope:lowborn_tai_family_son + remove_courtier_or_guest = scope:lowborn_tai_family_daughter + } + hidden_effect = { + if = { # make characters disappear only if they are not recruited with character interaction + limit = { + scope:lowborn_tai_family_husband = { + NOT = { + is_courtier_of = root + } + } + } + scope:lowborn_tai_family_husband = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + scope:lowborn_tai_family_wife = { + NOT = { + is_courtier_of = root + } + } + } + scope:lowborn_tai_family_wife = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + scope:lowborn_tai_family_son = { + NOT = { + is_courtier_of = root + } + } + } + scope:lowborn_tai_family_son = { + silent_disappearance_effect = yes + } + } + if = { + limit = { + scope:lowborn_tai_family_daughter = { + NOT = { + is_courtier_of = root + } + } + } + scope:lowborn_tai_family_daughter = { + silent_disappearance_effect = yes + } + } + } + stress_impact = { + compassionate = medium_stress_impact_gain + generous = medium_stress_impact_gain + cynical = medium_stress_impact_loss + } + } + + after = { + + } +} + +tgp_tai_migration_event.5000 = { # Spawn guests to migration target courts + hidden = yes + + cooldown = { years = 20 } + + immediate = { + random_county_in_region = { + region = custom_tai_migration_origin + limit = { + culture = { + has_cultural_pillar = heritage_tai + } + } + culture = { + save_scope_as = migration_origin_culture + } + faith = { + save_scope_as = migration_origin_faith + } + } + hidden_effect = { + random_list = { + 1 = { + create_character = { + template = beautiful_peasant_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + gender = female + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = witchy_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = merchant_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = hunter_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = very_good_eunuch_character + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = tgp_warrior_monk_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = tgp_court_brahmin_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + 1 = { + create_character = { + template = tgp_poet_lover_template + location = root.capital_province + dynasty = none + culture = scope:migration_origin_culture + faith = scope:migration_origin_faith + after_creation = { + set_to_lowborn = yes + } + save_scope_as = guest_tai_character + } + add_visiting_courtier = scope:guest_tai_character + } + } + } + } +} diff --git a/events/dlc/tgp/tgp_travel_danger_events.txt b/events/dlc/tgp/tgp_travel_danger_events.txt new file mode 100644 index 00000000..f1a952de --- /dev/null +++ b/events/dlc/tgp/tgp_travel_danger_events.txt @@ -0,0 +1,320 @@ +namespace = tgp_travel_danger_events +#You encounter an orphan while traveling trough an area struck by natural disaster +tgp_travel_danger_events.0001 = { + type = character_event + title = tgp_travel_danger_events.0001.t + desc = { + desc = tgp_travel_danger_events.0001.intro + #Triggered desc based on success + first_valid = { + triggered_desc ={ + trigger = { + location = { + county = { + any_county_situation = { + situation_type = natural_disaster_flood + } + } + } + } + desc = tgp_travel_danger_events.0001.flood + } + triggered_desc ={ + trigger = { + location = { + county = { + any_county_situation = { + situation_type = natural_disaster_earthquake + } + } + } + } + desc = tgp_travel_danger_events.0001.earthquake + } + } + + desc = tgp_travel_danger_events.0001.desc + } + theme = travel_danger + + override_background = { + trigger = { + location = { + geographical_region = world_asia + county = { + any_county_situation = { + situation_type = natural_disaster_earthquake + } + } + } + } + reference = tgp_ruined_holding + } + override_background = { + trigger = { + location = { + geographical_region = world_asia + county = { + any_county_situation = { + situation_type = natural_disaster_flood + } + } + } + } + reference = tgp_overflowing_river + } + override_background = { + trigger = { + location = { + NOT = { geographical_region = world_asia } + county = { + any_county_situation = { + situation_type = natural_disaster_earthquake + } + } + } + } + reference = burning_building + } + override_background = { + trigger = { + location = { + NOT = { geographical_region = world_asia } + county = { + any_county_situation = { + situation_type = natural_disaster_flood + } + } + } + } + reference = bp3_riverside + } + override_effect_2d = { + trigger = { scope:disaster_situation = { situation_type = natural_disaster_earthquake } } + reference = smoke + } + override_effect_2d = { + trigger = { scope:disaster_situation = { situation_type = natural_disaster_flood } } + reference = rain + } + left_portrait = { + character = root + triggered_animation = { + trigger = { + has_trait_benevolent_trigger = yes + } + animation = stunned + } + triggered_animation = { + trigger = { + has_trait_malicious_trigger = yes + } + animation = dismissal + } + + animation = disbelief + camera = camera_event_scheme_left + } + right_portrait = { + character = scope:peasant_character_child + animation = sadness + camera = camera_event_right_pointing_left + } + cooldown = { years = 20 } + + trigger = { + is_location_valid_for_travel_event_on_land = yes + is_available_travelling_adult = yes + + location = { + county = { + any_county_situation = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + } + } + } + } + + immediate = { + location.county = { + random_county_situation = { + limit = { + tgp_natural_disaster_situation_is_disaster_trigger = yes + } + save_scope_as = disaster_situation + } + } + if = { + limit = { + any_pool_character = { + province = root.location + age = { 8 12 } + has_trait = diligent + faith = root.location.faith + culture = root.location.culture + } + } + random_pool_character = { + province = root.location + limit = { + age = { 8 12 } + has_trait = diligent + faith = root.location.faith + culture = root.location.culture + } + save_scope_as = peasant_character_child + } + } + else = { + create_character = { + template = peasant_child_character + age = { 8 12 } + trait = diligent + faith = root.location.faith + culture = root.location.culture + location = root.location + + save_scope_as = peasant_character_child + } + } + scope:peasant_character_child = { + remove_character_flag ?= peasant_outfit + } + } + #Send men to clear the rubble + option = { + name = tgp_travel_danger_events.0001.a + current_travel_plan = { + delay_travel_plan = { days = 10 } + } + if = { + limit = { + government_allows = merit + } + change_merit = medium_merit_gain + } + else = { + add_prestige = medium_prestige_gain + } + stress_impact = { + impatient = medium_stress_impact_gain + compassionate = medium_stress_impact_loss + } + scope:peasant_character_child = { + if = { + limit = { + is_pool_character = no + } + silent_disappearance_ai_effect = yes + } + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + modifier = { + factor = 0 + has_trait = impatient + } + } + } + + #Take the child on as a ward + option = { + name = tgp_travel_danger_events.0001.b + trigger = { + num_of_relation_ward < 2 + } + show_as_tooltip = { add_courtier = scope:peasant_character_child } + hidden_effect = { + scope:peasant_character_child = { + add_to_court_and_entourage_effect = yes + } + } + scope:peasant_character_child = { set_relation_guardian = root } + + if = { + limit = { + root.current_travel_plan = { + any_entourage_character = { has_trait = compassionate } + } + } + root.current_travel_plan = { + every_entourage_character = { + custom = custom.every_compassionate_entourage_character + limit = { has_trait = compassionate } + add_opinion = { + target = root + modifier = impressed_by_kindness + opinion = 15 + } + } + } + } + if = { + limit = { faith = { trait_is_virtue = compassionate } } + add_piety = medium_piety_gain + } + stress_impact = { + callous = major_stress_impact_gain + sadistic = major_stress_impact_gain + compassionate = major_stress_impact_loss + } + + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = 1 + ai_vengefulness = -1 + } + modifier = { + factor = 5 + has_trait = compassionate + } + modifier = { + factor = 5 + OR = { + has_trait = wrathful + has_trait = callous + has_trait = sadistic + } + } + } + } + #Ignore the child + option = { + name = tgp_travel_danger_events.0001.c + + current_travel_plan ?= { + add_destination_progress = { days = 5 } + } + + scope:peasant_character_child = { + if = { + limit = { + is_pool_character = no + } + silent_disappearance_ai_effect = yes + } + } + stress_impact = { + compassionate = major_stress_impact_gain + impatient = major_stress_impact_loss + } + ai_chance = { + base = 100 + ai_value_modifier = { + ai_compassion = -1 + ai_vengefulness = 1 + } + modifier = { + factor = 0 + has_trait = compassionate + } + } + } +} + diff --git a/events/dlc/tgp/tgp_tribute_mission_events.txt b/events/dlc/tgp/tgp_tribute_mission_events.txt new file mode 100644 index 00000000..aebab4ae --- /dev/null +++ b/events/dlc/tgp/tgp_tribute_mission_events.txt @@ -0,0 +1,4739 @@ +namespace = tribute_mission + + +# 0001 -> Hidden: Set the parameters + +## Character Events ## +# 1000 -> Tributary: Fork over Tribute, try to influence reward +# 1002 -> Overlord: Do you want the Human Tribute? +# 1005 -> Overlord: Decide the reward +# 1006 -> Overlord: CHINA - Decide whether to grant a Seal of Investiture or not +# 1007 -> Tributary: CHINA - Receive the Seal of Investiture +# 1008 -> Tributary: HEGEMON - Decide whether to become a Tributary or not +# 1010 -> Tributary: Receive reward, go home + +## Court Events ## +# 3000 -> Tributary: Fork over Tribute, try to influence reward +# 3002 -> Overlord: Do you want the Human Tribute? ###DEPRECATED +# 3005 -> Overlord: Decide the reward ###DEPRECATED +# 3010 -> Tributary: Receive reward, go home + +## Letter Events ## +# 9000 -> Tributary: Overlord is informing you of your imminent loss of tributary-status (unless you Tribute Mission) +# 9500 -> Tributary: You ignored the Tribute Mission, Overlord goes bye-bye + +## Travel Events ## +# 9750 -> Tributary: You lost your Human Tribute +# 9760 -> Tributary: Your to-be Eunuch is trying to escape + +# Note on scope naming: 'overlord_scope' and 'tributary_scope' can be misleading since it's technically possible for some +# non-tributaries to go on tribute missions as well. Consider these equivalent to "tribute receiver" and "tribute payer". + +scripted_trigger tribute_mission_1000_available_receiver_trigger = { + is_available = yes + location = scope:overlord_scope.capital_province +} + +#Hidden: Set the parameters +tribute_mission.0001 = { + hidden = yes + immediate = { + #Determine who is who + save_scope_as = tributary_scope + var:tribute_mission_target_scope ?= { save_scope_as = overlord_scope } + #Who is the receiving character? + scope:overlord_scope = { + #Overlord + if = { + limit = { + is_available = yes + is_adult = yes + } + save_scope_as = receiving_character + } + #Diarch + else_if = { + limit = { + diarch ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + diarch = { save_scope_as = receiving_character } + } + #Councillor + else_if = { + limit = { + OR = { + cp:councillor_court_chaplain ?= { tribute_mission_1000_available_receiver_trigger = yes } + cp:councillor_chancellor ?= { tribute_mission_1000_available_receiver_trigger = yes } + cp:councillor_steward ?= { tribute_mission_1000_available_receiver_trigger = yes } + cp:councillor_marshal ?= { tribute_mission_1000_available_receiver_trigger = yes } + cp:councillor_spymaster ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + } + if = { + limit = { + cp:councillor_steward ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + cp:councillor_steward = { save_scope_as = receiving_character } + } + if = { + limit = { + NOT = { exists = scope:receiving_character } + cp:councillor_chancellor ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + cp:councillor_chancellor = { save_scope_as = receiving_character } + } + if = { + limit = { + NOT = { exists = scope:receiving_character } + cp:councillor_spymaster ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + cp:councillor_spymaster = { save_scope_as = receiving_character } + } + if = { + limit = { + NOT = { exists = scope:receiving_character } + cp:councillor_court_chaplain ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + cp:councillor_court_chaplain = { save_scope_as = receiving_character } + } + if = { + limit = { + NOT = { exists = scope:receiving_character } + cp:councillor_marshal ?= { tribute_mission_1000_available_receiver_trigger = yes } + } + cp:councillor_marshal = { save_scope_as = receiving_character } + } + } + #Random attendant + else = { + create_character = { + template = servant_character + location = scope:overlord_scope.capital_province + culture = scope:overlord_scope.capital_province.culture + faith = scope:overlord_scope.capital_province.faith + dynasty = none + save_scope_as = receiving_character + } + scope:receiving_character = { + remove_character_flag = peasant_outfit + add_character_flag = created_attendant + } + scope:overlord_scope = { + hidden_effect = { add_courtier = scope:receiving_character } + } + } + # Save Overlord's opinion of the Tributary + save_opinion_value_as = { + name = opinion_of_tributary + target = scope:tributary_scope + } + } + #Set up the human tribute scopes + if = { + limit = { var:tribute_mission_type ?= flag:concubine_tribute } + var:offered_concubine ?= { save_scope_as = concubine_character } + } + if = { + limit = { var:tribute_mission_type ?= flag:eunuch_tribute } + var:offered_eunuch ?= { + save_scope_as = eunuch_character + if = { + limit = { is_eunuch_trigger = no } + remove_opinion = { + modifier = slated_for_castration_opinion + target = scope:tributary_scope + } + add_trait = eunuch_1 + add_opinion = { + modifier = castration_opinion + target = scope:tributary_scope + opinion = -50 + } + add_character_flag = { + flag = tribute_mission_recently_castrated + days = 30 + } + } + } + } + #... or the non-living scopes + if = { + limit = { var:tribute_mission_type ?= flag:artifact_tribute } + var:offered_artifact ?= { save_scope_as = artifact_to_tribute } + } + if = { + limit = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + var:offered_bunga_mas ?= { save_scope_as = artifact_to_tribute } + } + #Hol' up while we're here + hidden_effect = { + current_travel_plan ?= { pause_travel_plan = yes } + } + #Roll for Bunga Mas + if = { + limit = { + is_ai = yes + scope:overlord_scope = { + government_has_flag = government_is_mandala + NOT = { has_variable = bunga_mas_cooldown } + } + } + random = { + chance = 1 + modifier = { + scope:overlord_scope = { has_unruined_mandala_capital_trigger = yes } + add = { + value = scope:overlord_scope.mandala_radiance_value + divide = 10 + } + } + scope:overlord_scope = { + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + set_variable = { + name = bunga_mas_cooldown + years = 5 + } + } + hidden_effect_new_object = { + scope:tributary_scope = { + create_bunga_mas_artifact_effect = yes + } + scope:newly_created_bunga_mas = { + remove_artifact_modifier = artifact_placeholder_modifier + if = { + limit = { rarity = illustrious } + set_artifact_description = tribute_mission_illustrious_bunga_mas_desc + add_artifact_modifier = artifact_legitimacy_gain_mult_5_modifier + add_artifact_modifier = artifact_health_gain_3_modifier + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + } + add_artifact_modifier = artifact_seduce_scheme_phase_duration_add_3_modifier + add_artifact_modifier = artifact_fertility_gain_3_modifier + add_artifact_modifier = artifact_build_gold_cost_3_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + } + add_artifact_modifier = artifact_befriend_scheme_phase_duration_add_3_modifier + add_artifact_modifier = artifact_scheme_resistance_add_3_modifier + add_artifact_modifier = artifact_stress_gain_4_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + add_artifact_modifier = artifact_pursue_efficiency_2_modifier + add_artifact_modifier = artifact_prowess_4_modifier + add_artifact_modifier = artifact_knight_limit_1_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + } + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_10_modifier + add_artifact_modifier = artifact_owned_personal_scheme_success_chance_add_10_modifier + add_artifact_modifier = artifact_owned_scheme_secrecy_add_10_modifier + } + } + else_if = { + limit = { rarity = famed } + set_artifact_description = tribute_mission_famed_bunga_mas_desc + add_artifact_modifier = artifact_legitimacy_gain_mult_4_modifier + add_artifact_modifier = artifact_health_gain_2_modifier + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_creation } + } + } + add_artifact_modifier = artifact_seduce_scheme_phase_duration_add_2_modifier + add_artifact_modifier = artifact_fertility_gain_1_modifier + add_artifact_modifier = artifact_build_gold_cost_1_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_serenity } + } + } + add_artifact_modifier = artifact_befriend_scheme_phase_duration_add_2_modifier + add_artifact_modifier = artifact_scheme_resistance_add_1_modifier + add_artifact_modifier = artifact_stress_gain_2_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_destruction } + } + } + add_artifact_modifier = artifact_pursue_efficiency_1_modifier + add_artifact_modifier = artifact_prowess_2_modifier + } + if = { + limit = { + scope:overlord_scope = { + house = { has_house_aspiration_parameter = aspect_of_trickery } + } + } + add_artifact_modifier = artifact_owned_hostile_scheme_success_chance_add_5_modifier + add_artifact_modifier = artifact_owned_personal_scheme_success_chance_add_5_modifier + add_artifact_modifier = artifact_owned_scheme_secrecy_add_5_modifier + } + } + else_if = { + limit = { rarity = masterwork } + set_artifact_description = tribute_mission_masterwork_bunga_mas_desc + add_artifact_modifier = artifact_legitimacy_gain_mult_3_modifier + add_artifact_modifier = artifact_health_gain_1_modifier + } + else = { + set_artifact_description = tribute_mission_common_bunga_mas_desc + add_artifact_modifier = artifact_legitimacy_gain_mult_2_modifier + } + } + } + } + } + #Do they have a royal court and is the overlord available? Trigger court event for the tributary + if = { + limit = { + scope:overlord_scope = { + has_royal_court = yes + this = scope:receiving_character + } + } + trigger_event = tribute_mission.3000 + } + else = { trigger_event = tribute_mission.1000 } + } +} + +tribute_mission.0002 = { + hidden = yes + #Double-check the status of the human tribute + immediate = { + if = { + limit = { + OR = { + AND = { + var:tribute_mission_type ?= flag:concubine_tribute + var:offered_concubine ?= { is_alive = no } + } + AND = { + var:tribute_mission_type ?= flag:eunuch_tribute + var:offered_eunuch ?= { is_alive = no } + } + } + } + add_character_flag = revisit_tribute_mission_0001 + trigger_event = tribute_mission.9750 + } + else = { trigger_event = tribute_mission.0001 } + } +} + +#Make any stray created attendant disappear +tribute_mission.0005 = { + hidden = yes + immediate = { silent_disappearance_effect = yes } +} + + +### TRIBUTES ### +#Gold +scripted_trigger tribute_mission_1000_gold_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_gold_value } +} + +scripted_effect tribute_mission_1000_fork_over_gold_effect = { + scope:overlord_scope = { add_gold = scope:tributary_scope.var:offered_gold_value } +} + +#Herd +scripted_trigger tribute_mission_1000_herd_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_herd_value } +} + +scripted_effect tribute_mission_1000_fork_over_herd_effect = { + scope:overlord_scope = { add_gold = herd_conversion_tribute_value } +} + +#Concubine +scripted_trigger tribute_mission_1000_concubine_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_concubine } +} + +scripted_effect tribute_mission_1000_common_arrival_effect = { + #Save the concubine + if = { + limit = { exists = scope:concubine_character } + scope:concubine_character = { save_scope_as = human_tribute } + } + #Save the eunuch + if = { + limit = { exists = scope:eunuch_character } + scope:eunuch_character = { save_scope_as = human_tribute } + } + #If we're gifting an artifact + scope:artifact_to_tribute ?= { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 10 + } + } + #Or a Bunga Mas + scope:newly_created_bunga_mas ?= { + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 10 + } + } + #Grant Legitimacy to Hegemonic Suzerains depending on the tier of the tributary + if = { + limit = { scope:overlord_scope = { highest_held_title_tier = tier_hegemony } } + save_temporary_scope_value_as = { + name = legitimacy_gain + value = { + switch = { + trigger = scope:tributary_scope.primary_title.tier + tier_county = { + add = miniscule_legitimacy_gain + } + tier_duchy = { + add = minor_legitimacy_gain + } + tier_kingdom = { + add = medium_legitimacy_gain + } + tier_empire = { + add = major_legitimacy_gain + } + } + } + } + scope:overlord_scope = { + send_interface_toast = { + type = event_toast_effect_good + title = tribute_mission_suzerain_legitimacy_gain_title + left_icon = scope:tributary_scope + right_icon = this + add_legitimacy_effect = { LEGITIMACY = scope:legitimacy_gain } + } + } + } +} + +scripted_effect tribute_mission_1000_make_concubine_effect = { + hidden_effect = { + scope:tributary_scope = { + current_travel_plan ?= { remove_character = scope:concubine_character } + } + } + make_concubine = scope:concubine_character # make_concubine inherently also adds them as a courtier first, for reference +} + +scripted_effect tribute_mission_1000_make_courtier_effect = { + hidden_effect = { + scope:tributary_scope = { + current_travel_plan ?= { remove_character = $HUMAN_TRIB$ } + } + } + if = { + limit = { + $HUMAN_TRIB$ = { + employer != scope:overlord_scope + } + } + scope:overlord_scope = { add_courtier = $HUMAN_TRIB$ } + } +} + +scripted_trigger tribute_mission_1000_overlord_can_employ_concubine_trigger = { + scope:overlord_scope = { allowed_more_concubines = yes } +} + +scripted_effect tribute_mission_1000_fork_over_concubine_effect = { + scope:overlord_scope = { + #If the overlord is AI, they've already accepted the concubine via the interaction so just assign them right away + if = { + limit = { is_ai = yes } + if = { + limit = { tribute_mission_1000_overlord_can_employ_concubine_trigger = yes } + tribute_mission_1000_make_concubine_effect = yes + } + else = { + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:concubine_character } + } + } + } +} + +#Eunuch +scripted_trigger tribute_mission_1000_eunuch_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_eunuch } +} + +#Artifact +scripted_trigger tribute_mission_1000_artifact_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_artifact } +} + +scripted_effect tribute_mission_1000_fork_over_artifact_effect = { + scope:artifact_to_tribute = { set_owner = scope:overlord_scope } +} + +#Bunga Mas +scripted_trigger tribute_mission_1000_bunga_mas_tributary_trigger = { + scope:tributary_scope = { has_variable = offered_bunga_mas } +} + +scripted_effect tribute_mission_1000_determine_bunga_mas_scale_effect = { + if = { + limit = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + if = { + limit = { + scope:artifact_to_tribute = { rarity = illustrious } + } + set_variable = { + name = bunga_mas_tribute_modifier + value = 3 + years = 10 + } + } + else_if = { + limit = { + scope:artifact_to_tribute = { rarity = famed } + } + set_variable = { + name = bunga_mas_tribute_modifier + value = 2 + years = 10 + } + } + else_if = { + limit = { + scope:artifact_to_tribute = { rarity = masterwork } + } + random_list = { + 50 = { + set_variable = { + name = bunga_mas_tribute_modifier + value = 2 + years = 10 + } + } + 50 = { + set_variable = { + name = bunga_mas_tribute_modifier + value = 1 + years = 10 + } + } + } + } + else = { + set_variable = { + name = bunga_mas_tribute_modifier + value = 1 + years = 10 + } + } + } +} + +#Give the actual Tribute +scripted_effect tribute_mission_1000_fork_over_tribute_effect = { + if = { + limit = { tribute_mission_1000_gold_tributary_trigger = yes } + tribute_mission_1000_fork_over_gold_effect = yes + } + if = { + limit = { tribute_mission_1000_herd_tributary_trigger = yes } + tribute_mission_1000_fork_over_herd_effect = yes + } + if = { + limit = { tribute_mission_1000_concubine_tributary_trigger = yes } + tribute_mission_1000_fork_over_concubine_effect = yes + } + if = { + limit = { tribute_mission_1000_eunuch_tributary_trigger = yes } + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:eunuch_character } + } + if = { + limit = { tribute_mission_1000_artifact_tributary_trigger = yes } + tribute_mission_1000_fork_over_artifact_effect = yes + } + #Bunga Mas! + if = { + limit = { exists = scope:newly_created_bunga_mas } + scope:newly_created_bunga_mas = { set_owner = scope:overlord_scope } + } + if = { + limit = { tribute_mission_1000_bunga_mas_tributary_trigger = yes } + tribute_mission_1000_fork_over_artifact_effect = yes #We should be able to reuse this + } + + #Some Mandala piety + tribute_mission_mandala_piety_effect = yes +} + +#If the Overlord is not AI and are away, notify them what they got +scripted_effect tribute_mission_1000_fork_over_with_notification_effect = { + if = { + limit = { + scope:overlord_scope != scope:receiving_character + scope:overlord_scope = { is_ai = no } + } + #If the overlord isn't available and is a player, let them know what happened + scope:overlord_scope = { + send_interface_message = { + type = event_tribute_good_with_text + title = tribute_mission_notification.title + left_icon = scope:tributary_scope + desc = tribute_mission_notification.desc + tribute_mission_1000_fork_over_tribute_effect = yes + } + } + } + else = { tribute_mission_1000_fork_over_tribute_effect = yes } +} + +#What options should an AI receiver be able to use when the Overlord is an unavailable player +scripted_trigger tribute_mission_1000_is_available_to_ai_receiver_trigger = { + scope:overlord_scope != scope:receiving_character + scope:receiving_character = { is_ai = yes } + scope:overlord_scope = { + is_ai = no + #Mainly for Hegemons + has_treasury = yes + } +} + +### REWARDS ### +scripted_effect tribute_mission_1000_display_potential_rewards_effect = { + show_as_tooltip = { + random_list = { + #Treasury + 10 = { + trigger = { tribute_mission_1000_can_give_treasury_trigger = yes } + show_chance = no + desc = tribute_mission.1000.abstain.treasury.desc + tribute_mission_1000_give_treasury_effect = yes + } + #Artifact + 10 = { + trigger = { tribute_mission_1000_can_set_artifact_reward_trigger = yes } + show_chance = no + desc = tribute_mission.1000.abstain.artifact.desc + custom_tooltip = tribute_mission.1000.artifact.tt + } + #Innovation + 10 = { + trigger = { tribute_mission_1000_can_set_innovation_reward_trigger = yes } + show_chance = no + desc = tribute_mission.1000.abstain.innovation.desc + custom_tooltip = tribute_mission.1000.innovation.tt + } + #Development + 10 = { + trigger = { tribute_mission_1000_eligible_development_trigger = yes } + show_chance = no + desc = tribute_mission.1000.abstain.development.desc + tribute_mission_1000_give_development_effect = yes + } + #Monk + 10 = { + trigger = { tribute_mission_1000_eligible_for_monk_trigger = yes } + show_chance = no + desc = tribute_mission.1000.abstain.monk.desc + custom_tooltip = tribute_mission.1000.monk.tt + } + #Generic Legitimacy + 10 = { + show_chance = no + desc = tribute_mission.1000.abstain.legitimacy.desc + tribute_mission_1000_give_legitimacy_effect = yes + } + } + if = { + limit = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + add_character_modifier = { + modifier = bunga_mas_tribute_modifier + years = 10 + } + } + } +} + +#China: Treasury / Trade Goods +scripted_trigger tribute_mission_1000_can_give_treasury_trigger = { + trigger_if = { + limit = { + scope:overlord_scope = { has_treasury = yes } + } + scope:overlord_scope.treasury > tribute_treasury_reward_value + } + trigger_else = { always = no } + tribute_mission_1000_is_available_to_ai_receiver_trigger = no +} + +scripted_effect tribute_mission_1000_set_treasury_reward_effect = { + if = { + limit = { + NOT = { exists = scope:tribute_reward_type_treasury } + } + save_scope_value_as = { + name = tribute_reward_type_treasury + value = tribute_treasury_reward_value + } + } +} + +#Artifact +scripted_trigger tribute_mission_1000_can_set_artifact_reward_trigger = { + tribute_mission_1000_is_available_to_ai_receiver_trigger = no +} + +scripted_trigger tribute_mission_1000_eligible_smith_trigger = { + is_physically_able_ai_adult = yes + OR = { + #Someone new? + AND = { + has_no_particular_noble_roots_trigger = yes + } + #A previous smithy + has_variable = tribute_mission_1000_smith + } +} + +scripted_effect tribute_mission_1000_eligible_smith_scope_effect = { + if = { + limit = { + any_pool_character = { + province = scope:overlord_scope.capital_province + tribute_mission_1000_eligible_smith_trigger = yes + } + } + random_pool_character = { + province = scope:overlord_scope.capital_province + limit = { tribute_mission_1000_eligible_smith_trigger = yes } + save_scope_as = smith_character + } + } + else = { + create_character = { + template = merchant_template + location = scope:overlord_scope.capital_province + culture = scope:overlord_scope.capital_province.culture + faith = scope:overlord_scope.capital_province.faith + dynasty = none + save_scope_as = smith_character + after_creation = { set_variable = tribute_mission_1000_smith } + } + } + if = { + limit = { NOT = { exists = scope:smith_character } } + error_log = "Failed to create a valid smith in tribute_mission_1000_eligible_smith_scope_effect!" + } +} + +scripted_effect tribute_mission_1000_reward_cost_effect = { + #A small fee for human players + if = { + limit = { is_ai = no } + if = { + limit = { scope:overlord_scope = { has_treasury = yes } } + remove_treasury = scope:overlord_scope.tribute_reward_treasury_cost + } + else = { + remove_short_term_gold = miniscule_gold_value + } + } +} + +scripted_effect tribute_mission_1000_set_artifact_reward_effect = { + scope:overlord_scope = { + #A small fee for human players + tribute_mission_1000_reward_cost_effect = yes + hidden_effect = { + #Randomize the quality, somewhat + random_list = { + 50 = { + get_artifact_quality_effect = yes + get_artifact_wealth_effect = yes + } + 25 = { set_artifact_rarity_famed = yes } + 10 = { + trigger = { has_relation_best_friend = scope:tributary_scope } + set_artifact_rarity_illustrious = yes + } + } + #Create the artifact + hidden_effect_new_object = { + #Who is making it + tribute_mission_1000_eligible_smith_scope_effect = yes + #What are we making + random_list = { + 10 = { + create_artifact_armor_effect = { + OWNER = scope:overlord_scope + CREATOR = scope:smith_character + SET_ARMOR_TYPE = flag:no + } + } + 10 = { + create_artifact_regalia_effect = { + OWNER = scope:overlord_scope + SMITH = scope:smith_character + } + } + 10 = { + create_artifact_brooch_effect = { + OWNER = scope:overlord_scope + SMITH = scope:smith_character + } + } + 10 = { + create_artifact_necklace_effect = { + OWNER = scope:overlord_scope + SMITH = scope:smith_character + } + } + 10 = { + create_artifact_ring_effect = { + OWNER = scope:overlord_scope + SMITH = scope:smith_character + } + } + 10 = { + create_artifact_weapon_effect = { + OWNER = scope:overlord_scope + CREATOR = scope:smith_character + SET_WEAPON_TYPE = flag:artifact_weapon_type_dagger + } + } + } + scope:newly_created_artifact = { + save_scope_as = tribute_reward_type_artifact + add_artifact_modifier = artifact_legitimacy_gain_mult_4_modifier + set_variable = { + name = suppress_artifact_notifications + value = yes + days = 10 + } + } + } + } + } +} + +#Innovation +scripted_trigger tribute_mission_1000_eligible_innovation_trigger = { + NOT = { is_known_by_culture = scope:tributary_scope.culture } + culture_can_know_innovation = scope:tributary_scope.culture +} + +scripted_trigger tribute_mission_1000_can_set_innovation_reward_trigger = { + NOT = { scope:tributary_scope.culture = scope:overlord_scope.culture } + OR = { + #Either they have a fascination we can feed/progress + scope:tributary_scope.culture = { culture_has_any_fascination = yes } + #Or we have an innovation they can unlock to research + scope:overlord_scope.culture = { + any_known_innovation = { tribute_mission_1000_eligible_innovation_trigger = yes } + } + } +} + +scripted_effect tribute_mission_1000_set_innovation_reward_effect = { + if = { + limit = { + scope:overlord_scope.culture = { + any_known_innovation = { tribute_mission_1000_eligible_innovation_trigger = yes } + } + } + scope:saved_innovation = { save_scope_as = tribute_reward_type_innovation } + } + else = { + save_scope_value_as = { + name = tribute_reward_type_innovation # This scope still needs to exist and be consistent for loc triggers and other things + value = yes + } + scope:tributary_scope = { + set_variable = { + name = tribute_reward_fascination_progress # But the comparison will break if the scope can be two different things, so we use a variable + value = yes + } + } + } +} + +#Development +scripted_trigger tribute_mission_1000_eligible_development_trigger = { + scope:overlord_scope.capital_province != scope:tributary_scope.capital_province + scope:tributary_scope.capital_county = { + NOT = { has_county_modifier = suzerain_trade_post_modifier } + } + tribute_mission_1000_is_available_to_ai_receiver_trigger = no +} + +scripted_effect tribute_mission_1000_set_development_reward_effect = { + scope:overlord_scope = { + #A small fee for human players + tribute_mission_1000_reward_cost_effect = yes + save_scope_value_as = { + name = tribute_reward_type_development + value = yes + } + } +} + +#Mandala: Priest +scripted_trigger tribute_mission_1000_eligible_for_monk_trigger = { + scope:overlord_scope = { + government_has_flag = government_is_mandala + NOR = { + faith = { has_doctrine_parameter = unreformed } + faith = scope:tributary_scope.faith + } + } + scope:tributary_scope.faith = { has_doctrine_parameter = unreformed } +} + +scripted_effect tribute_mission_1000_set_monk_reward_effect = { + scope:overlord_scope = { + #A small fee for human players + tribute_mission_1000_reward_cost_effect = yes + } + hidden_effect_new_object = { + create_character = { + location = scope:overlord_scope.capital_province + template = monk_character_template + culture = scope:overlord_scope.culture + faith = scope:overlord_scope.faith + save_scope_as = new_monk + after_creation = { + add_character_flag = suzerains_missionary + } + } + } + save_scope_value_as = { + name = tribute_reward_type_monk + value = scope:new_monk + } +} + +#Generic Legitimacy +scripted_trigger tribute_mission_1000_eligible_legitimacy_trigger = { + scope:receiving_character = scope:overlord_scope +} + +scripted_effect tribute_mission_1000_set_legitimacy_reward_effect = { + save_scope_value_as = { + name = tribute_reward_type_legitimacy + value = yes + } +} + +#Determine the reward +scripted_effect tribute_mission_1000_generate_reward_effect = { + #Were we successfully influenced? + if = { + limit = { scope:successful_influence ?= flag:treasury } + tribute_mission_1000_set_treasury_reward_effect = yes + save_scope_value_as = { + name = decided_on_treasury_reward + value = flag:yes + } + } + else_if = { + limit = { scope:successful_influence ?= flag:artifact } + tribute_mission_1000_set_artifact_reward_effect = yes + } + else_if = { + limit = { scope:successful_influence ?= flag:innovation } + tribute_mission_1000_set_innovation_reward_effect = yes + } + else_if = { + limit = { scope:successful_influence ?= flag:development } + tribute_mission_1000_set_development_reward_effect = yes + } + else = { + hidden_effect = { + random_list = { + #Treasury + 10 = { + trigger = { tribute_mission_1000_can_give_treasury_trigger = yes } + tribute_mission_1000_set_treasury_reward_effect = yes + save_scope_value_as = { + name = decided_on_treasury_reward + value = flag:yes + } + } + #Artifact + 10 = { + tribute_mission_1000_set_artifact_reward_effect = yes + } + #Innovation + 10 = { + trigger = { tribute_mission_1000_can_set_innovation_reward_trigger = yes } + tribute_mission_1000_set_innovation_reward_effect = yes + } + #Development + 10 = { + trigger = { tribute_mission_1000_eligible_development_trigger = yes } + tribute_mission_1000_set_development_reward_effect = yes + } + #Priest + 50 = { + trigger = { tribute_mission_1000_eligible_for_monk_trigger = yes } + tribute_mission_1000_set_monk_reward_effect = yes + } + #Generic Legitimacy + 25 = { + trigger = { tribute_mission_1000_eligible_legitimacy_trigger = yes } + tribute_mission_1000_set_legitimacy_reward_effect = yes + } + } + } + } +} + +#These are re-used for when the player Overlord picks the reward +scripted_effect tribute_mission_1000_give_treasury_effect = { + scope:overlord_scope = { remove_treasury = scope:tribute_reward_type_treasury } + scope:tributary_scope = { add_gold = scope:tribute_reward_type_treasury } +} + +scripted_effect tribute_mission_1000_give_artifact_effect = { + scope:tribute_reward_type_artifact = { set_owner = scope:tributary_scope } +} + +scripted_effect tribute_mission_1000_give_innovation_progress_effect = { + if = { + limit = { + scope:tributary_scope = { + has_variable = tribute_reward_fascination_progress + } + } + scope:tributary_scope.culture = { + add_fascination_progress = tribute_reward_fascination_progress_value + } + } + else = { + scope:tributary_scope.culture = { + add_innovation_progress = { + value = tribute_reward_innovation_progress_value + target = scope:tribute_reward_type_innovation + } + } + } +} + +scripted_effect tribute_mission_1000_give_development_effect = { + scope:tributary_scope.capital_county = { + add_county_modifier = { + modifier = suzerain_trade_post_modifier + years = 10 + } + } +} + +scripted_effect tribute_mission_1000_give_monk_effect = { + scope:tributary_scope = { + add_courtier = scope:new_monk + current_travel_plan = { + add_companion = scope:new_monk + } + } + scope:overlord_scope.faith = { + change_fervor = { + value = 5 + desc = fervor_gain_suzerain_missionaries + } + } +} + +scripted_effect tribute_mission_1000_give_legitimacy_effect = { + scope:tributary_scope = { + add_legitimacy_effect = { LEGITIMACY = tribute_generic_legitimacy_reward_value } + } +} + +scripted_effect tribute_mission_1000_rejection_effect = { + scope:tributary_scope = { + add_legitimacy = { + value = tribute_legitimacy_reward_value + multiply = -1 + } + add_opinion = { + target = scope:overlord_scope + modifier = annoyed_opinion + opinion = -50 + } + } +} + +scripted_effect tribute_mission_1000_generic_reward_effect = { + scope:tributary_scope = { + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = pleased_opinion + opinion = 40 + target = scope:overlord_scope + } + } + if = { + limit = { exists = scope:tribute_reward_type_legitimacy } + tribute_mission_1000_give_legitimacy_effect = yes + } + else = { + add_legitimacy_effect = { LEGITIMACY = tribute_legitimacy_reward_value } + } + #Disburse the Bunga Mas modifier! + if = { + limit = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + add_character_modifier = { + modifier = bunga_mas_tribute_modifier + years = 10 + } + } + } +} + +#Actually disburse the reward +scripted_effect tribute_mission_1000_disburse_reward_effect = { + if = { + limit = { + exists = scope:tribute_reward_type_treasury + scope:decided_on_treasury_reward = flag:yes + } + tribute_mission_1000_give_treasury_effect = yes + } + if = { + limit = { exists = scope:tribute_reward_type_artifact } + tribute_mission_1000_give_artifact_effect = yes + } + if = { + limit = { exists = scope:tribute_reward_type_innovation } + tribute_mission_1000_give_innovation_progress_effect = yes + } + if = { + limit = { exists = scope:tribute_reward_type_development } + tribute_mission_1000_give_development_effect = yes + } + if = { + limit = { exists = scope:tribute_reward_type_monk } + tribute_mission_1000_give_monk_effect = yes + } + #Generic Legitimacy is baked into the tribute_mission_1000_generic_reward_effect + + scope:tributary_scope = { + if = { # if the contract uses Subject Standing, grant some + limit = { subject_standing >= 0 } + hidden_effect = { + send_interface_toast = { + type = event_toast_effect_good + title = tribute_mission_tributary_subject_standing_gain_title + left_icon = this + right_icon = scope:overlord_scope + + # add minimum 5, maximum 30, average 10 (if unsuccessful) or 17.5 (if successful) + add_subject_standing = { + value = 10 + if = { + limit = { exists = scope:successful_influence } + add = { + integer_range = { + min = 0 + max = 15 + } + } + } + add = { + integer_range = { + min = -5 + max = 5 + } + } + } + } + } + if = { + limit = { exists = scope:successful_influence } + custom_tooltip = tribute_mission_tributary_subject_standing_gain_tt_major + } + else = { + custom_tooltip = tribute_mission_tributary_subject_standing_gain_tt_minor + } + } + } + + tribute_mission_1000_generic_reward_effect = yes +} + + +### INFLUENCE ### +#Influence duel +scripted_effect tribute_mission_1000_determine_duel_skill_effect = { + random_list = { + 10 = { + trigger = { + scope:tributary_scope = { highest_skill = diplomacy } + } + tribute_mission_1000_duel_effect = { + INFLUENCED_REWARD = $INFLUENCED_REWARD$ + REWARD_INCREMENT = $REWARD_INCREMENT$ + SKILL = diplomacy + } + } + 10 = { + trigger = { + scope:tributary_scope = { highest_skill = martial } + } + tribute_mission_1000_duel_effect = { + INFLUENCED_REWARD = $INFLUENCED_REWARD$ + REWARD_INCREMENT = $REWARD_INCREMENT$ + SKILL = martial + } + } + 10 = { + trigger = { + scope:tributary_scope = { highest_skill = stewardship } + } + tribute_mission_1000_duel_effect = { + INFLUENCED_REWARD = $INFLUENCED_REWARD$ + REWARD_INCREMENT = $REWARD_INCREMENT$ + SKILL = stewardship + } + } + 10 = { + trigger = { + scope:tributary_scope = { highest_skill = intrigue } + } + tribute_mission_1000_duel_effect = { + INFLUENCED_REWARD = $INFLUENCED_REWARD$ + REWARD_INCREMENT = $REWARD_INCREMENT$ + SKILL = intrigue + } + } + 10 = { + trigger = { + scope:tributary_scope = { highest_skill = learning } + } + tribute_mission_1000_duel_effect = { + INFLUENCED_REWARD = $INFLUENCED_REWARD$ + REWARD_INCREMENT = $REWARD_INCREMENT$ + SKILL = learning + } + } + } +} + +#Actual duel +scripted_effect tribute_mission_1000_duel_effect = { + duel = { + skill = $SKILL$ + target = scope:receiving_character + #You convince them + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + modifier = { + culture = { has_cultural_parameter = more_successful_kowtows } + add = 25 + } + desc = tribute_mission.1000.success.desc + send_interface_toast = { + type = event_toast_effect_good + title = tribute_mission.1000.success.t + left_icon = scope:tributary_scope + right_icon = scope:receiving_character + #Woo! + save_scope_value_as = { + name = successful_influence + value = flag:$INFLUENCED_REWARD$ + } + if = { + limit = { $REWARD_INCREMENT$ = 0 } + show_as_tooltip = { tribute_mission_1000_give_treasury_effect = yes } + } + if = { + limit = { $REWARD_INCREMENT$ = 1 } + custom_tooltip = tribute_mission.1000.artifact.tt + } + if = { + limit = { $REWARD_INCREMENT$ = 2 } + custom_tooltip = tribute_mission.1000.innovation.tt + } + if = { + limit = { $REWARD_INCREMENT$ = 3 } + show_as_tooltip = { tribute_mission_1000_give_development_effect = yes } + } + } + } + #Hmm no + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tribute_mission.1000.failure.desc + send_interface_toast = { + type = event_toast_effect_bad + title = tribute_mission.1000.failure.t + left_icon = scope:tributary_scope + right_icon = scope:receiving_character + custom_tooltip = tribute_mission.1000.failure.tt + #Ayy + stress_impact = { base = miniscule_stress_impact_gain } + } + } + } +} + +#Tributary: Fork over Tribute +tribute_mission.1000 = { + type = character_event + title = tribute_mission.1000.t + desc = { + desc = tribute_mission.1000.intro + #Who is greeting us? + first_valid = { + triggered_desc = { + trigger = { scope:overlord_scope = scope:receiving_character } + desc = tribute_mission.1000.intro.overlord + } + triggered_desc = { + trigger = { scope:overlord_scope.diarch ?= scope:receiving_character } + desc = tribute_mission.1000.intro.diarch + } + triggered_desc = { + trigger = { + OR = { + scope:overlord_scope.cp:councillor_steward ?= scope:receiving_character + scope:overlord_scope.cp:councillor_chancellor ?= scope:receiving_character + scope:overlord_scope.cp:councillor_spymaster ?= scope:receiving_character + scope:overlord_scope.cp:councillor_court_chaplain ?= scope:receiving_character + scope:overlord_scope.cp:councillor_marshal ?= scope:receiving_character + } + } + desc = tribute_mission.1000.intro.councillor + } + desc = tribute_mission.1000.intro.attendant + } + desc = tribute_mission.1000.desc.segway + #What did we bring? + first_valid = { + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + desc = tribute_mission.1000.desc.bunga_mas + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:small_gold_tribute } + desc = tribute_mission.1000.desc.small_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:adequate_gold_tribute } + desc = tribute_mission.1000.desc.adequate_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:excessive_gold_tribute } + desc = tribute_mission.1000.desc.excessive_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:small_herd_tribute } + desc = tribute_mission.1000.desc.small_herd + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:adequate_herd_tribute } + desc = tribute_mission.1000.desc.adequate_herd + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:excessive_herd_tribute } + desc = tribute_mission.1000.desc.excessive_herd + } + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.1000.desc.concubine + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.1000.desc.eunuch + } + triggered_desc = { + trigger = { exists = scope:artifact_to_tribute } + desc = tribute_mission.1000.desc.artifact + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:receiving_character = { has_character_flag = created_attendant } + } + desc = tribute_mission.1000.outro.attendant + } + desc = tribute_mission.1000.outro + } + } + + theme = tributary + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:receiving_character + triggered_animation = { + trigger = { + scope:tributary_scope = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + } + animation = shock + } + animation = personality_honorable + } + lower_center_portrait = { + character = scope:human_tribute + trigger = { exists = scope:human_tribute } + } + #Artifact Tribute + artifact = { + trigger = { exists = scope:artifact_to_tribute } + target = scope:artifact_to_tribute + position = lower_left_portrait + } + + immediate = { + tribute_mission_1000_common_arrival_effect = yes + #For the tooltip + if = { + limit = { tribute_mission_1000_can_give_treasury_trigger = yes } + tribute_mission_1000_set_treasury_reward_effect = yes + } + if = { + limit = { + scope:overlord_scope.culture = { + any_known_innovation = { tribute_mission_1000_eligible_innovation_trigger = yes } + } + } + scope:overlord_scope.culture = { + random_known_innovation = { + limit = { tribute_mission_1000_eligible_innovation_trigger = yes } + save_scope_as = saved_innovation + } + } + } + else = { + save_scope_as = grant_fascination + } + #What level of Bunga Mas modifier? + tribute_mission_1000_determine_bunga_mas_scale_effect = yes + } + + #China: Duel for Treasury + option = { + name = tribute_mission.1000.treasury + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_give_treasury_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = treasury REWARD_INCREMENT = 0 } + ai_chance = { base = 100 } + } + #Duel for Artifact + option = { + name = tribute_mission.1000.artifact + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_set_artifact_reward_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = artifact REWARD_INCREMENT = 1 } + ai_chance = { base = 150 } + } + + #Duel for Innovation + option = { + name = tribute_mission.1000.innovation + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_set_innovation_reward_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = innovation REWARD_INCREMENT = 2 } + ai_chance = { base = 200 } + } + + #Duel for Development + option = { + name = tribute_mission.1000.development + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_eligible_development_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = development REWARD_INCREMENT = 3 } + ai_chance = { base = 100 } + } + + #I'm sure it'll be fine + option = { + name = tribute_mission.1000.abstain + tribute_mission_1000_display_potential_rewards_effect = yes + ai_chance = { + base = 100 + modifier = { + has_trait = arbitrary + add = 200 + } + } + } + after = { + #Non-AI Receiving person: Decide on if you want to accept the human tribute + if = { + limit = { + OR = { + exists = scope:concubine_character + exists = scope:eunuch_character + } + AND = { + #If the overlord is an AI, they've already said yay/nay + scope:overlord_scope = { is_ai = no } + #... so if we're a player diarch of a player ruler, you get to decide + scope:receiving_character = { is_ai = no } + } + } + show_as_tooltip = { tribute_mission_1000_fork_over_with_notification_effect = yes } + scope:receiving_character = { trigger_event = tribute_mission.1002 } + } + #Or the Non-AI Receiving person / Hegemon gets to decide the reward + else_if = { + limit = { + scope:receiving_character = { + OR = { + is_ai = no + scope:overlord_scope = { highest_held_title_tier = tier_hegemony } + } + } + } + show_as_tooltip = { tribute_mission_1000_fork_over_with_notification_effect = yes } + scope:receiving_character = { trigger_event = tribute_mission.1005 } + } + #Or if the Receiving person is AI then we we skip the event and just generate the reward + else = { + tribute_mission_1000_fork_over_with_notification_effect = yes + scope:overlord_scope = { tribute_mission_1000_generate_reward_effect = yes } + scope:tributary_scope = { trigger_event = tribute_mission.1010 } + } + } +} + + +#What's their personality like? +scripted_trigger 1002_human_tribute_shy_personality_trigger = { + has_trait = shy +} + +scripted_trigger 1002_human_tribute_bold_personality_trigger = { + OR = { + has_trait = brave + has_trait = gregarious + } +} + +scripted_trigger 1002_human_tribute_callous_personality_trigger = { + OR = { + has_trait = cynical + has_trait = callous + } +} + +scripted_trigger 1002_human_tribute_angry_personality_trigger = { + OR = { + has_trait = wrathful + has_trait = irritable + has_trait = arrogant + } +} + +#Recipient: Decide on the human tribute +tribute_mission.1002 = { + type = character_event + title = tribute_mission.1002.t + desc = { + desc = tribute_mission.1002.segway + first_valid = { + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.1002.desc.concubine + } + triggered_desc = { + trigger = { + scope:eunuch_character ?= { has_character_flag = tribute_mission_recently_castrated } + } + desc = tribute_mission.1002.desc.new_eunuch + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.1002.desc.eunuch + } + } + #Some descriptive exterior words + first_valid = { + #Beauty + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = beauty_good_1 + has_trait = beauty_good_2 + has_trait = beauty_good_3 + } + } + } + desc = tribute_mission.1002.beauty.concubine.good + } + #Bad Beauty + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = beauty_bad_1 + has_trait = beauty_bad_2 + has_trait = beauty_bad_3 + } + } + } + desc = tribute_mission.1002.beauty.concubine.bad + } + #Physique + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = physique_good_1 + has_trait = physique_good_2 + has_trait = physique_good_3 + } + } + } + desc = tribute_mission.1002.physique.concubine.good + } + #Bad Physique + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = physique_bad_1 + has_trait = physique_bad_2 + has_trait = physique_bad_3 + } + } + } + desc = tribute_mission.1002.physique.concubine.bad + } + #Fallback + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.1002.exterior.plain + } + } + #Some descriptive personality words + first_valid = { + #Shy + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_shy_personality_trigger = yes } + } + desc = tribute_mission.1002.personality.shy + } + #Bold + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_bold_personality_trigger = yes } + } + desc = tribute_mission.1002.personality.bold + } + #Cynical + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_callous_personality_trigger = yes } + } + desc = tribute_mission.1002.personality.cynical + } + #Angry + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_angry_personality_trigger = yes } + } + desc = tribute_mission.1002.personality.angry + } + #Fallback + desc = tribute_mission.1002.personality.fallback + } + } + + theme = tributary + + left_portrait = { + character = scope:receiving_character + animation = interested + } + right_portrait = { + character = scope:human_tribute + triggered_animation = { + trigger = { has_character_flag = tribute_mission_recently_castrated } + animation = severelywounded + } + triggered_animation = { + trigger = { 1002_human_tribute_shy_personality_trigger = yes } + animation = shame + } + triggered_animation = { + trigger = { 1002_human_tribute_bold_personality_trigger = yes } + animation = personality_bold + } + triggered_animation = { + trigger = { 1002_human_tribute_callous_personality_trigger = yes } + animation = personality_cynical + } + triggered_animation = { + trigger = { 1002_human_tribute_angry_personality_trigger = yes } + animation = disapproval + } + animation = personality_honorable + } + lower_right_portrait = { + character = scope:tributary_scope + } + immediate = { + tribute_mission_1000_fork_over_with_notification_effect = yes + } + #Add 'em to court + option = { + name = tribute_mission.1002.a + if = { + limit = { exists = scope:concubine_character } + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:concubine_character } + } + else = { + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:eunuch_character } + } + ai_chance = { base = 100 } + } + #Make 'em your concubine + option = { + name = tribute_mission.1002.b + trigger = { + exists = scope:concubine_character + scope:overlord_scope = scope:receiving_character + tribute_mission_1000_overlord_can_employ_concubine_trigger = yes + } + flavor = tribute_mission.1002.b.flavor + tribute_mission_1000_make_concubine_effect = yes + save_scope_value_as = { + name = appointed_concubine + value = flag:yes + } + ai_chance = { + base = 100 + modifier = { + add = { + value = 50 + multiply = scope:concubine_character.num_of_good_genetic_traits + } + scope:concubine_character = { + num_of_good_genetic_traits > 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = 50 + scope:concubine_character = { + is_lowborn = no + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = { + value = -50 + multiply = scope:concubine_character.num_of_bad_genetic_traits + } + scope:concubine_character = { + num_of_bad_genetic_traits > 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = { + value = -50 + } + scope:concubine_character = { + is_lowborn = yes + num_of_good_genetic_traits = 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + opinion_modifier = { # Opinion of you + who = scope:overlord_scope + opinion_target = scope:tributary_scope + multiplier = 1.0 + desc = AI_OPINION_REASON + } + opinion_modifier = { # Opinion of concubine + who = scope:overlord_scope + opinion_target = scope:concubine_character + multiplier = 0.25 + desc = AI_OPINION_REASON + } + compare_modifier = { # Recipient is reluctant to marry old women (procreation is a key factor) + trigger = { + scope:concubine_character = { + is_young_character = no + is_female = yes + } + } + target = scope:concubine_character + value = age + multiplier = -5 + step = 1 + offset = -29 + } + modifier = { + add = 50 + scope:overlord_scope = { + is_attracted_to_gender_of = scope:concubine_character + } + } + #More/Less likely based on difference in rank between tributary_scope and overlord_scope + modifier = { + add = 50 + scope:tributary_scope = { + tier_difference = { + target = scope:overlord_scope + value > 1 + } + } + } + modifier = { + add = -20 + scope:tributary_scope = { + tier_difference = { + target = scope:overlord_scope + value < 1 + } + } + } + } + } + #Appoint 'em head Eunuch + option = { + name = tribute_mission.1002.c + trigger = { + exists = scope:eunuch_character + scope:overlord_scope = scope:receiving_character + can_employ_court_position_type = chief_eunuch_court_position + } + #Make 'em courtier + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:eunuch_character } + #Gain obligation hook + custom_tooltip = obligation_hook_tt + add_hook = { + type = obligation_hook + target = scope:eunuch_character + } + #Replace current Chief Eunuch + if = { + limit = { + employs_court_position = chief_eunuch_court_position + } + every_court_position_holder = { + type = chief_eunuch_court_position + save_temporary_scope_as = current_chief_eunuch + } + replace_court_position = { + recipient = scope:eunuch_character + holder = scope:current_chief_eunuch + court_position = chief_eunuch_court_position + } + } + #Or simply appoint new Eunuch + else = { + appoint_court_position = { + recipient = scope:eunuch_character + court_position = chief_eunuch_court_position + } + } + save_scope_value_as = { + name = appointed_eunuch + value = flag:yes + } + ai_chance = { + base = 100 + opinion_modifier = { + who = scope:overlord_scope + opinion_target = scope:tributary_scope + multiplier = 0.5 + } + opinion_modifier = { + who = scope:overlord_scope + opinion_target = scope:eunuch_character + multiplier = 0.5 + } + modifier = { + add = { + value = 50 + subtract = scope:eunuch_character.age + } + } + modifier = { + add = { + add = scope:eunuch_character.diplomacy + add = scope:eunuch_character.intrigue + add = scope:eunuch_character.stewardship + add = scope:eunuch_character.martial + add = scope:eunuch_character.learning + } + } + modifier = { + scope:eunuch_character = { has_trait = beardless_eunuch } + add = 25 + } + } + } + #Um... nah + option = { + name = tribute_mission.1002.d + custom_tooltip = tribute_mission.1002.d.tt + if = { + limit = { exists = scope:concubine_character } + save_scope_value_as = { + name = rejected_concubine + value = flag:yes + } + } + else = { + save_scope_value_as = { + name = rejected_eunuch + value = flag:yes + } + } + ai_chance = { + base = 10 + modifier = { + has_trait = paranoid + add = 1000 + } + } + } + after = { + #Moving on + trigger_event = tribute_mission.1005 + } +} + +#Recipient: What do you give? +tribute_mission.1005 = { + type = character_event + title = { + first_valid = { + triggered_desc = { # Bunga Mas + trigger = { exists = scope:newly_created_bunga_mas } + desc = tribute_mission.1005.t.ai.bunga_mas + } + triggered_desc = { # Bunga Mas + trigger = { tribute_mission_1000_bunga_mas_tributary_trigger = yes } + desc = tribute_mission.1005.t.bunga_mas + } + triggered_desc = { # Gold + trigger = { tribute_mission_1000_gold_tributary_trigger = yes } + desc = tribute_mission.1005.t.gold + } + triggered_desc = { # Herd + trigger = { tribute_mission_1000_herd_tributary_trigger = yes } + desc = tribute_mission.1005.t.herd + } + triggered_desc = { # Concubine + trigger = { tribute_mission_1000_concubine_tributary_trigger = yes } + desc = tribute_mission.1005.t.concubine + } + triggered_desc = { # Eunuch + trigger = { tribute_mission_1000_eunuch_tributary_trigger = yes } + desc = tribute_mission.1005.t.eunuch + } + triggered_desc = { # Artifact + trigger = { tribute_mission_1000_artifact_tributary_trigger = yes } + desc = tribute_mission.1005.t.artifact + } + desc = tribute_mission.1005.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:concubine_character + exists = scope:eunuch_character + } + } + desc = tribute_mission.1005.intro.human_tribute + } + desc = tribute_mission.1005.intro + } + first_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:newly_created_bunga_mas + tribute_mission_1000_bunga_mas_tributary_trigger = yes + } + } + desc = tribute_mission.1005.desc.bunga_mas + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:small_gold_tribute } + desc = tribute_mission.1005.desc.small_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:adequate_gold_tribute } + desc = tribute_mission.1005.desc.adequate_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:excessive_gold_tribute } + desc = tribute_mission.1005.desc.excessive_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:small_herd_tribute } + desc = tribute_mission.1005.desc.small_herd + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:adequate_herd_tribute } + desc = tribute_mission.1005.desc.adequate_herd + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:excessive_herd_tribute } + desc = tribute_mission.1005.desc.excessive_herd + } + triggered_desc = { + trigger = { exists = scope:rejected_concubine } + desc = tribute_mission.1005.desc.rejected_concubine + } + triggered_desc = { + trigger = { exists = scope:appointed_concubine } + desc = tribute_mission.1005.desc.appointed_concubine + } + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.1005.desc.concubine + } + triggered_desc = { + trigger = { exists = scope:rejected_eunuch } + desc = tribute_mission.1005.desc.rejected_eunuch + } + triggered_desc = { + trigger = { exists = scope:appointed_eunuch } + desc = tribute_mission.1005.desc.appointed_eunuch + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.1005.desc.eunuch + } + triggered_desc = { + trigger = { exists = scope:artifact_to_tribute } + desc = tribute_mission.1005.desc.artifact + } + #Fallback + desc = tribute_mission.1005.desc + } + } + + theme = tributary + + left_portrait = { + character = root + triggered_animation = { + trigger = { exists = scope:newly_created_bunga_mas } + animation = disbelief + } + animation = personality_rational + } + right_portrait = { + character = scope:tributary_scope + triggered_animation = { + trigger = { exists = scope:newly_created_bunga_mas } + animation = admiration + } + animation = personality_honorable + } + #Human Tribute + lower_center_portrait = { + trigger = { exists = scope:human_tribute } + character = scope:human_tribute + } + #Artifact Tribute + artifact = { + trigger = { exists = scope:artifact_to_tribute } + target = scope:artifact_to_tribute + position = lower_left_portrait + } + #Bunga Mas + artifact = { + trigger = { exists = scope:newly_created_bunga_mas } + target = scope:newly_created_bunga_mas + position = lower_right_portrait + } + immediate = { + #For the tooltip + if = { + limit = { + scope:overlord_scope.culture = { + any_known_innovation = { tribute_mission_1000_eligible_innovation_trigger = yes } + } + } + scope:overlord_scope.culture = { + random_known_innovation = { + limit = { tribute_mission_1000_eligible_innovation_trigger = yes } + save_scope_as = saved_innovation + } + } + } + else = { + save_scope_as = grant_fascination + } + #Ful-fix + save_scope_value_as = { + name = decided_on_treasury_reward + value = flag:no + } + } + #China: Treasury / Trade Goods + option = { + name = tribute_mission.1005.treasury + trigger = { tribute_mission_1000_can_give_treasury_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_treasury_effect = yes } + #Default is set in the immediate + save_scope_value_as = { + name = decided_on_treasury_reward + value = flag:yes + } + ai_chance = { + base = 0 + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:treasury + add = 1000 + } + } + } + #Artifact + option = { + name = tribute_mission.1005.artifact + trigger = { tribute_mission_1000_can_set_artifact_reward_trigger = yes } + #Inform the player what will happen (since the artifact doesn't exist yet) + custom_tooltip = tribute_mission.1005.artifact.tt + tribute_mission_1000_set_artifact_reward_effect = yes + ai_chance = { + base = 0 + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:artifact + add = 1000 + } + } + } + #Innovation + option = { + name = tribute_mission.1005.innovation + trigger = { tribute_mission_1000_can_set_innovation_reward_trigger = yes } + tribute_mission_1000_set_innovation_reward_effect = yes + #Display the effects + show_as_tooltip = { + if = { + limit = { exists = scope:saved_innovation } + scope:tributary_scope.culture = { + add_innovation_progress = { + value = tribute_reward_innovation_progress_value + target = scope:saved_innovation + } + } + } + if = { + limit = { exists = scope:grant_fascination } + scope:tributary_scope.culture = { + add_fascination_progress = tribute_reward_fascination_progress_value + } + } + } + ai_chance = { + base = 0 + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:innovation + add = 1000 + } + } + } + #Development + option = { + name = tribute_mission.1005.development + trigger = { tribute_mission_1000_eligible_development_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_development_effect = yes } + tribute_mission_1000_set_development_reward_effect = yes + ai_chance = { + base = 0 + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:development + add = 1000 + } + } + } + #Monk + option = { + name = tribute_mission.1005.monk + trigger = { tribute_mission_1000_eligible_for_monk_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_monk_effect = yes } + tribute_mission_1000_set_monk_reward_effect = yes + ai_chance = { + base = 0 + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 100 + } + } + } + #Generic Legitimacy + option = { + name = tribute_mission.1005.legitimacy + show_as_tooltip = { tribute_mission_1000_give_legitimacy_effect = yes } + tribute_mission_1000_set_legitimacy_reward_effect = yes + ai_chance = { + base = 100 + } + } + #Rejection + option = { + name = imperial_examination.7100.b.singular #I refuse to accept mediocrity not a tributary we can reject them. + trigger = { + NOT = { government_has_flag = government_is_mandala } + } + show_as_tooltip = { tribute_mission_1000_rejection_effect = yes } + scope:tributary_scope = { set_variable = new_overlord_unable_to_accept_tribute } + save_scope_value_as = { + name = tribute_reward_type_rejection + value = flag:yes + } + ai_chance = { + base = 0 + } + } + after = { + if = { + limit = { + scope:tributary_scope = { has_variable = new_overlord_unable_to_accept_tribute } + } + scope:tributary_scope = { trigger_event = tribute_mission.9800 } + } + else = { + tribute_mission_1000_fork_over_with_notification_effect = yes + show_as_tooltip = { tribute_mission_1000_common_arrival_effect = yes } + if = { + limit = { + scope:tributary_scope = { + subject_standing > seal_of_investiture_minimum_subject_standing + NOT = { + any_character_artifact = { + OR = { + artifact_type = seal_of_investiture + artifact_type = seal_of_investiture_court + } + } + } + } + scope:overlord_scope = { + primary_title = title:h_china + this = scope:receiving_character + } + } + trigger_event = tribute_mission.1006 + } + else_if = { + limit = { scope:tributary_scope = { is_tributary = no } } + scope:tributary_scope = { + if = { + limit = { + scope:overlord_scope = { has_royal_court = yes } + scope:overlord_scope = scope:receiving_character + } + trigger_event = tribute_mission.3008 + } + else = { trigger_event = tribute_mission.1008 } + } + } + else = { + scope:tributary_scope = { + if = { + limit = { + scope:overlord_scope = { has_royal_court = yes } + scope:overlord_scope = scope:receiving_character + } + trigger_event = tribute_mission.3010 + } + else = { trigger_event = tribute_mission.1010 } + } + } + } + } +} + +scripted_trigger tribute_mission_1006_eligible_scribe_trigger = { + is_physically_able_ai_adult = yes + OR = { + #Someone new? + AND = { + has_no_particular_noble_roots_trigger = yes + learning > 10 + culture = scope:overlord_scope.culture + } + #A previous scribe + has_variable = tribute_mission_1006_scribe + } +} + +scripted_effect tribute_mission_1006_eligible_scribe_scope_effect = { + scope:overlord_scope = { + # Try to grab someone from a suitable court position first + random_courtier = { + limit = { has_court_position = court_artificer_court_position } + save_scope_as = scribe_character + set_variable = tribute_mission_1006_scribe + } + if = { + limit = { NOT = { exists = scope:scribe_character } } + court_position:chronicler_court_position ?= { + save_scope_as = scribe_character + set_variable = tribute_mission_1006_scribe + } + } + if = { + limit = { NOT = { exists = scope:scribe_character } } + court_position:antiquarian_court_position ?= { + save_scope_as = scribe_character + set_variable = tribute_mission_1006_scribe + } + } + + # If we can't find an official scribe, try to find one in the crowd + if = { + limit = { NOT = { exists = scope:scribe_character } } + random_courtier = { + limit = { tribute_mission_1006_eligible_scribe_trigger = yes } + save_scope_as = scribe_character + set_variable = tribute_mission_1006_scribe + } + } + # Or in the city + if = { + limit = { NOT = { exists = scope:scribe_character } } + random_pool_character = { + province = scope:overlord_scope.capital_province + limit = { tribute_mission_1006_eligible_scribe_trigger = yes } + save_scope_as = scribe_character + set_variable = tribute_mission_1006_scribe + } + } + # If all else fails, make one + if = { + limit = { NOT = { exists = scope:scribe_character } } + create_character = { + template = random_learned_eunuch_character + location = scope:overlord_scope.capital_province + culture = scope:overlord_scope.capital_province.culture + faith = scope:overlord_scope.capital_province.faith + dynasty = none + save_scope_as = scribe_character + after_creation = { set_variable = tribute_mission_1006_scribe } + } + } + } + if = { + limit = { NOT = { exists = scope:scribe_character } } + error_log = "Failed to create a valid scribe in tribute_mission_1006_eligible_scribe_scope_effect!" + } +} + +#Overlord: Decide whether to grant a Seal of Investiture or not +tribute_mission.1006 = { + type = character_event + title = tribute_mission.1006.t + desc = tribute_mission.1006.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + immediate = { + tribute_mission_1006_eligible_scribe_scope_effect = yes + } + + left_portrait = { + character = root + animation = personality_honorable + } + right_portrait = { + character = scope:tributary_scope + animation = personality_rational + } + + #Grant the Seal + option = { + name = tribute_mission.1006.grant + trigger = { + trigger_if = { + limit = { + scope:receiving_character = { + is_ai = yes + } + } + treasury > tribute_seal_of_investiture_cost + } + trigger_else = { + always = yes #Humans can always get one + } + } + show_as_unavailable = { always = yes } + custom_tooltip = { + text = tribute_mission.1006.grant.tt + create_artifact_imperial_seal_effect = { + OWNER = scope:receiving_character + SMITH = scope:scribe_character + } + } + remove_treasury = tribute_seal_of_investiture_cost + add_legitimacy = 50 + scope:tributary_scope = { + if = { + limit = { + scope:overlord_scope = { has_royal_court = yes } + } + trigger_event = tribute_mission.3007 + } + else = { trigger_event = tribute_mission.1007 } + } + + # do not change from making this only the scripted value; add additions to the value itself if needed + ai_will_select = scope:tributary_scope.tribute_mission_seal_of_investiture_ai_will_select + } + #Decline to grant the Seal + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { treasury < tribute_seal_of_investiture_cost } + desc = tribute_mission.1006.decline.no_money + } + desc = tribute_mission.1006.decline.dont_wanna + } + } + } + add_legitimacy = -50 + reverse_add_opinion = { + target = scope:tributary_scope + modifier = refused_seal_of_investiture_opinion + opinion = -50 + } + scope:tributary_scope = { + if = { + limit = { + scope:overlord_scope = { has_royal_court = yes } + } + trigger_event = tribute_mission.3010 + } + else = { trigger_event = tribute_mission.1010 } + } + + # do not change from making this only the scripted value; add additions to the value itself if needed + ai_will_select = scope:tributary_scope.tribute_mission_no_seal_of_investiture_ai_will_select + } +} + +### IS THIS ACTUALLY USED? (Hegemons that receive Tributary scopes should always have Royal Courts) +#Tributary: Receive the Seal of Investiture +tribute_mission.1007 = { + type = character_event + title = tribute_mission.1007.t + desc = tribute_mission.1007.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + + left_portrait = { + character = root + animation = personality_rational + } + artifact = { + trigger = { exists = scope:tribute_reward_type_artifact } + target = scope:seal_of_investiture_scope + position = lower_center_portrait + } + right_portrait = { + character = scope:receiving_character + animation = personality_honorable + } + + #Grant the Seal + option = { + name = tribute_mission.1007.a + scope:seal_of_investiture_scope = { + set_owner = scope:tributary_scope + } + + } + after = { + scope:tributary_scope = { + if = { + limit = { + scope:overlord_scope = { has_royal_court = yes } + } + trigger_event = tribute_mission.3010 + } + else = { trigger_event = tribute_mission.1010 } + } + } +} + +### ARE THESE ACTUALLY USED? (Hegemons that receive Tributary scopes should always have Royal Courts) +#Tributary: Decide whether to become a Tributary or not +tribute_mission.1008 = { + type = character_event + title = tribute_mission.1008.t + desc = tribute_mission.1008.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + + left_portrait = { + character = root + animation = personality_rational + } + right_portrait = { + character = scope:receiving_character + animation = personality_honorable + } + + #Become a Tributary + option = { + name = tribute_mission.1008.a + start_tributary_interaction_effect = { + TRIBUTARY = scope:tributary_scope + SUZERAIN = scope:overlord_scope + } + scope:overlord_scope = { + send_interface_message = { + type = event_tribute_good_text + title = tribute_mission.new_tributary.title + left_icon = scope:tributary_scope + desc = tribute_mission.new_tributary.desc + } + } + } + #No thanks + option = { + name = tribute_mission.1008.b + } + after = { + trigger_event = tribute_mission.1010 + } +} + +scripted_effect tribute_mission_1010_complete_effect = { + scope:tributary_scope = { + #Scaling grace + if = { + limit = { + OR = { + var:tribute_mission_type ?= flag:excessive_gold_tribute + var:tribute_mission_type ?= flag:excessive_herd_tribute + AND = { + var:tribute_mission_type ?= flag:artifact_tribute + scope:artifact_to_tribute ?= { + OR = { + rarity = famed + rarity = illustrious + } + } + } + exists = scope:appointed_concubine + exists = scope:appointed_eunuch + } + } + set_variable = { + name = tribute_mission_grace + value = scope:overlord_scope + years = tribute_mission_cooldown_most_years + } + } + else_if = { + limit = { + OR = { + var:tribute_mission_type ?= flag:adequate_gold_tribute + var:tribute_mission_type ?= flag:adequate_herd_tribute + AND = { + var:tribute_mission_type ?= flag:artifact_tribute + scope:artifact_to_tribute ?= { rarity = masterwork } + } + exists = scope:concubine_character + exists = scope:eunuch_character + } + } + set_variable = { + name = tribute_mission_grace + value = scope:overlord_scope + years = tribute_mission_cooldown_more_years + } + } + else = { + set_variable = { + name = tribute_mission_grace + value = scope:overlord_scope + years = tribute_mission_cooldown_years + } + } + #Clean up & head back home + tribute_mission_clean_up_variables_effect = yes + tribute_mission_clean_up_request_variables_effect = yes + current_travel_plan ?= { resume_travel_plan = yes } + } + scope:receiving_character = { + if = { + limit = { has_character_flag = created_attendant } + #Clean 'em up + trigger_event = tribute_mission.0005 + } + } + scope:artifact_to_tribute ?= { + remove_variable = is_tribute_mission_artifact + set_variable = { + name = given_via_tribute_mission + value = scope:tributary_scope + } + if = { + limit = { has_variable = given_via_tribute_mission } + #Error supression + } + } +} + +#Tributary: Receive reward, go home +tribute_mission.1010 = { + type = character_event + title = { + first_valid = { + #Treasury + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_treasury } + desc = tribute_mission.1010.t.treasury + } + #Artifact + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_artifact } + desc = tribute_mission.1010.t.artifact + } + #Innovation + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_innovation } + desc = tribute_mission.1010.t.innovation + } + #Development + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_development } + desc = tribute_mission.1010.t.development + } + #Monk + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_monk } + desc = tribute_mission.1010.t.monk + } + #Legitimacy + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_legitimacy } + desc = tribute_mission.1010.t.legitimacy + } + desc = tribute_mission.1010.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:seal_of_investiture_scope } + desc = tribute_mission.1010.intro.postseal + } + triggered_desc = { + trigger = { + scope:receiving_character = { has_character_flag = created_attendant } + } + desc = tribute_mission.1010.intro.attendant + } + desc = tribute_mission.1010.intro + } + first_valid = { + #Treasury + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_treasury } + desc = tribute_mission.1010.desc.treasury + } + #Artifact + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_artifact } + desc = tribute_mission.1010.desc.artifact + } + #Innovation + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_innovation } + desc = tribute_mission.1010.desc.innovation + } + #Development + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_development } + desc = tribute_mission.1010.desc.development + } + #Monk + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_monk } + desc = tribute_mission.1010.desc.monk + } + #Legitimacy + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_legitimacy } + desc = tribute_mission.1010.desc.legitimacy + } + } + desc = tribute_mission.1010.outro + } + theme = tributary + left_portrait = { + character = root + animation = personality_rational + } + artifact = { + trigger = { exists = scope:tribute_reward_type_artifact } + target = scope:tribute_reward_type_artifact + position = lower_center_portrait + } + right_portrait = { + character = scope:receiving_character + animation = personality_honorable + } + immediate = { + tribute_mission_1000_disburse_reward_effect = yes + } + #Thanks, bye! + option = { + name = tribute_mission.1010.a + } + after = { + #Clean up variables & set up cooldown + tribute_mission_1010_complete_effect = yes + } +} + + +### COURT EVENTS ### + +#Tributary: Fork over Tribute, try to influence reward +tribute_mission.3000 = { + type = court_event + title = tribute_mission.3000.t + desc = { + desc = tribute_mission.3000.intro + #Who is greeting us? + first_valid = { + triggered_desc = { + trigger = { scope:overlord_scope = scope:receiving_character } + desc = tribute_mission.3000.intro.overlord + } + triggered_desc = { + trigger = { scope:overlord_scope.diarch ?= scope:receiving_character } + desc = tribute_mission.3000.intro.diarch + } + triggered_desc = { + trigger = { + OR = { + scope:overlord_scope.cp:councillor_steward ?= scope:receiving_character + scope:overlord_scope.cp:councillor_chancellor ?= scope:receiving_character + scope:overlord_scope.cp:councillor_spymaster ?= scope:receiving_character + scope:overlord_scope.cp:councillor_court_chaplain ?= scope:receiving_character + scope:overlord_scope.cp:councillor_marshal ?= scope:receiving_character + } + } + desc = tribute_mission.3000.intro.councillor + } + desc = tribute_mission.3000.intro.attendant + } + desc = tribute_mission.3000.desc.segway + #What did we bring? + first_valid = { + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:bunga_mas_tribute } + desc = tribute_mission.3000.desc.bunga_mas + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:small_gold_tribute } + desc = tribute_mission.3000.desc.small_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:adequate_gold_tribute } + desc = tribute_mission.3000.desc.adequate_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:excessive_gold_tribute } + desc = tribute_mission.3000.desc.excessive_gold + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:small_herd_tribute } + desc = tribute_mission.3000.desc.small_herd + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:adequate_herd_tribute } + desc = tribute_mission.3000.desc.adequate_herd + } + triggered_desc = { + trigger = { var:tribute_mission_type ?= flag:excessive_herd_tribute } + desc = tribute_mission.3000.desc.excessive_herd + } + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.3000.desc.concubine + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.3000.desc.eunuch + } + triggered_desc = { + trigger = { exists = scope:artifact_to_tribute } + desc = tribute_mission.3000.desc.artifact + } + } + first_valid = { + triggered_desc = { + trigger = { + scope:receiving_character = { has_character_flag = created_attendant } + } + desc = tribute_mission.3000.outro.attendant + } + desc = tribute_mission.3000.outro + } + } + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + scope:human_tribute = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + immediate = { + scope:overlord_scope = { + open_view_data = { + view = royal_court + secondary_actor = scope:tributary_scope + player = scope:tributary_scope + } + } + tribute_mission_1000_common_arrival_effect = yes + #For the tooltips + if = { + limit = { tribute_mission_1000_can_give_treasury_trigger = yes } + tribute_mission_1000_set_treasury_reward_effect = yes + } + if = { + limit = { + scope:overlord_scope.culture = { + any_known_innovation = { tribute_mission_1000_eligible_innovation_trigger = yes } + } + } + scope:overlord_scope.culture = { + random_known_innovation = { + limit = { tribute_mission_1000_eligible_innovation_trigger = yes } + save_scope_as = saved_innovation + } + } + } + else = { + save_scope_as = grant_fascination + } + #What level of Bunga Mas modifier? + tribute_mission_1000_determine_bunga_mas_scale_effect = yes + } + #China: Duel for Treasury + option = { + name = tribute_mission.3000.treasury + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_give_treasury_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = treasury REWARD_INCREMENT = 0 } + ai_chance = { base = 100 } + } + #Duel for Artifact + option = { + name = tribute_mission.3000.artifact + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_set_artifact_reward_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = artifact REWARD_INCREMENT = 1 } + ai_chance = { base = 150 } + } + + #Duel for Innovation + option = { + name = tribute_mission.3000.innovation + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_can_set_innovation_reward_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = innovation REWARD_INCREMENT = 2 } + ai_chance = { base = 200 } + } + + #Duel for Development + option = { + name = tribute_mission.3000.development + trigger = { + scope:receiving_character = { is_ai = yes } + tribute_mission_1000_eligible_development_trigger = yes + } + tribute_mission_1000_determine_duel_skill_effect = { INFLUENCED_REWARD = development REWARD_INCREMENT = 3 } + ai_chance = { base = 150 } + } + + #I'm sure it'll be fine + option = { + name = tribute_mission.3000.abstain + tribute_mission_1000_display_potential_rewards_effect = yes + ai_chance = { + base = 100 + modifier = { + has_trait = arbitrary + add = 200 + } + } + } + + after = { + #Non-AI Receiving person: Decide on if you want to accept the human tribute + if = { + limit = { + OR = { + exists = scope:concubine_character + exists = scope:eunuch_character + } + AND = { + #If the overlord is an AI, they've already said yay/nay + scope:overlord_scope = { is_ai = no } + #... so if we're a player diarch of a player ruler, you get to decide + scope:receiving_character = { is_ai = no } + } + } + show_as_tooltip = { tribute_mission_1000_fork_over_with_notification_effect = yes } + scope:receiving_character = { trigger_event = tribute_mission.1002 } + } + #Or the Non-AI Receiving person / Hegemon gets to decide the reward + else_if = { + limit = { + scope:receiving_character = { + OR = { + is_ai = no + scope:overlord_scope = { highest_held_title_tier = tier_hegemony } + } + } + } + show_as_tooltip = { tribute_mission_1000_fork_over_with_notification_effect = yes } + scope:receiving_character = { trigger_event = tribute_mission.1005 } + } + #Or if the Receiving person is AI then we we skip the event and just generate the reward + else = { + tribute_mission_1000_fork_over_with_notification_effect = yes + scope:overlord_scope = { tribute_mission_1000_generate_reward_effect = yes } + scope:tributary_scope = { trigger_event = tribute_mission.3010 } + } + } +} + +###DEPRECATED +#Recipient: Decide on the human tribute +tribute_mission.3002 = { + orphan = yes + type = court_event + title = tribute_mission.3002.t + desc = { + desc = tribute_mission.3002.segway + first_valid = { + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.3002.desc.concubine + } + triggered_desc = { + trigger = { + scope:eunuch_character ?= { has_character_flag = tribute_mission_recently_castrated } + } + desc = tribute_mission.3002.desc.new_eunuch + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.3002.desc.eunuch + } + } + #Some descriptive exterior words + first_valid = { + #Beauty + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = beauty_good_1 + has_trait = beauty_good_2 + has_trait = beauty_good_3 + } + } + } + desc = tribute_mission.3002.beauty.concubine.good + } + #Bad Beauty + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = beauty_bad_1 + has_trait = beauty_bad_2 + has_trait = beauty_bad_3 + } + } + } + desc = tribute_mission.3002.beauty.concubine.bad + } + #Physique + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = physique_good_1 + has_trait = physique_good_2 + has_trait = physique_good_3 + } + } + } + desc = tribute_mission.3002.physique.concubine.good + } + #Bad Physique + triggered_desc = { + trigger = { + exists = scope:concubine_character + scope:human_tribute = { + OR = { + has_trait = physique_bad_1 + has_trait = physique_bad_2 + has_trait = physique_bad_3 + } + } + } + desc = tribute_mission.3002.physique.concubine.bad + } + #Fallback + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.3002.exterior.plain + } + } + #Some descriptive personality words + first_valid = { + #Shy + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_shy_personality_trigger = yes } + } + desc = tribute_mission.3002.personality.shy + } + #Bold + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_bold_personality_trigger = yes } + } + desc = tribute_mission.3002.personality.bold + } + #Cynical + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_callous_personality_trigger = yes } + } + desc = tribute_mission.3002.personality.cynical + } + #Angry + triggered_desc = { + trigger = { + scope:human_tribute = { 1002_human_tribute_angry_personality_trigger = yes } + } + desc = tribute_mission.3002.personality.angry + } + #Fallback + desc = tribute_mission.3002.personality.fallback + } + } + + theme = tributary + + left_portrait = { + character = scope:receiving_character + animation = interested + } + right_portrait = { + character = scope:human_tribute + triggered_animation = { + trigger = { has_character_flag = tribute_mission_recently_castrated } + animation = severelywounded + } + triggered_animation = { + trigger = { 1002_human_tribute_shy_personality_trigger = yes } + animation = shame + } + triggered_animation = { + trigger = { 1002_human_tribute_bold_personality_trigger = yes } + animation = personality_bold + } + triggered_animation = { + trigger = { 1002_human_tribute_callous_personality_trigger = yes } + animation = personality_cynical + } + triggered_animation = { + trigger = { 1002_human_tribute_angry_personality_trigger = yes } + animation = disapproval + } + animation = personality_honorable + } + lower_right_portrait = { + character = scope:tributary_scope + } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + scope:human_tribute = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + immediate = { + tribute_mission_1000_fork_over_with_notification_effect = yes + } + #Add 'em to court + option = { + name = tribute_mission.3002.a + if = { + limit = { exists = scope:concubine_character } + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:concubine_character } + } + else = { + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:eunuch_character } + } + ai_chance = { base = 100 } + } + #Make 'em your concubine + option = { + name = tribute_mission.3002.b + trigger = { + exists = scope:concubine_character + scope:overlord_scope = scope:receiving_character + tribute_mission_1000_overlord_can_employ_concubine_trigger = yes + } + flavor = tribute_mission.3002.b.flavor + tribute_mission_1000_make_concubine_effect = yes + save_scope_value_as = { + name = appointed_concubine + value = flag:yes + } + ai_chance = { + base = 100 + modifier = { + add = { + value = 50 + multiply = scope:concubine_character.num_of_good_genetic_traits + } + scope:concubine_character = { + num_of_good_genetic_traits > 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = 50 + scope:concubine_character = { + is_lowborn = no + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = { + value = -50 + multiply = scope:concubine_character.num_of_bad_genetic_traits + } + scope:concubine_character = { + num_of_bad_genetic_traits > 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + modifier = { + add = { + value = -50 + } + scope:concubine_character = { + is_lowborn = yes + num_of_good_genetic_traits = 0 + trigger_if = { + limit = { + is_female = yes + } + is_aging_character = no + } + } + } + opinion_modifier = { # Opinion of you + who = scope:overlord_scope + opinion_target = scope:tributary_scope + multiplier = 1.0 + desc = AI_OPINION_REASON + } + opinion_modifier = { # Opinion of concubine + who = scope:overlord_scope + opinion_target = scope:concubine_character + multiplier = 0.25 + desc = AI_OPINION_REASON + } + compare_modifier = { # Recipient is reluctant to marry old women (procreation is a key factor) + trigger = { + scope:concubine_character = { + is_young_character = no + is_female = yes + } + } + target = scope:concubine_character + value = age + multiplier = -5 + step = 1 + offset = -29 + } + modifier = { + add = 50 + scope:overlord_scope = { + is_attracted_to_gender_of = scope:concubine_character + } + } + #More/Less likely based on difference in rank between tributary_scope and overlord_scope + modifier = { + add = 50 + scope:tributary_scope = { + tier_difference = { + target = scope:overlord_scope + value > 1 + } + } + } + modifier = { + add = -20 + scope:tributary_scope = { + tier_difference = { + target = scope:overlord_scope + value < 1 + } + } + } + } + } + #Appoint 'em head Eunuch + option = { + name = tribute_mission.3002.c + trigger = { + exists = scope:eunuch_character + scope:overlord_scope = scope:receiving_character + can_employ_court_position_type = chief_eunuch_court_position + } + #Make 'em courtier + tribute_mission_1000_make_courtier_effect = { HUMAN_TRIB = scope:eunuch_character } + #Gain obligation hook + custom_tooltip = obligation_hook_tt + add_hook = { + type = obligation_hook + target = scope:eunuch_character + } + #Replace current Chief Eunuch + if = { + limit = { + employs_court_position = chief_eunuch_court_position + } + every_court_position_holder = { + type = chief_eunuch_court_position + save_temporary_scope_as = current_chief_eunuch + } + replace_court_position = { + recipient = scope:eunuch_character + holder = scope:current_chief_eunuch + court_position = chief_eunuch_court_position + } + } + #Or simply appoint new Eunuch + else = { + appoint_court_position = { + recipient = scope:eunuch_character + court_position = chief_eunuch_court_position + } + } + save_scope_value_as = { + name = appointed_eunuch + value = flag:yes + } + ai_chance = { + base = 100 + opinion_modifier = { + who = scope:overlord_scope + opinion_target = scope:tributary_scope + multiplier = 0.5 + } + opinion_modifier = { + who = scope:overlord_scope + opinion_target = scope:eunuch_character + multiplier = 0.5 + } + modifier = { + add = { + value = 50 + subtract = scope:eunuch_character.age + } + } + modifier = { + add = { + add = scope:eunuch_character.diplomacy + add = scope:eunuch_character.intrigue + add = scope:eunuch_character.stewardship + add = scope:eunuch_character.martial + add = scope:eunuch_character.learning + } + } + modifier = { + scope:eunuch_character = { has_trait = beardless_eunuch } + add = 25 + } + } + } + #Um... nah + option = { + name = tribute_mission.3002.d + custom_tooltip = tribute_mission.3002.d.tt + if = { + limit = { exists = scope:concubine_character } + save_scope_value_as = { + name = rejected_concubine + value = flag:yes + } + } + else = { + save_scope_value_as = { + name = rejected_eunuch + value = flag:yes + } + } + ai_chance = { + base = 10 + modifier = { + has_trait = paranoid + add = 1000 + } + } + } + after = { + #Moving on + trigger_event = tribute_mission.3005 + } +} + +###DEPRECATED +#Recipient: What do you give? +tribute_mission.3005 = { + type = court_event + title = { + first_valid = { + triggered_desc = { # Gold + trigger = { tribute_mission_1000_gold_tributary_trigger = yes } + desc = tribute_mission.3005.t.gold + } + triggered_desc = { # Herd + trigger = { tribute_mission_1000_herd_tributary_trigger = yes } + desc = tribute_mission.3005.t.herd + } + triggered_desc = { # Concubine + trigger = { tribute_mission_1000_concubine_tributary_trigger = yes } + desc = tribute_mission.3005.t.concubine + } + triggered_desc = { # Eunuch + trigger = { tribute_mission_1000_eunuch_tributary_trigger = yes } + desc = tribute_mission.3005.t.eunuch + } + triggered_desc = { # Artifact + trigger = { tribute_mission_1000_artifact_tributary_trigger = yes } + desc = tribute_mission.3005.t.artifact + } + desc = tribute_mission.3005.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { + OR = { + exists = scope:concubine_character + exists = scope:eunuch_character + } + } + desc = tribute_mission.3005.intro.human_tribute + } + desc = tribute_mission.3005.intro + } + first_valid = { + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:small_gold_tribute } + desc = tribute_mission.3005.desc.small_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:adequate_gold_tribute } + desc = tribute_mission.3005.desc.adequate_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:excessive_gold_tribute } + desc = tribute_mission.3005.desc.excessive_gold + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:small_herd_tribute } + desc = tribute_mission.3005.desc.small_herd + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:adequate_herd_tribute } + desc = tribute_mission.3005.desc.adequate_herd + } + triggered_desc = { + trigger = { scope:tributary_scope.var:tribute_mission_type ?= flag:excessive_herd_tribute } + desc = tribute_mission.3005.desc.excessive_herd + } + triggered_desc = { + trigger = { exists = scope:rejected_concubine } + desc = tribute_mission.3005.desc.rejected_concubine + } + triggered_desc = { + trigger = { exists = scope:appointed_concubine } + desc = tribute_mission.3005.desc.appointed_concubine + } + triggered_desc = { + trigger = { exists = scope:concubine_character } + desc = tribute_mission.3005.desc.concubine + } + triggered_desc = { + trigger = { exists = scope:rejected_eunuch } + desc = tribute_mission.3005.desc.rejected_eunuch + } + triggered_desc = { + trigger = { exists = scope:appointed_eunuch } + desc = tribute_mission.3005.desc.appointed_eunuch + } + triggered_desc = { + trigger = { exists = scope:eunuch_character } + desc = tribute_mission.3005.desc.eunuch + } + triggered_desc = { + trigger = { exists = scope:artifact_to_tribute } + desc = tribute_mission.3005.desc.artifact + } + #Fallback + desc = tribute_mission.3005.desc + } + } + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + scope:human_tribute = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + immediate = { + tribute_mission_1000_fork_over_with_notification_effect = yes + } + #China: Treasury / Trade Goods + option = { + name = tribute_mission.3005.treasury + trigger = { tribute_mission_1000_can_give_treasury_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_treasury_effect = yes } + tribute_mission_1000_set_treasury_reward_effect = yes + + ai_chance = { + base = 0 + + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:treasury + add = 1000 + } + } + } + #Artifact + option = { + name = tribute_mission.3005.artifact + #Inform the player what will happen (since the artifact doesn't exist yet) + custom_tooltip = tribute_mission.3005.artifact.tt + tribute_mission_1000_set_artifact_reward_effect = yes + + ai_chance = { + base = 0 + + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:artifact + add = 1000 + } + } + } + + #Innovation + option = { + name = tribute_mission.3005.innovation + trigger = { tribute_mission_1000_can_set_innovation_reward_trigger = yes } + tribute_mission_1000_set_innovation_reward_effect = yes + #Display the effects + show_as_tooltip = { + if = { + limit = { exists = scope:saved_innovation } + scope:tributary_scope.culture = { + add_innovation_progress = { + value = tribute_reward_innovation_progress_value + target = scope:saved_innovation + } + } + } + if = { + limit = { exists = scope:grant_fascination } + scope:tributary_scope.culture = { + add_fascination_progress = tribute_reward_fascination_progress_value + } + } + } + ai_chance = { + base = 0 + + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:innovation + add = 1000 + } + } + } + + #Development + option = { + name = tribute_mission.3005.development + trigger = { tribute_mission_1000_eligible_development_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_development_effect = yes } + tribute_mission_1000_set_development_reward_effect = yes + + ai_chance = { + base = 0 + + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 20 + } + + # Always choose this option if we were successfully influenced + modifier = { + scope:successful_influence ?= flag:development + add = 1000 + } + } + } + #Monk + option = { + name = tribute_mission.3005.monk + trigger = { tribute_mission_1000_eligible_for_monk_trigger = yes } + show_as_tooltip = { tribute_mission_1000_give_monk_effect = yes } + tribute_mission_1000_set_monk_reward_effect = yes + + ai_chance = { + base = 0 + + # If we were not influenced, just add a base chance + modifier = { + NOT = { exists = scope:successful_influence } + add = 100 + } + } + } + #Generic Legitimacy + option = { + name = tribute_mission.3005.legitimacy + show_as_tooltip = { tribute_mission_1000_give_legitimacy_effect = yes } + tribute_mission_1000_set_legitimacy_reward_effect = yes + + ai_chance = { + base = 100 + } + } + after = { + if = { + limit = { + scope:tributary_scope = { + subject_standing > seal_of_investiture_minimum_subject_standing + NOT = { + any_character_artifact = { + OR = { + artifact_type = seal_of_investiture + artifact_type = seal_of_investiture_court + } + } + } + } + } + trigger_event = { id = tribute_mission.3006 } + } + else_if = { + limit = { scope:tributary_scope = { is_tributary = no } } + scope:tributary_scope = { trigger_event = tribute_mission.3008 } + } + else = { + scope:tributary_scope = { + trigger_event = { id = tribute_mission.3010 } + } + } + } +} + +###DEPRECATED +#Overlord: Decide whether to grant a Seal of Investiture or not +tribute_mission.3006 = { + type = court_event + title = tribute_mission.3006.t + desc = tribute_mission.3006.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + immediate = { + tribute_mission_1006_eligible_scribe_scope_effect = yes + } + #Grant the Seal + option = { + name = tribute_mission.3006.grant + trigger = { + trigger_if = { + limit = { + scope:receiving_character = { + is_ai = yes + } + } + treasury > tribute_seal_of_investiture_cost + } + trigger_else = { + always = yes #Humans can always get one + } + } + show_as_unavailable = { always = yes } + custom_tooltip = { + text = tribute_mission.3006.grant.tt + create_artifact_imperial_seal_effect = { + OWNER = scope:receiving_character + SMITH = scope:scribe_character + } + } + remove_treasury = tribute_seal_of_investiture_cost + add_legitimacy = 50 + scope:tributary_scope = { + trigger_event = tribute_mission.3007 + } + + ai_chance = { + base = 50 + modifier = { + exists = scope:successful_influence + add = 50 + } + modifier = { + always = yes + add = scope:tributary_scope.subject_standing + add = -50 + } + ai_value_modifier = { + ai_greed = -0.5 + ai_honor = 0.5 + } + } + } + #Decline to grant the Seal + option = { + name = { + text = { + first_valid = { + triggered_desc = { + trigger = { treasury < tribute_seal_of_investiture_cost } + desc = tribute_mission.3006.decline.no_money + } + desc = tribute_mission.3006.decline.dont_wanna + } + } + } + add_legitimacy = -50 + reverse_add_opinion = { + target = scope:tributary_scope + modifier = refused_seal_of_investiture_opinion + opinion = -50 + } + scope:tributary_scope = { + trigger_event = { + id = tribute_mission.3010 + } + } + + ai_chance = { + base = 10 + } + } +} + +#Tributary: Receive the Seal of Investiture +tribute_mission.3007 = { + type = court_event + title = tribute_mission.3007.t + desc = tribute_mission.3007.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:receiving_character = { + group = petition_liege_group + } + scope:scribe_character = { + group = petition_liege_group + } + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + #Grant the Seal + option = { + name = tribute_mission.3007.a + scope:seal_of_investiture_scope = { + set_owner = scope:tributary_scope + } + + } + after = { + scope:tributary_scope = { + trigger_event = tribute_mission.3010 + } + } +} + +#Tributary: Decide whether to become a Tributary or not +tribute_mission.3008 = { + type = court_event + title = tribute_mission.3008.t + desc = tribute_mission.3008.desc + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:receiving_character = { + group = petition_liege_group + } + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + + #Become a Tributary + option = { + name = tribute_mission.3008.a + start_tributary_interaction_effect = { + TRIBUTARY = scope:tributary_scope + SUZERAIN = scope:overlord_scope + } + scope:overlord_scope = { + send_interface_message = { + type = event_tribute_good_text + title = tribute_mission.new_tributary.title + left_icon = scope:tributary_scope + desc = tribute_mission.new_tributary.desc + } + } + if = { + limit = { has_variable = wants_to_become_tributary_of_china } + debug_log = "wants_to_become_tributary_of_china realized!" + } + else = { + debug_log = "Became tributary through tribute mission" + } + + ai_chance = { # essentially a copy of the ai_chance for become_tributary_interaction + base = -50 + + modifier = { # Special case for Hegemonic Tributaries + scope:overlord_scope = { + highest_held_title_tier >= tier_hegemony + } + add = { + add = 25 + if = { + limit = { + OR = { + NOT = { scope:overlord_scope.primary_title = title:h_china } + government_has_flag = government_is_meritocratic + } + } + add = 25 + } + } + desc = tributary_interaction_aibehavior_recipient_hegemon_tier_tt + } + + modifier = { # Special case for Hegemonic Tributaries in the Dynastic Cycle - Stable Phase + scope:overlord_scope = { + highest_held_title_tier >= tier_hegemony + any_character_situation = { + situation_type = dynastic_cycle + } + } + add = { + if = { # Unstable Phase + limit = { + any_character_situation = { + situation_type = dynastic_cycle + OR = { + situation_current_phase = situation_dynastic_cycle_phase_instability + situation_current_phase = situation_dynastic_cycle_phase_instability_conquest + } + } + } + add = -50 + desc = tributary_interaction_aibehavior_recipient_unstable_cycle_tt + } + else = { # Stable Phase + if = { + limit = { + scope:overlord_scope.legitimacy_level < dynastic_cycle_legitimacy_expectation + } + add = -25 + desc = tributary_interaction_aibehavior_recipient_low_legitimacy_tt + } + else_if = { + limit = { + scope:overlord_scope.legitimacy_level >= dynastic_cycle_legitimacy_expectation + } + add = 25 + desc = tributary_interaction_aibehavior_recipient_high_legitimacy_tt + } + } + } + desc = ai_will_do_debug # For debugging, not shown to players + } + + #A devaraja should never willingly _offer_ to become a tributary + modifier = { + trigger = { + government_has_flag = government_is_mandala + OR = { + has_unruined_mandala_capital_trigger = yes + has_mandala_aspect_trigger = yes + } + } + add = -1000 + } + + #MINOR MODIFIERS + ai_military_threat_modifier = { + SENDER = scope:tributary_scope + RECEIVER = scope:overlord_scope + MULTIPLIER = 0.5 + } + + modifier = { + is_obedient_to = scope:overlord_scope + add = 40 + desc = obedient_interaction_reason + } + + modifier = { + highest_held_title_tier <= tier_duchy + OR = { + government_has_flag = government_is_feudal + government_has_flag = government_is_tribal_excluding_wanua + } + add = 25 + } + + modifier = { + OR = { + NOT = { + any_neighboring_top_liege_realm_owner = { + always = yes # no neighbors, i.e. island + } + } + any_neighboring_top_liege_realm_owner = { + top_suzerain = scope:overlord_scope # this includes direct neighbors with overlord + } + } + add = 25 + } + + modifier = { # Rivalry modifier. + desc = offer_vassalization_interaction_aibehavior_rival_tt + trigger = { + scope:tributary_scope = { + has_relation_rival = scope:overlord_scope + NOT = { has_relation_nemesis = scope:overlord_scope } + } + } + add = -10 + } + modifier = { # Nemesis modifier. + desc = offer_vassalization_interaction_aibehavior_nemesis_tt + trigger = { + scope:tributary_scope = { + has_relation_nemesis = scope:overlord_scope + } + } + add = -100 + } + + modifier = { # Different faith, no pluralism. + desc = offer_vassalization_interaction_aibehavior_differentfaith_tt + trigger = { + scope:tributary_scope = { + NOR = { # Of two different faiths AND the potential vassal's faith is not pluralistic. + faith = scope:overlord_scope.faith + faith = { has_doctrine = doctrine_pluralism_pluralistic } + } + } + } + add = { + value = -25 + if = { + limit = { + scope:tributary_scope.faith = { + faith_hostility_level = { + target = scope:overlord_scope.faith + value >= faith_hostile_level + } + } + } + add = -10 + } + if = { + limit = { + scope:tributary_scope.faith = { + faith_hostility_level = { + target = scope:overlord_scope.faith + value >= faith_evil_level + } + } + } + add = -25 + } + } + } + + modifier = { # Cultural Acceptance + scope:tributary_scope = { + NOT = { # cultural condition below doesn't have to apply if both actor and recipient have nomadic_philosophy + has_trait = nomadic_philosophy + scope:overlord_scope = { has_trait = nomadic_philosophy } + } + NOT = { has_same_culture_as = scope:overlord_scope } + culture = { + cultural_acceptance = { target = scope:overlord_scope.culture value < 50 } + } + } + add = { + add = -10 + if = { + limit = { scope:tributary_scope.culture = { has_cultural_pillar = ethos_bellicose } } + add = -10 + } + } + desc = cultural_acceptance_interaction_reason + } + + modifier = { # Same language + add = 5 + desc = speaks_same_language_interaction_reason + trigger = { + scope:tributary_scope = { + knows_language_of_culture = scope:overlord_scope.culture + } + } + } + } + } + #No thanks + option = { + name = tribute_mission.3008.b + ai_chance = 10 + } + after = { + trigger_event = tribute_mission.3010 + } +} + +#Tributary: Receive reward, go home +tribute_mission.3010 = { + type = court_event + title = { + first_valid = { + #Treasury + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_treasury } + desc = tribute_mission.3010.t.treasury + } + #Artifact + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_artifact } + desc = tribute_mission.3010.t.artifact + } + #Innovation + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_innovation } + desc = tribute_mission.3010.t.innovation + } + #Development + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_development } + desc = tribute_mission.3010.t.development + } + #Monk + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_monk } + desc = tribute_mission.3010.t.monk + } + #Monk + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_legitimacy } + desc = tribute_mission.3010.t.legitimacy + } + desc = tribute_mission.3010.t + } + } + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:seal_of_investiture_scope } + desc = tribute_mission.3010.intro.postseal + } + triggered_desc = { + trigger = { + scope:receiving_character = { has_character_flag = created_attendant } + } + desc = tribute_mission.3010.intro.attendant + } + desc = tribute_mission.3010.intro + } + first_valid = { + #Treasury + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_treasury } + desc = tribute_mission.3010.desc.treasury + } + #Artifact + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_artifact } + desc = tribute_mission.3010.desc.artifact + } + #Innovation + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_innovation } + desc = tribute_mission.3010.desc.innovation + } + #Development + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_development } + desc = tribute_mission.3010.desc.development + } + #Monk + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_monk } + desc = tribute_mission.3010.desc.monk + } + #Legitimacy + triggered_desc = { + trigger = { exists = scope:tribute_reward_type_legitimacy } + desc = tribute_mission.3010.desc.legitimacy + } + } + desc = tribute_mission.3010.outro + } + theme = tributary + override_sound = { reference = "event:/SFX/Events/Themes/sfx_event_theme_type_duty" } + artifact = { + trigger = { exists = scope:tribute_reward_type_artifact } + target = scope:tribute_reward_type_artifact + position = lower_center_portrait + } + court_scene = { + button_position_character = scope:receiving_character + court_owner = scope:overlord_scope + court_event_force_open = no + show_timeout_info = yes + should_pause_time = yes + roles = { + scope:tributary_scope = { + group = petition_liege_group + animation = throne_room_kneel_1 + } + } + } + immediate = { + tribute_mission_1000_disburse_reward_effect = yes + } + #Thanks, bye! + option = { + name = tribute_mission.3010.a + } + after = { + close_view = { + view = royal_court + player = scope:tributary_scope + } + #Clean up variables & set up cooldown + tribute_mission_1010_complete_effect = yes + } +} + + + +### LETTER EVENTS ### + +#Your Tributary refused your Exact Tribute Interaction +tribute_mission.9000 = { + type = letter_event + opening = tribute_mission.9000.opening + desc = tribute_mission.9000.desc + sender = scope:recipient + + immediate = { + scope:recipient = { + show_as_tooltip = { + add_legitimacy = minor_legitimacy_loss + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = declined_tribute_mission_opinion + opinion = -30 + target = scope:actor + } + } + } + } + } + + #Hokay... + option = { + name = tribute_mission.9000.a + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + ai_boldness = -1 + } + } + } +} + +#Tributary is going on a mission! +tribute_mission.9010 = { + type = letter_event + opening = tribute_mission.9010.opening + desc = tribute_mission.9010.desc + sender = scope:recipient + + immediate = { + + } + + #Yay! + option = { + name = tribute_mission.9010.a + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + ai_boldness = -1 + } + } + } +} + +#Tributary: You ignored the Requested Tribute Mission, have some penalty +tribute_mission.9500 = { + type = letter_event + opening = tribute_mission.9500.opening + desc = tribute_mission.9500.desc + sender = scope:overlord + + trigger = { + is_tributary = yes + has_variable = requested_tribute_mission + var:requested_tribute_mission = overlord + #We're going, we're going... + NOT = { + has_variable = tribute_mission_type + exists = current_travel_plan + } + } + + on_trigger_fail = { + set_variable = invalidation_should_fail_ongoing_requested_tribute_mission + } + + immediate = { + add_legitimacy = minor_legitimacy_loss + if = { + limit = { + NOT = { exists = scope:overlord } + } + overlord = { + save_scope_as = overlord + } + } + scope:overlord = { + if = { + limit = { is_ai = yes } + add_opinion = { + modifier = declined_tribute_mission_opinion + opinion = -30 + target = root + } + } + } + #Clean up Requested Tribute Mission variables + requested_tribute_mission_clean_up_variables_effect = yes + } + + #Hokay... + option = { + name = tribute_mission.9500.a + + ai_chance = { + base = 25 + ai_value_modifier = { + ai_greed = -1 + ai_boldness = -1 + } + } + } +} + + + +### TRAVEL EVENTS ### + +#Your human tribute is not available any more +tribute_mission.9750 = { + type = character_event + title = tribute_mission.9750.t + desc = tribute_mission.9750.desc + + theme = travel + override_icon = { reference = "gfx/interface/icons/event_types/type_tributary.dds" } + + left_portrait = { + character = root + animation = stress + } + right_portrait = { + character = scope:human_tribute + trigger = { + NOT = { has_character_flag = tribute_mission_escaped_eunuch } + } + triggered_animation = { + trigger = { is_alive = no } + animation = dead + } + animation = prisonhouse + } + immediate = { + #Hol' up + current_travel_plan ?= { pause_travel_plan = yes } + #Save the concubine + if = { + limit = { has_variable = offered_concubine } + var:offered_concubine = { save_scope_as = human_tribute } + } + #Save the eunuch + if = { + limit = { has_variable = offered_eunuch } + var:offered_eunuch = { save_scope_as = human_tribute } + } + } + #Swap to gold? + option = { + name = tribute_mission.9750.a + show_as_unavailable = { always = yes } + #Define how much gold it is + set_variable = { + name = tribute_mission_type + value = flag:adequate_gold_tribute + } + set_variable = { + name = offered_gold_value + value = adequate_gold_tribute_value + } + #Clear out the old variables + remove_variable = offered_concubine + remove_variable = offered_eunuch + #Stash the gold so you don't use it elsewhere on your trip to the capital + custom_tooltip = { + text = tribute_mission.adequate_reserved_gold + hidden_effect = { remove_short_term_gold = adequate_gold_tribute_value } + } + #Keep on keeping on + current_travel_plan ?= { resume_travel_plan = yes } + if = { + limit = { has_character_flag = revisit_tribute_mission_0001 } + trigger_event = { + id = tribute_mission.0001 + delayed = yes + } + } + } + #Or go home + option = { + name = tribute_mission.9750.b + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + custom_tooltip = tribute_mission.9750.tt + #Keep on keeping on + hidden_effect = { + current_travel_plan ?= { resume_travel_plan = yes } + } + tribute_mission_clean_up_variables_effect = yes + tribute_mission_clean_up_request_variables_effect = yes + } + after = { + if = { + limit = { has_character_flag = revisit_tribute_mission_0001 } + remove_character_flag = revisit_tribute_mission_0001 + } + } +} + + +scripted_effect tribute_mission_9760_escape_effect = { + scope:escapee_eunuch = { + add_character_flag = { + flag = tribute_mission_escaped_eunuch + days = 30 + } + } + current_travel_plan = { remove_character = scope:escapee_eunuch } + hidden_effect = { + scope:escapee_eunuch = { move_to_pool_at = root.location } + } + trigger_event = { + id = tribute_mission.9750 + delayed = yes + } +} + +#Your slated eunuch is trying to escape +tribute_mission.9760 = { + type = character_event + title = tribute_mission.9760.t + desc = { + first_valid = { + triggered_desc = { + trigger = { exists = scope:vengeful_eunuch } + desc = tribute_mission.9760.desc.vengeful + } + desc = tribute_mission.9760.desc + } + } + theme = travel + override_icon = { reference = "gfx/interface/icons/event_types/type_tributary.dds" } + override_background = { reference = bedchamber } + + left_portrait = { + character = root + animation = disbelief + } + right_portrait = { + character = scope:escapee_eunuch + triggered_animation = { + trigger = { exists = scope:vengeful_eunuch } + animation = menacing + } + animation = shock + } + trigger = { + is_tributary = yes + location != var:tribute_mission_target_scope.capital_province + has_variable = offered_eunuch + var:offered_eunuch = { has_character_flag = tribute_mission_attempt_escape } + } + immediate = { + #Save the eunuch + if = { + limit = { has_variable = offered_eunuch } + var:offered_eunuch = { save_scope_as = escapee_eunuch } + } + scope:escapee_eunuch = { + if = { + limit = { + OR = { + 1002_human_tribute_angry_personality_trigger = yes + has_trait = sadistic + has_trait = just + } + } + save_scope_as = vengeful_eunuch + } + } + } + #Vengeful eunuch + option = { + name = tribute_mission.9760.a + trigger = { exists = scope:vengeful_eunuch } + duel = { + skill = prowess + target = scope:vengeful_eunuch + #You overpower them + 50 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tribute_mission.9760.a.success + custom_tooltip = tribute_mission.9760.a.success.tt + #You learned something! + random = { + chance = 10 + add_prowess_skill = 1 + } + } + #You get injured + 40 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tribute_mission.9760.a.failure + increase_wounds_effect = { REASON = fight } + #Hmmm, vindication + if = { + limit = { is_female = no } + random = { + chance = 5 + add_trait = eunuch_1 + } + } + tribute_mission_9760_escape_effect = yes + } + } + } + #Guards!!! + option = { + name = tribute_mission.9760.b + trigger = { + NOT = { exists = scope:vengeful_eunuch } + } + scope:escapee_eunuch = { + duel = { + skill = prowess + value = very_high_skill_rating + #Eunuch is overpowered + 30 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + } + desc = tribute_mission.9760.b.success + custom_tooltip = tribute_mission.9760.a.success.tt + } + #Eunuch escapes + 60 = { + compare_modifier = { + value = scope:duel_value + multiplier = 3.5 + } + desc = tribute_mission.9760.b.failure + tribute_mission_9760_escape_effect = yes + } + #Eunuch is killed in the process + 5 = { + compare_modifier = { + value = scope:duel_value + multiplier = -3.5 + min = 5 + } + desc = tribute_mission.9760.b.critical_failure + death = { death_reason = death_fight } + trigger_event = { + id = tribute_mission.9750 + delayed = yes + } + } + } + } + + } + #Let 'em go + option = { + name = tribute_mission.9760.c + tribute_mission_9760_escape_effect = yes + } + after = { + scope:escapee_eunuch = { + if = { + limit = { is_alive = yes } + remove_character_flag = tribute_mission_attempt_escape + } + } + } +} + +#Somehow your Tribute Mission invalidated, refund and return home +tribute_mission.9800 = { + type = character_event + title = tribute_mission.9800.t + desc = { + first_valid = { + #New overlord can't accept my tribute + triggered_desc = { + trigger = { has_variable = new_overlord_unable_to_accept_tribute } + desc = tribute_mission.9800.desc.unable_to_accept_tribute + } + #Hmm got vassalized by Suzerain + triggered_desc = { + trigger = { + is_tributary = no + liege = var:tribute_mission_target_scope + } + desc = tribute_mission.9800.desc.suzerain_turned_liege + } + #No longer Tributary + triggered_desc = { + trigger = { is_tributary = no } + desc = tribute_mission.9800.desc.no_longer_tributary + } + #New overlord has a different end destination + triggered_desc = { + trigger = { has_variable = new_overlord_somewhere_else } + desc = tribute_mission.9800.desc.different_end_location + } + } + } + + theme = travel + override_icon = { reference = "gfx/interface/icons/event_types/type_tributary.dds" } + + left_portrait = { + character = root + animation = thinking + } + lower_right_portrait = scope:current_overlord + immediate = { + overlord = { + if = { + limit = { this != root } + save_scope_as = current_overlord + } + } + #Refunds + if = { + limit = { has_variable = offered_gold_value } + add_short_term_gold = var:offered_gold_value + } + if = { + limit = { has_variable = offered_herd_value } + domicile ?= { + change_herd = { add = var:offered_herd_value } + } + } + } + #Oh well + option = { + name = tribute_mission.9800.a + current_travel_plan = { + if = { + limit = { can_cancel = yes } + cancel_travel_plan = yes + } + } + } + after = { + tribute_mission_clean_up_variables_effect = yes + tribute_mission_clean_up_request_variables_effect = yes + + remove_variable = new_overlord_unable_to_accept_tribute + + if = { + limit = { exists = scope:tribute_reward_type_rejection } + tribute_mission_1000_rejection_effect = yes + } + } +} diff --git a/localization/english/replace/gui/succession_event_window_l_english.yml b/localization/english/replace/gui/succession_event_window_l_english.yml new file mode 100644 index 00000000..e364fdeb --- /dev/null +++ b/localization/english/replace/gui/succession_event_window_l_english.yml @@ -0,0 +1,320 @@ +l_english: + SUCCESSION_EVENT_WINDOW_LOST_TITLES:0 "Titles lost on succession:" + SUCCESSION_EVENT_WINDOW_CLOSE: "Continue as [SuccessionEventWindow.GetContinueAsCharacter.GetShortUINameNotMeNoTooltip]" + SUCCESSION_EVENT_WINDOW_LEGACY:0 "Show Lineage" + SUCCESSION_EVENT_WINDOW_OBSERVER:0 "Enter Observer Mode" + SUCCESSION_EVENT_WINDOW_MENU:0 "Exit to Menu" + SUCCESSION_EVENT_WINDOW_MENU_TT:0 "" + SUCCESSION_EVENT_WINDOW_END_GAME:0 "End Game" + SUCCESSION_EVENT_WINDOW_END_GAME_TT:0 "End Multiplayer Game" + SUCCESSION_EVENT_WINDOW_LEAVE_GAME:0 "Leave Game" + SUCCESSION_EVENT_WINDOW_LEAVE_GAME_TT:0 "Leave Multiplayer Game" + SUCCESSION_EVENT_WINDOW_CHANGE_CHARACTER:0 "Choose new Character" + + #Death Intro messages: + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_DEFAULT_1:0 "[ROOT.Char.GetFullNameNoTooltip] has given up the ghost at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_DEFAULT_2:0 "[ROOT.Char.GetFullNameNoTooltip] has abandoned [ROOT.Char.GetHerHis] mortal coil at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_DEFAULT_3:0 "[ROOT.Char.GetFullNameNoTooltip] has passed on at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_DEFAULT_4:0 "[ROOT.Char.GetFullNameNoTooltip] has left this world at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_DEFAULT_5:0 "[ROOT.Char.GetFullNameNoTooltip] has passed on at [ROOT.Char.GetAge] years of age and [ROOT.Char.Custom('GetAfterLifeDestination')]." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_PIOUS:1 "[ROOT.Char.GetFullNamePossessiveNoTooltip] spirit has flown to [ROOT.Char.GetFaith.PositiveAfterLife] at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_WICKED:1 "[ROOT.Char.GetFullNamePossessiveNoTooltip] soul has finally been cast to [ROOT.Char.GetFaith.NegativeAfterLife] at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_WOUNDED:0 "[ROOT.Char.GetFullNameNoTooltip] has finally found peace at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_CHRISTIANITY_1:0 "[ROOT.Char.GetFullNameNoTooltip] has found peace in Christ's embrace at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_CHRISTIANITY_2:0 "[ROOT.Char.GetFullNameNoTooltip] rests in the arms of the Lord at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_1:0 "[ROOT.Char.GetFullNameNoTooltip] has left the transient house at the call of the True One at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_2:0 "[ROOT.Char.GetFullNameNoTooltip] has abandoned this transient world and flown to [ROOT.Char.GetFaith.PositiveAfterLife] at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ISLAM_3:0 "[ROOT.Char.GetFullNameNoTooltip] has passed on to eternity at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_NORSE_1:0 "[ROOT.Char.GetFullNameNoTooltip] has joined the feast in [ROOT.Char.GetFaith.PositiveAfterLife] at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_HELLENIC_1:0 "[ROOT.Char.GetFullNameNoTooltip] has crossed the River Styx at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_EASTERN_1:0 "[ROOT.Char.GetFullNameNoTooltip] has transcended [ROOT.Char.GetHerHis] material form at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_TRIBAL_1:0 "[ROOT.Char.GetFullNameNoTooltip] has crossed the door to the world of spirits at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_EURO_1:0 "[ROOT.Char.GetFullNameNoTooltip] joined the Divine at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ELYSIAN_1:0 "[ROOT.Char.GetFullNameNoTooltip] has entered the kingdom of Hades at [ROOT.Char.GetAge] years of age." + SUCCESSION_EVENT_WINDOW_DEAD_INTRO_ELYSIAN_2:0 "[ROOT.Char.GetFullNameNoTooltip]'s soul was taken by the Devil at [ROOT.Char.GetAge] years of age." + +#Death Reason message: + SUCCESSION_EVENT_WINDOW_DEAD_REASON_1:0 "[ROOT.Char.GetSheHe|U] [ROOT.Char.GetDeathReason]." + +#Death Outro messages: + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_AGE_CHILD:0 "With [ROOT.Char.GetHerHis] life cut short so early, it is hard to say what kind of ruler [ROOT.Char.GetSheHe] would have become." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_AGE_OLD:0 "An old [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] lived a long, fulfilling life." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_AGE_IMMORTAL:0 "Thought to be immortal, [ROOT.Char.GetSheHe] surprised many with [ROOT.Char.GetHerHis] unexpected passing." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_AGE_PREGNANT:0 "Dead before delivering [ROOT.Char.GetHerHis] baby, [ROOT.Char.GetSheHe] will not walk alone in the land beyond." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_LEPER:0 "[ROOT.Char.GetHerHis|U] putrescent body has finally succumbed to the scourge of leprosy." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_DISFIGURED:0 "Horribly disfigured, [ROOT.Char.GetSheHe] spent [ROOT.Char.GetHerHis] last years unable to show [ROOT.Char.GetHerHis] face in public." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_MANGLED:0 "Mangled in a terrible accident, [ROOT.Char.GetSheHe] spent [ROOT.Char.GetHerHis] last years barely able to walk." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_HUNCHBACK:0 "Born under unfortunate circumstances, [ROOT.Char.GetSheHe] was often derided for [ROOT.Char.GetHerHis] twisted back." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_GIANT:0 "Born under unfortunate circumstances, [ROOT.Char.GetSheHe] was often derided for [ROOT.Char.GetHerHis] gigantic proportions." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_DWARF:0 "Born under unfortunate circumstances, [ROOT.Char.GetSheHe] was often derided for [ROOT.Char.GetHerHis] diminutive stature." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_STRONG:0 "A [ROOT.Char.GetWomanMan|U] of unparalleled prowess, [ROOT.Char.GetSheHe] finally found an opponent that [ROOT.Char.GetSheHe] could not overpower." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_PRETTY_YOUNG:0 "Dead in the prime of [ROOT.Char.GetHerHis] life, [ROOT.Char.GetSheHe] will always be remembered for [ROOT.Char.GetHerHis] stunning beauty." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_PRETTY_OLD:0 "Once famous for [ROOT.Char.GetHerHis] looks, Fate cursed [ROOT.Char.GetHerHim] with a life long enough to witness [ROOT.Char.GetHerHis] beauty slowly wither away." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_WEAK:0 "A [ROOT.Char.GetWomanMan] of frail constitution, [ROOT.Char.GetSheHe] was often mocked by [ROOT.Char.GetHerHis] peers." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_UGLY:1 "Renowned for [ROOT.Char.GetHerHis] ugliness, it was rumored a mere glance at [ROOT.Char.GetHerHim] could give nightmares for days." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_BODY_INCAPABLE:0 "Reduced to a hollow shell of [ROOT.Char.GetHerHis] former self, unable to speak or move, [ROOT.Char.GetSheHe] has finally left the broken remains of [ROOT.Char.GetHerHis] body." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_LUNATIC:0 "Cursed with a disturbed mind, [ROOT.Char.GetSheHe] was known throughout [ROOT.Char.GetHerHis] lands as a raving lunatic." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_POSSESSED_POSITIVE:0 "After speaking through [ROOT.Char.GetHerHim] for years, [ROOT.Char.GetFaith.HighGodName] has finally called [ROOT.Char.GetHerHim] home." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_POSSESSED_NEGATIVE:0 "Plagued by demons, [ROOT.Char.GetSheHe] often raved about [ROOT.Char.GetHerHis] imminent doom." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_DEPRESSED:1 "A tormented [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] had long desired the sweet embrace of death." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_GENIUS:0 "Although quite famous for [ROOT.Char.GetHerHis] sharp intellect, [ROOT.Char.GetSheHe] could still not outsmart [ROOT.Char.GetFaith.DeathDeityName]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_DUMB:0 "Known to be feeble of mind, [ROOT.Char.GetSheHe] often relied on [ROOT.Char.GetHerHis] Council to make important decisions." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_MIND_INFIRM:0 "A hollowed shell of [ROOT.Char.GetHerHis] former self, [ROOT.Char.GetSheHe] had long lost [ROOT.Char.GetHerHis] wits by the time of [ROOT.Char.GetHerHis] final passing." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_EXCOMMUNICATED:0 "Branded a Heretic by the Church, [ROOT.Char.GetSheHe] will surely suffer for [ROOT.Char.GetHerHis] sins." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_KINSLAYER:0 "Known to have stained [ROOT.Char.GetHerHis] hands in the blood of [ROOT.Char.GetHerHis] own kin, [ROOT.Char.GetSheHe] is surely paying for [ROOT.Char.GetHerHis] horrific crimes in [ROOT.Char.GetFaith.NegativeAfterLife]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_DEVIANT:0 "A degenerate [ROOT.Char.GetWomanMan] of repulsive tastes, [ROOT.Char.GetSheHe] is sure to find no solace or revelry where [ROOT.Char.GetSheHe] is going." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_CANNIBAL:0 "Rumored to consume human flesh for sustenance, [ROOT.Char.GetSheHe] is without a doubt being punished for [ROOT.Char.GetHerHis] wickedness in life." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_SODOMITE:1 "A renowned sodomite, [ROOT.Char.GetSheHe] lays now in the tender care of [ROOT.Char.GetFaith.DevilName] [ROOT.Char.GetFaith.DevilHerselfHimself]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_INCESTUOUS:0 "For having tasted the forbidden fruit of incestuous love, [ROOT.Char.GetSheHe] will surely suffer in the next life." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_ADULTERER:0 "A shameless adulterer, [ROOT.Char.GetSheHe] will be remembered for [ROOT.Char.GetHerHis] treachery and [ROOT.Char.GetHerHis] covetous disposition." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_FORNICATOR:0 "A shameless fornicator, [ROOT.Char.GetSheHe] will be remembered for [ROOT.Char.GetHerHis] uncontrollable and insidious lust." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_MURDERER:0 "A known murderer, [ROOT.Char.GetSheHe] will atone for [ROOT.Char.GetHerHis] unspeakable crimes in the next life." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_SCANDAL_WITCH:0 "Known to mix magical herbs and consort with [ROOT.Char.GetFaith.DevilName], [ROOT.Char.GetSheHe] will surely burn in the afterlife for [ROOT.Char.GetHerHis] sins." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_ACCOMPLISHMENT_SAOSHYANT:0 "The sacred restorer of the Persian Empire, [ROOT.Char.GetHerHis] rise to glory will be immortalized in the sermons of all [ROOT.Char.GetFaith.PriestMalePlural]. Surely, [ROOT.Char.GetSheHe] sits next to [ROOT.Char.GetFaith.HighGodName] now." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_ACCOMPLISHMENT_RESTORER_ROME:0 "By restoring the Empire's ancient power, [ROOT.Char.GetSheHe] has ensured that [ROOT.Char.GetHerHis] name will live on in glory to the end of times." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_ACCOMPLISHMENT_CRUSADER:0 "A zealous [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] fought for the glory of [ROOT.Char.GetFaith.HighGodName] against the [ROOT.Char.Custom('GetDerogatoryNonbelieverPlural')] in one of the greatest holy wars of recent history." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_DIPLOMAT:0 "An inveterate diplomat, there was no argument [ROOT.Char.GetSheHe] could not peacefully resolve." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_REVELER:0 "A charming [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] became famous for [ROOT.Char.GetHerHis] elaborate feasts and grandiose balls." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_BLADEMASTER:0 "One of the best fighters of [ROOT.Char.GetHerHis] age, [ROOT.Char.GetSheHe] was unrivaled in hand-to-hand combat." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_HUNTER:0 "A keen and dedicated hunter, [ROOT.Char.GetSheHe] loved to spend entire weeks in the wilderness, looking for the most elusive game." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_GENERAL:0 "Known to be an exceptional strategist, [ROOT.Char.GetSheHe] spent many of [ROOT.Char.GetHerHis] days examining fields and drilling [ROOT.Char.GetHerHis] troops." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_ADMINISTRATOR:1 "A conscientious [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] was renowned for [ROOT.Char.GetHerHis] excellent skills as a steward and a ruler." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_SCHEMER:0 "Known for [ROOT.Char.GetHerHis] twisted, conniving mind, [ROOT.Char.GetSheHe] never revealed [ROOT.Char.GetHerHis] true intentions to anybody, not even [ROOT.Char.GetHerHis] closest friends." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_SEDUCER:0 "Known as a libertine [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] was gifted with a silver tongue, able to charm anyone into sharing [ROOT.Char.GetHerHis] bed." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_SCHOLAR:1 "Known to be a respected scholar, [ROOT.Char.GetSheHe] spent most of [ROOT.Char.GetHerHis] days studying in [ROOT.Char.GetHerHis] library, rarely leaving [ROOT.Char.GetHerHis] [ROOT.Char.Custom('ResidenceBuilding')]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_TORTURER:0 "Known for [ROOT.Char.GetHerHis] sadistic streak, [ROOT.Char.GetSheHe] turned torture and mutilation into art." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_FAMILY_FIRST:0 "A [ROOT.Char.GetWomanMan] to always put the good of [ROOT.Char.GetHerHis] family above all else, [ROOT.Char.GetSheHe] spent [ROOT.Char.GetHerHis] life trying to ensure a glorious future for all [ROOT.Char.GetHerHis] descendants." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_MYSTIC:1 "Known for spending most of [ROOT.Char.GetHerHis] nights in [ROOT.Char.GetHerHis] laboratory, [ROOT.Char.GetSheHe] was believed by many to be nothing more than a warlock, concocting unholy spells in the secrecy of [ROOT.Char.GetHerHis] [ROOT.Char.Custom('ResidenceBuilding')]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_PHYSICIAN:0 "Devoted to the understanding of the human body and mind, [ROOT.Char.GetSheHe] was a respected physician, sought after by many young scholars for [ROOT.Char.GetHerHis] encyclopedic knowledge of nature and humors." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_GALLANT:0 "A paragon of valor and gallantry, [ROOT.Char.GetSheHe] will always be remembered for [ROOT.Char.GetHerHis] cordial and just nature in face of all odds." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_LIFESTYLE_HERBALIST:1 "A renowned herbalist, it was said that [ROOT.Char.GetSheHe] could cure all ailments with the right concoction." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_MALICIOUS:0 "A conniving [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] will be long remembered for [ROOT.Char.GetHerHis] pettiness and spite." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_BENEVOLENT:0 "A [ROOT.Char.GetWomanMan] of pleasant disposition, [ROOT.Char.GetSheHe] will be remembered for [ROOT.Char.GetHerHis] benevolent rule." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_DOMINANT:0 "A [ROOT.Char.GetWomanMan] not to be trifled with, [ROOT.Char.GetSheHe] embodied the dignity and power of [ROOT.Char.GetHerHis] title like few rulers can." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_SUBMISSIVE:0 "A meek and bashful [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] will be remembered by many as a submissive, sometimes flustered ruler." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_APATHETIC:0 "If there is something that can be said about [ROOT.Char.GetHerHim] is that [ROOT.Char.GetSheHe] was never one to leave an impression on any that met [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_LUSTFUL:0 "Born with an insatiable desire, [ROOT.Char.GetSheHe] spent [ROOT.Char.GetHerHis] life always looking for [ROOT.Char.GetHerHis] next amorous conquest." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_GLUTTONOUS:0 "A [ROOT.Char.GetWomanMan] with a large appetite, [ROOT.Char.GetSheHe] never passed on the opportunity to try some new, exotic food." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_GREEDY:1 "Renowned for [ROOT.Char.GetHerHis] love for gold, [ROOT.Char.GetSheHe] will be buried with some of [ROOT.Char.GetHerHis] most cherished jewels." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_LAZY:0 "Never one to do more work than necessary, [ROOT.Char.GetSheHe] was always ready and willing to skirt [ROOT.Char.GetHerHis] responsibilities." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_FICKLE:0 "A fickle [ROOT.Char.GetWomanMan], hardly anybody knew what [ROOT.Char.GetSheHe] would think or do at any given occasion." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_WRATHFUL:0 "Quick to anger, [ROOT.Char.GetHerHis] [ROOT.Char.Custom('ResidenceBuilding')] often resonated with the thunderous echo of [ROOT.Char.GetHerHis] screams." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_ARROGANT:0 "Always full of [ROOT.Char.GetHerselfHimself] and ready to exercise [ROOT.Char.GetHerHis] authority over [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')], [ROOT.Char.GetSheHe] was a [ROOT.Char.GetWomanMan] thoroughly in love with the sound of [ROOT.Char.GetHerHis] voice." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_CHASTE:0 "[ROOT.Char.GetSheHe|U] will be long remembered as a [ROOT.Char.GetWomanMan] for whom fealty was an uncompromising value." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_TEMPERATE:0 "Always one to avoid feasts and excesses, [ROOT.Char.GetSheHe] never let [ROOT.Char.GetHerHis] base urges get the better of [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_GENEROUS:0 "Well-known to be a charitable [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] freely gave money to [ROOT.Char.GetHerHis] friends and family." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_DILIGENT:0 "A shining example of diligence, [ROOT.Char.GetSheHe] never neglected [ROOT.Char.GetHerHis] duties." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_COMPASSIONATE:0 "Known to be a kind, compassionate soul, [ROOT.Char.GetSheHe] will be remembered fondly by [ROOT.Char.GetHerHis] friends." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_PATIENT:0 "Never one to raise [ROOT.Char.GetHerHis] voice, [ROOT.Char.GetSheHe] was a paragon of patience." + SUCCESSION_EVENT_WINDOW_DEAD_OUTRO_PERSONALITY_HUMBLE:1 "A humble [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] never wanted anyone to make a fuss over [ROOT.Char.GetHerHis] accomplishments." + +#Heir message: + SUCCESSION_EVENT_WINDOW_HEIR_UNDERAGE:1 "Merely [ROOT.Char.GetAge] years old, [ROOT.Char.GetSheHe] will need to rely on [ROOT.Char.GetHerHis] [ROOT.Char.GetDiarchTitle] [ROOT.Char.GetDiarchy.GetDiarch.GetTitledFirstNameNicknamedNoTooltip] during [ROOT.Char.GetHerHis] first years of rule." + SUCCESSION_EVENT_WINDOW_HEIR_USELESS:0 "Having no skills with which to keep the [ROOT.Char.Custom('GetRealmOrDomicile')|l] together, [ROOT.Char.GetHerHis] rule may be doomed to fail." + SUCCESSION_EVENT_WINDOW_HEIR_MILITARY:0 "Being a talented military tactician, many expect [ROOT.Char.GetHerHim] to lead the [ROOT.Char.Custom('GetRealmOrDomicile')|l] to many victories on the field of battle." + SUCCESSION_EVENT_WINDOW_HEIR_LEARNING:0 "A wise and learned [ROOT.Char.GetWomanMan], progress and innovation is expected under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_STEWARDSHIP:0 "Being both thrifty and frugal, the [ROOT.Char.Custom('GetRealmOrDomicile')|l] will surely prosper under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_INTRIGUE:0 "A crafty and perceptive [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] will have no problem gaining leverage where needed." + SUCCESSION_EVENT_WINDOW_HEIR_DIPLOMACY:0 "An accomplished diplomat, vassals and foreign rulers alike are sure to respect [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_STRONG_AND_SMART:0 "Possessing a mighty physique and an exceptionally astute mind, [ROOT.Char.GetHerHis] rule is sure to spawn both song and tale." + SUCCESSION_EVENT_WINDOW_HEIR_WEAK_AND_DUMB:0 "Blessed with neither a sharp mind nor a warrior's physique, [ROOT.Char.GetHerHis] rule will surely be arduous." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_VARANGIAN:0 "Having served in distant Miklagard, [ROOT.Char.GetHerHis] adventurous spirit is likely to inspire [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_LUNATIC:0 "Being a stark raving lunatic and deranged [ROOT.Char.GetWomanMan], the only one who can help [ROOT.Char.GetFirstNamePossessiveNoTooltip] rule is [ROOT.Char.GetFaith.HighGodName]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_POSSESSED_BAD:0 "Suspected to be possessed by a demon sent by [ROOT.Char.GetFaith.DevilName], the [ROOT.Char.GetFaith.PriestMalePlural] will do their best to reign [ROOT.Char.GetHerHim] in." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_POSSESSED_GOOD:0 "Blessed by [ROOT.Char.GetFaith.HighGodName], [ROOT.Char.GetHerHis] body is merely a vessel through which the divine will reveals itself." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_FAIR:0 "Beautiful beyond words, [ROOT.Char.GetHerHis] appearance will have foreign dignitaries groveling at [ROOT.Char.GetHerHis] feet." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ADVENTURER:0 "An adventurous [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNamePossessiveNoTooltip] life is likely to be filled with glory and excitement." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_UGLY_DECEITFUL:0 "Devious and deceptive, [ROOT.Char.GetFirstNamePossessiveNoTooltip] feud with truth itself may also be [ROOT.Char.GetHerHis] undoing." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GLUTTON_GREEDY:0 "A greedy and covetous [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] is unlikely to be popular amongst the peasantry of the [ROOT.Char.Custom('GetRealmOrDomicile')|l]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CYNICAL_JUST:0 "Fair and just in all things, many hope that [ROOT.Char.GetSheHe] will handle any conflicts with grace." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CONTENT_ARBITRARY:1 "A corrupt and unjust [ROOT.Char.GetWomanMan], many do not expect [ROOT.Char.GetHerHis] vassals to sit idly by as [ROOT.Char.GetSheHe] squanders the legacy of [ROOT.Char.GetHerHis] predecessor." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRAVEN_MILITARY_ED:0 "Preferring to lead troops from the safety of [ROOT.Char.GetHerHis] home, [ROOT.Char.GetFirstNameNoTooltip] will have a hard time inspiring the troops." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_SHY_CONTENT:1 "A reclusive [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] is perfectly fine letting the council do most of [ROOT.Char.GetHerHis] work — for better or for worse." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ZEALOUS_PARANOID:0 "Seeing the agents of [ROOT.Char.GetFaith.DevilName] around every corner, [ROOT.Char.Custom('GetDerogatoryNonbelieverPlural')] should beware [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ZEALOUS_GENEROUS:0 "Both pious and generous, the [ROOT.Char.GetFaith.PriestMalePlural] are likely to grow rich under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ARROGANT_BRAVE:0 "Always clad in glistening and splendid armor, [ROOT.Char.GetFirstNameNoTooltip] wants everyone to see [ROOT.Char.GetHerHim] as [ROOT.Char.GetSheHe] charges into battle." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CYNICAL_CRUEL:0 "Never fearing the wrath of [ROOT.Char.GetFaith.HighGodName], [ROOT.Char.GetFirstNameNoTooltip] is unlikely to spare any [ROOT.Char.Custom('GetSubject')] the punishments [ROOT.Char.GetSheHe] sees fit." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_HUMBLE_STUBBORN:0 "Adamant in [ROOT.Char.GetHerHis] ways of worship, faith and tradition are likely to be favored under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_DECEITFUL_CALLOUS:0 "A devious and discontent soul, [ROOT.Char.GetHerHis] rule is likely to be filled with spite and intrigue." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_PATIENT_TRUSTING:0 "A confiding and patient [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNameNoTooltip] is convinced that good things will eventually come to [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_PARANOID_STRESSED:0 "Plagued by seeing shadows around every corner, [ROOT.Char.GetSheHe] is likely to be ruled by fear." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_STUBBORN_COMPASSIONATE:0 "Convinced that everyone should be shown kindness regardless of worth, many fear that [ROOT.Char.GetFirstNamePossessiveNoTooltip] enemies may use this to their advantage." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_STRONG_BRAVE:0 "Towering over [ROOT.Char.GetHerHis] enemies on the battlefield, [ROOT.Char.GetFirstNameNoTooltip] will have no problem inspiring [ROOT.Char.GetHerHis] troops." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_TEMPERATE_LUSTFUL:0 "Ever willing to entertain [ROOT.Char.GetHerHis] spouse, many expect the royal family to grow and prosper." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GENEROUS_JUST:0 "An equitable [ROOT.Char.GetWomanMan], many expect [ROOT.Char.GetHerHim] to ascertain that everyone gets their fair share." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_DILIGENT_GREEDY:0 "An industrious [ROOT.Char.GetWomanMan], the [ROOT.Char.Custom('GetRealmOrDomicile')|l] will either be brought to riches or ruin under [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRAVEN_HONEST:0 "Ever willing to admit [ROOT.Char.GetHerHis] weaknesses of which there are many, it is with great doubt if the [ROOT.Char.Custom('GetRealmOrDomicile')|l] will confide in their new liege." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_SHY_TRUSTING:0 "A naive [ROOT.Char.GetWomanMan], [ROOT.Char.GetHerHis] reluctant nature may stop [ROOT.Char.GetHerHim] from taking charge." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GREGARIOUS_HONEST:0 "Never afraid to speak [ROOT.Char.GetHerHis] mind, [ROOT.Char.GetSheHe] will surely charm the [ROOT.Char.Custom('GetRealmOrDomicile')|l] with [ROOT.Char.GetHerHis] astute honesty." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CYNICAL_ARBITRARY:0 "Entirely devoid of a moral compass, [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')] will have to learn whether they should fear or respect [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRUEL_WRATHFUL:0 "A true sadist, many fear for what the [ROOT.Char.Custom('GetRealmOrDomicile')|l] will turn into under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_WRATHFUL_ZEALOUS:0 "Blinded by religious fervor, [ROOT.Char.Custom('GetDerogatoryNonbelieverPlural')] will come to fear [ROOT.Char.GetHerHis] righteous fury." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_PARANOID_DECEITFUL:0 "A devious and distrustful character, many expect [ROOT.Char.GetHerHim] to have daggers with each of our names on." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_COMPASSIONATE:0 "A gentle and compassionate soul, the vassals will surely thrive under [ROOT.Char.GetFirstNamePossessiveNoTooltip] reign." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ARROGANT:0 "Ever confident in [ROOT.Char.GetHerselfHimself], [ROOT.Char.GetFirstNamePossessiveNoTooltip] rule may bring glory or shame to the House [ROOT.Char.GetHouse.GetName] — only time will tell." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CYNICAL:0 "Never caring for the word of the [ROOT.Char.GetFaith.ReligiousText], many fear [ROOT.Char.GetFirstNamePossessiveNoTooltip] rule will come to an early end as [ROOT.Char.GetFaith.HighGodName] smites [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GREGARIOUS:0 "Well-spoken and outgoing, many expect [ROOT.Char.GetFirstNameNoTooltip] to have no problem charming the court to [ROOT.Char.GetHerHis] side." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ZEALOUS:1 "Spending long hours in prayer as to not upset [ROOT.Char.GetFaith.HighGodName], many are confident that [ROOT.Char.GetFirstNamePossessiveNoTooltip] reign will be a blessing to the [ROOT.Char.Custom('GetRealmOrDomicile')|l]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_AMBITIOUS:0 "Being an ambitious [ROOT.Char.GetWomanMan], many expect the [ROOT.Char.Custom('GetRealmOrDomicile')|l] to grow and prosper under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_DILIGENT:0 "Energetic and collected, [ROOT.Char.GetFirstNameNoTooltip] will surely improve the [ROOT.Char.Custom('GetRealmOrDomicile')|l] under [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_DECEITFUL:0 "Devious and deceptive, [ROOT.Char.GetFirstNamePossessiveNoTooltip] feud with truth itself may also be [ROOT.Char.GetHerHis] undoing." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_SHY:0 "A silent [ROOT.Char.GetWomanMan], many do not expect [ROOT.Char.GetHerHim] to do well in diplomatic matters." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_HUMBLE:0 "A pious and humble [ROOT.Char.GetWomanMan], many fear that [ROOT.Char.GetFirstNameNoTooltip] may have been better suited for a [ROOT.Char.GetFaith.HouseOfWorship] rather than the throne." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ARBITRARY:0 "A corrupt and unjust [ROOT.Char.GetWomanMan], many do not expect [ROOT.Char.GetHerHis] vassals to sit idly by if the [ROOT.Char.Custom('GetRealmOrDomicile')|l] starts crumbling under [ROOT.Char.GetHerHis] watch." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_TEMPERATE:0 "A modest and temperate [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNamePossessiveNoTooltip] passive nature may also be [ROOT.Char.GetHerHis] undoing." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CHASTE:0 "Loyal to [ROOT.Char.GetHerHis] spouse and family, [ROOT.Char.GetFirstNameNoTooltip] is certain to place the good of [ROOT.Char.GetHerHis] dynasty above all personal concerns." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_LUSTFUL:0 "[ROOT.Char.GetHerHis|U] eyes always set upon the next target, the vassals of the [ROOT.Char.Custom('GetRealmOrDomicile')|l] do well in locking up their spouses as [ROOT.Char.GetFirstNameNoTooltip] takes the throne." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CONTENT:0 "Content with [ROOT.Char.GetHerHis] lot, [ROOT.Char.GetFirstNamePossessiveNoTooltip] vassals may ridicule [ROOT.Char.GetHerHim] for [ROOT.Char.GetHerHis] passive nature." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_PATIENT:0 "Being a [ROOT.Char.GetWomanMan] willing to wait for a plan to come together, many expect great change to come to the [ROOT.Char.Custom('GetRealmOrDomicile')|l] — albeit slowly." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_BRAVE:0 "Courageous and willing to rush to action, many hope that [ROOT.Char.GetFirstNamePossessiveNoTooltip] bravery will not see the [ROOT.Char.Custom('GetRealmOrDomicile')|l] fall into reckless ruin." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_JUST:0 "Fair and just in all things, many hope that [ROOT.Char.GetSheHe] will handle any conflicts with grace." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GLUTTONOUS:0 "A [ROOT.Char.GetWomanMan] of large appetite, many hope that [ROOT.Char.GetSheHe] puts the [ROOT.Char.Custom('GetRealmOrDomicile')|l] before [ROOT.Char.GetHerHis] own hunger." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CALLOUS:0 "Being a cold and unfeeling [ROOT.Char.GetWomanMan], the vassals of the [ROOT.Char.Custom('GetRealmOrDomicile')|l] will have a hard time gaining [ROOT.Char.GetHerHis] trust." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRAVEN:0 "A craven coward, it is unlikely that [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')] will respect [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GREEDY:0 "A greedy [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] is unlikely to garner the favor from the peasantry of the [ROOT.Char.Custom('GetRealmOrDomicile')|l]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRUEL:0 "A mean-spirited [ROOT.Char.GetWomanMan], many expect [ROOT.Char.GetFirstNamePossessiveNoTooltip] court to live in fear of [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_TRUSTING:0 "Trusting and complacent, [ROOT.Char.GetFirstNamePossessiveNoTooltip] council may have more power over [ROOT.Char.GetHerHim] than what is right." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_HONEST:0 "Unable to tell a lie, many fear that [ROOT.Char.GetHerHis] bluntness may not be fit for the delicate intricacies of politics." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_LAZY:0 "Being an idle [ROOT.Char.GetWomanMan], many fear that nothing will come of [ROOT.Char.GetFirstNamePossessiveNoTooltip] reign." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_GENEROUS:0 "A generous [ROOT.Char.GetWomanMan], many hope that [ROOT.Char.GetHerHis] good heart will not lead [ROOT.Char.GetHerHim] to empty the [ROOT.Char.Custom('GetRealmOrDomicile')|l]'s coffers on futile causes." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_WRATHFUL:0 "Prone to rage, [ROOT.Char.GetFirstNamePossessiveNoTooltip] enemies and vassals alike are likely to live in fear of [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_PARANOID:0 "A suspicious [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNamePossessiveNoTooltip] paranoia might not sit well with [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_STUBBORN:0 "A bullheaded [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNamePossessiveNoTooltip] [ROOT.Char.Custom('GetSubjectPlural')] may have a hard time getting a word in after [ROOT.Char.GetSheHe] makes up [ROOT.Char.GetHerHis] mind." + SUCCESSION_EVENT_WINDOW_HEIR_PIETY:0 "A godly [ROOT.Char.GetWomanMan], [ROOT.Char.GetFirstNameNoTooltip] is sure to impress the [ROOT.Char.GetFaith.PriestMalePlural] with [ROOT.Char.GetHerHis] extensive knowledge of the [ROOT.Char.GetFaith.ReligiousText]." + SUCCESSION_EVENT_WINDOW_HEIR_PRESTIGE:0 "A renowned [ROOT.Char.GetWomanMan], dignitaries from far and wide will surely bow before [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_FRIENDS:0 "Blessed with an abundance of friends, [ROOT.Char.GetFirstNameNoTooltip] is likely to find strong support for [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_TYRANT:0 "Already a hated tyrant, the [ROOT.Char.Custom('GetRealmOrDomicile')|l] trembles before [ROOT.Char.GetHerHis] rule." + SUCCESSION_EVENT_WINDOW_HEIR_RICH:0 "In possession of fabulous riches, only time will tell if [ROOT.Char.GetSheHe] will make the [ROOT.Char.Custom('GetRealmOrDomicile')|l] thrive or roost on the gold like a dragon." + SUCCESSION_EVENT_WINDOW_HEIR_CHILDREN:0 "A prolific [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] has already produced numerous potential heirs for the [ROOT.Char.Custom('GetRealmOrDomicile')|l]." + SUCCESSION_EVENT_WINDOW_HEIR_RIVALS:0 "Surrounded by enemies and rivals, many hope that [ROOT.Char.GetFirstNamePossessiveNoTooltip] rule is not struck short by means of a dagger in the back." + SUCCESSION_EVENT_WINDOW_HEIR_COMBAT_SKILLS:0 "A formidable duelist, many expect [ROOT.Char.GetHerHim] to excel in tournaments and personal combat alike." + SUCCESSION_EVENT_WINDOW_HEIR_POOR_HEALTH:0 "A frail and sickly [ROOT.Char.GetWomanMan], the [ROOT.Char.Custom('GetRealmOrDomicile')|l] wishes for good health to return to [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_BASTARD:0 "Being an illegitimate child, [ROOT.Char.GetFirstNameNoTooltip] will surely set out to make [ROOT.Char.GetHerHis] mark on destiny." + SUCCESSION_EVENT_WINDOW_HEIR_VIKING:0 "Having led numerous raids, [ROOT.Char.GetFirstNamePossessiveNoTooltip] name is known and feared across the world." + SUCCESSION_EVENT_WINDOW_HEIR_CRUSADER:0 "Having led holy warriors against the infidels, [ROOT.Char.GetFirstNamePossessiveNoTooltip] name is surely beloved in the eyes of [ROOT.Char.GetFaith.HighGodName]." + SUCCESSION_EVENT_WINDOW_HEIR_THREE_SKILLS:0 "Having mastered many skills, [ROOT.Char.GetSheHe] is sure to be admired by [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')]." + SUCCESSION_EVENT_WINDOW_HEIR_FIVE_SKILLS:0 "Blessed with awesome knowledge of all things between heaven and earth, [ROOT.Char.GetFirstNamePossessiveNoTooltip] rule is sure to be legendary." + + SUCCESSION_EVENT_WINDOW_HEIR_DREAD:0 "A terrifying presence, [ROOT.Char.GetSheHe] has already a reputation for ruthlessness and cruelty." + SUCCESSION_EVENT_WINDOW_HEIR_GENDER:0 "Some fear that the ascension of a [ROOT.Char.GetWomanMan] to the throne might be a symptom of uncertain times to come." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_REVELER:0 "A charming and outgoing [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] is celebrated by many nobles across the [ROOT.Char.Custom('GetRealmOrDomicile')|l] as a gracious host." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_ADMINISTRATOR:0 "A learned administrator, [ROOT.Char.GetSheHe] is recognized as one of the most qualified people to ascend to the throne." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_SCHOLAR:1 "Renowned for [ROOT.Char.GetHerHis] interests in metaphysical matters, [ROOT.Char.GetSheHe] might be ill-equipped to deal with the everyday problems of secular rule." + + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CALLOUS_LONER:0 "A cold, heartless [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] is rumored to feel nothing and care for no one." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_VENGEFUL:0 "A petty and spiteful [ROOT.Char.GetWomanMan], [ROOT.Char.GetHerHis] vassals will need to tread carefully around [ROOT.Char.GetHerHim]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_DEPRESSED:0 "A melancholic soul longing for comfort, [ROOT.Char.GetFirstNameNoTooltip] may lack the fortitude needed to lead [ROOT.Char.GetHerHis] new [ROOT.Char.Custom('GetSubjectPlural')]." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_BLIND_WEAK:0 "A blind, weak [ROOT.Char.GetWomanMan], [ROOT.Char.GetSheHe] leaves the [ROOT.Char.Custom('GetRealmOrDomicile')|l] in the hands of [ROOT.Char.GetHerHis] helpers." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_EXCOMMUNICATED:0 "Excommunicated by the Church, [ROOT.Char.GetSheHe] rises to power while branded a heretic, and many think will lead the [ROOT.Char.Custom('GetRealmOrDomicile')|l] to perdition." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_BERSERKER:0 "A fierce and relentless warrior, [ROOT.Char.GetSheHe] is believed to howl at the moon and drink the blood of [ROOT.Char.GetHerHis] enemies in battle." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CANNIBAL:0 "Rumored to feast upon human flesh, [ROOT.Char.GetSheHe] will have a lot to prove to earn the trust of [ROOT.Char.GetHerHis] vassals." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_CRIMINAL:0 "Many vile rumors surround [ROOT.Char.GetHerHim], some more vicious and repulsive than others." + SUCCESSION_EVENT_WINDOW_HEIR_TRAIT_WITCH:0 "Rumored to mix forbidden herbs and cast curses upon [ROOT.Char.GetHerHis] enemies, [ROOT.Char.GetSheHe] might have a harder time earning the trust of [ROOT.Char.GetHerHis] [ROOT.Char.Custom('GetSubjectPlural')]." + SUCCESSION_EVENT_WINDOW_HEIR_UNIMPRESSIVE:0 "Without many accomplishments to [ROOT.Char.GetHerHis] name, it is hard to tell what kind of ruler [ROOT.Char.GetSheHe] will become yet." + + SUCCESSION_EVENT_WINDOW_GAME_OVER_INTRO:0 "Your lineage has come to an end" + SUCCESSION_EVENT_WINDOW_GAME_OVER_INTRO_UNLANDED:1 "[ROOT.Char.GetFullNameNoTooltip] has lost all of [ROOT.Char.GetHerHis] titles and became landless" + SUCCESSION_EVENT_WINDOW_GAME_OVER_INTRO_BARON:0 "[ROOT.Char.GetFullNameNoTooltip] has lost all but [ROOT.Char.GetHerHis] barony titles" + SUCCESSION_EVENT_WINDOW_GAME_OVER_CENTURIES:0 "For centuries you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_CENTURY:0 "For over a century you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_DECADES:0 "For decades you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_DECADE:0 "For over a decade you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_YEARS:0 "For years you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]." + SUCCESSION_EVENT_WINDOW_GAME_OVER_YEAR:0 "For over a year you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_YEAR_SINGLE:0 "For less than a year you have followed the dynasty of [ROOT.Char.GetDynasty.GetName]" + + SUCCESSION_EVENT_WINDOW_GAME_OVER_MAX_SPLENDOR:0 "and it has grown into a dynasty of legendary prestige, respected by all" + SUCCESSION_EVENT_WINDOW_GAME_OVER_HIGH_SPLENDOR:0 "and it has grown into a dynasty of high prestige" + SUCCESSION_EVENT_WINDOW_GAME_OVER_MEDIUM_SPLENDOR:0 "and it has turned into a noteworthy dynasty" + SUCCESSION_EVENT_WINDOW_GAME_OVER_LOW_SPLENDOR:0 "but it has remained insignificant, leaving no lasting mark on history" + SUCCESSION_EVENT_WINDOW_GAME_OVER_LOW_SPLENDOR_SHORT:0 "and it has remained insignificant, leaving no lasting mark on history" + SUCCESSION_EVENT_WINDOW_GAME_OVER_MIN_SPLENDOR:1 "but it has remained obscure and will soon be forgotten" + +######################################### + SUCCESSION_EVENT_WINDOW_DEAD_DESC:0 "[Character.Custom('DeathMessageIntro')][Character.Custom('NicknameReason')] [Character.Custom('DeathMessageReason')] [Character.Custom('DeathMessageOutro')]" + SUCCESSION_EVENT_WINDOW_HEIR_DESC:0 "[CHARACTER.GetTitledFirstNameNoTooltip] [CHARACTER.Custom('GetSuccessionHeirMotion')]. [CHARACTER.Custom('HeirMessageInterface')]" + SUCCESSION_EVENT_WINDOW_GAME_OVER_DESC:4 "[CHARACTER.Custom('GameOverMessageInterface')]. [CHARACTER.Custom('GameOverMessageInterfaceDuration')] [CHARACTER.Custom('GameOverMessageInterfaceSplendor')].[CHARACTER.Custom('GameOverMessageNotableAchievements')]" + SUCCESSION_EVENT_WINDOW_END_DATE_DESC:2 "The end date of the game has been reached.\n\n[SuccessionEventWindow.GetDeadCharacter.Custom('GameOverMessageInterfaceDuration')] [SuccessionEventWindow.GetDeadCharacter.Custom('GameOverMessageInterfaceSplendor')].[SuccessionEventWindow.GetDeadCharacter.Custom('GameOverMessageNotableAchievements')]" + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_SPANISH_DESC:0 " It was due to your rule and guidance that the Spanish Thrones united under one ruler." + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_SLAVS_DESC:0 " The Slavs have become an unstoppable power since your founding of Empire of $e_slavia$." + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_SOUTHERN_SLAVS_DESC:0 " It was under your guidance that the Southern Slavs reclaimed their identity." + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_WESTERN_SLAVS_DESC:0 " It was due to you that the Western Slavs became one again after centuries of scattered tribalism. " + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_BURGUNDY_DESC:0 " The Burgundians overcame their squabbles and became one under your guidance and rule." + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_ITALY_DESC:0 " It was due to your rule and guidance that the Empire of $e_italy$ united under one ruler." + SUCCESSION_EVENT_WINDOW_END_DATE_UNIFICATION_AFRICA_DESC:0 " It was due to your hard work, diligence, and wise rule that the continent of Africa united under one rule." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_PORTUGAL_DESC:0 " But have you truly died, while your founding of the Kingdom of $k_portugal$ will be forever remembered?" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_CANARIAS_DESC:0 " Everyone across the islands know your name as the founder of the Kingdom of $k_canarias$." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_BOSNIA_DESC:0 " There is not so much as a horse in Bosnia who does not know your name after the Kingdom of $k_bosnia$ was created." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_ARMENIA_DESC:0 " Your name will live on eternally as the founder of the Empire of $e_armenia$." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_RUM_DESC:0 " The Kingdom of $k_rum$ was created by you, and as its founder, in a way it will always be yours." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_VIET_DESC: " Your people will always commemorate your name as the exemplar soul who made the Empire of $e_viet$ a reality." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_MAJAPAHIT_DESC: " Your name is eternally engraved on the peaks of Mount Semeru as the founder of the $e_majapahit$ Empire" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_RYUKYU_DESC: " You shall be remembered as the one who united the clans of the islands, and the founder of a $e_ruucuu_adj$" empire" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_SIAM_DESC: " You have carved your name eternally on the history of men, as the founder of the $k_siam$" Kingdom" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_BRUNEI_KINGDOM_DESC: " You have inspired your people and united them under the heavens of Allah, as the founder of the $k_brunei$ Kingdom" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_BRUNEI_EMPIRE_DESC: " Believers of Borneo will remember you as their shepherd to keep the evil at bay, as the founder of the $e_brunei$ Empire" + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_ISRAEL_DESC:0 " It was due to your hard work and diligence that the Kingdom of $k_israel$ was created." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_OUTREMER_DESC:0 " None thought it could be done, but you dominated the most contested holy region in the world as the Empire of $e_outremer$." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_SWITZERLAND_DESC:0 " One may climb the Alps and still not see all that was yours after you founded the Kingdom of $k_switzerland$." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_AUSTRIA_DESC:0 " Following your rule, the Archduchy is one of the most respected powers in Europe." + SUCCESSION_EVENT_WINDOW_END_DATE_CREATED_ARAGON_DESC:0 " The Kingdom of $k_aragon$ was born along the twisting banks of the Aragón river, forever a testament to your glorious rule." + SUCCESSION_EVENT_WINDOW_END_DATE_RESTORED_ROMAN_EMPIRE_DESC:0 " Due to you, the cosmos knows that even if millennia pass with Rome in ashes, the $h_roman_empire$ will always return." + SUCCESSION_EVENT_WINDOW_END_DATE_RESTORED_DUMNONIA_DESC:0 " Because of you, the Cornish men and women rose to become the Kingdom of $k_cornwall$ once again." + SUCCESSION_EVENT_WINDOW_END_DATE_RESTORED_CAROLINGIAN_DESC:0 " What was but a dream for Charlemagne was real for you, restorer of the Kingdom of $e_france$." + SUCCESSION_EVENT_WINDOW_END_DATE_RESTORED_HOLY_ROMAN_EMPIRE_DESC:0 " You were a true embodiment of the lost glory of the $e_hre$, which, thanks to you, was founded once more." + SUCCESSION_EVENT_WINDOW_END_DATE_RESTORED_OLD_VASCONIA_DESC: " By your will, the Basques re-claimed their lost lands in Iberia, under the banner of the Kingdom of Vasconia." + + SUCCESSION_EVENT_WINDOW_HEADING:1 "You have died" + SUCCESSION_EVENT_WINDOW_HEADING_ALIVE:0 "You have been deposed" + SUCCESSION_EVENT_WINDOW_HEADING_LINEAGE:0 "Lineage of [SuccessionEventWindow.GetPlayerHeir.GetShortUINameNotMeNoTooltip]" + SUCCESSION_EVENT_WINDOW_HEADING_GAME_OVER:0 "Game Over" + SUCCESSION_EVENT_WINDOW_HEADING_END_DATE_REACHED:0 "The End" + SUCCESSION_SUCCESSOR_TAB_TT:0 "#T Show Successor#!" + SUCCESSION_TITLES_TAB_TT:0 "#T Show Titles\n#!$SUCCESSION_LOST_TITLES$" + SUCCESSION_LINEAGE_TAB_TT:0 "#T Show Lineage#!" + SUCCESSION_INHERITED_TITLES:0 "Inherited Titles" + SUCCESSION_LOST_TITLES:0 "[Select_CString( EqualTo_int32( SuccessionEventWindow.GetNumberOfLostTitles, '(int32)0' ), '', '@warning_icon!')] Titles lost on Succession: [SuccessionEventWindow.GetNumberOfLostTitles]" + SUCCESSION_LOST_TITLE_SHARE:0 "[SuccessionEventWindowLostTitlesItem.GetHeir.GetUINameNoTooltip]" + SUCCESSION_RELATION_HOUSE: "[house|E] Member" + SUCCESSION_RELATION_DYNASTY: "[dynasty|E] Member" + SUCCESSION_DYNASTY_INFO:0 "[Dynasty.GetName]\n[SuccessionEventWindow.GetStartDate.GetYear] - [SuccessionEventWindow.GetEndDate.GetYear]\n[Dynasty.GetNumberOfMembers] Members ([SuccessionEventWindow.GetNumberOfPlayed] Played)\n[Dynasty.GetPrestigeLevelName]\n[GetDataModelSize( Dynasty.GetDynastyHouses )] [Select_CString( EqualTo_int32( GetDataModelSize( Dynasty.GetDynastyHouses ), '(int32)1' ), 'House', 'Houses' )]" + SUCCESSION_NO_HEIR:2 "With no [player_heir|E], your line has died out after [SuccessionEventWindow.GetPlayedLength]." + + SUCCESSION_EVENT_WINDOW_SELECT_DESTINY: "Choose a New Destiny..." + SUCCESSION_EVENT_WINDOW_SELECT_DESTINY_TT: "#T Select your Destiny\n#!Play as another character of your [dynasty] that is not your heir!" + SUCCESSION_EVENT_WINDOW_SELECT_DESTINY_NO_OPTIONS_TT: "#T Select your Destiny\n#!There are no suitable [dynasty] characters available." + SUCCESSION_SELECT_DESTINY_CHARACTER: "Select" + SUCCESSION_UNSELECT_DESTINY_CHARACTER: "Unselect" + SUCCESSION_SELECT_DESTINY_TAB_TT: "#T Select Destiny#!" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_landed_child: "a Random Landed Child" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_descendant: "a Random Descendant" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_close_family: "a Random Close Family Member" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_close_or_extended_family: "a Random Family Member" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_dynasty_member: "a Random Dynasty Member" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_adventurer: "a Random New Adventurer" + RANDOM_DESTINY_CHARACTER_TYPE_NAME_random_landed: "a Random Ruler" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_landed_child: "Click to select a Random Landed Child: a #V child#! of your previous character who is a [ruler|E] and part of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E].\n" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_descendant: "Click to select a Random Descendant: a #V child#!, #V grandchild#!, or #V great-grandchild#! of your previous character who is part of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_dlc_boilerplate$$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_close_family: "Click to select a random [close_family|E] member of your previous character who is part of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_dlc_boilerplate$$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_close_or_extended_family: "Click to select a random [close_family|E] or [extended_family|E] member of your previous character who is part of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_dlc_boilerplate$$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_dynasty_member: "Click to select a random member of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_dlc_boilerplate$$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_adventurer: "Click to select a random member of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E] which either is, or will become, an [adventurer|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_random_landed: "Click to select a random member of the [GetPlayer.GetDynasty.GetBaseName] [dynasty|E] which is a [landed|E] [ruler|E].\n\n$RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate$" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_dlc_boilerplate: "#weak [SelectLocalization( HasDlcFeature( 'landless_playable' ), 'RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate_adventurer', 'blank_line' )]#!" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate: "#weak The difficulty of the randomly selected character will not exceed $extremely_hard_difficult$.#!" + RANDOM_DESTINY_CHARACTER_TYPE_TOOLTIP_boilerplate_adventurer: "The chance to become an [adventurer|E] is roughly #V 50%#!\n\n" + SUCCESSION_EVENT_WINDOW_RANDOM_CLOSE: "Continue as [SuccessionEventWindow.GetSelectedDestinyCharacter.GetTypeName]" + SUCCESSION_EVENT_WINDOW_RANDOM_DESTINY: "Select Random Destiny" + SUCCESSION_EVENT_WINDOW_RANDOM_DESTINY_HEADER: "#T Let Fate Decide...#!" + SUCCESSION_EVENT_WINDOW_RANDOM_DESTINY_TT: "#T Select a Random Destiny#!\nClick here to choose a random character from one of several categories." + SUCCESSION_IS_FAVORITE_CHILD_TT: "Is your [favorite_child|E]" + + SUCCESSION_EVENT_WINDOW_CANCEL_SELECT_DESTINY: "Back" + SUCCESSION_EVENT_WINDOW_CANCEL_SELECT_DESTINY_TT: "#T Select your Destiny\n#!Cancel selecting a character and return to your normal heir." + +#Variable loc for lamp + succession_heir_throne: "ascends to the throne" + succession_heir_leader: "steps forward as leader" + + #Nicknames + SUCCESSION_EVENT_WINDOW_NICKNAME: " Known in life as [ROOT.Char.GetNickname]."